Selaa lähdekoodia

引入镜屏和缓存

konghl 4 vuotta sitten
vanhempi
commit
bbc94ea151
16 muutettua tiedostoa jossa 230 lisäystä ja 808 poistoa
  1. 26 0
      location-rescue-service/pom.xml
  2. 9 0
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/LocationRescueApp.java
  3. 37 0
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/controller/LocationManagementController.java
  4. 0 119
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/controller/ReceiveSubscribeController.java
  5. 16 0
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/impl/LocationManagementServiceImpl.java
  6. 0 160
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/impl/ReceiveSubscribeServiceImpl.java
  7. 10 0
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/interfaces/LocationManagementService.java
  8. 3 6
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/interfaces/MapTagManageService.java
  9. 0 18
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/interfaces/ReceiveSubscribeService.java
  10. 0 183
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotInAreaData.java
  11. 0 101
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotNewAlarmData.java
  12. 0 114
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotNoCloseAlarmData.java
  13. 0 60
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotNoInAreaData.java
  14. 0 42
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotToolData.java
  15. 15 5
      location-rescue-service/src/main/java/com/ai/bss/location/rescue/util/MirrorSendDateUtil.java
  16. 114 0
      location-rescue-service/src/main/resources/ipu-cache.xml

+ 26 - 0
location-rescue-service/pom.xml

@ -101,6 +101,32 @@
101 101
                </exclusion>
102 102
            </exclusions>
103 103
        </dependency>
104
        
105
        <!-- 缓存 -->
106
        <dependency>
107
		   <groupId>com.ai.ipu</groupId>
108
		   <artifactId>ipu-cache</artifactId>
109
		   <version>3.1-SNAPSHOT</version>
110
		   <exclusions>
111
                <exclusion>
112
                    <groupId>org.apache.logging.log4j</groupId>
113
                    <artifactId>log4j-slf4j-impl</artifactId>
114
                </exclusion>
115
            </exclusions>
116
		</dependency>
117
        
118
        <!--  IPU 镜屏 -->
119
        <dependency>
120
            <groupId>com.ai.ipu.server</groupId>
121
            <artifactId>iot-stomp-server</artifactId>
122
            <version>3.1-SNAPSHOT</version>
123
            <exclusions>
124
                <exclusion>
125
                    <groupId>org.apache.logging.log4j</groupId>
126
                    <artifactId>log4j-slf4j-impl</artifactId>
127
                </exclusion>
128
            </exclusions>
129
        </dependency>
104 130
    </dependencies>
105 131
106 132
    <repositories>

+ 9 - 0
location-rescue-service/src/main/java/com/ai/bss/location/rescue/LocationRescueApp.java

@ -7,6 +7,10 @@ import org.springframework.context.annotation.ComponentScan;
7 7
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
8 8
import org.springframework.scheduling.annotation.EnableAsync;
9 9
10
import com.ai.ipu.server.connect.ConnectServerStart;
11
import com.ai.ipu.server.connect.util.ConnectServerManager;
12
import com.ai.ipu.server.stomp.WebSocketStompServer;
13
10 14
/**
11 15
 * @author zhangfeng
12 16
 */
@ -17,6 +21,11 @@ import org.springframework.scheduling.annotation.EnableAsync;
17 21
@SpringBootApplication
18 22
public class LocationRescueApp {
19 23
    public static void main(String[] args) throws Exception {
24
    	//注册镜屏服务
25
		ConnectServerManager.registerServer("websocket.port", new WebSocketStompServer("/stomp"));
26
		//镜屏服务启动
27
		ConnectServerStart.start(args, false);
28
    	
20 29
        SpringApplication.run(LocationRescueApp.class, args);
21 30
    }
22 31
}

+ 37 - 0
location-rescue-service/src/main/java/com/ai/bss/location/rescue/controller/LocationManagementController.java

@ -0,0 +1,37 @@
1
package com.ai.bss.location.rescue.controller;
2
3
import org.springframework.stereotype.Controller;
4
import org.springframework.web.bind.annotation.RequestBody;
5
import org.springframework.web.bind.annotation.RequestMapping;
6
import org.springframework.web.bind.annotation.RequestMethod;
7
import org.springframework.web.bind.annotation.ResponseBody;
8
9
import com.ai.bss.location.rescue.util.MirrorSendDateUtil;
10
11
/**
12
 * 人员定位管理
13
 * @author konghl@asiainfo.com
14
 * 2020-11-13
15
 */
16
@Controller
17
@RequestMapping("/locationManagement")
18
public class LocationManagementController {
19
20
	/**
21
	 * 推送镜屏数据测试
22
	 * @param msg
23
	 * @return
24
	 */
25
	@ResponseBody
26
	@RequestMapping(value = "/mirrorSendDataTest", method = RequestMethod.POST)
27
	public String mirrorSendDataTest(@RequestBody String msg) {
28
		
29
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_personnel, msg);
30
		
31
		return msg;
32
	}
33
	
34
	
35
	
36
	
37
}

+ 0 - 119
location-rescue-service/src/main/java/com/ai/bss/location/rescue/controller/ReceiveSubscribeController.java

@ -1,119 +0,0 @@
1
package com.ai.bss.location.rescue.controller;
2
3
import java.math.BigDecimal;
4
import java.util.HashMap;
5
import java.util.Map;
6
7
import org.slf4j.Logger;
8
import org.slf4j.LoggerFactory;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.stereotype.Controller;
11
import org.springframework.web.bind.annotation.RequestBody;
12
import org.springframework.web.bind.annotation.RequestMapping;
13
import org.springframework.web.bind.annotation.RequestMethod;
14
import org.springframework.web.bind.annotation.ResponseBody;
15
16
import com.ai.bss.location.rescue.service.interfaces.ReceiveSubscribeService;
17
import com.ai.bss.location.rescue.util.EbcConstant;
18
import com.alibaba.fastjson.JSONObject;
19
20
/**
21
 * 接收订阅消息
22
 * @author konghl@asiainfo.com
23
 * 2020-10-19
24
 */
