Преглед на файлове

2022-12-1 新疏散相关代码

chaiyunlong преди 3 години
родител
ревизия
3bce65e356
променени са 65 файла, в които са добавени 4051 реда и са изтрити 0 реда
  1. 13 0
      zd-common/common-core/src/main/java/com/zd/common/core/web/controller/BaseController.java
  2. 29 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/config/TimeWaitConfigUtils.java
  3. 113 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabBuildFloorController.java
  4. 86 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabBuildFloorLayoutController.java
  5. 109 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabExitLineVertexController.java
  6. 57 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabExitPointRelayController.java
  7. 43 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeContentController.java
  8. 43 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeGroupController.java
  9. 45 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeModeController.java
  10. 58 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeSendmodeController.java
  11. 11 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSubjectController.java
  12. 42 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabBuildFloor.java
  13. 50 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabBuildFloorLayout.java
  14. 51 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabExitLineVertex.java
  15. 55 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabExitPointRelay.java
  16. 42 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeContent.java
  17. 35 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeGroup.java
  18. 31 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeMode.java
  19. 31 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeSendmode.java
  20. 40 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildFloorLayoutVo.java
  21. 25 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildFloorPage.java
  22. 22 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildFloorVo.java
  23. 33 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildList.java
  24. 32 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildListVo.java
  25. 36 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineEvacuationVo.java
  26. 43 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineJoinPointVO.java
  27. 59 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineVertexVo.java
  28. 30 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabFloorListVo.java
  29. 26 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabNewnoticeSendmodeVo.java
  30. 67 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabBuildFloorLayoutMapper.java
  31. 75 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabBuildFloorMapper.java
  32. 84 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabExitLineVertexMapper.java
  33. 49 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabExitPointRelayMapper.java
  34. 48 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeContentMapper.java
  35. 33 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeGroupMapper.java
  36. 24 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeModeMapper.java
  37. 43 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeSendmodeMapper.java
  38. 9 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSubjectMapper.java
  39. 59 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabBuildFloorLayoutService.java
  40. 79 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabBuildFloorService.java
  41. 79 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabExitLineVertexService.java
  42. 42 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabExitPointRelayService.java
  43. 28 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeContentService.java
  44. 25 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeGroupService.java
  45. 26 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeModeService.java
  46. 33 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeSendmodeService.java
  47. 8 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSubjectService.java
  48. 84 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabBuildFloorLayoutServiceImpl.java
  49. 171 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabBuildFloorServiceImpl.java
  50. 601 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitLineVertexServiceImpl.java
  51. 46 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitPointRelayServiceImpl.java
  52. 28 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeContentServiceImpl.java
  53. 30 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeGroupServiceImpl.java
  54. 30 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeModeServiceImpl.java
  55. 122 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeSendmodeServiceImpl.java
  56. 5 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectServiceImpl.java
  57. 139 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorLayoutMapper.xml
  58. 137 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorMapper.xml
  59. 140 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabExitLineVertexMapper.xml
  60. 119 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabExitPointRelayMapper.xml
  61. 100 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeContentMapper.xml
  62. 54 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeGroupMapper.xml
  63. 38 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeModeMapper.xml
  64. 76 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeSendmodeMapper.xml
  65. 30 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSubjectMapper.xml

+ 13 - 0
zd-common/common-core/src/main/java/com/zd/common/core/web/controller/BaseController.java

@@ -116,6 +116,19 @@ public class BaseController<T> {
         return rspData;
     }
 
+    /**
+     * 响应请求分页数据
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    protected TableDataInfo<T> getDataTable(List<? extends T> list,Long total) {
+        TableDataInfo<T> rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.SUCCESS);
+        rspData.setRows(list);
+        rspData.setMsg("查询成功");
+        rspData.setTotal(total);
+        return rspData;
+    }
+
 
     /**
      * 响应返回结果

+ 29 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/config/TimeWaitConfigUtils.java

@@ -0,0 +1,29 @@
+package com.zd.laboratory.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.stereotype.Component;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/14
+ */
+@Configuration
+public class TimeWaitConfigUtils {
+    /**
+     * 解决继电器不能同时下发的睡眠时间
+     */
+    @Value("${sys.time.waitTime}")
+    private Long waitTime;
+
+    public Long getWaitTime() {
+        return waitTime;
+    }
+
+    public void setWaitTime(Long waitTime) {
+        this.waitTime = waitTime;
+    }
+}

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

@@ -0,0 +1,113 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.annotation.Log;
+import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabBuildFloor;
+import com.zd.laboratory.domain.vo.LabBuildFloorPage;
+import com.zd.laboratory.domain.vo.LabBuildFloorVo;
+import com.zd.laboratory.service.ILabBuildFloorService;
+import com.zd.model.domain.ResultData;
+import com.zd.model.page.TableDataInfo;
+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.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+@RestController
+@Api(tags = "【楼栋(楼层)】")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/buildFloor")
+public class LabBuildFloorController  extends BaseController<LabBuildFloor> {
+
+    @Autowired
+    private ILabBuildFloorService labBuildFloorService;
+
+    /**
+     * 查询楼栋(楼层)列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询楼栋(楼层)列表")
+    public TableDataInfo <LabBuildFloor> list(LabBuildFloor labBuildFloor) {
+        startPage();
+        List <LabBuildFloor> list = labBuildFloorService.selectLabBuildFloorList(labBuildFloor);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增楼栋(楼层)
+     */
+    @ApiOperation(value = "新增楼栋(楼层)")
+    @Log(title = "新增楼栋(楼层)", businessType = BusinessType.INSERT)
+    @PostMapping
+    public ResultData add(@RequestBody LabBuildFloor labBuildFloor) {
+        return ResultData.result(labBuildFloorService.insertLabBuildFloor(labBuildFloor));
+    }
+
+    /**
+     * 修改楼栋(楼层)
+     */
+    @ApiOperation(value = "修改楼栋(楼层)")
+    @Log(title = "楼栋(楼层)", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public ResultData edit(@RequestBody LabBuildFloor labBuildFloor) {
+        return ResultData.result(labBuildFloorService.updateLabBuildFloor(labBuildFloor));
+    }
+
+    /**
+     * 查询楼栋(楼层)tree结构列表
+     */
+    @GetMapping("/getTreeList")
+    @ApiOperation(value = "查询楼栋(楼层)列表")
+    public ResultData <List<LabBuildFloorVo>> getTreeList(LabBuildFloor labBuildFloor) {
+        return ResultData.success(labBuildFloorService.getTreeList(labBuildFloor));
+    }
+
+
+    /**
+     * 查询楼栋(楼层)子集列表
+     */
+    @GetMapping("/getTreeSonList")
+    @ApiOperation(value = "查询楼栋(楼层)子集列表")
+    public TableDataInfo <LabBuildFloor> getTreeSonList(LabBuildFloor labBuildFloor) {
+//        //todo 如果选中的是楼层下的布局图,则需要分页,如果不是,不需要分页
+//        if(labBuildFloor.getType()==3){
+//            startPage();
+//        }
+        LabBuildFloorPage buildFloorPage = labBuildFloorService.getTreeSonList(labBuildFloor);
+        return getDataTable(buildFloorPage.getLabBuildList(),buildFloorPage.getTotal());
+    }
+
+
+    /**
+     * 删除楼栋(楼层)
+     */
+    @ApiOperation(value = "删除楼栋(楼层)")
+    @Log(title = "楼栋(楼层)", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public ResultData remove(@PathVariable Long[] ids) {
+        return ResultData.result(labBuildFloorService.deleteLabBuildFloorByIds(ids));
+    }
+
+
+
+    /**
+     * 修改楼栋楼层sortNum
+     */
+    @ApiOperation(value = "修改楼栋楼层sortNum")
+    @Log(title = "楼栋(楼层)", businessType = BusinessType.UPDATE)
+    @PutMapping("/editSortNum")
+    public ResultData editSortNum(@RequestBody List<LabBuildFloor> labBuildFloorList) {
+        return ResultData.result(labBuildFloorService.updateSortNum(labBuildFloorList));
+    }
+}

+ 86 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabBuildFloorLayoutController.java

@@ -0,0 +1,86 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.annotation.Log;
+import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo;
+import com.zd.laboratory.service.ILabBuildFloorLayoutService;
+import com.zd.model.domain.ResultData;
+import com.zd.model.page.TableDataInfo;
+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.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+@RestController
+@Api(tags = "【楼层布局图】")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/buildFloorLayout")
+public class LabBuildFloorLayoutController extends BaseController<LabBuildFloorLayout> {
+
+    @Autowired
+    private ILabBuildFloorLayoutService labBuildFloorLayoutService;
+
+    /**
+     * 查询布局图列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询布局图列表")
+    public TableDataInfo <LabBuildFloorLayout> list(LabBuildFloorLayout labBuildFloorLayout) {
+        startPage();
+        List <LabBuildFloorLayoutVo> list = labBuildFloorLayoutService.selectLabBuildFloorLayoutList(labBuildFloorLayout);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取布局图详细信息
+     */
+    @ApiOperation(value = "获取布局图详细信息")
+    @GetMapping(value = "/{id}")
+    public ResultData<LabBuildFloorLayoutVo> getInfo(@PathVariable("id") Long id) {
+        return ResultData.success(labBuildFloorLayoutService.selectLabBuildFloorLayoutById(id));
+    }
+
+    /**
+     * 新增布局图
+     */
+    @ApiOperation(value = "新增布局图")
+    @Log(title = "新增布局图", businessType = BusinessType.INSERT)
+    @PostMapping
+    public ResultData add(@RequestBody LabBuildFloorLayout labBuildFloorLayout) {
+        return ResultData.result(labBuildFloorLayoutService.insertLabBuildFloorLayout(labBuildFloorLayout));
+    }
+
+    /**
+     * 修改布局图
+     */
+    @ApiOperation(value = "修改布局图")
+    @Log(title = "布局图", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public ResultData edit(@RequestBody LabBuildFloorLayout labBuildFloorLayout) {
+        return ResultData.result(labBuildFloorLayoutService.updateLabBuildFloorLayout(labBuildFloorLayout));
+    }
+
+    /**
+     * 删除布局图
+     */
+    @ApiOperation(value = "删除布局图")
+    @Log(title = "布局图", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public ResultData remove(@PathVariable Long[] ids) {
+        return ResultData.result(labBuildFloorLayoutService.deleteLabBuildFloorLayoutByIds(ids));
+    }
+
+}

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

@@ -0,0 +1,109 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.annotation.Log;
+import com.zd.common.core.log.BusinessType;
+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.LabExitLineVertexVo;
+import com.zd.laboratory.service.ILabExitLineVertexService;
+import com.zd.model.domain.ResultData;
+import com.zd.model.page.TableDataInfo;
+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.List;
+
+/**
+ * 逃生线路顶点Controller
+ *https://my.oschina.net/u/1247611/blog/159952
+ * @author zd
+ * @date 2022-11-3
+ */
+@RestController
+@Api(tags = "【逃生线路顶点】")
+//作者手动加入 ,在接口上加作者@ApiOperationSupport(author = "XXX")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/lineVertex")
+public class LabExitLineVertexController extends BaseController {
+    @Autowired
+    private ILabExitLineVertexService labExitLineVertexService;
+
+    /**
+     * 查询逃生线路主列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询逃生线路主列表")
+    public TableDataInfo<LabExitLineVertex> list(LabExitLineVertex labExitLineVertex) {
+        startPage();
+        List<LabExitLineVertex> list = labExitLineVertexService.selectLabExitLineVertexList(labExitLineVertex);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 获取逃生线路主详细信息
+     */
+    @ApiOperation(value = "获取逃生线路主详细信息")
+    @GetMapping(value = "/{id}")
+    public ResultData<LabExitLineVertex> getInfo(@PathVariable("id") Long id) {
+        return ResultData.success(labExitLineVertexService.selectLabExitLineVertexById(id));
+    }
+
+
+    /**
+     * 新增逃生线路主
+     */
+    @ApiOperation(value = "新增逃生线路主")
+    @Log(title = "逃生线路主", businessType = BusinessType.INSERT)
+    @PostMapping
+    public ResultData add(@RequestBody LabExitLineVertexVo lineVertexVo) {
+        return ResultData.result(labExitLineVertexService.insertLabExitLineVertex(lineVertexVo));
+    }
+
+
+    /**
+     * 计算线路最优方案
+     */
+    @GetMapping("/getCalculationLine")
+    @ApiOperation(value = "查询逃生线路主列表")
+    public ResultData getCalculationLine(LabExitLineVertex labExitLineVertex) {
+        return ResultData.success(labExitLineVertexService.getCalculationLine(labExitLineVertex));
+    }
+
+    /**
+     * 执行疏散线路最优方案
+     */
+    @PostMapping("/executeEvacuation")
+    @ApiOperation(value = "查询逃生线路主列表")
+    public ResultData executeEvacuation(@RequestBody LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        return ResultData.success(labExitLineVertexService.executeEvacuation(labExitLineEvacuationVo));
+    }
+
+
+    /**
+     * 修改逃生线路主
+     */
+    @ApiOperation(value = "修改逃生线路主")
+    @Log(title = "逃生线路主", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public ResultData edit(LabExitLineVertex labExitLineVertex) {
+        return ResultData.result(labExitLineVertexService.updateLabExitLineVertex(labExitLineVertex));
+    }
+
+    /**
+     * 删除逃生线路主
+     */
+    @ApiOperation(value = "删除逃生线路主")
+    @Log(title = "逃生线路主", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public ResultData remove(@PathVariable Long[] ids) {
+        return ResultData.result(labExitLineVertexService.deleteLabExitLineVertexByIds(ids));
+    }
+
+
+
+}

+ 57 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabExitPointRelayController.java

@@ -0,0 +1,57 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.annotation.Log;
+import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabExitPointRelay;
+import com.zd.laboratory.domain.vo.LabExitLineVertexVo;
+import com.zd.laboratory.service.ILabExitPointRelayService;
+import com.zd.model.domain.ResultData;
+import com.zd.model.page.TableDataInfo;
+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.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/11
+ */
+@RestController
+@Api(tags = "【逃生灯关联的继电器】")
+//作者手动加入 ,在接口上加作者@ApiOperationSupport(author = "XXX")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/pointRelay")
+public class LabExitPointRelayController extends BaseController{
+
+    @Autowired
+    private ILabExitPointRelayService labExitPointRelayService;
+
+    /**
+     * 查询逃生灯关联的继电器列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询逃生灯关联的继电器列表")
+    public TableDataInfo <LabExitPointRelay> list(LabExitPointRelay labExitPointRelay) {
+        List <LabExitPointRelay> list = labExitPointRelayService.selectLabExitPointRelayList(labExitPointRelay);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 新增逃生线路主
+     */
+    @ApiOperation(value = "新增逃生灯关联的继电器")
+    @Log(title = "新增逃生灯关联的继电器", businessType = BusinessType.INSERT)
+    @PostMapping
+    public ResultData add(@RequestBody LabExitPointRelay labExitPointRelay) {
+        return ResultData.result(labExitPointRelayService.insertLabExitPointRelay(labExitPointRelay));
+    }
+
+}

+ 43 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeContentController.java

@@ -0,0 +1,43 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.service.ILabNewnoticeContentService;
+import com.zd.model.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@RestController
+@Api(tags = "新通知内容")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/newnoticeContent")
+public class LabNewnoticeContentController extends BaseController <LabNewnoticeContent> {
+
+    @Autowired
+    private ILabNewnoticeContentService labNewnoticeContentService;
+
+    /**
+     * 查询新通知内容列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询新通知内容列表")
+    public TableDataInfo <LabNewnoticeContent> list(LabNewnoticeContent labNewnoticeContent) {
+        startPage();
+        List <LabNewnoticeContent> list = labNewnoticeContentService.selectLabNewnoticeContentList(labNewnoticeContent);
+        return getDataTable(list);
+    }
+}

+ 43 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeGroupController.java

@@ -0,0 +1,43 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabNewnoticeGroup;
+import com.zd.laboratory.service.ILabNewnoticeGroupService;
+import com.zd.model.domain.ResultData;
+import com.zd.model.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@RestController
+@Api(tags = "通知组")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/newnoticeGroup")
+public class LabNewnoticeGroupController extends BaseController <LabNewnoticeGroup> {
+
+    @Autowired
+    private ILabNewnoticeGroupService labNewnoticeGroupService;
+
+    /**
+     * 查询通知组列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询通知组列表")
+    public ResultData <List<LabNewnoticeGroup>> list(LabNewnoticeGroup LabNewnoticeGroup) {
+        List <LabNewnoticeGroup> list = labNewnoticeGroupService.selectLabNewnoticeGroupList(LabNewnoticeGroup);
+        return ResultData.success(list);
+    }
+}

+ 45 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeModeController.java

@@ -0,0 +1,45 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.annotation.Log;
+import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabNewnoticeMode;
+import com.zd.laboratory.domain.vo.LabExitLineVertexVo;
+import com.zd.laboratory.domain.vo.LabNewnoticeSendmodeVo;
+import com.zd.laboratory.service.ILabNewnoticeModeService;
+import com.zd.model.domain.ResultData;
+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.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@RestController
+@Api(tags = "发送类型")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/newnoticeMode")
+public class LabNewnoticeModeController extends BaseController <LabNewnoticeMode> {
+
+    @Autowired
+    private ILabNewnoticeModeService labNewnoticeModeService;
+
+    /**
+     * 查询发送方式列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询发送方式列表")
+    public ResultData <List<LabNewnoticeMode>> list(LabNewnoticeMode labNewnoticeMode) {
+        List <LabNewnoticeMode> list = labNewnoticeModeService.selectLabNewnoticeModeList(labNewnoticeMode);
+        return ResultData.success(list);
+    }
+
+}

+ 58 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabNewnoticeSendmodeController.java

@@ -0,0 +1,58 @@
+package com.zd.laboratory.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.zd.common.core.annotation.Log;
+import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.web.controller.BaseController;
+import com.zd.common.swagger.config.Knife4jConfiguration;
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+import com.zd.laboratory.domain.vo.LabNewnoticeSendmodeVo;
+import com.zd.laboratory.service.ILabNewnoticeContentService;
+import com.zd.laboratory.service.ILabNewnoticeSendmodeService;
+import com.zd.model.domain.ResultData;
+import com.zd.model.page.TableDataInfo;
+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.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@RestController
+@Api(tags = "发送方式")
+@ApiSupport(author = Knife4jConfiguration.Author.CYL)
+@RequestMapping("/newnoticeSendmode")
+public class LabNewnoticeSendmodeController extends BaseController <LabNewnoticeSendmode>{
+
+    @Autowired
+    private ILabNewnoticeSendmodeService labNewnoticeSendmodeService;
+
+    /**
+     * 查询发送方式列表
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "查询发送方式列表")
+    public TableDataInfo <LabNewnoticeSendmode> list(LabNewnoticeSendmode labNewnoticeSendmode) {
+        startPage();
+        List <LabNewnoticeSendmode> list = labNewnoticeSendmodeService.selectLabNewnoticeSendmodeList(labNewnoticeSendmode);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 新增发送方式
+     */
+    @ApiOperation(value = "新增发送方式")
+    @Log(title = "发送方式", businessType = BusinessType.INSERT)
+    @PostMapping
+    public ResultData add(@RequestBody List<LabNewnoticeSendmodeVo> labNewnoticeSendmodeVoList) {
+        return ResultData.result(labNewnoticeSendmodeService.insertLabNewnoticeSendmode(labNewnoticeSendmodeVoList));
+    }
+}

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

@@ -120,6 +120,17 @@ public class LabSubjectController extends BaseController {
         return ResultData.success(list);
     }
 
+
+    @PostMapping("/list/listAdminByLayout")
+    public ResultData listAdminByLayout(@RequestBody LabSubject labSubject) {
+        //获取当前登录用户所属学校和学院的deptid
+        R<List<Long>> listdeptids = remoteUserService.getLogingUserDeptids();
+        List<Long> deptIds= listdeptids.getData();
+        labSubject.setDeptIds(deptIds);
+        List<LabSubject> list = labSubjectService.selectLabSubjectListByLayout(labSubject);
+        return ResultData.success(list);
+    }
+
     /**
      * 查询登录用户是否是实验室管理员(数据权限)
      */

+ 42 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabBuildFloor.java

@@ -0,0 +1,42 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+@ApiModel("楼栋(楼层)")
+@Data
+public class LabBuildFloor extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 楼栋或楼层名称 */
+    @ApiModelProperty(value = "楼栋或楼层名称")
+    private String name;
+
+    /** 结构类型,1是院校,2是楼栋,3是楼层 */
+    @ApiModelProperty(value = "结构类型,1是院校,2是楼栋,3是楼层")
+    private Integer type;
+
+    /** 楼栋或楼层图标 */
+    @ApiModelProperty(value = "楼栋或楼层图标")
+    private String imgUrl;
+
+    /** 上级楼栋id,如果有,就是楼层,没有就是楼栋 */
+    @ApiModelProperty(value = "上级楼栋id,如果有,就是楼层,没有就是楼栋")
+    private Long parentId;
+
+    /** 排序序号 */
+    @ApiModelProperty(value = "排序序号")
+    private Integer sortNo;
+}

+ 50 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabBuildFloorLayout.java

@@ -0,0 +1,50 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+@ApiModel("布局图")
+@Data
+public class LabBuildFloorLayout extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 楼栋id */
+    @ApiModelProperty(value = "楼栋id")
+    private Long buildId;
+
+    /** 楼层id */
+    @ApiModelProperty(value = "楼层id")
+    private Long floorId;
+
+    /** 实验室id */
+    @ApiModelProperty(value = "实验室id")
+    private Long subId;
+
+    /** 房间号 */
+    @ApiModelProperty(value = "房间号")
+    private String roomNum;
+
+    /** 房间名称 */
+    @ApiModelProperty(value = "房间名称")
+    private String roomName;
+
+    /** 房间类型,1是实验室,0是其他 */
+    @ApiModelProperty(value = "房间类型,1是实验室,0是其他")
+    private Integer roomType;
+
+    /** 点名称 */
+    @ApiModelProperty(value = "点名称")
+    private String pointName;
+}

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

@@ -0,0 +1,51 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/3
+ */
+@ApiModel("逃生线路顶点")
+@Data
+public class LabExitLineVertex  extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 所属教学楼id */
+    @ApiModelProperty(value = "所属教学楼id")
+    private Long buildId;
+
+    /** 楼层id */
+    @ApiModelProperty(value = "楼层id")
+    private Long floorId;
+
+    /** 关系数据维护 */
+    @ApiModelProperty(value = "关系数据维护")
+    private String relationalData;
+
+    /** 页面布局相关数据 */
+    @ApiModelProperty(value = "页面布局相关数据")
+    private String layoutData;
+
+    /** 上传布局图地址 */
+    @ApiModelProperty(value = "上传布局图地址")
+    private String imgUrl;
+
+    /** 画布宽 */
+    @ApiModelProperty(value = "画布宽")
+    private Integer canvasWidth;
+
+    /** 画布高 */
+    @ApiModelProperty(value = "画布高")
+    private Integer canvasHeight;
+}

+ 55 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabExitPointRelay.java

@@ -0,0 +1,55 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/3
+ */
+@ApiModel("逃生灯关联的继电器")
+@Data
+public class LabExitPointRelay extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 所属教学楼id */
+    @ApiModelProperty(value = "所属教学楼id")
+    private Long buildId;
+
+    /** 楼层id */
+    @ApiModelProperty(value = "楼层id")
+    private Long floorId;
+
+    /** 点名称 */
+    @ApiModelProperty(value = "点名称")
+    private String pointName;
+
+    /** 继电器类型,1是老继电器,2是新继电器 */
+    @ApiModelProperty(value = "继电器类型,1是老继电器,2是新继电器")
+    private Integer relayType;
+
+    /** 继电器编号 */
+    @ApiModelProperty(value = "继电器编号")
+    private String relayCode;
+
+    /** 继电器路数 */
+    @ApiModelProperty(value = "继电器路数")
+    private Integer relayBit;
+
+    /** 配置名称 */
+    @ApiModelProperty(value = "配置名称")
+    private String configName;
+
+    /** 配置状态 */
+    @ApiModelProperty(value = "配置状态")
+    private String configStatus;
+}

+ 42 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeContent.java

@@ -0,0 +1,42 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@ApiModel("新通知内容")
+@Data
+public class LabNewnoticeContent extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 通知方式表id */
+    @ApiModelProperty(value = "通知方式表id")
+    private Long noticeModeId;
+
+    /** 通知类型:1是文字,2是变量 */
+    @ApiModelProperty(value = "通知类型:1是文字,2是变量")
+    private Integer noticeType;
+
+    /** 变量级别:1是一般变量,2是比较变量 */
+    @ApiModelProperty(value = "变量级别:1是一般变量,2是比较变量")
+    private Integer variableLevel;
+
+    /** 通知内容 */
+    @ApiModelProperty(value = "通知内容")
+    private String noticeContent;
+
+    /** 顺序序号 */
+    @ApiModelProperty(value = "顺序序号")
+    private Integer sortNum;
+}

+ 35 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeGroup.java

@@ -0,0 +1,35 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@ApiModel("通知组")
+@Data
+public class LabNewnoticeGroup extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 组名称 */
+    @ApiModelProperty(value = "组名称")
+    private String groupName;
+
+    /** 组值,区分类型 */
+    @ApiModelProperty(value = "组值,区分类型")
+    private Integer groupValue;
+
+    /** 发送方式,参考mode表,这里可能存在多个方式 */
+    @ApiModelProperty(value = "发送方式,参考mode表,这里可能存在多个方式")
+    private String sendMode;
+
+}

