Prechádzať zdrojové kódy

2022-12-9 疏散细节bug调整。

chaiyunlong 3 rokov pred
rodič
commit
766d6c0fd6

+ 3 - 0
zd-model/src/main/java/com/zd/model/constant/MqttConstants.java

@@ -61,6 +61,9 @@ public interface MqttConstants {
     //新疏散通知
     String TOPIC_LAB_NEWEXIT_LINE = "lab/newexit/line";
 
+    //实验室人员变动通知
+    String TOPIC_LAB_SUB_USER = "lab/subuser/change";
+
     //管控工作通知
     String TOPIC_LAB_MANAGE_WORK = "manage/work";
 

+ 1 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabExitLineVertexController.java

@@ -116,7 +116,7 @@ public class LabExitLineVertexController extends BaseController {
         //todo 结束疏散清空redis,以及下发通知
         redisService.deleteObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId());
         //todo 下发前端页面通知
-        messageSendService.exitLineToFloor(labExitLineEvacuationVo.getFloorId());
+        messageSendService.overExitLineToFloor(labExitLineEvacuationVo.getFloorId());
         return ResultData.success();
     }
 

+ 5 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/enums/BigViewDataType.java

@@ -39,7 +39,11 @@ public enum BigViewDataType {
     /**
      * 楼层疏散
      */
-    FLOOR_EXITLINE;
+    FLOOR_EXITLINE,
+    /**
+     * 结束疏散
+     */
+    FLOOR_OVER_EXITLINE;
 
 
 

+ 26 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/service/impl/SubMessageSendManager.java

@@ -255,6 +255,32 @@ public class SubMessageSendManager {
         commonSend.send(MqttConstants.TOPIC_LAB_NEWEXIT_LINE + floorId , messageBody, SendMode.ONCE);
     }
 
+    /**
+     * 结束新疏散下发通知
+     *
+     */
+    public void overExitLineToFloor(Long floorId) {
+        if (floorId == null) {
+            return;
+        }
+        MessageBody messageBody = new MessageBody();
+        messageBody.setData(BigViewDataType.FLOOR_OVER_EXITLINE);
+        commonSend.send(MqttConstants.TOPIC_LAB_NEWEXIT_LINE + floorId , messageBody, SendMode.ONCE);
+    }
+
+    /**
+     * 实验室人员变动下发通知
+     *
+     */
+    public void subUserByChange(Long floorId,Long subId) {
+        if (floorId == null || subId == null) {
+            return;
+        }
+        MessageBody messageBody = new MessageBody();
+        messageBody.setData(subId);
+        commonSend.send(MqttConstants.TOPIC_LAB_SUB_USER + floorId  , messageBody, SendMode.ONCE);
+    }
+
 
     /**
      * 通知一体机logo查询

+ 16 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/onemachine/service/OneMachineService.java

@@ -18,6 +18,7 @@ import com.zd.laboratory.domain.vo.*;
 import com.zd.laboratory.mapper.LabHardwareStateMapper;
 import com.zd.laboratory.mapper.LabSubjectAccessRecordMapper;
 import com.zd.laboratory.mapper.LabSubjectSecurityconfigureMapper;
+import com.zd.laboratory.mqtt.service.impl.SubMessageSendManager;
 import com.zd.laboratory.onemachine.domain.SignInPerInfoVO;
 import com.zd.laboratory.onemachine.domain.SignInfoVO;
 import com.zd.laboratory.onemachine.domain.SingInUser;
@@ -95,6 +96,12 @@ public class OneMachineService implements ValidationSignInPerInfo {
     @Autowired
     private ILabGradeManageRecordService labGradeManageRecordService;
 
+    @Autowired
+    private SubMessageSendManager messageSendService;
+
+    @Autowired
+    private ILabBuildFloorLayoutService labBuildFloorLayoutService;
+
     private Map<SignEnum, Function<SignInfoVO, SignInPerInfoVO>> validMap;
 
     @PostConstruct
@@ -353,6 +360,15 @@ public class OneMachineService implements ValidationSignInPerInfo {
                         redisService.deleteObject(verifyKey);
                         //增加一个key 用记录ID作为key,值是实验室ID 有效期两分钟
                         redisService.setCacheObject(BaseConstants.SINGIN_id_KEY + subjectAccessRecord.getId(), Long.parseLong(s), 2L, TimeUnit.MINUTES);
+                        //todo 这里通过实验室id查询楼层id
+                        LabBuildFloorLayout labBuildFloorLayout = new LabBuildFloorLayout();
+                        labBuildFloorLayout.setSubId(Long.parseLong(s));
+                        List <LabBuildFloorLayoutVo> floorLayoutVoList = labBuildFloorLayoutService.selectLabBuildFloorLayoutList(labBuildFloorLayout);
+                        if(floorLayoutVoList.size()>0){
+                            LabBuildFloorLayoutVo floorVo = floorLayoutVoList.get(0);
+                            //todo 这里需要给管控页面推送一个消息
+                            messageSendService.subUserByChange(floorVo.getFloorId(),Long.parseLong(s));
+                        }
                     }else{
                         return ResultData.fail("当前用户已经签到成功,不能重复签到。");
                     }

+ 15 - 7
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitPointRelayServiceImpl.java

@@ -85,11 +85,14 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
                 }
 
                 boolean flag = true;
-                for(LabExitLineJoinPointVO pointVO:lightPointSet){
-                    if(pointVO!=null && pointVO.getKey().equals(relay.getPointName())){
-                        flag = false;
+                if(lightPointSet!=null  && lightPointSet.size()>0){
+                    for(LabExitLineJoinPointVO pointVO:lightPointSet){
+                        if(pointVO!=null && pointVO.getKey().equals(relay.getPointName())){
+                            flag = false;
+                        }
                     }
                 }
+
                 if(flag){
                     LabExitLineJoinPointVO lineJoinPointVO = new LabExitLineJoinPointVO();
                     lineJoinPointVO.setKey(relay.getPointName());
@@ -115,9 +118,11 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
 
         Map <String, Object> relayListMap = new HashMap <>();
         Set <LabExitLineJoinPointVO> lightPointSet = new HashSet <>();
+        Set <LabExitLineJoinPointVO> newLightPointSet = new HashSet <>();
         if(redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId())!=null){
             relayListMap = redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId());
             lightPointSet = (Set <LabExitLineJoinPointVO>) relayListMap.get("lightPointSet");
+            newLightPointSet.addAll(lightPointSet) ;
         }
         //todo  开启继电器开关
         for(LabExitPointRelay relay : labExitPointRelays) {
@@ -131,16 +136,19 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
                     socketService.sendMqttCommand(relay.getRelayCode(), Symbol.command.close, relay.getRelayBit() + "");
                     Thread.sleep(timeWaitConfigUtils.getWaitTime());
                 }
-                for(LabExitLineJoinPointVO pointVO:lightPointSet){
-                    if(pointVO!=null && pointVO.getKey().equals(relay.getPointName())){
-                        lightPointSet.remove(pointVO);
+                if(lightPointSet!=null && lightPointSet.size()>0){
+                    for(LabExitLineJoinPointVO pointVO:lightPointSet){
+                        if(pointVO!=null && pointVO.getKey().equals(relay.getPointName())){
+                            newLightPointSet.remove(pointVO);
+                        }
                     }
                 }
+
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
-        relayListMap.put("lightPointSet",lightPointSet);
+        relayListMap.put("lightPointSet",newLightPointSet);
         redisService.setCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId(), relayListMap, 3L, TimeUnit.HOURS);
         //todo  发送前端消息
         messageSendService.exitLineToFloor(labExitPointRelay.getFloorId());