25
@Controller
26
@RequestMapping("/receiveSubscribe")
27
public class ReceiveSubscribeController {
28
	private static final Logger logger = LoggerFactory.getLogger(ReceiveSubscribeController.class);
29
30
	@Autowired
31
	ReceiveSubscribeService receiveSubscribeService;
32
33
	/**
34
	 * 接收定位消息
35
	 * @param msg
36
	 * @return
37
	 */
38
	@ResponseBody
39
	@RequestMapping(value = "/receiveIotLocationData", method = RequestMethod.POST)
40
	public String receiveIotLocationData(@RequestBody String msg) {
41
		logger.info("已接收定位消息,消息为:" + msg);
42
43
		// 解析数据
44
		JSONObject msgMap = (JSONObject) JSONObject.parse(msg);
45
46
		if (msgMap == null || msgMap.isEmpty() || msgMap.get("dataPointValue") == null) {
47
			logger.info("定位消息的解析数据为空");
48
			return "dataPointValue is null";
49
		}
50
51
		String msgJson = String.valueOf(msgMap.get("dataPointValue"));
52
		JSONObject detailInfo = JSONObject.parseObject(msgJson);
53
		Map<String, Object> detailInfoMap = new HashMap<String, Object>();
54
		detailInfoMap.put("deviceId", String.valueOf(msgMap.get("resourceId")));// 设备ID
55
		detailInfoMap.put("deviceNo", String.valueOf(msgMap.get("resourceId")));// 设备编码
56
		detailInfoMap.put("newDate", detailInfo.getJSONObject("msgDate").getString("value"));// 最新定位时间
57
58
		// 经度
59
		BigDecimal longitudeBigDecimal = detailInfo.getJSONObject("longitude").getBigDecimal("value");
60
		detailInfoMap.put("longitude",
61
				longitudeBigDecimal.setScale(EbcConstant.COORD_SCALE, BigDecimal.ROUND_HALF_UP).toString());
62
63
		// 纬度
64
		BigDecimal latitudeBigDecimal = detailInfo.getJSONObject("latitude").getBigDecimal("value");
65
		detailInfoMap.put("latitude",
66
				latitudeBigDecimal.setScale(EbcConstant.COORD_SCALE, BigDecimal.ROUND_HALF_UP).toString());
67
68
		// 解析并推送定位数据
69
		receiveSubscribeService.receiveIotLocationData(detailInfoMap);
70
71
		return msg;
72
	}
73
74
	/**
75
	 * 接收报警消息
76
	 * @param msg
77
	 * @return
78
	 */
79
	@ResponseBody
80
	@RequestMapping(value = "/receiveIotAlarmData", method = RequestMethod.POST)
81
	public String receiveIotAlarmData(@RequestBody String msg) {
82
		logger.info("已接收告警消息,消息为:" + msg);
83
84
		// 解析数据
85
		JSONObject msgMap = (JSONObject) JSONObject.parse(msg);
86
87
		if (msgMap == null || msgMap.isEmpty() || msgMap.get("dataPointValue") == null) {
88
			logger.info("定位消息的解析数据为空");
89
			return "dataPointValue is null";
90
		}
91
92
		String msgJson = String.valueOf(msgMap.get("dataPointValue"));
93
		JSONObject detailInfo = JSONObject.parseObject(msgJson);
94
		Map<String, Object> detailInfoMap = new HashMap<String, Object>();
95
		detailInfoMap.put("deviceId", String.valueOf(msgMap.get("resourceId")));// 设备ID
96
		detailInfoMap.put("deviceNo", String.valueOf(msgMap.get("resourceId")));// 设备编码
97
		detailInfoMap.put("newDate", detailInfo.getJSONObject("msgDate").getString("value"));// 最新定位时间
98
99
		// 经度
100
		BigDecimal longitudeBigDecimal = detailInfo.getJSONObject("longitude").getBigDecimal("value");
101
		detailInfoMap.put("longitude",
102
				longitudeBigDecimal.setScale(EbcConstant.COORD_SCALE, BigDecimal.ROUND_HALF_UP).toString());
103
104
		// 纬度
105
		BigDecimal latitudeBigDecimal = detailInfo.getJSONObject("latitude").getBigDecimal("value");
106
		detailInfoMap.put("latitude",
107
				latitudeBigDecimal.setScale(EbcConstant.COORD_SCALE, BigDecimal.ROUND_HALF_UP).toString());
108
109
		// 报警类型
110
		detailInfoMap.put("alarmType", detailInfo.getJSONObject("alarmType").getIntValue("value"));
111
112
		// 分析并推送报警数据
113
		receiveSubscribeService.receiveIotAlarmData(detailInfoMap);
114
115
		return msg;
116
117
	}
118
119
}

+ 16 - 0
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/impl/LocationManagementServiceImpl.java

@ -0,0 +1,16 @@
1
package com.ai.bss.location.rescue.service.impl;
2
3
import org.slf4j.Logger;
4
import org.slf4j.LoggerFactory;
5
import org.springframework.stereotype.Service;
6
7
import com.ai.bss.location.rescue.service.interfaces.LocationManagementService;
8
9
@Service
10
public class LocationManagementServiceImpl implements LocationManagementService {
11
	Logger logger = LoggerFactory.getLogger(LocationManagementServiceImpl.class);
12
13
	
14
	
15
	
16
}	

+ 0 - 160
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/impl/ReceiveSubscribeServiceImpl.java

