Browse Source

jingwei 增加设置模式重发

jianghouwei 6 years ago
parent
commit
13c85a5a39

+ 44 - 24
src/main/java/com/tidecloud/dataacceptance/service/impl/WatchJWServerHandler.java

@@ -42,7 +42,7 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 	private static ExecutorService executorService = Executors.newSingleThreadExecutor();
 
 	private static final Long INTERVAL_TIME = 300000L; // 开关时间
-	private static final Long URGENT_OUT_TIME = 5000L; // 超时时间
+	private static final Long URGENT_OUT_TIME = 120000L; // 超时时间120S
 	/**
 	 * 省电模式开关
 	 */
@@ -68,14 +68,23 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 		try {
 			String factory = msg.substring(0, 2);// 工厂
 			String type = msg.substring(2, 6);// 标记
-
-			WorkModel workModel = modelMap.get(deviceId);//已登录
 			Long time = System.currentTimeMillis();
-			if (workModel != null && (time - workModel.getUrgentTime() > URGENT_OUT_TIME)) {
-				workModel.setUrgentTime(time);
-				workModel.setUrgentCount(0);
-				modelMap.put(deviceId, workModel);
-				normalReplyModel(factory, deviceId, channel, 3);
+			WorkModel workModel = null;
+			SwitchWorkModel swm = null;
+			if (deviceId != null) {
+				workModel = modelMap.get(deviceId);//已登录
+				swm = switchMap.get(deviceId);// 开关
+				if (workModel != null && workModel.getUrgentType() == 2
+						&& (time - workModel.getUrgentTime() > URGENT_OUT_TIME)) {
+					workModel.setUrgentTime(time);
+					workModel.setUrgentType(2);
+					modelMap.put(deviceId, workModel);
+					normalReplyModel(factory, deviceId, channel, 3);
+					logger.warn("超过指定时间没有收到回复》》》 重新设置");
+					// 更新开关切换时间
+					swm.setSwitchTime(time);
+					switchMap.put(deviceId,swm);
+				}
 			}
 			switch (type) {
 				case "AP00": // 初始化登录
@@ -92,15 +101,23 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 					normalReply(factory, channel, "BP01");
 					break;
 				case "AP33": // 设置模式回复
-					if (workModel != null && workModel.getUrgentCount() < 2) {
-						// 只设置一次 在设置一次
-						if (time - workModel.getUrgentTime() < URGENT_OUT_TIME) {
-							normalReplyModel(factory, deviceId, channel, 3);
-							workModel.setUrgentCount(workModel.getUrgentCount() + 1);
+					//IWAP33,080835,1#
+					if (deviceId != null) {
+						Integer moderType = getInteger(msg.substring(14, 16));// 收到回复状态
+						if (swm.getWorkType() == 3) {//  当前设置的模式
+							if (workModel != null && moderType == 3) {
+								workModel.setUrgentType(3);
+								logger.warn("紧急模式设置成功!>>>>>>>>>>>>>>" +msg);
+							} else {
+								logger.warn("紧急模式重新设置!>>>>>>>>>>>>>>" );
+								normalReplyModel(factory, deviceId, channel, 3);
+								workModel.setUrgentType(2);
+								// 更新开关时间
+								swm.setSwitchTime(time);
+								switchMap.put(deviceId,swm);
+							}
 							modelMap.put(deviceId, workModel);
 						}
-					} else {
-						logger.warn("已设置紧急模式两次成功");
 					}
 					break;
 				default: // 其他
@@ -139,12 +156,14 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 			switchMap.put(deviceId, swm);
 			logger.warn("心跳检测是下发模式:工作状态" + JSON.toJSONString(swm));
 			normalReplyModel(factory, deviceId, channel, workType);
-			if (workType == 3) {// 设置紧急模式  则更新
+			if (workType == 3) {// 设置紧急模式  则更新紧急模式设置状态
 				WorkModel wm = new WorkModel();
-				wm.setUrgentCount(0);// 设置紧急模式次数
+				wm.setUrgentType(2);//
 				wm.setUrgentTime(nowTime);// 设置紧急模式时间
 				modelMap.put(deviceId, wm);
 			}
+		}else{
+			logger.warn("心跳检测是下发模式:工作不更改状态");
 		}
 	}
 
@@ -227,8 +246,8 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 					}
 					normalReplyModel(factory, deviceId, channel, 3);
 					WorkModel wm = new WorkModel();
-					wm.setUrgentCount(0);// 设置紧急模式次数
 					wm.setUrgentTime(currentTime.getTime());// 设置紧急模式时间
+					wm.setUrgentType(2);// 默认指令模式为正常模式
 					modelMap.put(deviceId, wm);
 				} catch (InterruptedException e) {
 					logger.error(e.getMessage());
@@ -331,10 +350,11 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 		 * 设置紧急模式时间
 		 */
 		private Long urgentTime;
+
 		/**
-		 * 设置紧急模式测试
+		 * 设置紧急模式状态
 		 */
-		private Integer urgentCount;
+		private Integer urgentType;
 
 		public Long getUrgentTime() {
 			return urgentTime;
@@ -344,12 +364,12 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 			this.urgentTime = urgentTime;
 		}
 
-		public Integer getUrgentCount() {
-			return urgentCount;
+		public Integer getUrgentType() {
+			return urgentType;
 		}
 
-		public void setUrgentCount(Integer urgentCount) {
-			this.urgentCount = urgentCount;
+		public void setUrgentType(Integer urgentType) {
+			this.urgentType = urgentType;
 		}
 	}