Explorar o código

2022-12-8 风险应急处置指挥平台疏散相关接口对接

chaiyunlong %!s(int64=3) %!d(string=hai) anos
pai
achega
ff05890d89
Modificáronse 16 ficheiros con 260 adicións e 15 borrados
  1. 3 0
      zd-model/src/main/java/com/zd/model/constant/MqttConstants.java
  2. 11 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabBuildFloorController.java
  3. 52 2
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabExitLineVertexController.java
  4. 4 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabExitLineVertex.java
  5. 4 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildFloorLayoutVo.java
  6. 28 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineVertexInfoVo.java
  7. 4 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineVertexVo.java
  8. 25 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabSubjectByUserNumVo.java
  9. 2 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabHardwareStateMapper.java
  10. 5 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/enums/BigViewDataType.java
  11. 14 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/service/impl/SubMessageSendManager.java
  12. 9 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabExitLineVertexService.java
  13. 75 9
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitLineVertexServiceImpl.java
  14. 16 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBigViewMapper.xml
  15. 1 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorMapper.xml
  16. 7 2
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabExitLineVertexMapper.xml

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

@@ -58,6 +58,9 @@ public interface MqttConstants {
     //逃生指引线路通知
     String TOPIC_LAB_HORN = "lab/horn";
 
+    //新疏散通知
+    String TOPIC_LAB_NEWEXIT_LINE = "lab/newexit/line";
+
     //管控工作通知
     String TOPIC_LAB_MANAGE_WORK = "manage/work";
 

+ 11 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabBuildFloorController.java

@@ -4,6 +4,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import com.zd.common.core.annotation.Log;
 import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.web.controller.BaseController;
 import com.zd.common.swagger.config.Knife4jConfiguration;
 import com.zd.laboratory.domain.LabBuildFloor;
@@ -118,4 +119,14 @@ public class LabBuildFloorController  extends BaseController<LabBuildFloor> {
     public ResultData editSortNum(@RequestBody List<LabBuildFloor> labBuildFloorList) {
         return ResultData.result(labBuildFloorService.updateSortNum(labBuildFloorList));
     }
+
+
+    /**
+     * 查询楼栋(楼层)列表
+     */
+    @GetMapping("/getBuildOrFloorList")
+    @ApiOperation(value = "查询楼栋(楼层)列表")
+    public ResultData getBuildOrFloorList(LabBuildFloor labBuildFloor) {
+        return ResultData.success(labBuildFloorService.selectLabBuildFloorList(labBuildFloor));
+    }
 }

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

@@ -4,11 +4,14 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import com.zd.common.core.annotation.Log;
 import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.web.controller.BaseController;
 import com.zd.common.swagger.config.Knife4jConfiguration;
 import com.zd.laboratory.domain.LabExitLineVertex;
 import com.zd.laboratory.domain.vo.LabExitLineEvacuationVo;
+import com.zd.laboratory.domain.vo.LabExitLineVertexInfoVo;
 import com.zd.laboratory.domain.vo.LabExitLineVertexVo;
+import com.zd.laboratory.mqtt.service.impl.SubMessageSendManager;
 import com.zd.laboratory.service.ILabExitLineVertexService;
 import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerFun;
@@ -18,7 +21,11 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 逃生线路顶点Controller
@@ -35,6 +42,12 @@ public class LabExitLineVertexController extends BaseController {
     @Autowired
     private ILabExitLineVertexService labExitLineVertexService;
 
+    @Autowired
+    RedisService redisService;
+
+    @Autowired
+    private SubMessageSendManager messageSendService;
+
     /**
      * 查询逃生线路主列表
      */
@@ -84,11 +97,41 @@ public class LabExitLineVertexController extends BaseController {
     @PostMapping("/executeEvacuation")
     @ApiOperation(value = "查询逃生线路主列表")
     public ResultData executeEvacuation(@RequestBody LabExitLineEvacuationVo labExitLineEvacuationVo) {
-        return ResultData.success(labExitLineVertexService.executeEvacuation(labExitLineEvacuationVo));
+        Map <String, Object> joinPointVOS = labExitLineVertexService.executeEvacuation(labExitLineEvacuationVo);
+                //todo redis把计算的逃生线路相关信息存储起来
+        redisService.setCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId(), joinPointVOS, 1L, TimeUnit.HOURS);
+        //todo 下发前端页面通知
+        messageSendService.exitLineToFloor(labExitLineEvacuationVo.getBuildId(),labExitLineEvacuationVo.getFloorId());
+        return ResultData.success(joinPointVOS);
     }
 
 
     /**
+     * 结束疏散
+     */
+    @PostMapping("/endEvacuation")
+    @ApiOperation(value = "结束疏散")
+    public ResultData endEvacuation(@RequestBody LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        //todo 结束疏散清空redis,以及下发通知
+        redisService.deleteObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId());
+        //todo 下发前端页面通知
+        messageSendService.exitLineToFloor(labExitLineEvacuationVo.getBuildId(),labExitLineEvacuationVo.getFloorId());
+        return ResultData.success();
+    }
+
+    /**
+     * 获取redis的疏散数据
+     */
+    @PostMapping("/getRedisEvacuation")
+    @ApiOperation(value = "获取redis的疏散数据")
+    public ResultData getRedisEvacuation(@RequestBody LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        if(redisService.getCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId())!=null){
+            return ResultData.success(redisService.getCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId()));
+        }
+        return ResultData.success(new LinkedHashMap <>());
+    }
+
+    /**
      * 修改逃生线路主
      */
     @ApiOperation(value = "修改逃生线路主")