@ -1,160 +0,0 @@
1
package com.ai.bss.location.rescue.service.impl;
2
3
import java.util.List;
4
import java.util.Map;
5
import java.util.concurrent.ExecutorService;
6
import java.util.concurrent.Executors;
7
8
import org.slf4j.Logger;
9
import org.slf4j.LoggerFactory;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Service;
12
13
import com.ai.bss.location.rescue.service.interfaces.ReceiveSubscribeService;
14
import com.ai.bss.location.rescue.service.iotdata.ManageIotInAreaData;
15
import com.ai.bss.location.rescue.service.iotdata.ManageIotNewAlarmData;
16
import com.ai.bss.location.rescue.service.iotdata.ManageIotNoCloseAlarmData;
17
import com.ai.bss.location.rescue.service.iotdata.ManageIotNoInAreaData;
18
import com.ai.bss.location.rescue.service.iotdata.ManageIotToolData;
19
20
@Service
21
public class ReceiveSubscribeServiceImpl implements ReceiveSubscribeService {
22
	private static final Logger logger = LoggerFactory.getLogger(ReceiveSubscribeServiceImpl.class);
23
24
	@Autowired
25
	ManageIotToolData manageIotToolData;
26
27
	@Autowired
28
	ManageIotNoInAreaData manageIotNoInAreaData;
29
30
	@Autowired
31
	ManageIotInAreaData manageIotInAreaData;
32
33
	@Autowired
34
	ManageIotNoCloseAlarmData manageIotNoCloseAlarmData;
35
36
	@Autowired
37
	ManageIotNewAlarmData manageIotNewAlarmData;
38
39
	private ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
40
41
	@Override
42
	public void receiveIotLocationData(Map<String, Object> params) {
43
		cachedThreadPool.execute(new Runnable() {
44
			@Override
45
			public void run() {
46
				try {
47
					logger.debug("启动定位信息新线程:" + Thread.currentThread().getName());
48
					// 处理定位数据
49
					executeReceiveIotLocationData(params);
50
51
					logger.debug("数据库连接全量提交");
52
					// SqlSessionManager.commitAll();
53
				} catch (Exception ex) {
54
					logger.error(ex.getMessage());
55
					logger.debug("数据库连接全量回滚");
56
					// SqlSessionManager.rollbackAll();
57
				} finally {
58
					logger.debug("数据库连接全量回收");
59
					// SqlSessionManager.closeAll();
60
				}
61
62
			}
63
		});
64
	}
65
66
	@Override
67
	public void receiveIotAlarmData(Map<String, Object> params) {
68
		cachedThreadPool.execute(new Runnable() {
69
			@Override
70
			public void run() {
71
				try {
72
					logger.debug("启动报警信息新线程:" + Thread.currentThread().getName());
73
					// 处理报警数据
74
					executeReceiveIotAlarmData(params);
75
76
					logger.debug("数据库连接全量提交");
77
					// SqlSessionManager.commitAll();
78
				} catch (Exception ex) {
79
					logger.error(ex.getMessage());
80
					logger.debug("数据库连接全量回滚");
81
					// SqlSessionManager.rollbackAll();
82
				} finally {
83
					logger.debug("数据库连接全量回收");
84
					// SqlSessionManager.closeAll();
85
				}
86
			}
87
		});
88
	}
89
90
	/**
91
	 * 处理定位数据
92
	 * @param params
93
	 * @throws Exception 
94
	 */
95
	private void executeReceiveIotLocationData(Map<String, Object> params) throws Exception {
96
		// 获取人员信息
97
		//Map<String, Object> bindInfoMap = deviceManageDao.queryOneBindUser(String.valueOf(params.get("deviceId")),null);
98
		Map<String, Object> bindInfoMap = null;
99
				
100
		if (bindInfoMap == null) {
101
			// 1、设备与工具(船)绑定
102
			manageIotToolData.executeReceiveIotData(params);
103
			return;
104
		}
105
106
		logger.debug("定位信息的对象为人员: " + bindInfoMap.get("NAME"));
107
		params.put("userName", bindInfoMap.get("NAME"));
108
		params.put("userCode", bindInfoMap.get("CODE"));
109
110
		// 2、是否为未被救援的定位信息
111
		if (manageIotNoCloseAlarmData.executeReceiveIotData(params)) {
112
			return;
113
		}
114
115
		logger.debug("定位信息不是报警人员");
116
117
		// 查询定位信息是否在围栏内
118
		//List<Map<String, Object>> currentAreaInfoList = mapTagManageDao.getInAreaInfo(String.valueOf(params.get("longitude")), String.valueOf(params.get("latitude")));
119
		List<Map<String, Object>> currentAreaInfoList = null;
120
		
121
		if (currentAreaInfoList == null || currentAreaInfoList.isEmpty()) {
122
			logger.debug("定位信息不在围栏内");
123
			// 3、不在围栏内
124
			manageIotNoInAreaData.executeReceiveIotData(params);
125
126
		} else {
127
			logger.debug("定位信息在围栏内,围栏数量:" + currentAreaInfoList.size());
128
			// 4、在围栏内
129
			manageIotInAreaData.executeReceiveIotData(params, currentAreaInfoList);
130
		}
131
	}
132
133
	/**
134
	 * 处理报警数据
135
	 * @throws Exception 
136
	 */
137
	private void executeReceiveIotAlarmData(Map<String, Object> params) throws Exception {
138
		// 获取人员信息
139
		//Map<String, Object> bindInfoMap = deviceManageDao.queryOneBindUser(String.valueOf(params.get("deviceId")),null);
140
		Map<String, Object> bindInfoMap =null;
141
		
142
		if (bindInfoMap == null) {
143
			// 设备未与人员绑定
144
			logger.error("定位设备未与人员绑定");
145
			return;
146
		}
147
148
		logger.debug("报警信息的对象为人员: " + bindInfoMap.get("NAME"));
149
		params.put("userName", bindInfoMap.get("NAME"));
150
		params.put("userCode", bindInfoMap.get("CODE"));
151
152
		// 1、是否为未被救援的报警信息
153
		if (manageIotNoCloseAlarmData.executeReceiveIotData(params)) {
154
			return;
155
		}
156
157
		logger.debug("新增报警信息");
158
		manageIotNewAlarmData.executeReceiveIotData(params, bindInfoMap);
159
	}
160
}

+ 10 - 0
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/interfaces/LocationManagementService.java

@ -0,0 +1,10 @@
1
package com.ai.bss.location.rescue.service.interfaces;
2
3
/**
4
 * 人员定位管理
5
 * @author konghl@asiainfo.com
6
 * 2020-11-13
7
 */
8
public interface LocationManagementService {
9
10
}

+ 3 - 6
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/interfaces/MapTagManageService.java

@ -1,14 +1,11 @@
1 1
package com.ai.bss.location.rescue.service.interfaces;
2 2
3
import com.ai.bss.components.common.model.PageBean;
4
import com.ai.bss.person.model.Organization;
5
import com.ai.bss.worker.model.MapTagInfoDto;
6
import org.springframework.web.bind.annotation.RequestMapping;
7
import org.springframework.web.bind.annotation.ResponseBody;
8
9 3
import java.util.List;
10 4
import java.util.Map;
11 5
6
import com.ai.bss.components.common.model.PageBean;
7
import com.ai.bss.worker.model.MapTagInfoDto;
8
12 9
public interface MapTagManageService {
13 10
14 11
	/**

+ 0 - 18
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/interfaces/ReceiveSubscribeService.java

@ -1,18 +0,0 @@
1
package com.ai.bss.location.rescue.service.interfaces;
2
3
import java.util.Map;
4
5
public interface ReceiveSubscribeService {
6
	
7
	/**
8
	 * 分析处理定位数据
9
	 * @param dataMap
10
	 */
11
	void receiveIotLocationData(Map<String,Object> dataMap);
12
	
13
	/**
14
	 * 分析处理报警数据
15
	 * @param dataMap
16
	 */
17
	void receiveIotAlarmData(Map<String,Object> dataMap);
18
}

