Procházet zdrojové kódy

1.考勤统计修改。
2.设备离线逻辑修改。

tomatozq před 5 roky
rodič
revize
3414e92d2a

+ 38 - 20
lapi/src/main/java/com/jpsoft/smart/lapi/handler/HeartReportHandler.java

@@ -139,28 +139,46 @@ public class HeartReportHandler extends SimpleChannelInboundHandler<HeartReportI
 
         String deviceNo = ctx.channel().attr(LapiAttrKeys.DEVICE_NO).get();
 
-        if(StringUtils.isNotEmpty(deviceNo)){
-            log.warn(deviceNo + "channelInactive");
-
-            new Thread(()->{
-                try {
-                    //防止channelRead0和channelInactive同时发生
-                    Thread.sleep(1000);
-                } catch (InterruptedException e) {
-                    e.printStackTrace();
+        final SysLog sysLog = new SysLog();
+        sysLog.setPointcut(deviceNo);
+        sysLog.setUrl("/LAPI/V1.0/PACS/Controller/HeartReportInfo");
+        SocketAddress remoteAddress = ctx.channel().remoteAddress();
+        sysLog.setRemoteIp(remoteAddress.toString());
+
+        sysLog.setCreateTime(new Date());
+
+        if(StringUtils.isNotEmpty(deviceNo)) {
+            log.warn(deviceNo + " channelInactive");
+
+            //增加判断remoteAddress是否相同,避免客户端离线后,延迟通知服务端,导致服务器将新连接删除
+            String remoteAddr1 = ctx.channel().remoteAddress().toString();
+
+            if (activeLapiChannelMap.containsKey(deviceNo)) {
+                String remoteAddr2 = activeLapiChannelMap.get(deviceNo).getChannel().remoteAddress().toString();
+                sysLog.setData("当前设备对应连接->" + remoteAddr2);
+
+                if (remoteAddr1.equals(remoteAddr2)) {
+                    activeLapiChannelMap.remove(deviceNo);
+                    sysLog.setRemark("设备离线,已从全局map中删除");
+
+                    new Thread(() -> {
+                        try {
+                            //防止channelRead0和channelInactive同时发生
+                            Thread.sleep(1000);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
+
+                        deviceInfoService.updateByDeviceNo(deviceNo, false);
+                    }).start();
+                } else {
+                    sysLog.setRemark("设备离线,但有新连接接入" + remoteAddr2);
                 }
+            } else {
+                sysLog.setRemark("设备离线," + "未加入全局map");
+            }
 
-                SysLog sysLog = new SysLog();
-                sysLog.setPointcut(deviceNo);
-                sysLog.setUrl("/LAPI/V1.0/PACS/Controller/HeartReportInfo");
-                sysLog.setRemark("设备离线");
-                SocketAddress remoteAddress = ctx.channel().remoteAddress();
-                sysLog.setRemoteIp(remoteAddress.toString());
-                sysLog.setCreateTime(new Date());
-                sysLogService.insert(sysLog);
-
-                deviceInfoService.updateByDeviceNo(deviceNo,false);
-            }).start();
+            sysLogService.insert(sysLog);
         }
     }
 }

+ 2 - 0
web/src/main/java/com/jpsoft/smart/schduled/UnmeasureTemperatureAlarmTask.java

@@ -374,6 +374,7 @@ public class UnmeasureTemperatureAlarmTask {
                 workAttendance.setRecordTime(attendanceDate);
                 workAttendance.setResult(result);
                 workAttendance.setDelFlag(false);
+                workAttendance.setSources("1");
 
                 affectCount += workAttendanceService.insert(workAttendance);
             }
@@ -408,6 +409,7 @@ public class UnmeasureTemperatureAlarmTask {
             workAttendance.setCreateTime(new Date());
             workAttendance.setResult(result);
             workAttendance.setDelFlag(false);
+            workAttendance.setSources("1");
 
             List<PersonDeviceLog> logList = personDeviceLogService.findByPersonAndDate(personInfo.getId(),startDate,endDate);