+ 31 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeMode.java

@@ -0,0 +1,31 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@ApiModel("发送类型")
+@Data
+public class LabNewnoticeMode extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 通知方式名称 */
+    @ApiModelProperty(value = "通知方式名称")
+    private String noticeModeName;
+
+    /** 通知方式值 */
+    @ApiModelProperty(value = "通知方式值")
+    private String noticeModeValue;
+
+}

+ 31 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/LabNewnoticeSendmode.java

@@ -0,0 +1,31 @@
+package com.zd.laboratory.domain;
+
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@ApiModel("发送方式")
+@Data
+public class LabNewnoticeSendmode extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long id;
+
+    /** 关联的组id */
+    @ApiModelProperty(value = "关联的组id")
+    private Long groupId;
+
+    /** 发送方式,参考mode表,这里可能存在多个方式 */
+    @ApiModelProperty(value = "发送方式,参考mode表,这里可能存在多个方式")
+    private String sendMode;
+
+}

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

@@ -0,0 +1,40 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.model.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+@ApiModel("布局图")
+@Data
+public class LabBuildFloorLayoutVo extends LabBuildFloorLayout {
+    private static final long serialVersionUID = 1L;
+
+    /** 房间类型名称 */
+    @ApiModelProperty(value = "房间类型名称")
+    private String roomTypeName;
+
+    /** 楼栋名称 */
+    @ApiModelProperty(value = "楼栋名称")
+    private String buildName;
+
+    /** 楼层名称 */
+    @ApiModelProperty(value = "楼层名称")
+    private String floorName;
+
+    /** 实验室名称 */
+    @ApiModelProperty(value = "实验室名称")
+    private String subName;
+
+    /** 布局图数据信息 */
+    @ApiModelProperty(value = "布局图数据信息")
+    private LabExitLineVertex exitLineVertex;
+}

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

@@ -0,0 +1,25 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/17
+ */
+@ApiModel("楼栋(楼层)")
+@Data
+public class LabBuildFloorPage{
+
+    private Long total;
+
+    private List <LabBuildFloor> labBuildList = new LabBuildList<LabBuildFloor>();
+
+}

+ 22 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildFloorVo.java

@@ -0,0 +1,22 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/17
+ */
+@ApiModel("楼栋(楼层)")
+@Data
+public class LabBuildFloorVo extends LabBuildFloor {
+
+    private List <LabBuildFloorVo> buildFloorVoList = new ArrayList <>();
+
+}

+ 33 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildList.java

@@ -0,0 +1,33 @@
+package com.zd.laboratory.domain.vo;
+
+import com.github.pagehelper.PageInfo;
+import com.zd.laboratory.domain.LabBuildFloor;
+import com.zd.model.constant.HttpStatus;
+import com.zd.model.page.TableDataInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.awt.*;
+import java.util.ArrayList;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/17
+ */
+@ApiModel("楼栋(楼层)")
+@Data
+public class LabBuildList<T> extends ArrayList {
+
+    /**
+     * 处理泛型列表
+     */
+    public LabBuildList <T> getDataTable(java.util.List <? extends T> list) {
+        LabBuildList<T> rspData = new LabBuildList();
+        rspData.addAll(list);
+        return rspData;
+    }
+
+}

+ 32 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabBuildListVo.java

@@ -0,0 +1,32 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.awt.*;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/17
+ */
+@ApiModel("楼栋")
+@Data
+public class LabBuildListVo extends LabBuildFloor {
+
+    /** 楼层数 */
+    @ApiModelProperty(value = "楼层数")
+    private Integer floorNum;
+
+    /** 房间数 */
+    @ApiModelProperty(value = "房间数")
+    private Integer roomNum;
+
+    /** 院校名称 */
+    @ApiModelProperty(value = "院校名称")
+    private String groupName;
+
+}

+ 36 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineEvacuationVo.java

@@ -0,0 +1,36 @@
+package com.zd.laboratory.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/3
+ */
+@ApiModel("逃生线路顶点")
+@Data
+public class LabExitLineEvacuationVo {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 所属教学楼id */
+    @ApiModelProperty(value = "所属教学楼id")
+    private Long buildId;
+
+    /** 楼层id */
+    @ApiModelProperty(value = "楼层id")
+    private Long floorId;
+
+    /** 实验室id */
+    @ApiModelProperty(value = "实验室id")
+    private Long subId;
+
+    /** 起始点名称 */
+    @ApiModelProperty(value = "起始点名称")
+    private String startPointName;
+}

+ 43 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabExitLineJoinPointVO.java

@@ -0,0 +1,43 @@
+package com.zd.laboratory.domain.vo;
+
+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/11/11
+ */
+@ApiModel("逃生线路")
+@Data
+public class LabExitLineJoinPointVO {
+
+    /** 所属教学楼id */
+    @ApiModelProperty(value = "所属教学楼id")
+    private Long buildId;
+
+    @ApiModelProperty(value = "楼层id")
+    private Long floorId;
+
+    @ApiModelProperty(value = "点名称")
+    private String pointName;
+
+    @ApiModelProperty(value = "点距离")
+    private Integer pointDistance;
+
+    @ApiModelProperty(value = "起点名称")
+    private String startPointName;
+
+    @ApiModelProperty(value = "点属性")
+    private Integer pointAttribute;
+
+    @ApiModelProperty(value = "房间或者灯的名称,通过房间或者灯的pointName寻找这个key")
+    private String key;
+
+    private List <LabExitLineJoinPointVO> pointVOList = new ArrayList <>();
+}

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

@@ -0,0 +1,59 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.LabExitPointRelay;
+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/11/3
+ */
+@ApiModel("逃生线路顶点")
+@Data
+public class LabExitLineVertexVo {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 所属教学楼id */
+    @ApiModelProperty(value = "所属教学楼id")
+    private Long buildId;
+
+    /** 楼层id */
+    @ApiModelProperty(value = "楼层id")
+    private Long floorId;
+
+    /** 关系数据维护 */
+    @ApiModelProperty(value = "关系数据维护")
+    private List <LabExitLineJoinPointVO> relationalData = new ArrayList <>();
+
+    /** 页面布局相关数据 */
+    @ApiModelProperty(value = "页面布局相关数据")
+    private String layoutData;
+
+    /** 逃生点和实验室绑定关系 */
+    @ApiModelProperty(value = "逃生点和实验室绑定关系")
+    private List<LabBuildFloorLayout> buildFloorLayouts = new ArrayList <>();
+
+    /** 点和继电器绑定关系 */
+    @ApiModelProperty(value = "逃生点和实验室绑定关系")
+    private List<LabExitPointRelay> exitPointRelayList = new ArrayList <>();
+
+    /** 布局图地址 */
+    @ApiModelProperty(value = "布局图地址")
+    private String imgUrl;
+
+    /** 画布宽 */
+    @ApiModelProperty(value = "画布宽")
+    private Integer canvasWidth;
+
+    /** 画布高 */
+    @ApiModelProperty(value = "画布高")
+    private Integer canvasHeight;
+}