+ 0 - 183
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotInAreaData.java

@ -1,183 +0,0 @@
1
package com.ai.bss.location.rescue.service.iotdata;
2
3
4
import java.text.ParseException;
5
import java.text.SimpleDateFormat;
6
import java.util.ArrayList;
7
import java.util.HashMap;
8
import java.util.Iterator;
9
import java.util.List;
10
import java.util.Map;
11
12
import org.slf4j.Logger;
13
import org.slf4j.LoggerFactory;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.stereotype.Component;
16
17
import com.ai.bss.location.rescue.dao.interfaces.AreaInOutRecordDao;
18
import com.ai.bss.location.rescue.util.DateUtil;
19
import com.ai.bss.location.rescue.util.EbcConstant;
20
import com.ai.bss.location.rescue.util.MirrorSendDateUtil;
21
22
@Component
23
public class ManageIotInAreaData {
24
	private static final Logger logger = LoggerFactory.getLogger(ManageIotInAreaData.class);
25
26
	@Autowired
27
	AreaInOutRecordDao areaInOutRecordDao;
28
29
	public boolean executeReceiveIotData(Map<String,Object> params, List<Map<String, Object>> currentAreaInfoList) throws Exception {
30
		// 查询人员之前所在围栏信息
31
		List<Map<String, Object>> beforeAreaMapList = areaInOutRecordDao
32
				.getBeforeInAreaInfo(String.valueOf(params.get("deviceId")), null);
33
34
		// 新进入的围栏
35
		List<Map<String, String>> inAreaList = new ArrayList<Map<String, String>>();
36
37
		if (beforeAreaMapList == null || beforeAreaMapList.isEmpty()) {
38
			// 之前不在围栏内
39
			for (Map<String, Object> currentAreaInfoMap : currentAreaInfoList) {
40
				currentAreaInfoMap.put("inAreaDate", params.get("newDate"));
41
				Map<String, String> map = new HashMap<String, String>();
42
				map.put("mapTagId", String.valueOf(currentAreaInfoMap.get("MAP_TAG_ID")));
43
				map.put("recordLocation", String.valueOf(currentAreaInfoMap.get("MAP_TAG_NAME")));
44
				inAreaList.add(map);
45
			}
46
		} else {
47
			// 之前已在围栏内:判断围栏是否相同
48
			for (Map<String, Object> currentAreaInfoMap : currentAreaInfoList) {
49
				String mapTagId = String.valueOf(currentAreaInfoMap.get("MAP_TAG_ID"));
50
				boolean flag = false; // 判断围栏ID是否相同
51
				for (Iterator<Map<String, Object>> iterator = beforeAreaMapList.iterator(); iterator.hasNext();) {
52
					Map<String, Object> beforeAreaMap = iterator.next();
53
					if (mapTagId.equals(String.valueOf(beforeAreaMap.get("MAP_TAG_ID")))) {
54
						// 围栏ID相同:没有出围栏
55
						currentAreaInfoMap.put("inAreaDate", beforeAreaMap.get("IN_DATE"));
56
						flag = true;
57
						iterator.remove();
58
						break;
59
					}
60
				}
61
62
				if (!flag) {
63
					// 围栏ID不同:进入了新围栏
64
					currentAreaInfoMap.put("inAreaDate", params.get("newDate"));
65
					Map<String, String> map = new HashMap<String, String>();
66
					map.put("mapTagId", mapTagId);
67
					map.put("recordLocation", String.valueOf(currentAreaInfoMap.get("MAP_TAG_NAME")));
68
					inAreaList.add(map);
69
				}
70
			}
71
		}
72
73
		// 推送镜屏
74
		sendMirrorData(params, currentAreaInfoList);
75
76
		// 保存进出围栏记录
77
		saveOutAreaRecord(params, beforeAreaMapList);
78
		saveInAreaRecord(params, inAreaList);
79
80
		return true;
81
	}
82
83
	private void sendMirrorData(Map<String,Object> params, List<Map<String, Object>> currentAreaInfoList) throws Exception {
84
85
		int maxMapTagGrade = 0; // 围栏优先级(电子围栏5>定点3>考勤1、作业1)
86
		long minInAreaLong = System.currentTimeMillis();// 进入围栏最早的时间戳
87
		Map<String, Object> sendDataAreaInfo = null;// 用于推送镜屏的围栏信息
88
89
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.NORM_DATETIME_PATTERN);
90
91
		for (int i = 0; i < currentAreaInfoList.size(); i++) {
92
			// 比较优先级
93
			int mapTagGrade = 1;
94
			switch (String.valueOf(currentAreaInfoList.get(i).get("MAP_TAG_TYPE"))) {
95
			case EbcConstant.area_type_exclusion:
96
				mapTagGrade = 5;
97
				break;
98
			case EbcConstant.area_type_temporariness:
99
				mapTagGrade = 3;
100
				break;
101
			case EbcConstant.area_type_job:
102
			case EbcConstant.area_type_attendance:
103
				mapTagGrade = 1;
104
				break;
105
			default:
106
				break;
107
			}
108
109
			if (mapTagGrade == maxMapTagGrade) {
110
				// 比较进入时长时间
111
				long inAreaLong = simpleDateFormat.parse(String.valueOf(currentAreaInfoList.get(i).get("inAreaDate")))
112
						.getTime();
113
				if (inAreaLong < minInAreaLong) {
114
					minInAreaLong = inAreaLong;
115
					sendDataAreaInfo = currentAreaInfoList.get(i);
116
				}
117
			} else if (mapTagGrade > maxMapTagGrade) {
118
				maxMapTagGrade = mapTagGrade;
119
				minInAreaLong = simpleDateFormat.parse(String.valueOf(currentAreaInfoList.get(i).get("inAreaDate")))
120
						.getTime();
121
				sendDataAreaInfo = currentAreaInfoList.get(i);
122
			}
123
		}
124
125
		// 判断是否在违规
126
		if (maxMapTagGrade == 5) {
127
			logger.info("镜屏推送进入电子围栏的信息");
128
			// 进入电子围栏(禁区),需显示进入时间
129
			params.put("inDate", sendDataAreaInfo.get("inAreaDate")); // 进入时间
130
			params.put("locationStatus", EbcConstant.location_status_exclusion); // 定位状态
131
132
		} else if (maxMapTagGrade == 3) {
133
			// 进入定点(限时),需计算是否超时
134
			int fixedLong = DateUtil.getDifferenceMinute(String.valueOf(sendDataAreaInfo.get("inAreaDate")),
135
					String.valueOf(params.get("newDate")));
136
137
			if (fixedLong > 0) {
138
				// 围栏要求定点时间
139
				int residenceTimeLength = Integer
140
						.parseInt(String.valueOf(sendDataAreaInfo.get("RESIDENCE_TIME_LENGTH")));
141
142
				if (residenceTimeLength <= fixedLong) {
143
					// 已超时
144
					logger.info("镜屏推送进入定点(限时)的信息:已超时");
145
					params.put("locationStatus", EbcConstant.location_status_overtime);// 定位状态
146
				}
147
			}
148
			params.put("fixedLong", fixedLong);// 停留时长
149
		} else {
150
			// 进入考勤区、工作区
151
			params.put("locationStatus", EbcConstant.location_status_normal); // 定位状态
152
		}
153
154
		// 推送镜屏
155
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_personnel, params);
156
	}