@@ -108,6 +151,13 @@ public class LabExitLineVertexController extends BaseController {
         return ResultData.result(labExitLineVertexService.deleteLabExitLineVertexByIds(ids));
     }
 
-
+    /**
+     * 获取布局图和楼层信息
+     */
+    @ApiOperation(value = "获取布局图和楼层信息")
+    @GetMapping(value = "/floor/{floorId}")
+    public ResultData<LabExitLineVertexInfoVo> getFloorInfo(@PathVariable("floorId") Long floorId) {
+        return ResultData.success(labExitLineVertexService.getFloorInfo(floorId));
+    }
 
 }

+ 4 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabExitLineVertex.java

@@ -37,6 +37,10 @@ public class LabExitLineVertex  extends BaseEntity {
     @ApiModelProperty(value = "页面布局相关数据")
     private String layoutData;
 
+    /** 页面关系数据 */
+    @ApiModelProperty(value = "页面关系数据")
+    private String layoutJoinData;
+
     /** 上传布局图地址 */
     @ApiModelProperty(value = "上传布局图地址")
     private String imgUrl;

+ 4 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildFloorLayoutVo.java

@@ -37,4 +37,8 @@ public class LabBuildFloorLayoutVo extends LabBuildFloorLayout {
     /** 布局图数据信息 */
     @ApiModelProperty(value = "布局图数据信息")
     private LabExitLineVertex exitLineVertex;
+
+    /** 实验室在线人员 */
+    @ApiModelProperty(value = "实验室在线人员")
+    private Integer online;
 }

+ 28 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineVertexInfoVo.java

@@ -0,0 +1,28 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.LabSubject;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/12/7
+ */
+@ApiModel("布局图详细信息")
+@Data
+public class LabExitLineVertexInfoVo {
+    /** 布局图信息 */
+    @ApiModelProperty(value = "布局图信息")
+    private LabExitLineVertex labExitLineVertex;
+
+    /** 布局图房间信息 */
+    @ApiModelProperty(value = "布局图房间信息")
+    private List <LabBuildFloorLayoutVo> buildFloorLayoutVoList = new ArrayList <>();
+}

+ 4 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineVertexVo.java

@@ -37,6 +37,10 @@ public class LabExitLineVertexVo {
     @ApiModelProperty(value = "页面布局相关数据")
     private String layoutData;
 
+    /** 页面关系数据 */
+    @ApiModelProperty(value = "页面关系数据")
+    private String layoutJoinData;
+
     /** 逃生点和实验室绑定关系 */
     @ApiModelProperty(value = "逃生点和实验室绑定关系")
     private List<LabBuildFloorLayout> buildFloorLayouts = new ArrayList <>();

+ 25 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabSubjectByUserNumVo.java

@@ -0,0 +1,25 @@
+package com.zd.laboratory.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/12/7
+ */
+@ApiModel("实验室人员统计")
+@Data
+public class LabSubjectByUserNumVo {
+
+    /** 实验室id */
+    @ApiModelProperty(value = "实验室id")
+    private Long subId;
+
+    /** 在线用户统计 */
+    @ApiModelProperty(value = "在线用户统计")
+    private Integer userNum;
+
+}

+ 2 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabHardwareStateMapper.java

@@ -7,6 +7,7 @@ import com.zd.laboratory.domain.bigview.HardwareState;
 import com.zd.laboratory.domain.bigview.HazardTotal;
 import com.zd.laboratory.domain.bigview.SenseState;
 import com.zd.laboratory.domain.vo.LabOnlineSubVO;
+import com.zd.laboratory.domain.vo.LabSubjectByUserNumVo;
 import com.zd.laboratory.domain.vo.LabSubjectVO;
 import com.zd.model.entity.SysUser;
 
@@ -66,6 +67,7 @@ public interface LabHardwareStateMapper {
 
     List<SysUser> querySubOnlineUser(Map<String, Object> params);
 
+    List<LabSubjectByUserNumVo> querySubsOnlineUser(List<Long> ids);
 
     List<SysUser> querySubOnlineUserByOnepc(Map<String, Object> params);
 }

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

@@ -35,7 +35,11 @@ public enum BigViewDataType {
     /**
      * 喇叭消息下发通知
      */
-    FLOOR_HORN;
+    FLOOR_HORN,
+    /**
+     * 楼层疏散
+     */
+    FLOOR_EXITLINE;
 
 
 

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

@@ -243,6 +243,20 @@ public class SubMessageSendManager {
     }
 
     /**
+     * 新疏散下发通知
+     *
+     * @param floorId
+     */
+    public void exitLineToFloor(Long build,Long floorId) {
+        if (floorId == null) {
+            return;
+        }
+        MessageBody messageBody = new MessageBody();
+        messageBody.setData(BigViewDataType.FLOOR_EXITLINE);
+        commonSend.send(MqttConstants.TOPIC_LAB_NEWEXIT_LINE + build +""+ floorId, messageBody, SendMode.ONCE);
+    }
+
+    /**
      * 通知一体机logo查询
      *
      */

+ 9 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabExitLineVertexService.java

@@ -49,7 +49,8 @@ public interface ILabExitLineVertexService
      * @param labExitLineEvacuationVo 逃生线路主主键
      * @return 逃生线路主
      */
-    public Map <String,Object> executeEvacuation(LabExitLineEvacuationVo labExitLineEvacuationVo);
+    public Map<String,Object> executeEvacuation(LabExitLineEvacuationVo labExitLineEvacuationVo);
+
 
     /**
      * 新增逃生线路主
@@ -76,4 +77,11 @@ public interface ILabExitLineVertexService
     public int deleteLabExitLineVertexByIds(Long[] ids);
 
 
+    /**
+     * 获取布局图和楼层信息
+     *
+     * @param floorId 楼层id
+     * @return 布局图详细信息
+     */
+    public LabExitLineVertexInfoVo getFloorInfo(Long floorId);
 }

+ 75 - 9
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitLineVertexServiceImpl.java

@@ -2,18 +2,18 @@ package com.zd.laboratory.service.impl;
 
 import cn.hutool.core.date.StopWatch;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.nacos.shaded.org.checkerframework.checker.nullness.Opt;
 import com.zd.algorithm.api.speaker.entity.ParamVo;
 import com.zd.algorithm.api.speaker.entity.PlayVo;
 import com.zd.algorithm.api.speaker.feign.RemoteSpeakService;
-import com.zd.common.core.utils.*;
+import com.zd.common.core.utils.DateUtils;
+import com.zd.common.core.utils.SaveUtil;
+import com.zd.common.core.utils.SecurityUtils;
+import com.zd.common.core.utils.StringUtils;
 import com.zd.laboratory.config.TimeWaitConfigUtils;
-import com.zd.laboratory.domain.LabAudioSynthesis;
-import com.zd.laboratory.domain.LabBuildFloorLayout;
-import com.zd.laboratory.domain.LabExitLineVertex;
-import com.zd.laboratory.domain.LabExitPointRelay;
+import com.zd.laboratory.domain.*;
 import com.zd.laboratory.domain.vo.*;
 import com.zd.laboratory.mapper.*;
-import com.zd.laboratory.service.ILabBuildFloorLayoutService;
 import com.zd.laboratory.service.ILabExitLineVertexService;
 import com.zd.laboratory.socket.command.Symbol;
 import com.zd.laboratory.socket.service.SocketService;
@@ -67,6 +67,12 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
     @Autowired
     private LabBuildFloorLayoutMapper labBuildFloorLayoutMapper;
 
+    @Autowired
+    private LabSubjectMapper labSubjectMapper;
+
+    @Autowired
+    private LabHardwareStateMapper labHardwareStateMapper;
+
 
     private static final Logger log = LoggerFactory.getLogger(LabExitLineVertexServiceImpl.class);
 
@@ -124,7 +130,7 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
      * @return 逃生线路主
      */
     @Override
-    public Map <String, Object> executeEvacuation(LabExitLineEvacuationVo labExitLineEvacuationVo) {
+    public Map<String,Object> executeEvacuation(LabExitLineEvacuationVo labExitLineEvacuationVo) {
         //todo 根据实验室id查询出对应的pointName数据
         LabBuildFloorLayout labBuildFloorLayout = new LabBuildFloorLayout();
         labBuildFloorLayout.setBuildId(labExitLineEvacuationVo.getBuildId());
@@ -180,6 +186,7 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
                 ArrayList <Integer[][]> oldList = flody(oldRelationalData);
                 //计算楼层各个实验室的逃生线路
                 Map <String, Object> joinPointVOS = displayPath(list, newRelationalData, labExitLineEvacuationVo, oldList, oldRelationalData);
+
                 return joinPointVOS;
             }
         }
@@ -188,6 +195,8 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
     }
 
 
+
+
     //todo 计算坏点(目前只有发生预案的实验室需要标记为坏点),需要把非坏点关联坏点点位全部改成无限大
     public void badPoints(List <LabExitLineJoinPointVO> newRelationalData, String badPointName) {
         //这里计算预案发生的实验室坏点
@@ -444,7 +453,7 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
     //todo 针对实验室计算出当前实验室的各种线路,过滤到最优线路
     public CompletableFuture <Map <String, Object>> optimalRoute(List <LabExitLineJoinPointVO> linePointVOList, Integer[][] path, Integer[] chain, int i, int j, ArrayList <Integer[][]> oldList, List <LabExitLineJoinPointVO> oldRelationalData,LabExitLineEvacuationVo labExitLineEvacuationVo) {
         //输出源到目的地
-        logger.info("\n   " + (linePointVOList.get(i).getPointName()) + "->" + (linePointVOList.get(i).getPointVOList().get(j).getPointName()) + "     ");
+        System.out.println("\n   " + (linePointVOList.get(i).getPointName()) + "->" + (linePointVOList.get(i).getPointVOList().get(j).getPointName()) + "     ");
         //保存两个点之间的途径点。
         List <LabExitLineJoinPointVO> joinPointVOS = new ArrayList <>();
         //todo 这里用map保存三个结果,一个是计算好的线路,一个是顶点名称,一个是计算的顶点到最优线路距离.
@@ -453,7 +462,17 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
         if (linePointVOList.get(i).getPointVOList().get(j).getPointDistance() == M) {
             logger.info(" NA ");
             //todo 这里原来是NA,也就是说没有匹配到线路,如果线路出现坏点,并且没有其他备用线路,那么就选择坏点线路
-            if(!labExitLineEvacuationVo.getStartPointName().equals(linePointVOList.get(i).getPointName())){
+            LongAdder adder = new LongAdder();
+            Optional.ofNullable(labExitLineEvacuationVo.getBadPointNames())
+                    .orElseGet(Collections::emptyList)
+                    .stream()
+                    .forEach(p->{
+                        if(p.equals(linePointVOList.get(i).getPointVOList().get(j).getPointName())){
+                            adder.increment();
+                        }
+                    });
+
+            if(!labExitLineEvacuationVo.getStartPointName().equals(linePointVOList.get(i).getPointName()) && adder.intValue()<1){
                 getHistoryLinePoint(oldRelationalData, oldList.get(0), chain, i, j, joinPointVOS);
             }
         } else {
@@ -505,6 +524,7 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
         labExitLineVertex.setFloorId(lineVertexVo.getFloorId());
         labExitLineVertex.setRelationalData(JSONArray.toJSONString(lineVertexVo.getRelationalData()));
         labExitLineVertex.setLayoutData(lineVertexVo.getLayoutData());
+        labExitLineVertex.setLayoutJoinData(lineVertexVo.getLayoutJoinData());
         labExitLineVertex.setImgUrl(lineVertexVo.getImgUrl());
         labExitLineVertex.setCanvasWidth(lineVertexVo.getCanvasWidth());
         labExitLineVertex.setCanvasHeight(lineVertexVo.getCanvasHeight());
@@ -598,6 +618,52 @@ public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
         return 1;
     }
 
+    @Override
+    public LabExitLineVertexInfoVo getFloorInfo(Long floorId) {
+        LabExitLineVertex labExitLineVertex = new LabExitLineVertex();
+        labExitLineVertex.setFloorId(floorId);
+        List<LabExitLineVertex> exitLineList = labExitLineVertexMapper.getExitLineVertexList(labExitLineVertex);
+        //布局图基础信息
+        LabExitLineVertexInfoVo labExitLineVertexInfoVo = new LabExitLineVertexInfoVo();
+        if(exitLineList.size()>0){
+            labExitLineVertexInfoVo.setLabExitLineVertex(exitLineList.get(0));
+        }
+        //获取布局图实验室信息信息
+        LabBuildFloorLayout labBuildFloorLayout = new LabBuildFloorLayout();
+        labBuildFloorLayout.setFloorId(floorId);
+        List <LabBuildFloorLayoutVo> buildFloorLayoutVoList = labBuildFloorLayoutMapper.selectLabBuildFloorLayoutList(labBuildFloorLayout);
+        labExitLineVertexInfoVo.setBuildFloorLayoutVoList(buildFloorLayoutVoList);
+        //处理布局图实验室id
+        List<Long> subIds = Optional.of(buildFloorLayoutVoList).orElseGet(Collections::emptyList)
+                                    .parallelStream()
+                                    .map(a->a.getSubId()).collect(Collectors.toList());
+        List<LabSubject> subjectList = labSubjectMapper.getByIds(subIds);
+
+        Optional.ofNullable(buildFloorLayoutVoList)
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(a->Optional.ofNullable(subjectList)
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .filter(b->a.getSubId().longValue()==b.getId())
+                .forEach(b->{
+                    a.setSubName(b.getName());
+                }));
+        //实验室下的在线人员
+        List<LabSubjectByUserNumVo> subjectByUserNumVoList = labHardwareStateMapper.querySubsOnlineUser(subIds);
+        Optional.ofNullable(buildFloorLayoutVoList)
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(a->Optional.ofNullable(subjectByUserNumVoList)
+                        .orElseGet(Collections::emptyList)
+                        .stream()
+                        .filter(b->a.getSubId().longValue()==b.getSubId())
+                        .forEach(b->{
+                            a.setOnline(b.getUserNum());
+                        }));
+        return labExitLineVertexInfoVo;
+    }
+
 
     public ArrayList <Integer[][]> flody(List <LabExitLineJoinPointVO> dist) {
         Integer[][] path = new Integer[V][V];//存储的是从i->j经过的最后一个节点

+ 16 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBigViewMapper.xml

@@ -145,6 +145,22 @@
             left join sys_dept d on u.dept_id = d.dept_id
     </select>
 
+    <select id="querySubsOnlineUser" resultType="com.zd.laboratory.domain.vo.LabSubjectByUserNumVo">
+        select su.online userNum,su.subId
+        from (
+        select * from
+        (
+        SELECT sar.join_user_id as user_id,a.id subId, count(DISTINCT sar.join_user_id) as online from lab_subject a left join lab_subject_access_record sar on sar.subject_id = a.id
+        and  sar.access_status  = 1 and sar.init_flag = 0
+        where a.id in
+        <foreach item="id" collection="list" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        GROUP BY a.id
+        ) a
+        ) su
+    </select>
+
     <select id="querySubOnlineUserByOnepc" resultType="com.zd.model.entity.SysUser">
 
         SELECT u.user_name AS userName, u.nick_name AS nickName,

+ 1 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorMapper.xml

@@ -32,6 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>
             <if test="id != null "> and id = #{id}</if>
             <if test="parentId != null "> and parent_id = #{parentId}</if>
+            <if test="type != null "> and `type` = #{type}</if>
         </where>
     </select>
 

+ 7 - 2
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabExitLineVertexMapper.xml

@@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="floorId"    column="floor_id"    />
         <result property="relationalData"    column="relational_data"    />
         <result property="layoutData"    column="layout_data"    />
+        <result property="layoutJoinData"    column="layout_join_data"    />
         <result property="imgUrl"    column="img_url"    />
         <result property="canvasWidth"    column="canvas_width"    />
         <result property="canvasHeight"    column="canvas_height"    />
@@ -22,11 +23,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectLabExitLineVertexVo">
-        select id,build_id, floor_id, relational_data, layout_data, img_url, canvas_width, canvas_height, user_id, create_by, create_time,
+        select id,build_id, floor_id, relational_data, layout_data, layout_join_data, img_url, canvas_width, canvas_height, user_id, create_by, create_time,
         update_by, update_time, remark from lab_exit_line_vertex
     </sql>
     <sql id="selectLabExitLineListVo">
-        select t.id,t.build_id, t.floor_id, t.relational_data, t.layout_data, t.img_url, t.canvas_width, t.canvas_height, t.user_id, t.create_by, t.create_time,
+        select t.id,t.build_id, t.floor_id, t.relational_data, t.layout_data, t.layout_join_data, t.img_url, t.canvas_width, t.canvas_height, t.user_id, t.create_by, t.create_time,
         t.update_by, t.update_time, t.remark from lab_exit_line_vertex as t
     </sql>
     <select id="selectLabExitLineVertexList" parameterType="com.zd.laboratory.domain.LabExitLineVertex" resultMap="LabExitLineVertexResult">
@@ -66,6 +67,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <if test="layoutData != null">layout_data,</if>
 
+    <if test="layoutJoinData != null">layout_join_data,</if>
+
     <if test="imgUrl != null">img_url,</if>
 
     <if test="canvasWidth != null">canvas_width,</if>
@@ -90,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <if test="floorId != null">#{floorId},</if>
     <if test="relationalData != null">#{relationalData},</if>
     <if test="layoutData != null">#{layoutData},</if>
+    <if test="layoutJoinData != null">#{layoutJoinData},</if>
     <if test="imgUrl != null">#{imgUrl},</if>
     <if test="canvasWidth != null">#{canvasWidth},</if>
     <if test="canvasHeight != null">#{canvasHeight},</if>
@@ -109,6 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="floorId != null">floor_id = #{floorId},</if>
             <if test="relationalData != null">relational_data = #{relationalData},</if>
             <if test="layoutData != null">layout_data = #{layoutData},</if>
+            <if test="layoutJoinData != null">layout_join_data = #{layoutJoinData},</if>
             <if test="imgUrl != null">img_url = #{imgUrl},</if>
             <if test="canvasWidth != null">canvas_width = #{canvasWidth},</if>
             <if test="canvasHeight != null">canvas_height = #{canvasHeight},</if>