+ 30 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabFloorListVo.java

@@ -0,0 +1,30 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/17
+ */
+@ApiModel("楼层")
+@Data
+public class LabFloorListVo extends LabBuildFloor {
+
+    /** 页面布局相关数据 */
+    @ApiModelProperty(value = "页面布局相关数据")
+    private String layoutData;
+
+    /** 院校名称 */
+    @ApiModelProperty(value = "院校名称")
+    private String groupName;
+
+    /** 楼栋名称 */
+    @ApiModelProperty(value = "楼栋名称")
+    private String buildName;
+
+}

+ 26 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabNewnoticeSendmodeVo.java

@@ -0,0 +1,26 @@
+package com.zd.laboratory.domain.vo;
+
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+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/11/29
+ */
+@ApiModel("发送方式VO")
+@Data
+public class LabNewnoticeSendmodeVo extends LabNewnoticeSendmode {
+    private static final long serialVersionUID = 1L;
+
+    /** 通知内容 */
+    @ApiModelProperty(value = "通知内容")
+    private List <LabNewnoticeContent> contentList = new ArrayList <>();
+}

+ 67 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabBuildFloorLayoutMapper.java

@@ -0,0 +1,67 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/18
+ */
+public interface LabBuildFloorLayoutMapper {
+
+    /**
+     * 查询布局图列表
+     *
+     * @param labBuildFloorLayout 布局图
+     * @return 布局图集合
+     */
+    public List <LabBuildFloorLayoutVo> selectLabBuildFloorLayoutList(LabBuildFloorLayout labBuildFloorLayout);
+
+
+    /**
+     * 查询布局图
+     *
+     * @param id 布局图主键
+     * @return 布局图信息
+     */
+    public LabBuildFloorLayoutVo selectLabBuildFloorLayoutById(Long id);
+
+    /**
+     * 新增布局图
+     *
+     * @param labBuildFloorLayout 布局图
+     * @return 结果
+     */
+    public int insertLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout);
+
+    /**
+     * 修改布局图
+     *
+     * @param labBuildFloorLayout 布局图
+     * @return 结果
+     */
+    public int updateLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout);
+
+
+    /**
+     * 删除布局图点和实验室id关系数据
+     *
+     * @param labBuildFloorLayout 布局图点和实验室id关系
+     * @return 结果
+     */
+    public int deleteLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout);
+
+
+    /**
+     * 删除布局图
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteLabBuildFloorLayoutByIds(Long[] ids);
+
+}

+ 75 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabBuildFloorMapper.java

@@ -0,0 +1,75 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo;
+import com.zd.laboratory.domain.vo.LabBuildListVo;
+import com.zd.laboratory.domain.vo.LabFloorListVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+public interface LabBuildFloorMapper {
+
+    /**
+     * 查询楼栋楼层列表
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 楼栋楼层集合
+     */
+    public List <LabBuildFloor> selectLabBuildFloorList(LabBuildFloor labBuildFloor);
+
+    /**
+     * 查询楼栋楼层
+     *
+     * @param id 楼栋楼层主键
+     * @return 楼栋楼层信息
+     */
+    public LabBuildFloor selectLabBuildFloorById(Long id);
+
+    /**
+     * 新增楼栋楼层
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 结果
+     */
+    public int insertLabBuildFloor(LabBuildFloor labBuildFloor);
+
+    /**
+     * 修改楼栋楼层
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 结果
+     */
+    public int updateLabBuildFloor(LabBuildFloor labBuildFloor);
+
+    /**
+     * 查询楼栋列表
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 楼栋楼层集合
+     */
+    public List <LabBuildListVo> getTreeBuildList(LabBuildFloor labBuildFloor);
+
+
+    /**
+     * 查询楼层列表
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 楼层集合
+     */
+    public List <LabFloorListVo> getTreeFloorList(LabBuildFloor labBuildFloor);
+
+
+    /**
+     * 删除布局图
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteLabBuildFloorByIds(Long[] ids);
+}

+ 84 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabExitLineVertexMapper.java

@@ -0,0 +1,84 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabExitLine;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.vo.LabExitLineVO;
+
+import java.util.List;
+
+/**
+ * 逃生线路主Mapper接口
+ *
+ * @author zd
+ * @date 2022-01-25
+ */
+public interface LabExitLineVertexMapper
+{
+    /**
+     * 查询逃生线路主
+     *
+     * @param id 逃生线路主主键
+     * @return 逃生线路主
+     */
+    public LabExitLineVertex selectLabExitLineVertexById(Long id);
+
+    /**
+     * 查询逃生线路主列表
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 逃生线路主集合
+     */
+    public List<LabExitLineVertex> selectLabExitLineVertexList(LabExitLineVertex labExitLineVertex);
+
+
+    /**
+     * 新增逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 结果
+     */
+    public int insertLabExitLineVertex(LabExitLineVertex labExitLineVertex);
+
+    /**
+     * 修改逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 结果
+     */
+    public int updateLabExitLineVertex(LabExitLineVertex labExitLineVertex);
+
+    /**
+     * 删除逃生线路主
+     *
+     * @param id 逃生线路主主键
+     * @return 结果
+     */
+    public int deleteLabExitLineVertexById(Long id);
+
+    /**
+     * 批量删除逃生线路主
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteLabExitLineVertexByIds(Long[] ids);
+
+
+    /**
+     * 删除逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主主键
+     * @return 结果
+     */
+    public int deleteLabExitLineVertexByFloorId(LabExitLineVertex labExitLineVertex);
+
+
+
+    /**
+     * 查询布局图信息
+     *
+     * @param labExitLineVertex 布局图
+     * @return 布局图
+     */
+    public List<LabExitLineVertex> getExitLineVertexList(LabExitLineVertex labExitLineVertex);
+}

+ 49 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabExitPointRelayMapper.java

@@ -0,0 +1,49 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabExitPointRelay;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/11
+ */
+public interface LabExitPointRelayMapper {
+
+    /**
+     * 查询逃生灯关联的继电器列表
+     *
+     * @param labExitPointRelay 逃生灯关联的继电器
+     * @return 逃生灯关联的继电器集合
+     */
+    public List <LabExitPointRelay> selectLabExitPointRelayList(LabExitPointRelay labExitPointRelay);
+
+
+    /**
+     * 新增逃生灯关联的继电器
+     *
+     * @param labExitPointRelay 逃生灯关联的继电器
+     * @return 结果
+     */
+    public int insertLabExitPointRelay(LabExitPointRelay labExitPointRelay);
+
+
+    /**
+     * 修改逃生灯关联的继电器
+     *
+     * @param labExitPointRelay 逃生灯关联的继电器
+     * @return 结果
+     */
+    public int updateLabExitPointRelay(LabExitPointRelay labExitPointRelay);
+
+
+    /**
+     * 删除点和继电器绑定关系
+     *
+     * @param labExitPointRelay 点和继电器绑定关系
+     * @return 结果
+     */
+    public int deleteLabExitPointRelay(LabExitPointRelay labExitPointRelay);
+}

+ 48 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeContentMapper.java

@@ -0,0 +1,48 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+public interface LabNewnoticeContentMapper {
+
+    /**
+     * 查询新通知内容列表
+     *
+     * @param labNewnoticeContent 新通知内容
+     * @return 新通知内容集合
+     */
+    public List <LabNewnoticeContent> selectNewnoticeContentList(LabNewnoticeContent labNewnoticeContent);
+
+    /**
+     * 根据主键集合查询新通知内容列表
+     *
+     * @param ids 主键集合
+     * @return 新通知内容集合
+     */
+    List<LabNewnoticeContent> getListByIds(List<Long> ids);
+
+    /**
+     * 新增新通知内容
+     *
+     * @param labNewnoticeContent 新通知内容
+     * @return 结果
+     */
+    public int insertLabNewnoticeContent(LabNewnoticeContent labNewnoticeContent);
+
+
+    /**
+     * 批量删除新通知内容
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSendContentListByIds(List<Long> ids);
+}

+ 33 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeGroupMapper.java

@@ -0,0 +1,33 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.LabNewnoticeGroup;
+import com.zd.laboratory.domain.LabNewnoticeMode;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+public interface LabNewnoticeGroupMapper {
+
+    /**
+     * 查询通知组列表
+     *
+     * @param labNewnoticeGroup 通知组
+     * @return 通知组集合
+     */
+    public List <LabNewnoticeGroup> selectNewnoticeGroupList(LabNewnoticeGroup labNewnoticeGroup);
+
+
+    /**
+     * 修改通知组
+     *
+     * @param labNewnoticeGroup 通知组
+     * @return 结果
+     */
+    public int updateNewnoticeGroup(LabNewnoticeGroup labNewnoticeGroup);
+}

+ 24 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeModeMapper.java

@@ -0,0 +1,24 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabNewnoticeMode;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+public interface LabNewnoticeModeMapper {
+
+    /**
+     * 查询发送类型列表
+     *
+     * @param labNewnoticeMode 发送类型
+     * @return 发送类型集合
+     */
+    public List <LabNewnoticeMode> selectNewnoticeModeList(LabNewnoticeMode labNewnoticeMode);
+
+}

+ 43 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabNewnoticeSendmodeMapper.java

@@ -0,0 +1,43 @@
+package com.zd.laboratory.mapper;
+
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+public interface LabNewnoticeSendmodeMapper {
+
+    /**
+     * 查询发送方式列表
+     *
+     * @param labNewnoticeSendmode 发送方式
+     * @return 发送方式集合
+     */
+    public List <LabNewnoticeSendmode> selectNewnoticeSendModeList(LabNewnoticeSendmode labNewnoticeSendmode);
+
+
+
+    /**
+     * 新增发送方式
+     *
+     * @param labNewnoticeSendmode 发送方式
+     * @return 结果
+     */
+    public int insertLabNewnoticeSendmode(LabNewnoticeSendmode labNewnoticeSendmode);
+
+
+    /**
+     * 批量删除发送方式
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSendmodeListByIds(List<Long> ids);
+}

+ 9 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSubjectMapper.java

@@ -73,6 +73,15 @@ public interface LabSubjectMapper {
      * @return
      */
     public List<LabSubject> selectLabSubjectListByadminidNotnull(LabSubject labSubject);
+
+    /***
+     * 查询关联布局图的实验室
+     * @param labSubject
+     * @return
+     */
+    public List<LabSubject> selectLabSubjectListByLayout(LabSubject labSubject);
+
+
     /**
      * 查询实验室列表VO-数据权限
      *

+ 59 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabBuildFloorLayoutService.java

@@ -0,0 +1,59 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+public interface ILabBuildFloorLayoutService {
+
+    /**
+     * 查询布局图列表
+     *
+     * @param labBuildFloorLayout 布局图
+     * @return 布局图集合
+     */
+    public List <LabBuildFloorLayoutVo> selectLabBuildFloorLayoutList(LabBuildFloorLayout labBuildFloorLayout);
+
+    /**
+     * 查询布局图
+     *
+     * @param id 布局图主键
+     * @return 布局图信息
+     */
+    public LabBuildFloorLayoutVo selectLabBuildFloorLayoutById(Long id);
+
+    /**
+     * 新增布局图
+     *
+     * @param labBuildFloorLayout 布局图
+     * @return 结果
+     */
+    public int insertLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout);
+
+    /**
+     * 修改布局图
+     *
+     * @param labBuildFloorLayout 布局图
+     * @return 结果
+     */
+    public int updateLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout);
+
+
+    /**
+     * 批量删除逃生线路主
+     *
+     * @param ids 需要删除的逃生线路主主键集合
+     * @return 结果
+     */
+    public int deleteLabBuildFloorLayoutByIds(Long[] ids);
+
+
+}

+ 79 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabBuildFloorService.java

@@ -0,0 +1,79 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import com.zd.laboratory.domain.vo.LabBuildFloorPage;
+import com.zd.laboratory.domain.vo.LabBuildFloorVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+public interface ILabBuildFloorService {
+
+    /**
+     * 查询楼栋楼层列表
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 楼栋楼层集合
+     */
+    public List <LabBuildFloor> selectLabBuildFloorList(LabBuildFloor labBuildFloor);
+
+
+    /**
+     * 新增楼栋楼层
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 结果
+     */
+    public int insertLabBuildFloor(LabBuildFloor labBuildFloor);
+
+    /**
+     * 修改楼栋楼层
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 结果
+     */
+    public int updateLabBuildFloor(LabBuildFloor labBuildFloor);
+
+
+    /**
+     * 查询楼栋楼层tree列表
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 楼栋楼层集合
+     */
+    public List<LabBuildFloorVo> getTreeList(LabBuildFloor labBuildFloor);
+
+
+    /**
+     * 查询楼栋(楼层)子集列表
+     *
+     * @param labBuildFloor 楼栋楼层
+     * @return 楼栋楼层集合
+     */
+    public LabBuildFloorPage getTreeSonList(LabBuildFloor labBuildFloor);
+
+
+
+    /**
+     * 批量删除楼栋(楼层)
+     *
+     * @param ids 需要删除的主键集合
+     * @return 结果
+     */
+    public int deleteLabBuildFloorByIds(Long[] ids);
+
+
+    /**
+     * 修改楼栋楼层sortNum
+     *
+     * @param labBuildFloorList 楼栋楼层
+     * @return 结果
+     */
+    public int updateSortNum(List<LabBuildFloor> labBuildFloorList);
+
+}

+ 79 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabExitLineVertexService.java

@@ -0,0 +1,79 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabExitLine;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.vo.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 逃生线路顶点Service接口
+ *
+ * @author zd
+ * @date 2022-11-3
+ */
+public interface ILabExitLineVertexService
+{
+    /**
+     * 查询逃生线路主
+     *
+     * @param id 逃生线路主主键
+     * @return 逃生线路主
+     */
+    public LabExitLineVertex selectLabExitLineVertexById(Long id);
+
+
+    /**
+     * 查询逃生线路主列表
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 逃生线路主集合
+     */
+    public List<LabExitLineVertex> selectLabExitLineVertexList(LabExitLineVertex labExitLineVertex);
+
+
+    /**
+     * 查询逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主主键
+     * @return 逃生线路主
+     */
+    public int getCalculationLine(LabExitLineVertex labExitLineVertex);
+
+
+    /**
+     * 查询逃生线路主
+     *
+     * @param labExitLineEvacuationVo 逃生线路主主键
+     * @return 逃生线路主
+     */
+    public Map <String,Object> executeEvacuation(LabExitLineEvacuationVo labExitLineEvacuationVo);
+
+    /**
+     * 新增逃生线路主
+     *
+     * @param lineVertexVo 逃生线路主
+     * @return 结果
+     */
+    public int insertLabExitLineVertex(LabExitLineVertexVo lineVertexVo);
+
+    /**
+     * 修改逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 结果
+     */
+    public int updateLabExitLineVertex(LabExitLineVertex labExitLineVertex);
+
+    /**
+     * 批量删除逃生线路主
+     *
+     * @param ids 需要删除的逃生线路主主键集合
+     * @return 结果
+     */
+    public int deleteLabExitLineVertexByIds(Long[] ids);
+
+
+}

+ 42 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabExitPointRelayService.java