157
158
	private boolean saveOutAreaRecord(Map<String,Object> params, List<Map<String, Object>> outAreaList) throws Exception {
159
		boolean result = true;
160
		// 记录离开围栏时间
161
		if (!outAreaList.isEmpty()) {
162
			List<String> outAreaIdList = new ArrayList<String>();
163
			for (Map<String, Object> beforeAreaMap : outAreaList) {
164
				outAreaIdList.add(String.valueOf(beforeAreaMap.get("RECORD_ID")));
165
			}
166
167
			result = areaInOutRecordDao.updateSameOutTimeAreaOutRecord(String.valueOf(params.get("newDate")), outAreaIdList);
168
		}
169
170
		return result;
171
	}
172
173
	private boolean saveInAreaRecord(Map<String,Object> params, List<Map<String, String>> inAreaList) throws Exception {
174
		boolean result = true;
175
176
		// 记录进入围栏日志
177
		if (!inAreaList.isEmpty()) {
178
			result = areaInOutRecordDao.addSameInTimeAreaInRecord(params, inAreaList);
179
		}
180
		return result;
181
	}
182
183
}

+ 0 - 101
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotNewAlarmData.java

@ -1,101 +0,0 @@
1
package com.ai.bss.location.rescue.service.iotdata;
2
3
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7
8
import org.slf4j.Logger;
9
import org.slf4j.LoggerFactory;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12
13
import com.ai.bss.location.rescue.dao.interfaces.RescueDao;
14
import com.ai.bss.location.rescue.util.EbcConstant;
15
import com.ai.bss.location.rescue.util.MirrorSendDateUtil;
16
17
@Component
18
public class ManageIotNewAlarmData {
19
	private static final Logger logger = LoggerFactory.getLogger(ManageIotNewAlarmData.class);
20
21
	@Autowired
22
	RescueDao rescueDao;
23
24
	public boolean executeReceiveIotData(Map<String,Object> params, Map<String, Object> bindInfoMap) throws Exception {
25
		logger.debug("新增报警信息");
26
27
		// 保存报警数据
28
		String logId = saveAlarmData(params, bindInfoMap);
29
30
		// 推送镜屏
31
		sendMirrorData(params, logId);
32
33
		return true;
34
	}
35
36
	private void sendMirrorData(Map<String,Object> params, String logId) {
37
		// 报警类型
38
		switch (Integer.parseInt(String.valueOf(params.get("alarmType")))) {
39
		case EbcConstant.alarm_type_autosos_beidou:
40
			// 自动报警
41
			params.put("locationStatus", EbcConstant.location_status_autosos);// 定位状态
42
			params.put("alarmType", EbcConstant.alarm_type_autosos_ZH);// 报警类型
43
			break;
44
		case EbcConstant.alarm_type_jogsos_beidou:
45
			// 手动报警
46
			params.put("locationStatus", EbcConstant.location_status_jogsos);// 定位状态
47
			params.put("alarmType", EbcConstant.alarm_type_jogsos_ZH);// 报警类型
48
			break;
49
		case EbcConstant.alarm_type_offline_beidou:
50
			// 离线
51
			params.put("locationStatus", EbcConstant.location_status_offline);// 定位状态
52
			params.put("alarmType", EbcConstant.alarm_type_offline_ZH);// 报警类型
53
			break;
54
		default:
55
			logger.error("告警消息的内容错误");
56
		}
57
58
		params.put("alarmDate", String.valueOf(params.get("newDate")));// 求救时间
59
		params.put("alarmLong", "0");// 求救时长
60
61
		// 未指派救援人员
62
		params.put("isNewAlarm", EbcConstant.alarm_status_new);
63
64
		// 求救记录ID
65
		params.put("alarmLogId", logId);
66
67
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_personnel, params);
68
	}
