Browse Source

增加登录验证 经纬

jianghouwei 6 years ago
parent
commit
b15f328090

+ 72 - 6
src/main/java/com/tidecloud/dataacceptance/service/impl/WatchJWServerHandler.java

@@ -42,9 +42,16 @@ 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 Map<String, SwitchWorkModel> switchMap = new ConcurrentHashMap<>();
 
+	/**
+	 * 设置模式
+	 */
+	private static Map<String, WorkModel> modelMap = new ConcurrentHashMap<>();
 
 	@Override
 	protected void handle(ByteBuf in, Channel channel) throws Exception {
@@ -57,10 +64,19 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 		if (deviceId != null) {
 			MDC.put(MDC_DEVICEID, deviceId);
 		}
+		logger.info("传入数据为:" + msg);
 		try {
-			logger.info("传入数据为:" + msg);
 			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);
+			}
 			switch (type) {
 				case "AP00": // 初始化登录
 					resolveLoginMSG(msg, channel);
@@ -75,6 +91,18 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 					sendMsg2Kafka((msg + deviceId).getBytes(), deviceId, channel);
 					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);
+							modelMap.put(deviceId, workModel);
+						}
+					} else {
+						logger.warn("已设置紧急模式两次成功");
+					}
+					break;
 				default: // 其他
 					logger.info("client send data without handle type ...");
 					break;
@@ -86,7 +114,8 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 
 
 	/**
-	 *  模式设置
+	 * 模式设置
+	 *
 	 * @param factory
 	 * @param deviceId
 	 * @param channel
@@ -101,8 +130,8 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 		if (nowTime - swm.getActiveTime() > INTERVAL_TIME
 				&& nowTime - swm.getSwitchTime() > INTERVAL_TIME) {
 			Integer workType = (3 == swm.getWorkType()) ? 2 : 3;
-			if(nowTime - swm.getGpsUpTime() > INTERVAL_TIME){
-				workType =3; // APO1上传间隔大于5分种再次设置为紧急模式
+			if (nowTime - swm.getGpsUpTime() > INTERVAL_TIME) {
+				workType = 3; // APO1上传间隔大于5分种再次设置为紧急模式
 			}
 			// 如果当前状态为A 紧急模式
 			swm.setSwitchTime(nowTime);
@@ -110,6 +139,12 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 			switchMap.put(deviceId, swm);
 			logger.warn("心跳检测是下发模式:工作状态" + JSON.toJSONString(swm));
 			normalReplyModel(factory, deviceId, channel, workType);
+			if (workType == 3) {// 设置紧急模式  则更新
+				WorkModel wm = new WorkModel();
+				wm.setUrgentCount(0);// 设置紧急模式次数
+				wm.setUrgentTime(nowTime);// 设置紧急模式时间
+				modelMap.put(deviceId, wm);
+			}
 		}
 	}
 
@@ -191,6 +226,10 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 						TimeUnit.SECONDS.sleep(5 - secondsSinceLogin);
 					}
 					normalReplyModel(factory, deviceId, channel, 3);
+					WorkModel wm = new WorkModel();
+					wm.setUrgentCount(0);// 设置紧急模式次数
+					wm.setUrgentTime(currentTime.getTime());// 设置紧急模式时间
+					modelMap.put(deviceId, wm);
 				} catch (InterruptedException e) {
 					logger.error(e.getMessage());
 				}
@@ -280,12 +319,39 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 			String deviceId = channelDeviceMap.get(channel);
 			if (deviceId != null) {
 				switchMap.remove(deviceId);
+				modelMap.remove(deviceId);
 			}
 		}
 		super.channelInactive(ctx);
 
 	}
 
+	class WorkModel {
+		/**
+		 * 设置紧急模式时间
+		 */
+		private Long urgentTime;
+		/**
+		 * 设置紧急模式测试
+		 */
+		private Integer urgentCount;
+
+		public Long getUrgentTime() {
+			return urgentTime;
+		}
+
+		public void setUrgentTime(Long urgentTime) {
+			this.urgentTime = urgentTime;
+		}
+
+		public Integer getUrgentCount() {
+			return urgentCount;
+		}
+
+		public void setUrgentCount(Integer urgentCount) {
+			this.urgentCount = urgentCount;
+		}
+	}
 
 	/**
 	 * 开关工作模式
@@ -307,7 +373,7 @@ public class WatchJWServerHandler extends HexBinaryAcceptanceHandlerAdapter {
 		private Long switchTime;
 
 		/**
-		 *  GPS APO1 上傳时间
+		 * GPS APO1 上傳时间
 		 */
 		private Long gpsUpTime;