@@ -0,0 +1,42 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.LabExitPointRelay;
+import com.zd.laboratory.domain.vo.LabExitLineVertexVo;
+
+import java.util.List;
+
+/**
+ * 逃生灯关联的继电器Service接口
+ *
+ * @author cyl
+ * @date 2022/11/11
+ */
+public interface ILabExitPointRelayService {
+
+    /**
+     * 查询逃生灯关联的继电器列表
+     *
+     * @param labExitPointRelay 逃生灯关联的继电器
+     * @return 逃生灯关联的继电器集合
+     */
+    public List <LabExitPointRelay> selectLabExitPointRelayList(LabExitPointRelay labExitPointRelay);
+
+
+    /**
+     * 新增逃生灯关联的继电器
+     *
+     * @param labExitPointRelay 逃生灯关联的继电器
+     * @return 结果
+     */
+    public int insertLabExitPointRelay(LabExitPointRelay labExitPointRelay);
+
+    /**
+     * 修改逃生灯关联的继电器
+     *
+     * @param labExitPointRelay 逃生灯关联的继电器
+     * @return 结果
+     */
+    public int updateLabExitPointRelay(LabExitPointRelay labExitPointRelay);
+
+}

+ 28 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeContentService.java

@@ -0,0 +1,28 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabBuildFloor;
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.domain.vo.LabBuildFloorPage;
+import com.zd.laboratory.domain.vo.LabBuildFloorVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+public interface ILabNewnoticeContentService {
+
+    /**
+     * 查询新通知内容列表
+     *
+     * @param labNewnoticeContent 新通知内容
+     * @return 新通知内容集合
+     */
+    public List <LabNewnoticeContent> selectLabNewnoticeContentList(LabNewnoticeContent labNewnoticeContent);
+
+
+
+}

+ 25 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeGroupService.java

@@ -0,0 +1,25 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabNewnoticeGroup;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+public interface ILabNewnoticeGroupService {
+
+    /**
+     * 查询通知组列表
+     *
+     * @param labNewnoticeGroup 通知组
+     * @return 通知组集合
+     */
+    public List <LabNewnoticeGroup> selectLabNewnoticeGroupList(LabNewnoticeGroup labNewnoticeGroup);
+
+
+
+}

+ 26 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeModeService.java

@@ -0,0 +1,26 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabNewnoticeMode;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+import com.zd.laboratory.domain.vo.LabExitLineVertexVo;
+import com.zd.laboratory.domain.vo.LabNewnoticeSendmodeVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+public interface ILabNewnoticeModeService {
+
+    /**
+     * 查询发送类型列表
+     *
+     * @param labNewnoticeMode 发送类型
+     * @return 发送类型集合
+     */
+    public List <LabNewnoticeMode> selectLabNewnoticeModeList(LabNewnoticeMode labNewnoticeMode);
+
+}

+ 33 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabNewnoticeSendmodeService.java

@@ -0,0 +1,33 @@
+package com.zd.laboratory.service;
+
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+import com.zd.laboratory.domain.vo.LabNewnoticeSendmodeVo;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+public interface ILabNewnoticeSendmodeService {
+
+    /**
+     * 查询发送方式列表
+     *
+     * @param labNewnoticeSendmode 发送方式
+     * @return 发送方式集合
+     */
+    public List <LabNewnoticeSendmode> selectLabNewnoticeSendmodeList(LabNewnoticeSendmode labNewnoticeSendmode);
+
+
+    /**
+     * 新增发送方式
+     *
+     * @param labNewnoticeSendmodeVoList 发送方式
+     * @return 结果
+     */
+    public int insertLabNewnoticeSendmode(List<LabNewnoticeSendmodeVo> labNewnoticeSendmodeVoList);
+
+}

+ 8 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSubjectService.java

@@ -224,6 +224,14 @@ public interface ILabSubjectService {
     public List<LabSubject> selectLabSubjectListByadminidNotnull(LabSubject labSubject);
 
 
+    /***
+     * 查询关联布局图的实验室
+     * @param labSubject
+     * @return
+     */
+    public List<LabSubject> selectLabSubjectListByLayout(LabSubject labSubject);
+
+
 
     /**
      * 查询实验室列表

+ 84 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabBuildFloorLayoutServiceImpl.java

@@ -0,0 +1,84 @@
+package com.zd.laboratory.service.impl;
+
+import com.zd.common.core.utils.DictUtils;
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo;
+import com.zd.laboratory.mapper.LabBuildFloorLayoutMapper;
+import com.zd.laboratory.mapper.LabExitLineVertexMapper;
+import com.zd.laboratory.service.ILabBuildFloorLayoutService;
+import com.zd.system.api.entity.SysDictData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/18
+ */
+@Service
+public class LabBuildFloorLayoutServiceImpl implements ILabBuildFloorLayoutService {
+
+    @Autowired
+    private LabBuildFloorLayoutMapper labBuildFloorLayoutMapper;
+
+    @Autowired
+    private LabExitLineVertexMapper labExitLineVertexMapper;
+
+    @Override
+    public List <LabBuildFloorLayoutVo> selectLabBuildFloorLayoutList(LabBuildFloorLayout labBuildFloorLayout) {
+        List<SysDictData> dictDatas = DictUtils.getDictCache("layout_room_type");
+        SysDictData sysDictData = new SysDictData();
+        sysDictData.setDictLabel("其他");
+        sysDictData.setDictValue("-99");
+        dictDatas.add(sysDictData);
+        Consumer<LabBuildFloorLayoutVo> consumer = c->Optional.ofNullable(dictDatas).orElseGet(Collections::emptyList)
+                .stream()
+                .filter(b->b.getDictValue().equals(c.getRoomType()+""))
+                .forEach(b->{
+                    c.setRoomTypeName(b.getDictLabel());
+                });
+        return Optional.ofNullable(labBuildFloorLayoutMapper.selectLabBuildFloorLayoutList(labBuildFloorLayout))
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .map(a->{
+                    consumer.accept(a);
+                    return a;
+                }).collect(Collectors.toList());
+    }
+
+    @Override
+    public LabBuildFloorLayoutVo selectLabBuildFloorLayoutById(Long id) {
+        LabBuildFloorLayoutVo floorLayoutVo = labBuildFloorLayoutMapper.selectLabBuildFloorLayoutById(id);
+        LabExitLineVertex labExitLineVertex = new LabExitLineVertex();
+        labExitLineVertex.setBuildId(floorLayoutVo.getBuildId());
+        labExitLineVertex.setFloorId(floorLayoutVo.getFloorId());
+        List<LabExitLineVertex> exitLineVertexList = labExitLineVertexMapper.selectLabExitLineVertexList(labExitLineVertex);
+        if(exitLineVertexList.size()>0){
+            floorLayoutVo.setExitLineVertex(exitLineVertexList.get(0));
+        }
+        return floorLayoutVo;
+    }
+
+    @Override
+    public int insertLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout) {
+        return labBuildFloorLayoutMapper.insertLabBuildFloorLayout(labBuildFloorLayout);
+    }
+
+    @Override
+    public int updateLabBuildFloorLayout(LabBuildFloorLayout labBuildFloorLayout) {
+        return labBuildFloorLayoutMapper.updateLabBuildFloorLayout(labBuildFloorLayout);
+    }
+
+    @Override
+    public int deleteLabBuildFloorLayoutByIds(Long[] ids) {
+        return labBuildFloorLayoutMapper.deleteLabBuildFloorLayoutByIds(ids);
+    }
+}

+ 171 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabBuildFloorServiceImpl.java

@@ -0,0 +1,171 @@
+package com.zd.laboratory.service.impl;
+
+import com.github.pagehelper.PageInfo;
+import com.zd.common.core.exception.ServiceException;
+import com.zd.common.core.utils.SaveUtil;
+import com.zd.laboratory.domain.LabBuildFloor;
+import com.zd.laboratory.domain.LabBuildFloorLayout;
+import com.zd.laboratory.domain.LabExitLineVertex;
+import com.zd.laboratory.domain.vo.*;
+import com.zd.laboratory.mapper.LabBuildFloorLayoutMapper;
+import com.zd.laboratory.mapper.LabBuildFloorMapper;
+import com.zd.laboratory.mapper.LabExitLineVertexMapper;
+import com.zd.laboratory.service.ILabBuildFloorService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/15
+ */
+@Service
+public class LabBuildFloorServiceImpl implements ILabBuildFloorService {
+
+    @Autowired
+    private LabBuildFloorMapper labBuildFloorMapper;
+
+    @Autowired
+    private LabExitLineVertexMapper labExitLineVertexMapper;
+
+    @Autowired
+    private LabBuildFloorLayoutMapper labBuildFloorLayoutMapper;
+
+    @Override
+    public List <LabBuildFloor> selectLabBuildFloorList(LabBuildFloor labBuildFloor) {
+        return labBuildFloorMapper.selectLabBuildFloorList(labBuildFloor);
+    }
+
+    @Override
+    public int insertLabBuildFloor(LabBuildFloor labBuildFloor) {
+        //设置其他公共字段
+        SaveUtil.setCommonAttr(labBuildFloor);
+        return labBuildFloorMapper.insertLabBuildFloor(labBuildFloor);
+    }
+
+    @Override
+    public int updateLabBuildFloor(LabBuildFloor labBuildFloor) {
+        return labBuildFloorMapper.updateLabBuildFloor(labBuildFloor);
+    }
+
+    @Override
+    public List <LabBuildFloorVo> getTreeList(LabBuildFloor labBuildFloor) {
+        List <LabBuildFloor> labBuildFloors = labBuildFloorMapper.selectLabBuildFloorList(labBuildFloor);
+        LabBuildFloorVo buildFloorVo = new LabBuildFloorVo();
+
+        //todo 返回父级下的所有子集列表
+        Function <LabBuildFloorVo,List <LabBuildFloorVo>> function = x->Optional.ofNullable(labBuildFloors).orElseGet(Collections::emptyList)
+                .stream()
+                .filter(y->y.getParentId()==x.getId())
+                .map(y->{
+                    LabBuildFloorVo buildFloorVo1 = new LabBuildFloorVo();
+                    BeanUtils.copyProperties(y,buildFloorVo1);
+                    return buildFloorVo1;
+                })
+                .sorted(Comparator.comparing(LabBuildFloorVo::getSortNo))
+                .collect(Collectors.toList());
+        //todo 赛选过滤院校数据
+        Optional.ofNullable(labBuildFloors).orElseGet(Collections::emptyList)
+                .stream()
+                .filter(a->a.getType()==1)
+                .map(a->{
+                    LabBuildFloorVo buildFloorVo1 = new LabBuildFloorVo();
+                    BeanUtils.copyProperties(a,buildFloorVo1);
+                    buildFloorVo.getBuildFloorVoList().add(buildFloorVo1);
+                    return buildFloorVo1;
+                })
+                .collect(Collectors.toList())
+                .stream()
+                .map(b->{
+                    b.getBuildFloorVoList().addAll(function.apply(b));
+                    return b;
+                }).flatMap(c->c.getBuildFloorVoList().parallelStream())
+                .forEach(d->{
+                    d.getBuildFloorVoList().addAll(function.apply(d));
+                });
+        //todo 重新给组织结构排序,因为上面的是并发收集数据
+        List <LabBuildFloorVo> collect = Optional.ofNullable(buildFloorVo.getBuildFloorVoList()).orElseGet(Collections::emptyList)
+                .stream()
+                .sorted(Comparator.comparing(LabBuildFloorVo::getSortNo))
+                .collect(Collectors.toList());
+
+        return collect;
+    }
+
+    @Override
+    public LabBuildFloorPage getTreeSonList(LabBuildFloor labBuildFloor) {
+        LabBuildFloorPage labBuildFloorPage = new LabBuildFloorPage();
+        if(labBuildFloor.getType().intValue()==1){
+            labBuildFloor.setParentId(labBuildFloor.getId());
+            List <LabBuildListVo> buildListVoList = labBuildFloorMapper.getTreeBuildList(labBuildFloor);
+            labBuildFloorPage.setTotal(new PageInfo(buildListVoList).getTotal());
+            labBuildFloorPage.setLabBuildList(new LabBuildList<LabBuildListVo>().getDataTable(buildListVoList));
+        }else if(labBuildFloor.getType().intValue()==2){
+            labBuildFloor.setParentId(labBuildFloor.getId());
+            List <LabFloorListVo> floorListVoList = labBuildFloorMapper.getTreeFloorList(labBuildFloor);
+            labBuildFloorPage.setTotal(new PageInfo(floorListVoList).getTotal());
+            labBuildFloorPage.setLabBuildList(new LabBuildList<LabFloorListVo>().getDataTable(floorListVoList));
+        }else if(labBuildFloor.getType().intValue()==3){
+            LabExitLineVertex labExitLineVertex = new LabExitLineVertex();
+            labExitLineVertex.setBuildId(labBuildFloor.getParentId());
+            labExitLineVertex.setFloorId(labBuildFloor.getId());
+            List<LabExitLineVertex> exitLineList = labExitLineVertexMapper.getExitLineVertexList(labExitLineVertex);
+            if(exitLineList.size()<1){
+                exitLineList.add(labExitLineVertex);
+            }
+            labBuildFloorPage.setTotal(new PageInfo(exitLineList).getTotal());
+            labBuildFloorPage.setLabBuildList(new LabBuildList<LabExitLineVertex>().getDataTable(exitLineList));
+        }
+        return labBuildFloorPage;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int deleteLabBuildFloorByIds(Long[] ids) {
+        LabBuildFloor buildFloor = labBuildFloorMapper.selectLabBuildFloorById(ids[0]);
+        if(buildFloor.getType()==3){
+            LabBuildFloorLayout labBuildFloorLayout = new LabBuildFloorLayout();
+            labBuildFloorLayout.setBuildId(buildFloor.getParentId());
+            labBuildFloorLayout.setFloorId(buildFloor.getId());
+            List <LabBuildFloorLayoutVo> layoutVoList = labBuildFloorLayoutMapper.selectLabBuildFloorLayoutList(labBuildFloorLayout);
+            if(layoutVoList.size()>0){
+                throw new ServiceException("当前节点下有绑定实验室数据,请确认移除实验室数据后再次操作!");
+            }
+            LabExitLineVertex labExitLineVertex = new LabExitLineVertex();
+            labExitLineVertex.setBuildId(buildFloor.getParentId());
+            labExitLineVertex.setFloorId(buildFloor.getId());
+            labExitLineVertexMapper.deleteLabExitLineVertexByFloorId(labExitLineVertex);
+            return labBuildFloorMapper.deleteLabBuildFloorByIds(ids);
+        }else{
+            LabBuildFloor labBuildFloor = new LabBuildFloor();
+            //这里查询当前数据的信息
+            labBuildFloor.setParentId(ids[0]);
+            List <LabBuildFloor> buildFloorList = labBuildFloorMapper.selectLabBuildFloorList(labBuildFloor);
+            if(buildFloorList.size()>0){
+                throw new ServiceException("当前节点下有子节点,请确认移除子节点后再次操作!");
+            }
+            return labBuildFloorMapper.deleteLabBuildFloorByIds(ids);
+        }
+    }
+
+    @Override
+    public int updateSortNum(List <LabBuildFloor> labBuildFloorList) {
+        Optional.ofNullable(labBuildFloorList)
+                .orElseGet(Collections::emptyList)
+                .parallelStream()
+                .forEach(a->{
+                    labBuildFloorMapper.updateLabBuildFloor(a);
+                });
+        return 1;
+    }
+}

+ 601 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitLineVertexServiceImpl.java

@@ -0,0 +1,601 @@
+package com.zd.laboratory.service.impl;
+
+import cn.hutool.core.date.StopWatch;
+import com.alibaba.fastjson.JSONArray;
+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.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.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;
+import com.zd.model.domain.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.LongAdder;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+/**
+ * 逃生线路顶点Service业务层处理
+ *
+ * @author zd
+ * @date 2022-11-3
+ */
+@Service
+public class LabExitLineVertexServiceImpl implements ILabExitLineVertexService {
+    private final static Logger logger = LoggerFactory.getLogger(LabExitLineVertexServiceImpl.class);
+
+    private int V; // 顶点的个数
+    private static int M = 65535;// 设置一个最大值
+
+    @Autowired
+    private LabExitLineVertexMapper labExitLineVertexMapper;
+
+    @Autowired
+    private LabExitPointRelayMapper labExitPointRelayMapper;
+
+    @Autowired
+    private SocketService socketService;
+
+    @Autowired
+    private LabAudioSynthesisMapper labAudioSynthesisMapper;
+
+    @Autowired
+    private RemoteSpeakService remoteSpeakService;
+
+    @Autowired
+    private TimeWaitConfigUtils timeWaitConfigUtils;
+
+    @Autowired
+    private LabBuildFloorLayoutMapper labBuildFloorLayoutMapper;
+
+
+    private static final Logger log = LoggerFactory.getLogger(LabExitLineVertexServiceImpl.class);
+
+    /**
+     * 查询逃生线路主
+     *
+     * @param id 逃生线路主主键
+     * @return 逃生线路主
+     */
+    @Override
+    public LabExitLineVertex selectLabExitLineVertexById(Long id) {
+        LabExitLineVertex labExitLineVO = labExitLineVertexMapper.selectLabExitLineVertexById(id);
+        return labExitLineVO;
+    }
+
+
+    /**
+     * 查询逃生线路主列表
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 逃生线路主
+     */
+    @Override
+    public List <LabExitLineVertex> selectLabExitLineVertexList(LabExitLineVertex labExitLineVertex) {
+        List <LabExitLineVertex> labExitLineVOList = labExitLineVertexMapper.selectLabExitLineVertexList(labExitLineVertex);
+
+        return labExitLineVOList;
+    }
+
+
+    /**
+     * 查询逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主主键
+     * @return 逃生线路主
+     */
+    @Override
+    public int getCalculationLine(LabExitLineVertex labExitLineVertex) {
+//        List<LabExitLineVertex> labExitLineVOList = labExitLineVertexMapper.selectLabExitLineVertexList(labExitLineVertex);
+//        if(labExitLineVOList.size()>0){
+//            String relationData = labExitLineVOList.get(0).getRelationalData();
+//            List <LabExitLineJoinPointVO> relationalData = JSONArray.parseArray(relationData, LabExitLineJoinPointVO.class);
+//            V=relationalData.size();
+//            ArrayList <Integer[][]> list=flody(relationalData);
+//            display_path(list,relationalData);
+//        }
+        return 1;
+    }
+
+
+    /**
+     * 查询逃生线路主
+     *
+     * @param labExitLineEvacuationVo 逃生线路Vo
+     * @return 逃生线路主
+     */
+    @Override
+    public Map <String, Object> executeEvacuation(LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        LabExitLineVertex labExitLineVertex = new LabExitLineVertex();
+        labExitLineVertex.setBuildId(labExitLineEvacuationVo.getBuildId());
+        labExitLineVertex.setFloorId(labExitLineEvacuationVo.getFloorId());
+        List <LabExitLineVertex> labExitLineVOList = labExitLineVertexMapper.selectLabExitLineVertexList(labExitLineVertex);
+        if (labExitLineVOList.size() > 0) {
+            String relationData = labExitLineVOList.get(0).getRelationalData();
+            List <LabExitLineJoinPointVO> newRelationalData = JSONArray.parseArray(relationData, LabExitLineJoinPointVO.class);
+            //调用坏点计算
+            badPoints(newRelationalData, labExitLineEvacuationVo);
+            //设置顶点数
+            V = newRelationalData.size();
+            //floyd计算顶点到各个点的线路
+            ArrayList <Integer[][]> list = flody(newRelationalData);
+            //这里需要在通过floyd计算一次原始数据,作为发生预案的楼层,只有一个疏散口,那么所有的实验室,都向这个疏散口撤离。
+            List <LabExitLineJoinPointVO> oldRelationalData = JSONArray.parseArray(relationData, LabExitLineJoinPointVO.class);
+            ArrayList <Integer[][]> oldList = flody(oldRelationalData);
+            //计算楼层各个实验室的逃生线路
+            Map <String, Object> joinPointVOS = displayPath(list, newRelationalData, labExitLineEvacuationVo, oldList, oldRelationalData);
+            return joinPointVOS;
+        }
+        return null;
+    }
+
+
+    //todo 计算坏点(目前只有发生预案的实验室需要标记为坏点),需要把非坏点关联坏点点位全部改成无限大
+    public void badPoints(List <LabExitLineJoinPointVO> newRelationalData, LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        Optional.ofNullable(newRelationalData).orElseGet(Collections::emptyList)
+                .parallelStream()
+                .filter(a -> !a.getPointName().equals(labExitLineEvacuationVo.getStartPointName()))
+                .forEach(a -> Optional.ofNullable(a.getPointVOList()).orElseGet(Collections::emptyList)
+                        .stream()
+                        .filter(b -> b.getPointName().equals(labExitLineEvacuationVo.getStartPointName()))
+                        .forEach(b -> b.setPointDistance(M))
+                );
+    }
+
+    //todo  计算完成的路线,灯的数据
+    public Map <String, Object> displayPath(ArrayList <Integer[][]> list, List <LabExitLineJoinPointVO> linePointVOList, LabExitLineEvacuationVo labExitLineEvacuationVo, ArrayList <Integer[][]> oldList, List <LabExitLineJoinPointVO> oldRelationalData) {
+
+        logger.info("当前线程:{}", Thread.currentThread().getName());
+
+        StopWatch sw = new StopWatch("queryLinePoint_TIME");
+        sw.start("调用异步任务");
+        //2.异步线程结果
+        List <CompletableFuture <Map <String, Object>>> completableFutures = new ArrayList <>();
+
+        Integer[][] path = list.get(0);
+        Integer[] chain = new Integer[V];
+        logger.info("orign->dist" + " dist " + " path");
+        for (int i = 0; i < V; i++) {
+            for (int j = 0; j < V; j++) {
+                if (i != j) {//只是避免了vi->vi的输出
+                    if (linePointVOList.get(i).getPointAttribute() == 4 && linePointVOList.get(i).getPointVOList().get(j).getPointAttribute() == 1) {
+                        CompletableFuture <Map <String, Object>> setCompletableFuture = optimalRoute(linePointVOList, path, chain, i, j, oldList, oldRelationalData);
+                        completableFutures.add(setCompletableFuture);
+                    }
+                }
+            }
+        }
+        sw.stop();
+        CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[completableFutures.size()])).join();
+        logger.info("子线程全部完成");
+
+        return filterLinePoint(completableFutures, labExitLineEvacuationVo.getStartPointName(), labExitLineEvacuationVo);
+    }
+
+    //todo 预案触发实验室的主线路到逃生点全部返回,其他实验室赛选过滤最优线路,如果和主线路有重叠或者逆向,需要移除重叠以后的数据点。
+    public Map <String, Object> filterLinePoint(List <CompletableFuture <Map <String, Object>>> completableFutures, final String startPointName, LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        //todo 断言名字是否相同
+        Predicate <String> checkPointName = x -> x.equals(startPointName);
+        List <List <LabExitLineJoinPointVO>> startPointList = new ArrayList <>();
+        Map <String, Integer> sortKeyMap = new LinkedHashMap <>();
+        Map <String, List <LabExitLineJoinPointVO>> otherPointMap = new LinkedHashMap <>();
+        Optional.ofNullable(completableFutures).orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(a -> {
+                    try {
+                        String pointName = (String) a.get().get("pointName");
+                        if (checkPointName.test(pointName)) {
+                            startPointList.add((List <LabExitLineJoinPointVO>) a.get().get("joinPointVOS"));
+                        } else {
+                            LabExitLineJoinPointVO pointDistanceVo = (LabExitLineJoinPointVO) a.get().get("pointDistanceVo");
+                            if (sortKeyMap.get(pointName) == null || sortKeyMap.get(pointName) > pointDistanceVo.getPointDistance()) {
+                                sortKeyMap.put(pointName, pointDistanceVo.getPointDistance());
+                                otherPointMap.put(pointName, (List <LabExitLineJoinPointVO>) a.get().get("joinPointVOS"));
+                            }
+                        }
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    } catch (ExecutionException e) {
+                        e.printStackTrace();
+                    }
+                });
+
+
+        //todo 将过滤好的otherPointMap转换成list
+        Function <Map <String, List <LabExitLineJoinPointVO>>, List <List <LabExitLineJoinPointVO>>> otherPointList =
+                a -> a.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
+
+        Map <String, Object> allPointMap = new LinkedHashMap <>();
+        joinLine(allPointMap, startPointList, labExitLineEvacuationVo).accept(otherPointList.apply(otherPointMap));
+        //todo 开启逃生灯绑定继电器的数据
+        openLightJoinRelay((Set <LabExitLineJoinPointVO>) allPointMap.get("lightPointSet"),labExitLineEvacuationVo);
+        return allPointMap;
+    }
+
+    /**
+     * 开启逃生灯关联的继电器
+     *
+     * @param oldLightPointSet 疏散线路的所有需要开启的灯
+     */
+    public void openLightJoinRelay(Set <LabExitLineJoinPointVO> oldLightPointSet,LabExitLineEvacuationVo labExitLineEvacuationVo){
+        //这里重新构建一个set,过滤主线路里面的一些重复数据
+        Set<LabExitLineJoinPointVO> lightPointList = Optional.ofNullable(oldLightPointSet).orElseGet(Collections::emptySet)
+                .stream().collect(Collectors.toSet());
+
+        LabExitPointRelay labExitPointRelay = new LabExitPointRelay();
+        labExitPointRelay.setBuildId(labExitLineEvacuationVo.getBuildId());
+        labExitPointRelay.setFloorId(labExitLineEvacuationVo.getFloorId());
+        List <LabExitPointRelay> labExitPointRelays = labExitPointRelayMapper.selectLabExitPointRelayList(labExitPointRelay);
+        //todo 这里需要两层for循环,比对点名称一样的,开启继电器开关
+        Consumer<LabExitPointRelay> consumer = a->Optional.ofNullable(lightPointList).orElseGet(Collections::emptySet)
+                .stream()
+                .filter(b->b.getPointName().equals(a.getPointName()))
+                .forEach(b->{
+                    //这里打卡继电器的开关
+                    socketService.sendCommand(Symbol.order.control, a.getRelayCode(), Symbol.command.open, a.getRelayBit());
+                    try {
+                        Thread.sleep(timeWaitConfigUtils.getWaitTime());
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                });
+        Optional.ofNullable(labExitPointRelays).orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(a->consumer.accept(a));
+        //todo 调用楼层的喇叭
+        openHorn(labExitLineEvacuationVo);
+    }
+
+    /**
+     * 开启喇叭播放音乐
+     *
+     * @param labExitLineEvacuationVo 楼栋和楼层的基础数据
+     */
+    public void openHorn(LabExitLineEvacuationVo labExitLineEvacuationVo){
+        try{
+            //这里查询预案下的合成音乐
+            LabAudioSynthesis labAudioSynthesis = new LabAudioSynthesis();
+            labAudioSynthesis.setSceneType(2);
+            List<LabAudioSynthesis> audioSyntheses = labAudioSynthesisMapper.selectLabAudioSynthesisList(labAudioSynthesis);
+            if(audioSyntheses.size()>0){
+                //预案调用喇叭
+                R deviceList = remoteSpeakService.getDeviceList(1,10,labExitLineEvacuationVo.getFloorId());
+                if(deviceList.getCode()==200){
+                    List<Map<String,Object>> mapList = (List <Map <String, Object>>) deviceList.getData();
+                    for(Map<String,Object> map:mapList){
+                        log.info("喇叭日志============================="+map);
+                        if(StringUtils.isNotNull(map.get("deviceSn")) && StringUtils.isNotNull(map.get("port"))){
+                            List<PlayVo> playVoList = new ArrayList<>();
+                            PlayVo playVo = new PlayVo();
+                            playVo.setSn(map.get("deviceSn")+"");
+                            playVo.setDeviceIp(map.get("deviceIp")+"");
+                            playVo.setPort(Integer.parseInt(map.get("port")+""));
+                            ParamVo paramVo=new ParamVo();
+                            paramVo.setVol(Integer.parseInt(map.get("deviceVol").toString()));
+                            playVo.setParams(paramVo);
+                            playVoList.add(playVo);
+                            remoteSpeakService.textParseUrlAppIps(audioSyntheses.get(0).getNewMusicUrl(),playVoList);
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("开启喇叭失败!!!!!:"+e);
+        }
+    }
+
+
+    /**
+     * 关联过滤线路
+     *
+     * @param allPointMap 所有线路map
+     * @param startPointList 预案发生的点关联的所有线路
+     * @return 逃生线路主
+     */
+    public Consumer <List <List <LabExitLineJoinPointVO>>> joinLine(Map <String, Object> allPointMap, List <List <LabExitLineJoinPointVO>> startPointList, LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        Set <LabExitLineJoinPointVO> linePointSet = new LinkedHashSet <>();
+        Set <LabExitLineJoinPointVO> lightPointSet = new LinkedHashSet <>();
+        List <List <LabExitLineJoinPointVO>> groupPointList = new ArrayList <>();
+
+        //todo 添加一个过滤只有灯点的消费者
+        Consumer <List <LabExitLineJoinPointVO>> lightPoint = a -> Optional.ofNullable(a).orElseGet(Collections::emptyList)
+                .stream()
+                .filter(b -> b.getPointAttribute() == 2).forEach(b -> lightPointSet.add(b));
+        //todo 预案点保存线路和灯
+        Consumer <List <List <LabExitLineJoinPointVO>>> consumer1 = a -> Optional.ofNullable(a)
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(b -> {
+                    linePointSet.addAll(b);
+                    //属性是2,说明只返回灯点
+                    lightPoint.accept(b);
+                    //todo 在添加一个完成线路点的集合
+                    suppleBuildAndFloor(b.stream().collect(Collectors.toSet()), labExitLineEvacuationVo);
+                    groupPointList.add(b);
+                });
+        consumer1.accept(startPointList);
+
+        //todo 加一个子线路的消费者,如果子线路和主线路重合,需要给删除的delAdder添加1,否则0
+        LongAdder delAdder = new LongAdder();
+        Consumer <LabExitLineJoinPointVO> checkSonPoint = x -> startPointList.stream().forEach(b -> {
+            Optional.ofNullable(b).orElseGet(Collections::emptyList)
+                    .stream()
+                    .forEach(d -> {
+                        boolean bb = d.getPointName().equals(x.getPointName());
+                        if (bb && delAdder.intValue() == 0) {
+                            delAdder.increment();
+                        }
+                    });
+        });
+        //todo 其他点保存线路和灯
+        Consumer <List <List <LabExitLineJoinPointVO>>> consumer2 = a -> Optional.ofNullable(a)
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(b -> {
+                    //todo 这里判断是否一直删除,boolean不能传入,暂时用这个校验
+                    delAdder.reset();
+                    Optional.ofNullable(b).orElseGet(Collections::emptyList)
+                            .stream()
+                            .forEach(t -> {
+                                checkSonPoint.accept(t);
+                                if (delAdder.intValue() == 0) {
+                                    linePointSet.add(t);
+                                    //属性是2,说明只返回灯点
+                                    if (t.getPointAttribute() == 2) {
+                                        lightPointSet.add(t);
+                                    }
+                                }
+                            });
+                    //todo 在添加一个完成线路点的集合
+                    suppleBuildAndFloor(b.stream().collect(Collectors.toSet()), labExitLineEvacuationVo);
+                    groupPointList.add(b);
+                });
+
+        allPointMap.put("groupPointList", groupPointList);
+        //补全线路下的所有灯的部门id和楼层id
+        suppleBuildAndFloor(linePointSet, labExitLineEvacuationVo);
+        //补全灯点的部门id和楼层id
+        suppleBuildAndFloor(lightPointSet, labExitLineEvacuationVo);
+        allPointMap.put("linePointSet", linePointSet);
+        allPointMap.put("lightPointSet", lightPointSet);
+
+        return consumer2;
+    }
+
+
+    //补全部门id和楼层id
+    public void suppleBuildAndFloor(Set <LabExitLineJoinPointVO> lineSet, LabExitLineEvacuationVo labExitLineEvacuationVo) {
+        lineSet.forEach(a -> {
+            a.setBuildId(labExitLineEvacuationVo.getBuildId());
+            a.setFloorId(labExitLineEvacuationVo.getFloorId());
+            a.setPointVOList(null);
+        });
+    }
+
+
+    //todo 针对实验室计算出当前实验室的各种线路,过滤到最优线路
+    public CompletableFuture <Map <String, Object>> optimalRoute(List <LabExitLineJoinPointVO> linePointVOList, Integer[][] path, Integer[] chain, int i, int j, ArrayList <Integer[][]> oldList, List <LabExitLineJoinPointVO> oldRelationalData) {
+        //输出源到目的地
+        logger.info("\n   " + (linePointVOList.get(i).getPointName()) + "->" + (linePointVOList.get(i).getPointVOList().get(j).getPointName()) + "     ");
+        //保存两个点之间的途径点。
+        List <LabExitLineJoinPointVO> joinPointVOS = new ArrayList <>();
+        //todo 这里用map保存三个结果,一个是计算好的线路,一个是顶点名称,一个是计算的顶点到最优线路距离.
+        Map <String, Object> joinPointMap = new HashMap <>();
+        //输出最短路径的长度
+        if (linePointVOList.get(i).getPointVOList().get(j).getPointDistance() == M) {
+            logger.info(" NA ");
+            //todo 这里原来是NA,也就是说没有匹配到线路,如果线路出现坏点,并且没有其他备用线路,那么就选择坏点线路
+            int countPoint = 0;
+            for (int x = 0; x < V; x++) {
+                for (int y = 0; y < V; y++) {
+                    if (x != y) {//只是避免了vi->vi的输出
+                        if (oldRelationalData.get(x).getPointAttribute() == 4 && oldRelationalData.get(x).getPointVOList().get(y).getPointAttribute() == 1) {
+                            if (linePointVOList.get(i).getPointName().equals(oldRelationalData.get(x).getPointVOList().get(y).getPointName())) {
+                                countPoint++;
+                            }
+                        }
+                    }
+                }
+            }
+            // todo 这里需要在做一次线路计算,出现NA有可能是实验室发生预案后,其他实验室路径这个实验室已经被标记坏点,但是其他实验室有没有备用线路选择,所以只能继续往危险的实验室路径撤离。
+            if (countPoint < 1) {
+                getHistoryLinePoint(oldRelationalData, oldList.get(0), chain, i, j, joinPointVOS);
+            }
+        } else {
+            getHistoryLinePoint(linePointVOList, path, chain, i, j, joinPointVOS);
+        }
+
+        joinPointMap.put("joinPointVOS", joinPointVOS);
+        joinPointMap.put("pointName", linePointVOList.get(i).getPointName());
+        joinPointMap.put("pointDistanceVo", linePointVOList.get(i).getPointVOList().get(j));
+
+        return CompletableFuture.completedFuture(joinPointMap);
+    }
+
+    //获取历史途径的线路点
+    public void getHistoryLinePoint(List <LabExitLineJoinPointVO> linePointVOList, Integer[][] path, Integer[] chain, int i, int j, List <LabExitLineJoinPointVO> joinPointVOS) {
+        logger.info(linePointVOList.get(i).getPointVOList().get(j).getPointDistance() + "      ");
+        int count = 0;
+        int k = j;
+        do {
+            k = chain[count++] = path[i][k];
+        } while (i != k);
+        chain = reverse(chain, count);
+        //输出路径
+        joinPointVOS.add(linePointVOList.get(chain[0]));
+        logger.info(linePointVOList.get(chain[0]).getPointName() + "##" + linePointVOList.get(chain[0]).getPointAttribute());
+
+        for (k = 1; k < count; k++) {
+            joinPointVOS.add(linePointVOList.get(chain[k]));
+            logger.info("->" + (linePointVOList.get(chain[k]).getPointName()) + "##" + linePointVOList.get(chain[k]).getPointAttribute());
+
+        }
+        joinPointVOS.add(linePointVOList.get(j));
+        logger.info("->" + linePointVOList.get(j).getPointName() + "##" + linePointVOList.get(j).getPointAttribute());
+    }
+
+    /**
+     * 新增逃生线路主
+     *
+     * @param lineVertexVo 逃生线路主
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertLabExitLineVertex(LabExitLineVertexVo lineVertexVo) {
+        LabExitLineVertex labExitLineVertex = new LabExitLineVertex();
+        labExitLineVertex.setBuildId(lineVertexVo.getBuildId());
+        labExitLineVertex.setFloorId(lineVertexVo.getFloorId());
+        labExitLineVertex.setRelationalData(JSONArray.toJSONString(lineVertexVo.getRelationalData()));
+        labExitLineVertex.setLayoutData(lineVertexVo.getLayoutData());
+        labExitLineVertex.setImgUrl(lineVertexVo.getImgUrl());
+        labExitLineVertex.setCanvasWidth(lineVertexVo.getCanvasWidth());
+        labExitLineVertex.setCanvasHeight(lineVertexVo.getCanvasHeight());
+        labExitLineVertexMapper.deleteLabExitLineVertexByFloorId(labExitLineVertex);
+        //设置其他公共字段
+        SaveUtil.setCommonAttr(labExitLineVertex);
+        labExitLineVertexMapper.insertLabExitLineVertex(labExitLineVertex);
+
+        //todo 循环插入点和实验室id关系布局数据
+        Consumer<List<LabBuildFloorLayout>> consumer = a -> Optional.ofNullable(a)
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(b->{
+                    //补全楼栋楼层id
+                    b.setBuildId(lineVertexVo.getBuildId());
+                    b.setFloorId(lineVertexVo.getFloorId());
+                    //设置其他公共字段
+                    SaveUtil.setCommonAttr(b);
+                    labBuildFloorLayoutMapper.insertLabBuildFloorLayout(b);
+                });
+        //todo 删除布局图点和实验室id关系数据
+        LabBuildFloorLayout labBuildFloorLayout = new LabBuildFloorLayout();
+        labBuildFloorLayout.setBuildId(lineVertexVo.getBuildId());
+        labBuildFloorLayout.setFloorId(lineVertexVo.getFloorId());
+        labBuildFloorLayoutMapper.deleteLabBuildFloorLayout(labBuildFloorLayout);
+        //todo 消费者调用函数
+        consumer.accept(lineVertexVo.getBuildFloorLayouts());
+
+
+        //todo 删除点和继电器绑定关系
+        LabExitPointRelay exitPointRelay = new LabExitPointRelay();
+        exitPointRelay.setBuildId(lineVertexVo.getBuildId());
+        exitPointRelay.setFloorId(lineVertexVo.getFloorId());
+        labExitPointRelayMapper.deleteLabExitPointRelay(exitPointRelay);
+        //todo 点和继电器绑定关系
+        Optional.ofNullable(lineVertexVo.getExitPointRelayList())
+                .orElseGet(Collections::emptyList)
+                .stream()
+                .forEach(a->{
+                    //补全楼栋楼层id
+                    a.setBuildId(lineVertexVo.getBuildId());
+                    a.setFloorId(lineVertexVo.getFloorId());
+                    //设置其他公共字段
+                    SaveUtil.setCommonAttr(a);
+                    labExitPointRelayMapper.insertLabExitPointRelay(a);
+                });
+//        Consumer<List<LabExitJoinSubpoint>> consumer = a -> Optional.ofNullable(a)
+//                .orElseGet(Collections::emptyList)
+//                .stream()
+//                .forEach(b->{
+//                    //补全楼栋楼层id
+//                    b.setBuildId(lineVertexVo.getBuildId());
+//                    b.setFloorId(lineVertexVo.getFloorId());
+//                    //设置其他公共字段
+//                    SaveUtil.setCommonAttr(b);
+//                    labExitJoinSubpointMapper.insertLabExitJoinSubpoint(b);
+//                });
+//        //todo 删除楼层的点和实验室id关系数据
+//        LabExitJoinSubpoint labExitJoinSubpoint = new LabExitJoinSubpoint();
+//        labExitJoinSubpoint.setBuildId(lineVertexVo.getBuildId());
+//        labExitJoinSubpoint.setFloorId(lineVertexVo.getFloorId());
+//        labExitJoinSubpointMapper.deleteLabExitJoinSubpointByFloorId(labExitJoinSubpoint);
+//        //todo 消费者调用函数
+//        consumer.accept(lineVertexVo.getJoinSubpointList());
+        return 1;
+    }
+
+
+    /**
+     * 修改逃生线路主
+     *
+     * @param labExitLineVertex 逃生线路主
+     * @return 结果
+     */
+    @Override
+    public int updateLabExitLineVertex(LabExitLineVertex labExitLineVertex) {
+        labExitLineVertex.setUpdateTime(DateUtils.getNowDate());
+        labExitLineVertex.setUpdateBy(SecurityUtils.getUsername());
+        return labExitLineVertexMapper.updateLabExitLineVertex(labExitLineVertex);
+    }
+
+    /**
+     * 批量删除逃生线路主
+     *
+     * @param ids 需要删除的逃生线路主主键
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int deleteLabExitLineVertexByIds(Long[] ids) {
+        return 1;
+    }
+
+
+    public ArrayList <Integer[][]> flody(List <LabExitLineJoinPointVO> dist) {
+        Integer[][] path = new Integer[V][V];//存储的是从i->j经过的最后一个节点
+        for (int i = 0; i < V; i++) {
+            for (int j = 0; j < V; j++) {
+                path[i][j] = i;
+            }
+        }
+        for (int k = 0; k < V; k++) {
+            for (int i = 0; i < V; i++) {
+                for (int j = 0; j < V; j++) {
+                    if (dist.get(i).getPointVOList().get(j).getPointDistance() > MAXSUM(dist.get(i).getPointVOList().get(k).getPointDistance(), dist.get(k).getPointVOList().get(j).getPointDistance())) {
+                        path[i][j] = path[k][j];//存储的是从i->j经过的最后一个节点
+                        dist.get(i).getPointVOList().get(j).setPointDistance(MAXSUM(dist.get(i).getPointVOList().get(k).getPointDistance(), dist.get(k).getPointVOList().get(j).getPointDistance()));
+                    }
+                }
+            }
+        }
+        ArrayList <Integer[][]> list = new ArrayList <Integer[][]>();
+        list.add(path);
+        return list;
+    }
+
+
+    public static Integer[] reverse(Integer[] chain, int count) {
+        int temp;
+        for (int i = 0, j = count - 1; i < j; i++, j--) {
+            temp = chain[i];
+            chain[i] = chain[j];
+            chain[j] = temp;
+        }
+        return chain;
+    }
+
+    public static int MAXSUM(int a, int b) {
+        return (a != M && b != M) ? (a + b) : M;
+    }
+
+}

+ 46 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitPointRelayServiceImpl.java

@@ -0,0 +1,46 @@
+package com.zd.laboratory.service.impl;
+
+import com.zd.laboratory.domain.LabExitPointRelay;
+import com.zd.laboratory.mapper.LabExitPointRelayMapper;
+import com.zd.laboratory.service.ILabExitPointRelayService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/11
+ */
+@Service
+public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
+
+    @Autowired
+    private LabExitPointRelayMapper labExitPointRelayMapper;
+
+    @Override
+    public List <LabExitPointRelay> selectLabExitPointRelayList(LabExitPointRelay labExitPointRelay) {
+        return labExitPointRelayMapper.selectLabExitPointRelayList(labExitPointRelay);
+    }
+
+    @Override
+    public int insertLabExitPointRelay(LabExitPointRelay labExitPointRelay) {
+        List <LabExitPointRelay> labExitPointRelays = labExitPointRelayMapper.selectLabExitPointRelayList(labExitPointRelay);
+        int flag;
+        if(labExitPointRelays.size()>0){
+            flag = labExitPointRelayMapper.updateLabExitPointRelay(labExitPointRelay);
+        }else{
+            flag = labExitPointRelayMapper.insertLabExitPointRelay(labExitPointRelay);
+        }
+        return flag;
+    }
+
+    @Override
+    public int updateLabExitPointRelay(LabExitPointRelay labExitPointRelay) {
+        return labExitPointRelayMapper.updateLabExitPointRelay(labExitPointRelay);
+    }
+
+
+}

+ 28 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeContentServiceImpl.java

@@ -0,0 +1,28 @@
+package com.zd.laboratory.service.impl;
+
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.mapper.LabBuildFloorMapper;
+import com.zd.laboratory.mapper.LabNewnoticeContentMapper;
+import com.zd.laboratory.service.ILabNewnoticeContentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@Service
+public class LabNewnoticeContentServiceImpl implements ILabNewnoticeContentService {
+
+    @Autowired
+    private LabNewnoticeContentMapper labNewnoticeContentMapper;
+
+    @Override
+    public List <LabNewnoticeContent> selectLabNewnoticeContentList(LabNewnoticeContent labNewnoticeContent) {
+        return labNewnoticeContentMapper.selectNewnoticeContentList(labNewnoticeContent);
+    }
+}

+ 30 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeGroupServiceImpl.java

@@ -0,0 +1,30 @@
+package com.zd.laboratory.service.impl;
+
+import com.zd.laboratory.domain.LabNewnoticeGroup;
+import com.zd.laboratory.domain.LabNewnoticeMode;
+import com.zd.laboratory.mapper.LabNewnoticeGroupMapper;
+import com.zd.laboratory.mapper.LabNewnoticeModeMapper;
+import com.zd.laboratory.service.ILabNewnoticeGroupService;
+import com.zd.laboratory.service.ILabNewnoticeModeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@Service
+public class LabNewnoticeGroupServiceImpl implements ILabNewnoticeGroupService {
+
+    @Autowired
+    private LabNewnoticeGroupMapper labNewnoticeGroupMapper;
+
+    @Override
+    public List <LabNewnoticeGroup> selectLabNewnoticeGroupList(LabNewnoticeGroup labNewnoticeGroup) {
+        return labNewnoticeGroupMapper.selectNewnoticeGroupList(labNewnoticeGroup);
+    }
+}

+ 30 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeModeServiceImpl.java

@@ -0,0 +1,30 @@
+package com.zd.laboratory.service.impl;
+
+import com.zd.laboratory.domain.LabNewnoticeMode;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+import com.zd.laboratory.mapper.LabNewnoticeModeMapper;
+import com.zd.laboratory.mapper.LabNewnoticeSendmodeMapper;
+import com.zd.laboratory.service.ILabNewnoticeModeService;
+import com.zd.laboratory.service.ILabNewnoticeSendmodeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@Service
+public class LabNewnoticeModeServiceImpl implements ILabNewnoticeModeService {
+
+    @Autowired
+    private LabNewnoticeModeMapper labNewnoticeModeMapper;
+
+    @Override
+    public List <LabNewnoticeMode> selectLabNewnoticeModeList(LabNewnoticeMode labNewnoticeMode) {
+        return labNewnoticeModeMapper.selectNewnoticeModeList(labNewnoticeMode);
+    }
+}

+ 122 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabNewnoticeSendmodeServiceImpl.java

@@ -0,0 +1,122 @@
+package com.zd.laboratory.service.impl;
+
+import com.zd.common.core.utils.SaveUtil;
+import com.zd.common.core.utils.StringUtils;
+import com.zd.laboratory.domain.LabNewnoticeContent;
+import com.zd.laboratory.domain.LabNewnoticeGroup;
+import com.zd.laboratory.domain.LabNewnoticeSendmode;
+import com.zd.laboratory.domain.vo.LabNewnoticeSendmodeVo;
+import com.zd.laboratory.mapper.LabNewnoticeContentMapper;
+import com.zd.laboratory.mapper.LabNewnoticeGroupMapper;
+import com.zd.laboratory.mapper.LabNewnoticeSendmodeMapper;
+import com.zd.laboratory.service.ILabNewnoticeSendmodeService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.atomic.LongAdder;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * Controller
+ *
+ * @author cyl
+ * @date 2022/11/29
+ */
+@Service
+public class LabNewnoticeSendmodeServiceImpl implements ILabNewnoticeSendmodeService {
+
+    @Autowired
+    private LabNewnoticeSendmodeMapper labNewnoticeSendmodeMapper;
+
+    @Autowired
+    private LabNewnoticeContentMapper labNewnoticeContentMapper;
+
+    @Autowired
+    private LabNewnoticeGroupMapper labNewnoticeGroupMapper;
+
+    @Override
+    public List <LabNewnoticeSendmode> selectLabNewnoticeSendmodeList(LabNewnoticeSendmode labNewnoticeSendmode) {
+        return labNewnoticeSendmodeMapper.selectNewnoticeSendModeList(labNewnoticeSendmode);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertLabNewnoticeSendmode(List<LabNewnoticeSendmodeVo> labNewnoticeSendmodeVoList) {
+        //todo 删除发送方式的数据和发送内容的数据。
+        if(labNewnoticeSendmodeVoList.size()>0){
+            LabNewnoticeSendmodeVo newnoticeSendmodeVo = labNewnoticeSendmodeVoList.get(0);
+            List <LabNewnoticeSendmode> newnoticeSendmodeList = labNewnoticeSendmodeMapper.selectNewnoticeSendModeList(newnoticeSendmodeVo);
+            List<Long> sendModeIds = Optional.ofNullable(newnoticeSendmodeList)
+                    .orElseGet(Collections::emptyList)
+                    .stream()
+                    .map(a->{
+                        return a.getId();
+                    }).collect(Collectors.toList());
+            //删除发送方式数据
+            if(sendModeIds.size()>0){
+                labNewnoticeSendmodeMapper.deleteSendmodeListByIds(sendModeIds);
+
+                List <LabNewnoticeContent> newnoticeContentList = labNewnoticeContentMapper.getListByIds(sendModeIds);
+                List<Long> sendContentIds = Optional.ofNullable(newnoticeContentList)
+                        .orElseGet(Collections::emptyList)
+                        .stream()
+                        .map(a->{
+                            return a.getId();
+                        }).collect(Collectors.toList());
+                if(sendContentIds.size()>0){
+                    labNewnoticeContentMapper.deleteSendContentListByIds(sendContentIds);
+                }
+            }
+
+
+
+
+            //todo 字符串保存发送方式
+            StringBuffer buffer = new StringBuffer();
+            //todo 这里插入发送方式的数据
+            Optional.ofNullable(labNewnoticeSendmodeVoList)
+                    .orElseGet(Collections::emptyList)
+                    .stream()
+                    .forEach(t->{
+                        buffer.append(t.getSendMode()).append(",");
+                        LabNewnoticeSendmode labNewnoticeSendmode = new LabNewnoticeSendmode();
+                        BeanUtils.copyProperties(t,labNewnoticeSendmode);
+                        //设置其他公共字段
+                        SaveUtil.setCommonAttr(labNewnoticeSendmode);
+                        labNewnoticeSendmodeMapper.insertLabNewnoticeSendmode(labNewnoticeSendmode);
+
+                        //todo 这里需要插入发送内容的数据
+                        LongAdder count = new LongAdder();
+                        Optional.ofNullable(t.getContentList())
+                                .orElseGet(Collections::emptyList)
+                                .stream()
+                                .forEach(a->{
+                                    count.increment();
+                                    a.setNoticeModeId(labNewnoticeSendmode.getId());
+                                    a.setSortNum(count.intValue());
+                                    //设置其他公共字段
+                                    SaveUtil.setCommonAttr(a);
+                                    labNewnoticeContentMapper.insertLabNewnoticeContent(a);
+                                });
+                    });
+            //todo 修改组通知的选项卡数据
+            if(StringUtils.isNotNull(newnoticeSendmodeVo)){
+                LabNewnoticeGroup labNewnoticeGroup = new LabNewnoticeGroup();
+                labNewnoticeGroup.setId(newnoticeSendmodeVo.getGroupId());
+                labNewnoticeGroup.setSendMode(buffer.substring(0,buffer.length()-1));
+                SaveUtil.setCommonAttr(labNewnoticeGroup);
+                labNewnoticeGroupMapper.updateNewnoticeGroup(labNewnoticeGroup);
+            }
+        }
+
+
+
+        return 1;
+    }
+}

+ 5 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectServiceImpl.java

@@ -440,6 +440,11 @@ public class LabSubjectServiceImpl implements ILabSubjectService {
         return labSubjectMapper.selectLabSubjectListByadminidNotnull(labSubject);
     }
 
+    @Override
+    public List <LabSubject> selectLabSubjectListByLayout(LabSubject labSubject) {
+        return labSubjectMapper.selectLabSubjectListByLayout(labSubject);
+    }
+
 
     /**
      * 查询实验室列表

+ 139 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorLayoutMapper.xml

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabBuildFloorLayoutMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabBuildFloorLayout" id="LabBuildFloorLayoutResult">
+        <result property="id"    column="id"    />
+        <result property="buildId"    column="build_id"    />
+        <result property="floorId"    column="floor_id"    />
+        <result property="subId"    column="sub_id"    />
+        <result property="roomNum"    column="room_num"    />
+        <result property="roomName"    column="room_name"    />
+        <result property="roomType"    column="room_type"    />
+        <result property="pointName"    column="point_name"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabBuildFloorLayoutVo">
+        select t.id,
+        (select bf.name from lab_build_floor bf where bf.id = t.build_id) buildName,
+        (select bf.name from lab_build_floor bf where bf.id = t.floor_id) floorName,
+        t.build_id, t.floor_id, t.sub_id, t.room_num, t.room_name, t.room_type, t.point_name, t.user_id,
+        t.create_by, t.create_time, t.update_by, t.update_time, t.remark,
+        (select st.name from lab_subject st where st.id = t.sub_id) subName
+        from lab_build_floor_layout as t
+    </sql>
+
+    <sql id="selectLabBuildFloorLayoutListVo">
+        select t.id, t.build_id, t.floor_id, t.sub_id, t.room_num, t.room_name, t.room_type, t.point_name, t.user_id,
+        (SELECT su.nick_name FROM sys_user su WHERE su.user_id = t.`user_id`) create_by,
+        t.create_time, t.update_by, t.update_time, t.remark from lab_build_floor_layout as t
+    </sql>
+
+    <select id="selectLabBuildFloorLayoutList" parameterType="com.zd.laboratory.domain.LabBuildFloorLayout" resultType="com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo">
+        <include refid="selectLabBuildFloorLayoutListVo"/>
+        <where>
+            <if test="searchValue != null  and searchValue != '' ">
+                and (
+                  t.room_num like concat('%', #{searchValue}, '%') or
+                  t.room_name like concat('%', #{searchValue}, '%')
+                )
+            </if>
+            <if test="roomType != null "> and t.room_type = #{roomType}</if>
+            <if test="buildId != null "> and t.build_id = #{buildId}</if>
+            <if test="floorId != null "> and t.floor_id = #{floorId}</if>
+        </where>
+    </select>
+    <select id="selectLabBuildFloorLayoutById" resultType="com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo">
+        <include refid="selectLabBuildFloorLayoutVo"/>
+        where id = #{id}
+    </select>
+
+
+    <insert id="insertLabBuildFloorLayout" parameterType="com.zd.laboratory.domain.LabBuildFloorLayout" useGeneratedKeys="true" keyProperty="id">
+        insert into lab_build_floor_layout
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+            <if test="buildId != null">build_id,</if>
+
+            <if test="floorId != null">floor_id,</if>
+
+            <if test="subId != null">sub_id,</if>
+
+            <if test="roomNum != null">room_num,</if>
+
+            <if test="roomName != null">room_name,</if>
+
+            <if test="roomType != null">room_type,</if>
+
+            <if test="pointName != null">point_name,</if>
+
+            <if test="userId != null">user_id,</if>
+
+            <if test="createBy != null">create_by,</if>
+
+            <if test="createTime != null">create_time,</if>
+
+            <if test="updateBy != null">update_by,</if>
+
+            <if test="updateTime != null">update_time,</if>
+
+            <if test="remark != null">remark,</if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="buildId != null">#{buildId},</if>
+            <if test="floorId != null">#{floorId},</if>
+            <if test="subId != null">#{subId},</if>
+            <if test="roomNum != null">#{roomNum},</if>
+            <if test="roomName != null">#{roomName},</if>
+            <if test="roomType != null">#{roomType},</if>
+            <if test="pointName != null">#{pointName},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateLabBuildFloorLayout" parameterType="com.zd.laboratory.domain.LabBuildFloorLayout">
+        update lab_build_floor_layout
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="buildId != null">build_id = #{buildId},</if>
+            <if test="floorId != null">floor_id = #{floorId},</if>
+            <if test="subId != null">sub_id = #{subId},</if>
+            <if test="roomNum != null">room_num = #{roomNum},</if>
+            <if test="roomName != null">room_name = #{roomName},</if>
+            <if test="roomType != null">room_type = #{roomType},</if>
+            <if test="pointName != null">point_name = #{pointName},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteLabBuildFloorLayout" parameterType="com.zd.laboratory.domain.LabBuildFloorLayout">
+        delete from lab_build_floor_layout where build_id = #{buildId} and floor_id = #{floorId}
+    </delete>
+
+    <delete id="deleteLabBuildFloorLayoutByIds">
+        delete from lab_build_floor_layout where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>

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

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabBuildFloorMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabBuildFloor" id="LabBuildFloorResult">
+        <result property="id"    column="id"    />
+        <result property="name"    column="name"    />
+        <result property="type"    column="type"    />
+        <result property="imgUrl"    column="img_url"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="sortNo"    column="sort_no"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabBuildFloorVo">
+        select id,`name`,`type`, img_url, parent_id, sort_no, user_id, create_by, create_time, update_by, update_time, remark from lab_build_floor
+    </sql>
+
+    <sql id="selectLabBuildFloorListVo">
+        select t.id,t.`name`,t.`type`, t.img_url, t.parent_id, t.sort_no, t.user_id, t.create_by, t.create_time, t.update_by, t.update_time, t.remark from lab_build_floor as t
+    </sql>
+
+    <select id="selectLabBuildFloorList" parameterType="com.zd.laboratory.domain.LabBuildFloor" resultMap="LabBuildFloorResult">
+        <include refid="selectLabBuildFloorVo"/>
+        <where>
+            <if test="id != null "> and id = #{id}</if>
+            <if test="parentId != null "> and parent_id = #{parentId}</if>
+        </where>
+    </select>
+
+    <select id="getTreeBuildList" resultType="com.zd.laboratory.domain.vo.LabBuildListVo">
+      select t.id,t.`name`,t.`type`, t.img_url, t.parent_id, t.sort_no, t.user_id, t.create_by,
+       t.create_time, t.update_by, t.update_time, t.remark,
+        IFNULL((SELECT COUNT(1) FROM lab_build_floor f WHERE f.parent_id = t.`id`),0) floorNum,
+        IFNULL((SELECT COUNT(1) FROM lab_build_floor bf INNER JOIN lab_build_floor_layout bfl
+        ON bf.id = bfl.floor_id  AND bf.parent_id = bfl.build_id WHERE bf.parent_id = t.`id` GROUP BY bf.id),0) roomNum,
+        (select bf.name from lab_build_floor bf where bf.id = t.parent_id) groupName
+       from lab_build_floor as t
+        <where>
+            <if test="parentId != null "> and t.parent_id = #{parentId}</if>
+        </where>
+       order by t.sort_no asc
+    </select>
+
+    <select id="getTreeFloorList" resultType="com.zd.laboratory.domain.vo.LabFloorListVo">
+        select t.id,t.`name`,t.`type`, t.img_url, t.parent_id, t.sort_no, t.user_id, t.create_by,
+        t.create_time, t.update_by, t.update_time, t.remark,
+        (select lbf.name from lab_build_floor lbf where lbf.id = (select bf.parent_id from lab_build_floor bf where bf.id = t.parent_id)) groupName,
+        (select bf.name from lab_build_floor bf where bf.id = t.parent_id) buildName,
+        elv.layout_data layoutData
+        FROM lab_build_floor AS t LEFT JOIN lab_exit_line_vertex elv ON t.`id` = elv.`floor_id` AND t.`parent_id` = elv.`build_id`
+        <where>
+            <if test="parentId != null "> and t.parent_id = #{parentId}</if>
+        </where>
+        order by t.sort_no asc
+    </select>
+    <select id="selectLabBuildFloorById" resultType="com.zd.laboratory.domain.LabBuildFloor">
+        <include refid="selectLabBuildFloorVo"/>
+        where id = #{id}
+    </select>
+
+
+    <insert id="insertLabBuildFloor" parameterType="com.zd.laboratory.domain.LabBuildFloor" useGeneratedKeys="true" keyProperty="id">
+        insert into lab_build_floor
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+            <if test="name != null">name,</if>
+
+            <if test="type != null">type,</if>
+
+            <if test="imgUrl != null">img_url,</if>
+
+            <if test="parentId != null">parent_id,</if>
+
+            <if test="sortNo != null">sort_no,</if>
+
+            <if test="userId != null">user_id,</if>
+
+            <if test="createBy != null">create_by,</if>
+
+            <if test="createTime != null">create_time,</if>
+
+            <if test="updateBy != null">update_by,</if>
+
+            <if test="updateTime != null">update_time,</if>
+
+            <if test="remark != null">remark,</if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="name != null">#{name},</if>
+            <if test="type != null">#{type},</if>
+            <if test="imgUrl != null">#{imgUrl},</if>
+            <if test="parentId != null">#{parentId},</if>
+            <if test="sortNo != null">#{sortNo},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateLabBuildFloor" parameterType="com.zd.laboratory.domain.LabBuildFloor">
+        update lab_build_floor
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null">name = #{name},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="imgUrl != null">img_url = #{imgUrl},</if>
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="sortNo != null">sort_no = #{sortNo},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteLabBuildFloorByIds">
+        delete from lab_build_floor where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>

+ 140 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabExitLineVertexMapper.xml

@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabExitLineVertexMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabExitLineVertex" id="LabExitLineVertexResult">
+        <result property="id"    column="id"    />
+        <result property="buildId"    column="build_id"    />
+        <result property="floorId"    column="floor_id"    />
+        <result property="relationalData"    column="relational_data"    />
+        <result property="layoutData"    column="layout_data"    />
+        <result property="imgUrl"    column="img_url"    />
+        <result property="canvasWidth"    column="canvas_width"    />
+        <result property="canvasHeight"    column="canvas_height"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </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,
+        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,
+        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">
+        <include refid="selectLabExitLineVertexVo"/>
+        <where>
+            <if test="id != null "> and id = #{id}</if>
+            <if test="buildId != null "> and build_id = #{buildId}</if>
+            <if test="floorId != null "> and floor_id = #{floorId}</if>
+        </where>
+    </select>
+
+
+    <select id="selectLabExitLineVertexById"  resultType="com.zd.laboratory.domain.LabExitLineVertex">
+        <include refid="selectLabExitLineVertexVo"/>
+        where id = #{id}
+    </select>
+
+
+    <select id="getExitLineVertexList" parameterType="com.zd.laboratory.domain.LabExitLineVertex" resultMap="LabExitLineVertexResult">
+        <include refid="selectLabExitLineVertexVo"/>
+        <where>
+            <if test="id != null "> and id = #{id}</if>
+            <if test="buildId != null "> and build_id = #{buildId}</if>
+            <if test="floorId != null "> and floor_id = #{floorId}</if>
+        </where>
+    </select>
+
+    <insert id="insertLabExitLineVertex" parameterType="com.zd.laboratory.domain.LabExitLineVertex" useGeneratedKeys="true" keyProperty="id">
+        insert into lab_exit_line_vertex
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+    <if test="buildId != null">build_id,</if>
+
+    <if test="floorId != null">floor_id,</if>
+
+    <if test="relationalData != null">relational_data,</if>
+
+    <if test="layoutData != null">layout_data,</if>
+
+    <if test="imgUrl != null">img_url,</if>
+
+    <if test="canvasWidth != null">canvas_width,</if>
+
+    <if test="canvasHeight != null">canvas_height,</if>
+
+    <if test="userId != null">user_id,</if>
+
+    <if test="createBy != null">create_by,</if>
+
+    <if test="createTime != null">create_time,</if>
+
+    <if test="updateBy != null">update_by,</if>
+
+    <if test="updateTime != null">update_time,</if>
+
+    <if test="remark != null">remark,</if>
+
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+    <if test="buildId != null">#{buildId},</if>
+    <if test="floorId != null">#{floorId},</if>
+    <if test="relationalData != null">#{relationalData},</if>
+    <if test="layoutData != null">#{layoutData},</if>
+    <if test="imgUrl != null">#{imgUrl},</if>
+    <if test="canvasWidth != null">#{canvasWidth},</if>
+    <if test="canvasHeight != null">#{canvasHeight},</if>
+    <if test="userId != null">#{userId},</if>
+    <if test="createBy != null">#{createBy},</if>
+    <if test="createTime != null">#{createTime},</if>
+    <if test="updateBy != null">#{updateBy},</if>
+    <if test="updateTime != null">#{updateTime},</if>
+    <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateLabExitLineVertex" parameterType="com.zd.laboratory.domain.LabExitLineVertex">
+        update lab_exit_line_vertex
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="buildId != null">build_id = #{buildId},</if>
+            <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="imgUrl != null">img_url = #{imgUrl},</if>
+            <if test="canvasWidth != null">canvas_width = #{canvasWidth},</if>
+            <if test="canvasHeight != null">canvas_height = #{canvasHeight},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteLabExitLineVertexById" >
+        delete from lab_exit_line_vertex where id = #{id}
+    </delete>
+
+    <delete id="deleteLabExitLineVertexByIds">
+        delete from lab_exit_line_vertex where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+
+    <delete id="deleteLabExitLineVertexByFloorId" parameterType="com.zd.laboratory.domain.LabExitLineVertex">
+        delete from lab_exit_line_vertex where build_id = #{buildId} and floor_id = #{floorId}
+    </delete>
+</mapper>

+ 119 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabExitPointRelayMapper.xml

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabExitPointRelayMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabExitPointRelay" id="LabExitPointRelayResult">
+        <result property="id"    column="id"    />
+        <result property="buildId"    column="build_id"    />
+        <result property="floorId"    column="floor_id"    />
+        <result property="pointName"    column="point_name"    />
+        <result property="relayType"    column="relay_type"    />
+        <result property="relayCode"    column="relay_code"    />
+        <result property="relayBit"    column="relay_bit"    />
+        <result property="configName"    column="config_name"    />
+        <result property="configStatus"    column="config_status"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabExitPointRelayVo">
+        select id,build_id, floor_id, point_name, relay_type, relay_code, relay_bit, config_name, config_status, user_id, create_by, create_time, update_by, update_time, remark from lab_exit_point_relay
+    </sql>
+    <sql id="selectLabExitLineListVo">
+        select t.id,t.build_id, t.floor_id, t.point_name, t.relay_type, t.relay_code, t.relay_bit, t.config_name, t.config_status, t.user_id, t.create_by, t.create_time, t.update_by, t.update_time, t.remark from lab_exit_point_relay as t
+    </sql>
+
+    <select id="selectLabExitPointRelayList" parameterType="com.zd.laboratory.domain.LabExitPointRelay" resultMap="LabExitPointRelayResult">
+        <include refid="selectLabExitPointRelayVo"/>
+        <where>
+            <if test="id != null "> and id = #{id}</if>
+            <if test="buildId != null "> and build_id = #{buildId}</if>
+            <if test="floorId != null "> and floor_id = #{floorId}</if>
+            <if test="pointName != null "> and point_name = #{pointName}</if>
+        </where>
+    </select>
+
+
+    <insert id="insertLabExitPointRelay" parameterType="com.zd.laboratory.domain.LabExitPointRelay" useGeneratedKeys="true" keyProperty="id">
+        insert into lab_exit_point_relay
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+            <if test="buildId != null">build_id,</if>
+
+            <if test="floorId != null">floor_id,</if>
+
+            <if test="pointName != null">point_name,</if>
+
+            <if test="relayType != null">relay_type,</if>
+
+            <if test="relayCode != null">relay_code,</if>
+
+            <if test="relayBit != null">relay_bit,</if>
+
+            <if test="configName != null">config_name,</if>
+
+            <if test="configStatus != null">config_status,</if>
+
+            <if test="userId != null">user_id,</if>
+
+            <if test="createBy != null">create_by,</if>
+
+            <if test="createTime != null">create_time,</if>
+
+            <if test="updateBy != null">update_by,</if>
+
+            <if test="updateTime != null">update_time,</if>
+
+            <if test="remark != null">remark,</if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="buildId != null">#{buildId},</if>
+            <if test="floorId != null">#{floorId},</if>
+            <if test="pointName != null">#{pointName},</if>
+            <if test="relayType != null">#{relayType},</if>
+            <if test="relayCode != null">#{relayCode},</if>
+            <if test="relayBit != null">#{relayBit},</if>
+            <if test="configName != null">#{configName},</if>
+            <if test="configStatus != null">#{configStatus},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+
+    <update id="updateLabExitPointRelay" parameterType="com.zd.laboratory.domain.LabExitPointRelay">
+        update lab_exit_point_relay
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="buildId != null">build_id = #{buildId},</if>
+            <if test="floorId != null">floor_id = #{floorId},</if>
+            <if test="pointName != null">point_name = #{pointName},</if>
+            <if test="relayType != null">relay_type = #{relayType},</if>
+            <if test="relayCode != null">relay_code = #{relayCode},</if>
+            <if test="relayBit != null">relay_bit = #{relayBit},</if>
+            <if test="configName != null">config_name = #{configName},</if>
+            <if test="configStatus != null">config_status = #{configStatus},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where point_name = #{pointName}
+    </update>
+
+    <delete id="deleteLabExitPointRelay" parameterType="com.zd.laboratory.domain.LabExitPointRelay">
+        delete from lab_exit_point_relay where build_id = #{buildId} and floor_id = #{floorId}
+    </delete>
+</mapper>

+ 100 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeContentMapper.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabNewnoticeContentMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabNewnoticeContent" id="LabNewnoticeContentResult">
+        <result property="id"    column="id"    />
+        <result property="noticeModeId"    column="notice_mode_id"    />
+        <result property="noticeType"    column="notice_type"    />
+        <result property="variableLevel"    column="variable_level"    />
+        <result property="noticeContent"    column="notice_content"    />
+        <result property="sortNum"    column="sort_num"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabNewnoticeContentVo">
+        select id,`notice_mode_id`,`notice_type`, variable_level, notice_content, sort_num, user_id, create_by,
+        create_time, update_by, update_time, remark from lab_newnotice_content
+    </sql>
+
+    <sql id="selectLabNewnoticeContentListVo">
+        select t.id,t.`notice_mode_id`,t.`notice_type`, t.variable_level, t.notice_content, t.sort_num, t.user_id,
+        t.create_by, t.create_time, t.update_by, t.update_time, t.remark from lab_newnotice_content as t
+    </sql>
+
+    <select id="selectNewnoticeContentList" parameterType="com.zd.laboratory.domain.LabNewnoticeContent" resultMap="LabNewnoticeContentResult">
+        <include refid="selectLabNewnoticeContentListVo"/>
+        <where>
+            <if test="id != null "> and t.id = #{id}</if>
+            <if test="noticeModeId != null "> and t.notice_mode_id = #{noticeModeId}</if>
+        </where>
+    </select>
+
+
+    <select id="getListByIds" resultMap="LabNewnoticeContentResult">
+        <include refid="selectLabNewnoticeContentListVo"/>
+        where
+          t.`notice_mode_id` in
+            <foreach item="id" collection="list" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+    </select>
+
+    <insert id="insertLabNewnoticeContent"  parameterType="com.zd.laboratory.domain.LabNewnoticeContent" useGeneratedKeys="true" keyProperty="id">
+        insert into lab_newnotice_content
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+            <if test="noticeModeId != null">notice_mode_id,</if>
+
+            <if test="noticeType != null">notice_type,</if>
+
+            <if test="variableLevel != null">variable_level,</if>
+
+            <if test="noticeContent != null">notice_content,</if>
+
+            <if test="sortNum != null">sort_num,</if>
+
+            <if test="userId != null">user_id,</if>
+
+            <if test="createBy != null">create_by,</if>
+
+            <if test="createTime != null">create_time,</if>
+
+            <if test="updateBy != null">update_by,</if>
+
+            <if test="updateTime != null">update_time,</if>
+
+            <if test="remark != null">remark,</if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="noticeModeId != null">#{noticeModeId},</if>
+            <if test="noticeType != null">#{noticeType},</if>
+            <if test="variableLevel != null">#{variableLevel},</if>
+            <if test="noticeContent != null">#{noticeContent},</if>
+            <if test="sortNum != null">#{sortNum},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+
+    </insert>
+
+    <delete id="deleteSendContentListByIds">
+        delete from lab_newnotice_content where id in
+        <foreach item="id" collection="list" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>

+ 54 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeGroupMapper.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabNewnoticeGroupMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabNewnoticeGroup" id="LabNewnoticeGroupResult">
+        <result property="id"    column="id"    />
+        <result property="groupName"    column="group_name"    />
+        <result property="groupValue"    column="group_value"    />
+        <result property="sendMode"    column="send_mode"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabNewnoticeGroupVo">
+        select id,`group_name`,`group_value`,send_mode ,user_id, create_by,
+        create_time, update_by, update_time, remark from lab_newnotice_group
+    </sql>
+
+    <sql id="selectLabNewnoticeGroupListVo">
+        select t.id,t.`group_name`,t.`group_value`,send_mode ,t.user_id,
+        t.create_by, t.create_time, t.update_by, t.update_time, t.remark from lab_newnotice_group as t
+    </sql>
+
+    <select id="selectNewnoticeGroupList" parameterType="com.zd.laboratory.domain.LabNewnoticeGroup" resultMap="LabNewnoticeGroupResult">
+        <include refid="selectLabNewnoticeGroupListVo"/>
+        <where>
+            <if test="id != null "> and t.id = #{id}</if>
+        </where>
+        order by t.create_time asc
+    </select>
+
+    <update id="updateNewnoticeGroup" parameterType="com.zd.laboratory.domain.LabNewnoticeGroup">
+        update lab_newnotice_group
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="groupName != null">group_name = #{groupName},</if>
+            <if test="groupValue != null">group_value = #{groupValue},</if>
+            <if test="sendMode != null">send_mode = #{sendMode},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+</mapper>

+ 38 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeModeMapper.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabNewnoticeModeMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabNewnoticeMode" id="LabNewnoticeModeResult">
+        <result property="id"    column="id"    />
+        <result property="noticeModeName"    column="notice_mode_name"    />
+        <result property="noticeModeValue"    column="notice_mode_value"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabNewnoticeModeVo">
+        select id,`notice_mode_name`,`notice_mode_value`, user_id, create_by,
+        create_time, update_by, update_time, remark from lab_newnotice_mode
+    </sql>
+
+    <sql id="selectLabNewnoticeModeListVo">
+        select t.id,t.`notice_mode_name`,t.`notice_mode_value`, t.user_id,
+        t.create_by, t.create_time, t.update_by, t.update_time, t.remark from lab_newnotice_mode as t
+    </sql>
+
+    <select id="selectNewnoticeModeList" parameterType="com.zd.laboratory.domain.LabNewnoticeMode" resultMap="LabNewnoticeModeResult">
+        <include refid="selectLabNewnoticeModeListVo"/>
+        <where>
+            <if test="id != null "> and t.id = #{id}</if>
+        </where>
+        order by t.create_time asc
+    </select>
+
+
+</mapper>

+ 76 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabNewnoticeSendmodeMapper.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zd.laboratory.mapper.LabNewnoticeSendmodeMapper">
+
+    <resultMap type="com.zd.laboratory.domain.LabNewnoticeSendmode" id="LabNewnoticeSendmodeResult">
+        <result property="id"    column="id"    />
+        <result property="groupId"    column="group_id"    />
+        <result property="sendMode"    column="send_mode"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectLabNewnoticeSendModeVo">
+        select id,`group_id`,`send_mode`, user_id, create_by,
+        create_time, update_by, update_time, remark from lab_newnotice_sendmode
+    </sql>
+
+    <sql id="selectLabNewnoticeSendModeListVo">
+        select t.id,t.`group_id`,t.`send_mode`, t.user_id,
+        t.create_by, t.create_time, t.update_by, t.update_time, t.remark from lab_newnotice_sendmode as t
+    </sql>
+
+    <select id="selectNewnoticeSendModeList" parameterType="com.zd.laboratory.domain.LabNewnoticeSendmode" resultMap="LabNewnoticeSendmodeResult">
+        <include refid="selectLabNewnoticeSendModeListVo"/>
+        <where>
+            <if test="id != null "> and t.id = #{id}</if>
+            <if test="groupId != null "> and t.group_id = #{groupId}</if>
+        </where>
+    </select>
+
+    <insert id="insertLabNewnoticeSendmode" parameterType="com.zd.laboratory.domain.LabNewnoticeSendmode" useGeneratedKeys="true" keyProperty="id">
+        insert into lab_newnotice_sendmode
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+            <if test="groupId != null">group_id,</if>
+
+            <if test="sendMode != null">send_mode,</if>
+
+            <if test="userId != null">user_id,</if>
+
+            <if test="createBy != null">create_by,</if>
+
+            <if test="createTime != null">create_time,</if>
+
+            <if test="updateBy != null">update_by,</if>
+
+            <if test="updateTime != null">update_time,</if>
+
+            <if test="remark != null">remark,</if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="groupId != null">#{groupId},</if>
+            <if test="sendMode != null">#{sendMode},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <delete id="deleteSendmodeListByIds">
+        delete from lab_newnotice_sendmode where id in
+        <foreach item="id" collection="list" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 30 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSubjectMapper.xml

@@ -875,4 +875,34 @@
         </where>
 
     </select>
+    <select id="selectLabSubjectListByLayout" parameterType="com.zd.laboratory.domain.LabSubject" resultMap="LabSubjectResult">
+        select
+        id, name, floor_id,layout_id,build_id,sub_dept,level, check_out,check_in,room,dept_id,
+        (SELECT d.dept_name FROM sys_dept d WHERE s.dept_id = d.dept_id) dept_name,
+        admin_id, is_del, create_time, user_id,
+        create_by, update_time, update_by, remark, sub_dept,
+        check_out, check_in, safe_user_id, safe_signs, hazard_category, risk_measure,
+        outfire, qr_code,safe_user_id, skipped, check_count,sign_time,
+        (SELECT GROUP_CONCAT(ur.nick_name) FROM sys_user ur WHERE FIND_IN_SET(ur.user_id, s.`safe_user_id`)) AS safeUserNames,
+        (select d.dept_name from sys_dept d where s.build_id = d.dept_id) build_name,
+        (select b.name from lab_building b where b.id = s.floor_id) floorName,
+        (SELECT l.room FROM lab_subject_layout l WHERE l.id = s.layout_id ) roomName,
+        (select GROUP_CONCAT(phonenumber) from sys_user where find_in_set(user_id, s.safe_user_id)) safeUserPhone
+        from lab_subject s
+        <where>
+            s.`id` NOT IN(SELECT bfl.`sub_id` FROM lab_build_floor_layout bfl)
+            <if test="deptIds != null and deptIds.size()>0"> <!-- 部门集合id-->
+                and s.dept_id in
+                <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">'${item}'</foreach>
+            </if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="floorId != null "> and floor_id = #{floorId}</if>
+            <if test="room != null  and room != ''"> and room = #{room}</if>
+            <if test="deptId != null "> and ( dept_id in (SELECT dt.dept_id FROM sys_dept dt WHERE find_in_set(#{deptId} ,ancestors )) or dept_id = #{deptId} )</if>
+            <if test="deptName != null  and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
+            <if test="adminId != null "> and admin_id = #{adminId}</if>
+            <if test="isDel != null "> and is_del = #{isDel}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+        </where>
+    </select>
 </mapper>