69
70
	private String saveAlarmData(Map<String,Object> params, Map<String, Object> deviceAndUser) throws Exception {
71
		Map<String, Object> dataMap = new HashMap<String, Object>();
72
		dataMap.put("callerId", deviceAndUser.get("CODE")); // 报警人员标识
73
		dataMap.put("deviceId", params.get("deviceId")); // 终端标识
74
		dataMap.put("partyType", deviceAndUser.get("TYPE")); // 参与人类型
75
		dataMap.put("partyCode", deviceAndUser.get("CODE")); // 参与人业务编码
76
		dataMap.put("partyName", deviceAndUser.get("NAME")); // 参与人名称
77
		dataMap.put("alarmType", params.get("alarmType")); // 告警类型
78
		dataMap.put("longitude", params.get("longitude")); // 报警经度
79
		dataMap.put("latitude", params.get("latitude")); // 报警纬度
80
		dataMap.put("callerDate", params.get("newDate")); // 报警时间
81
		dataMap.put("lastLocationDate", params.get("newDate")); // 最后定位时间
82
83
		// 获取当前所在围栏列表
84
		//List<Map<String, Object>> currentAreaInfoList = mapTagManageDao.getInAreaInfo(String.valueOf(params.get("longitude")),String.valueOf(params.get("latitude")));
85
		List<Map<String, Object>> currentAreaInfoList = null;
86
				
87
		// 报警位置
88
		if (currentAreaInfoList == null || currentAreaInfoList.isEmpty()) {
89
			dataMap.put("callerLocation", "");
90
		} else {
91
			StringBuffer mapTagName = new StringBuffer(String.valueOf(currentAreaInfoList.get(0).get("MAP_TAG_NAME")));
92
			for (int i = 1; i < currentAreaInfoList.size(); i++) {
93
				mapTagName.append(",").append(String.valueOf(currentAreaInfoList.get(i).get("MAP_TAG_NAME")));
94
			}
95
96
			dataMap.put("callerLocation", mapTagName.toString());
97
		}
98
99
		return rescueDao.addRescueLog(dataMap);
100
	}
101
}

+ 0 - 114
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotNoCloseAlarmData.java

@ -1,114 +0,0 @@
1
package com.ai.bss.location.rescue.service.iotdata;
2
3
import java.text.ParseException;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7
8
import org.slf4j.Logger;
9
import org.slf4j.LoggerFactory;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12
13
import com.ai.bss.location.rescue.dao.interfaces.RescueDao;
14
import com.ai.bss.location.rescue.util.DateUtil;
15
import com.ai.bss.location.rescue.util.EbcConstant;
16
import com.ai.bss.location.rescue.util.MirrorSendDateUtil;
17
18
@Component
19
public class ManageIotNoCloseAlarmData {
20
	private static final Logger logger = LoggerFactory.getLogger(ManageIotNoCloseAlarmData.class);
21
22
	@Autowired
23
	RescueDao rescueDao;
24
25
	public boolean executeReceiveIotData(Map<String,Object> params) throws Exception {
26
		// 查询是否为未被救援的人员
27
		List<Map<String, Object>> alarmList = rescueDao.queryNoCloseRescueLog(String.valueOf(params.get("deviceId")));
28
29
		if (alarmList == null || alarmList.isEmpty()) {
30
			return false;
31
		}
32
33
		//判断是救援者还是求救者
34
		if (String.valueOf(params.get("userCode")).equals(String.valueOf(alarmList.get(0).get("RESCUER_CODE")))) {
35
			//救援者
36
			logger.info("定位信息为救援人员: " + String.valueOf(params.get("userName")));
37
			
38
			// 推送镜屏
39
			sendRescuerMirrorData(params, alarmList.get(0));
40
			
41
		}else {
42
			//求救者
43
			logger.info("定位信息为已求救的人员: " + String.valueOf(params.get("userName")));
44
			
45
			// 推送镜屏
46
			sendAlarmMirrorData(params, alarmList.get(0));
47
48
			// 修改最后定位时间
49
			updateLastLocationRecord(params, alarmList.get(0));
50
		}
51
52
		return true;
53
	}
54
55
	/**
56
	 * 推送救援者的镜屏信息
57
	 * @param params
58
	 * @param alarmMap
59
	 * @throws ParseException
60
	 */
61
	private void sendRescuerMirrorData(Map<String,Object> params, Map<String, Object> alarmMap) throws ParseException {
62
		params.put("locationStatus", EbcConstant.location_status_rescuer);// 定位状态
63
		params.put("alarmDeviceId", String.valueOf(alarmMap.get("DEVICE_ID"))); //求救者的设备ID
64
		
65
		// 推送镜屏
66
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_personnel, params);
67
	}
68
	
69
	/**
70
	 * 推送求救者的镜屏信息
71
	 * @param params
72
	 * @param alarmMap
73
	 * @throws Exception 
74
	 */
75
	private void sendAlarmMirrorData(Map<String,Object> params, Map<String, Object> alarmMap) throws Exception {
76
		// 求救时间
77
		String alarmDate = String.valueOf(alarmMap.get("CALLER_DATE"));
78
		params.put("alarmDate", DateUtil.formatStrDate(alarmDate));
79
80
		// 计算求救时长
81
		params.put("alarmLong", DateUtil.getDifferenceMinute(alarmDate, String.valueOf(params.get("newDate"))));
82
83
		// 报警类型
84
		String alarmType = String.valueOf(alarmMap.get("ALARM_TYPE"));
85
		params.put("alarmType", alarmType);
86
		if (EbcConstant.alarm_type_jogsos_ZH.equals(alarmType)) {
87
			params.put("locationStatus", EbcConstant.location_status_jogsos);// 定位状态
88
		} else if (EbcConstant.alarm_type_autosos_ZH.equals(alarmType)) {
89
			params.put("locationStatus", EbcConstant.location_status_autosos);// 定位状态
90
		}
91
92
		if (alarmMap.get("RESCUERS_ID")==null) {
93
			//未指派救援人员
94
			params.put("isNewAlarm", EbcConstant.alarm_status_needassign);
95
		}else {
96
			//已指派救援人员
97
			params.put("isNewAlarm", EbcConstant.alarm_status_needclose);
98
			params.put("rescuerDeviceId", String.valueOf(alarmMap.get("RESCUER_DEVICE_ID"))); //救援者的设备ID
99
		}
100
		
101
		//求救记录ID
102
		params.put("alarmLogId", alarmMap.get("LOG_ID"));
103
104
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_personnel, params);
105
	}
106
107
	private boolean updateLastLocationRecord(Map<String,Object> params, Map<String, Object> alarmMap) throws Exception {
108
		Map<String, Object> dataMap = new HashMap<String, Object>();
109
		dataMap.put("LOG_ID", alarmMap.get("LOG_ID")); // 日志ID
110
		dataMap.put("LAST_LOCATION_DATE", params.get("newDate")); // 最后定位时间
111
		return rescueDao.modifyRescueRecord(dataMap);
112
	}
113
114
}

+ 0 - 60
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotNoInAreaData.java

@ -1,60 +0,0 @@
1
package com.ai.bss.location.rescue.service.iotdata;
2
3
import java.util.ArrayList;
4
import java.util.List;
5
import java.util.Map;
6
7
import org.slf4j.Logger;
8
import org.slf4j.LoggerFactory;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.stereotype.Component;
11
12
import com.ai.bss.location.rescue.dao.interfaces.AreaInOutRecordDao;
13
import com.ai.bss.location.rescue.util.EbcConstant;
14
import com.ai.bss.location.rescue.util.MirrorSendDateUtil;
15
16
@Component
17
public class ManageIotNoInAreaData {
18
	private static final Logger logger = LoggerFactory.getLogger(ManageIotNoInAreaData.class);
19
20
	@Autowired
21
	AreaInOutRecordDao areaInOutRecordDao;
22
	
23
	public boolean executeReceiveIotData(Map<String,Object> params) throws Exception {
24
		// 推送镜屏数据
25
		sendMirrorData(params);
26
27
		// 查询人员之前所在围栏信息
28
		List<Map<String, Object>> beforeAreaMapList = areaInOutRecordDao
29
				.getBeforeInAreaInfo(String.valueOf(params.get("deviceId")), null);
30
31
		if (beforeAreaMapList == null || beforeAreaMapList.isEmpty()) {
32
			logger.info("定位信息没有进入围栏");
33
			return true;
34
		}
35
36
		logger.info("定位信息已离开围栏");
37
38
		// 记录出围栏的信息
39
		updateOutAreaRecord(params, beforeAreaMapList);
40
41
		return true;
42
	}
43
44
	private void sendMirrorData(Map<String,Object> params) {
45
		params.put("locationStatus", EbcConstant.location_status_normal);// 定位状态
46
47
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_personnel, params);
48
	}
49
50
	private boolean updateOutAreaRecord(Map<String,Object> params, List<Map<String, Object>> beforeAreaMapList) throws Exception {
51
		List<String> recordIdList = new ArrayList<String>();
52
		for (Map<String, Object> beforeAreaMap : beforeAreaMapList) {
53
			recordIdList.add(String.valueOf(beforeAreaMap.get("RECORD_ID")));
54
		}
55
56
		// 记录离开围栏时间
57
		return areaInOutRecordDao.updateSameOutTimeAreaOutRecord(String.valueOf(params.get("newDate")), recordIdList);
58
	}
59
60
}

+ 0 - 42
location-rescue-service/src/main/java/com/ai/bss/location/rescue/service/iotdata/ManageIotToolData.java

@ -1,42 +0,0 @@
1
package com.ai.bss.location.rescue.service.iotdata;
2
3
4
import java.util.Map;
5
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8
import org.springframework.stereotype.Component;
9
10
import com.ai.bss.location.rescue.util.MirrorSendDateUtil;
11
12
@Component
13
public class ManageIotToolData {
14
	private static final Logger logger = LoggerFactory.getLogger(ManageIotToolData.class);
15
16
17
	public boolean executeReceiveIotData(Map<String,Object> params) throws Exception {
18
		//Map<String, Object> bindInfoMap = deviceManageDao.queryOneBindShip(String.valueOf(params.get("deviceId")), null);
19
		Map<String, Object> bindInfoMap = null;
20
				
21
		if (bindInfoMap == null) {
22
			// 设备未绑定
23
			logger.error("定位设备未绑定");
24
			return false;
25
		}
26
27
		logger.info("定位信息的对象为船舶: " + bindInfoMap.get("NAME"));
28
29
		// 推送镜屏
30
		sendMirrorData(params, bindInfoMap);
31
32
		return true;
33
	}
34
35
	private void sendMirrorData(Map<String,Object> params, Map<String, Object> bindInfoMap) {
36
		params.put("shipName", bindInfoMap.get("NAME"));
37
		params.put("shipCode", bindInfoMap.get("CODE"));
38
39
		MirrorSendDateUtil.sendData(MirrorSendDateUtil.topic_ship, params);
40
	}
41
42
}

+ 15 - 5
location-rescue-service/src/main/java/com/ai/bss/location/rescue/util/MirrorSendDateUtil.java

@ -1,29 +1,39 @@
1 1
package com.ai.bss.location.rescue.util;
2 2
3
import com.ai.bss.location.rescue.controller.MapTagManageController;
4
import com.ai.ipu.server.connect.ps.EventChannelTool;
5
import com.ai.ipu.server.connect.ps.EventChannelTool.PublisherEvent;
6
import com.ai.ipu.server.connect.ps.ISubscriber;
7
import com.ai.ipu.server.connect.ps.impl.Publisher;
8
import com.alibaba.fastjson.JSON;
9
3 10
import java.util.Map;
4 11
12
import org.slf4j.Logger;
13
import org.slf4j.LoggerFactory;
14
5 15
/**
6 16
 * 镜屏推送消息
7 17
 * @author konghl@asiainfo.com
8 18
 * 2020-10-21
9 19
 */
10 20
public class MirrorSendDateUtil {
11
21
	private static final Logger logger = LoggerFactory.getLogger(MirrorSendDateUtil.class);
22
	
12 23
	// 人员定位topic
13 24
	public static final String topic_personnel = "personnel";
14 25
15 26
	// 船舶定位topic
16 27
	public static final String topic_ship = "ship";
17 28
18
	public static void sendData(String topic, Map<String,Object> params) {
19
/*		String msg = JSON.toJSONString(params);
29
	public static void sendData(String topic, String msg) {
20 30
		logger.debug("推送镜屏数据: topic="+topic+" , data=" + msg);
21 31
		
22 32
		if (!EventChannelTool.isExistSubscriber(topic)) {
23 33
			// 如果没有订阅 先不管
24 34
			return;
25 35
		}
26
36
		
27 37
		// 你发送的内容
28 38
		final Publisher publisher = new Publisher(topic);
29 39
		PublisherEvent<?> publisherEvent = new PublisherEvent<String>(msg) {
@ -32,6 +42,6 @@ public class MirrorSendDateUtil {
32 42
				// 可记录消息发布后的统计日志
33 43
			}
34 44
		};
35
		publisher.publish(topic, publisherEvent);*/
45
		publisher.publish(topic, publisherEvent);
36 46
	}
37 47
}

+ 114 - 0
location-rescue-service/src/main/resources/ipu-cache.xml

@ -0,0 +1,114 @@
1
<?xml version = '1.0' encoding = 'UTF-8'?>
2
<caches>
3
	<cache name="ssn" type="redis">
4
		<servers>
5
	        <!-- 如果不是cluster,则只使用第一个redis -->
6
	        <server ip="121.42.183.206" port="7101" />
7
	        <server ip="121.42.183.206" port="7102" />
8
	        <server ip="121.42.183.206" port="7103" />
9
	        <server ip="121.42.183.206" port="7104" />
10
	        <server ip="121.42.183.206" port="7105" />
11
	        <server ip="121.42.183.206" port="7106" />
12
	    </servers>
13
		<!-- 客户端类型:Jedis,JedisCluster -->
14
	    <config name="clientType" value="JedisCluster"/>
15
	    <!-- 访问redis的密码,可以为空 -->
16
	    <config name="auth" value="Ipu@321!"/>
17
	    <!-- redis池的可用连接实例的最大数目,缺省为8 -->
18
	    <config name="poolSize" value="10"/>
19
	    <!-- redis池最多有多少个状态为idle(空闲的)的jedis实例,缺省为8,空闲连接大于这个数会进行回收 -->
20
	    <config name="maxIdle"/>
21
	    <!-- 最小空闲数,空闲连接小于这个数会建立新的连接,缺省为0 -->
22
	    <config name="minIdle"/>
23
	    <!-- 等待Response超时时间,默认2000ms -->
24
	    <config name="soTimeout"/>
25
	    <!-- 连接Redis Server超时时间,默认2000ms -->
26
	    <config name="connTimeout"/>
27
	    <!-- 出现异常最大重试次数 -->
28
	    <config name="maxAttempts"/>
29
	</cache>
30
	
31
	<cache name="SSN_CACHE" type="redis">
32
		<servers>
33
	        <!-- 如果不是cluster,则只使用第一个redis -->
34
	        <server ip="121.42.183.206" port="7101" />
35
	        <server ip="121.42.183.206" port="7102" />
36
	        <server ip="121.42.183.206" port="7103" />
37
	        <server ip="121.42.183.206" port="7104" />
38
	        <server ip="121.42.183.206" port="7105" />
39
	        <server ip="121.42.183.206" port="7106" />
40
	    </servers>
41
		<!-- 客户端类型:Jedis,JedisCluster -->
42
	    <config name="clientType" value="JedisCluster"/>
43
	    <!-- 访问redis的密码,可以为空 -->
44
	    <config name="auth" value="Ipu@321!"/>
45
	    <!-- redis池的可用连接实例的最大数目,缺省为8 -->
46
	    <config name="poolSize" value="10"/>
47
	    <!-- redis池最多有多少个状态为idle(空闲的)的jedis实例,缺省为8,空闲连接大于这个数会进行回收 -->
48
	    <config name="maxIdle"/>
49
	    <!-- 最小空闲数,空闲连接小于这个数会建立新的连接,缺省为0 -->
50
	    <config name="minIdle"/>
51
	    <!-- 等待Response超时时间,默认2000ms -->
52
	    <config name="soTimeout"/>
53
	    <!-- 连接Redis Server超时时间,默认2000ms -->
54
	    <config name="connTimeout"/>
55
	    <!-- 出现异常最大重试次数 -->
56
	    <config name="maxAttempts"/>
57
	</cache>
58
	
59
	<cache name="client_route" type="redis">
60
		<servers>
61
	        <!-- 如果不是cluster,则只使用第一个redis -->
62
	        <server ip="121.42.183.206" port="7101" />
63
	        <server ip="121.42.183.206" port="7102" />
64
	        <server ip="121.42.183.206" port="7103" />
65
	        <server ip="121.42.183.206" port="7104" />
66
	        <server ip="121.42.183.206" port="7105" />
67
	        <server ip="121.42.183.206" port="7106" />
68
	    </servers>
69
		<!-- 客户端类型:Jedis,JedisCluster -->
70
	    <config name="clientType" value="JedisCluster"/>
71
	    <!-- 访问redis的密码,可以为空 -->
72
	    <config name="auth" value="Ipu@321!"/>
73
	    <!-- redis池的可用连接实例的最大数目,缺省为8 -->
74
	    <config name="poolSize" value="10"/>
75
	    <!-- redis池最多有多少个状态为idle(空闲的)的jedis实例,缺省为8,空闲连接大于这个数会进行回收 -->
76
	    <config name="maxIdle"/>
77
	    <!-- 最小空闲数,空闲连接小于这个数会建立新的连接,缺省为0 -->
78
	    <config name="minIdle"/>
79
	    <!-- 等待Response超时时间,默认2000ms -->
80
	    <config name="soTimeout"/>
81
	    <!-- 连接Redis Server超时时间,默认2000ms -->
82
	    <config name="connTimeout"/>
83
	    <!-- 出现异常最大重试次数 -->
84
	    <config name="maxAttempts"/>
85
	</cache>
86
	
87
	<cache name="pushServer_route" type="redis">
88
		<servers>
89
	        <!-- 如果不是cluster,则只使用第一个redis -->
90
	        <server ip="121.42.183.206" port="7101" />
91
	        <server ip="121.42.183.206" port="7102" />
92
	        <server ip="121.42.183.206" port="7103" />
93
	        <server ip="121.42.183.206" port="7104" />
94
	        <server ip="121.42.183.206" port="7105" />
95
	        <server ip="121.42.183.206" port="7106" />
96
	    </servers>
97
		<!-- 客户端类型:Jedis,JedisCluster -->
98
	    <config name="clientType" value="JedisCluster"/>
99
	    <!-- 访问redis的密码,可以为空 -->
100
	    <config name="auth" value="Ipu@321!"/>
101
	    <!-- redis池的可用连接实例的最大数目,缺省为8 -->
102
	    <config name="poolSize" value="10"/>
103
	    <!-- redis池最多有多少个状态为idle(空闲的)的jedis实例,缺省为8,空闲连接大于这个数会进行回收 -->
104
	    <config name="maxIdle"/>
105
	    <!-- 最小空闲数,空闲连接小于这个数会建立新的连接,缺省为0 -->
106
	    <config name="minIdle"/>
107
	    <!-- 等待Response超时时间,默认2000ms -->
108
	    <config name="soTimeout"/>
109
	    <!-- 连接Redis Server超时时间,默认2000ms -->
110
	    <config name="connTimeout"/>
111
	    <!-- 出现异常最大重试次数 -->
112
	    <config name="maxAttempts"/>
113
	</cache>
114
</caches>