Переглянути джерело

Merge remote-tracking branch 'origin/dev' into dev

xuxiaofei 3 роки тому
батько
коміт
18e2d61a4f
14 змінених файлів з 185 додано та 55 видалено
  1. 3 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteLaboratoryService.java
  2. 5 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteLaboratoryFallbackFactory.java
  3. 23 0
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/config/AlgorithmYml.java
  4. 15 0
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/domain/AnalysisReturnData.java
  5. 66 19
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/CheckService.java
  6. 24 2
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/utils/HttpUtils.java
  7. 6 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/AlgorithmController.java
  8. 4 4
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabRiskPlanController.java
  9. 1 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSubjectLayoutController.java
  10. 2 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/event/LabMessageListener.java
  11. 12 18
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabBuildFloorLayoutServiceImpl.java
  12. 11 8
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanServiceImpl.java
  13. 12 2
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorLayoutMapper.xml
  14. 1 1
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanSensorRelationMapper.xml

+ 3 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteLaboratoryService.java

@@ -261,6 +261,9 @@ public interface RemoteLaboratoryService {
     @PostMapping("/algorithm/save")
     public R saveData(Algorithm algorithm);
 
+    @PostMapping("/algorithm/saveAlgorithm")
+    public R saveAlgorithmData(Algorithm algorithm);
+
     /**
      * 小程序查询实验室列表(用户端,管理端)
      */

+ 5 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteLaboratoryFallbackFactory.java

@@ -256,6 +256,11 @@ public class RemoteLaboratoryFallbackFactory implements FallbackFactory<RemoteLa
             }
 
             @Override
+            public R saveAlgorithmData(Algorithm algorithm) {
+                return R.fail("保存算法失败:" + cause.getMessage());
+            }
+
+            @Override
             public R getCheckInfo(Long id) {
                 return R.fail("获取实验室检查项失败:" + cause.getMessage());
             }

+ 23 - 0
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/config/AlgorithmYml.java

@@ -221,6 +221,29 @@ public class AlgorithmYml {
         @NotNull(message = "数据ID不能为空")
         private String did;
 
+
+        public String getAid() {
+            return aid;
+        }
+
+        public void setAid(String aid) {
+            this.aid = aid;
+        }
+
+        public String getCid() {
+            return cid;
+        }
+
+        public void setCid(String cid) {
+            this.cid = cid;
+        }
+
+        @NotNull(message = "算法ID不能为空")
+        private String aid;
+        //cid
+        @NotNull(message = "输入源ID不能为空")
+        private String cid;
+
         private String algorithmName;
 
         //默认使用图片post 推送结果解析类

+ 15 - 0
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/domain/AnalysisReturnData.java

@@ -0,0 +1,15 @@
+package com.zd.alg.forward.domain;
+
+import lombok.Data;
+
+/***
+ * v5平台数据解析类
+ */
+@Data
+public class AnalysisReturnData {
+    private String aid;
+    private String cid;
+    private Object result;
+    private String ret_image;
+    private String src_image;
+}

+ 66 - 19
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/CheckService.java

@@ -3,12 +3,10 @@ package com.zd.alg.forward.serivce;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.RandomUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.zd.alg.forward.config.AlgorithmYml;
-import com.zd.alg.forward.domain.AnalysisData;
-import com.zd.alg.forward.domain.DataPostAnalysisRespDto;
-import com.zd.alg.forward.domain.ImgPostResponse;
-import com.zd.alg.forward.domain.VideoRequestData;
+import com.zd.alg.forward.domain.*;
 import com.zd.alg.forward.serivce.mqtt.CommonSend;
 import com.zd.alg.forward.utils.Base64DecodedMultipartFile;
 import com.zd.alg.forward.utils.FileUploadUtils;
@@ -99,10 +97,10 @@ public class CheckService {
             int alarmNum = 0;
             //========= 请求超时验证部分开始 ===========
             //600 则代表退出验证流程 需要重新刷卡
-//            R<Long> fail = getObjectR(id);
-//            if (fail.getCode() != 200) {
-//                return fail;
-//            }
+            R<Long> fail = getObjectR(id);
+            if (fail.getCode() != 200) {
+                return fail;
+            }
             //根据实验室id查询检查项
             R<Map<Object, Object>> subject = laboratoryService.getCheckInfo(subId);
             if (subject.getCode() != 200) {
@@ -132,20 +130,22 @@ public class CheckService {
                 MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
                 HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile, params);
                 logger.info("===============4=================");
-                ImgPostResponse<DataPostAnalysisRespDto> send = HttpUtils.send(restTemplateLocal, files, algorithmYml);
+                ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
                 if (send == null || send.getStatus_code() != 1000) {
                     assert send != null;
-                    logger.error(send.getMessage());
+                    logger.error("==================4.1==================="+send.getStatus_code()+"==========="+send.getMessage());
                     return R.fail("算法服务错误,请重试!");
                 }
                 logger.info("===============5=================");
-                R algorithm = saveAlgorithm(send, checkValid);
+                R algorithm = saveAlgorithmV5(send, checkValid);
                 if (algorithm.getCode() != 200) {
+                    logger.error("==============="+algorithm.getCode()+"=================");
                     return algorithm;
                 }
-                DataPostAnalysisRespDto data = send.getData();
-
-                Map<String, Object> result = (Map<String, Object>) data.getAnalysisDatas().get(0).getResult();
+                logger.info("===============6=================");
+                AnalysisReturnData data = send.getData();
+                Map<String, Object> result = (Map<String, Object>) data.getResult();
+                logger.info("=========================7==============="+result.toString());
                 Map<String, Object> algorithmData = (Map<String, Object>) result.get("algorithm_data");
                 Map<String, Object> modelResult = (Map<String, Object>) result.get("model_data");
                 List<Map<String, Object>> objects = (List<Map<String, Object>>) modelResult.get("objects");
@@ -176,7 +176,7 @@ public class CheckService {
                 return R.ok();
             }
         } catch (Exception e) {
-            logger.error(e.getMessage());
+            logger.error("e.getMessage:"+e.getMessage());
             e.printStackTrace();
         }
         return R.fail();
@@ -272,8 +272,8 @@ public class CheckService {
      * @param codes
      * @return
      */
-    public R checkInAll(Long[] ids, MultipartFile file[], String codes) {
-        Map result = new HashMap();
+    public R<Map<Object, String>> checkInAll(Long[] ids, MultipartFile file[], String codes) {
+        Map<Object, String> result = new HashMap<>();
         String[] codesArrs = codes.split(",");
         for (int i = 0; i < codesArrs.length; i++) {
             R r = checkAndCommit(codesArrs[i], file[i], ids[i]);
@@ -285,7 +285,7 @@ public class CheckService {
     }
 
 
-    public Algorithm Covert(Map data) {
+    public Algorithm Covert(Map<String, Object> data) {
         Algorithm algorithm = new Algorithm();
         algorithm.setAlgorithmType(data.get("type").toString());
         algorithm.setAlgorithmResult(data.get("src_img").toString());
@@ -297,6 +297,19 @@ public class CheckService {
         return algorithm;
     }
 
+    public Algorithm CovertV5(Map<String, Object> data) {
+        Algorithm algorithm = new Algorithm();
+        algorithm.setAlgorithmType(data.get("type").toString());
+        algorithm.setAlgorithmResult(data.get("src_img").toString());
+        algorithm.setSubId(Long.valueOf(data.get("aid").toString()));
+        algorithm.setSignId(Long.valueOf(data.get("cid").toString()));
+        algorithm.setAlgorithmName(data.get("algorithmName").toString());
+        algorithm.setIsAlarm(Integer.parseInt(data.get("isAlarm").toString()));
+        algorithm.setStatus(0);
+        return algorithm;
+    }
+
+
     /**
      * @param algorithmResult
      * @param type
@@ -398,7 +411,7 @@ public class CheckService {
             return R.ok();
         }
         //如果没有通过则次数加一
-        Map<String, Boolean> map = new HashMap(1);
+        Map<String, Boolean> map = new HashMap<>(1);
         //键为前缀+签到id +下划线+验证类型
         String key = BaseConstants.SINGIN_CHECK_JUMP_KEY + id + "_" + code;
         Long increment = redisTemplate.opsForValue().increment(key);
@@ -547,4 +560,38 @@ public class CheckService {
         logger.error("接口数据返回异常");
         throw new ServiceException("接口数据返回异常");
     }
+
+
+    /**
+     * 存储数据
+     * @param send
+     * @param checkValid
+     */
+    private R saveAlgorithmV5(ImgPostResponse<AnalysisReturnData> send,AlgorithmYml.CheckValid checkValid){
+        String picture = send.getData().getRet_image();
+        String header = "data:image/jpeg;base64,"+picture;
+        MultipartFile multipartFile = Base64DecodedMultipartFile.base64ToMultipart(header);
+        R<SysFile> sysFileR = remoteFileService.upload(multipartFile);
+        String imageUrl = sysFileR.getData().getUrl();
+        logger.info("==================================imageUrl:"+imageUrl);
+        AnalysisReturnData data =  send.getData();
+        Map<String, Object> map =new HashMap<>();
+        Map<String, Object> result =(Map<String, Object>)data.getResult();
+        Map<String, Object> algorithmData = (Map<String, Object>) result.get("algorithm_data");
+        Map<String, Object> modelResult = (Map<String, Object>) result.get("model_data");
+        List<Map<String, Object>> objects = (List<Map<String, Object>>) modelResult.get("objects");
+        if(algorithmData.getOrDefault("is_alert", "").toString().equals("false") && objects.size()>0){
+            map.put("isAlarm", 0);
+        }else{
+            map.put("isAlarm", 1);
+        }
+        map.put("isAlarm", 1);
+        map.put("aid", data.getAid());
+        map.put("cid", data.getCid());
+        map.put("src_img", imageUrl);
+        map.put("type", "image");
+        map.put("algorithmName", checkValid.getAlgorithmName());
+        logger.info("=======================map.tostring()"+map.toString());
+        return laboratoryService.saveAlgorithmData(CovertV5(map));
+    }
 }

+ 24 - 2
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/utils/HttpUtils.java

@@ -1,6 +1,7 @@
 package com.zd.alg.forward.utils;
 
 import com.zd.alg.forward.config.AlgorithmYml;
+import com.zd.alg.forward.domain.AnalysisReturnData;
 import com.zd.alg.forward.domain.DataPostAnalysisRespDto;
 import com.zd.alg.forward.domain.ImgPostResponse;
 import com.zd.alg.forward.properties.FireProperties;
@@ -43,7 +44,7 @@ public class HttpUtils {
         //文件转为文件系统资源
         FileSystemResource fileSystemResource = new FileSystemResource(file);
         //设置请求体,注意是LinkedMultiValueMap
-        MultiValueMap<String, Object> form = getStringObjectMultiValueMap(fileSystemResource);
+        MultiValueMap<String, Object> form = getStringObjectMultiValueMap(fileSystemResource,"image");
         form.addAll(params);
         //用HttpEntity封装整个请求报文
         return new HttpEntity<>(form, headers);
@@ -69,11 +70,17 @@ public class HttpUtils {
         return form;
     }
 
+    public static MultiValueMap<String, Object> getStringObjectMultiValueMap(FileSystemResource fileSystemResource,String key) {
+        MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
+        form.add(key, fileSystemResource);
+        return form;
+    }
+
     private static MultiValueMap<String, Object> getStringObjectMultiValueMap(String extension) {
         MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
         //1-同步(默认),0-异步
         form.add("sync", 1);
-        form.add("timeStamp", LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() / 1000);
+        form.add("timestamp", LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() / 1000);
         form.add("extension", extension);
         return form;
     }
@@ -85,6 +92,8 @@ public class HttpUtils {
         MultiValueMap<String, Object> form = getStringObjectMultiValueMap(extension);
         form.add("algoId", checkValid.getAlgoId());
         form.add("did", checkValid.getDid());
+        form.add("aid", checkValid.getAid());
+        form.add("cid", checkValid.getCid());
         return form;
     }
 
@@ -110,4 +119,17 @@ public class HttpUtils {
         }
         return response.getBody();
     }
+
+    public static ImgPostResponse<AnalysisReturnData> sendV5(RestTemplate restTemplate, HttpEntity<MultiValueMap<String, Object>> files, AlgorithmYml algorithmYml) {
+        ParameterizedTypeReference<ImgPostResponse<AnalysisReturnData>> reference = new ParameterizedTypeReference<ImgPostResponse<AnalysisReturnData>>() {
+        };
+        ResponseEntity<ImgPostResponse<AnalysisReturnData>> response = restTemplate.exchange(algorithmYml.getImgPostUrl(), HttpMethod.POST, files, reference);
+        if (response.getStatusCode() != HttpStatus.OK) {
+            log.error("算法服务请求异常,请查看算服务器");
+        }
+        if (response.getBody() == null) {
+            log.error("算法服务接口返回异常");
+        }
+        return response.getBody();
+    }
 }

+ 6 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/AlgorithmController.java

@@ -50,6 +50,12 @@ public class AlgorithmController extends BaseController {
         return  ResultData.success(algorithmService.saveData(algorithm));
     }
 
+    @PostMapping("/saveAlgorithm")
+    public ResultData saveAlgorithmData(Algorithm algorithm) {
+        logger.info("===================记录添加========================");
+        return  ResultData.success(algorithmService.saveData(algorithm));
+    }
+
 
     @GetMapping("/getId/{id}")
     public Object getId(@PathVariable Long id){

+ 4 - 4
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabRiskPlanController.java

@@ -250,15 +250,15 @@ public class LabRiskPlanController extends BaseController {
     @Log(title = "一件灭火触发火焰预警")
     @PostMapping("/oneClickFire")
     public ResultData oneClickFire(@RequestBody OneClickFireDTO oneClickFireDTO){
-        logger.info("一件灭火触发火焰预警,入参={}", JSON.toJSONString(oneClickFireDTO));
         if (!Objects.isNull(oneClickFireDTO)) {
+            logger.info("一件灭火触发火焰预警,入参={}", JSON.toJSONString(oneClickFireDTO));
             if (oneClickFireDTO.getIfFire() == 1) {
                 R deviceByCode = remoteFireDeviceService.getDeviceByCode(oneClickFireDTO.getDeviceCode());
                 if (deviceByCode.getCode()!=(HttpStatus.SUCCESS)){
                     return ResultData.fail("查询一键灭火设备信息失败!");
                 }
-                HardwareFireDeviceVO hardwareFireDevice = (HardwareFireDeviceVO) deviceByCode.getData();
-                if (hardwareFireDevice.getSubjectId() != null){
+                HardwareFireDeviceVO hardwareFireDeviceVO = JSON.parseObject(JSON.toJSONString(deviceByCode.getData()), HardwareFireDeviceVO.class);
+                if (hardwareFireDeviceVO.getSubjectId() != null){
                     SubFunction subFunction = new SubFunction();
                     List<SensorFunctionStatus> sensorFunctionStatuses = new ArrayList<>();
                     SensorFunctionStatus sensorFunctionStatus = new SensorFunctionStatus();
@@ -267,7 +267,7 @@ public class LabRiskPlanController extends BaseController {
                     sensorFunctionStatus.setHardwareNum(oneClickFireDTO.getDeviceCode());
                     sensorFunctionStatus.setDescribe("火焰");
                     sensorFunctionStatuses.add(sensorFunctionStatus);
-                    subFunction.setSubId(hardwareFireDevice.getSubjectId());
+                    subFunction.setSubId(hardwareFireDeviceVO.getSubjectId());
                     subFunction.setFunctionStatuses(sensorFunctionStatuses);
                     triggerRiskPlan(subFunction);
                     return ResultData.success();

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

@@ -2,6 +2,7 @@ package com.zd.laboratory.controller;
 
 import java.util.List;
 import java.io.IOException;
+import java.util.concurrent.Callable;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.hutool.core.collection.CollUtil;

+ 2 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/event/LabMessageListener.java

@@ -1,6 +1,7 @@
 package com.zd.laboratory.event;
 
 import com.alibaba.fastjson.TypeReference;
+import com.zd.laboratory.api.constant.RiskPlanConstants;
 import com.zd.laboratory.api.entity.SensorFunctionStatus;
 import com.zd.laboratory.api.vo.SubFunction;
 import com.zd.laboratory.service.ILabRiskPlanService;
@@ -42,7 +43,7 @@ public class LabMessageListener implements ApplicationListener <SensorLabMessage
             if(message.getSubId()==null) {
                 return;
             }
-//            riskPlanService.triggerRiskPlan(message, RiskPlanConstants.RISK_ATTRIBUTE_NO_FIRE);
+            riskPlanService.triggerRiskPlan(message, RiskPlanConstants.RISK_ATTRIBUTE_NO_FIRE);
 //        }catch(Exception e){
 //            e.printStackTrace();
 //            log.error("LabMessageListener: " + e.getMessage());

+ 12 - 18
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabBuildFloorLayoutServiceImpl.java

@@ -34,24 +34,18 @@ public class LabBuildFloorLayoutServiceImpl implements ILabBuildFloorLayoutServi
 
     @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());
+//        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 labBuildFloorLayoutMapper.selectLabBuildFloorLayoutList(labBuildFloorLayout);
     }
 
     @Override

+ 11 - 8
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanServiceImpl.java

@@ -1019,7 +1019,10 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
         // 云盒传入数据如果没有落入传感器区间 有可能是之前预案关闭
 
 
-
+        //todo 这里判断火焰预案,就不继续往下执行了,锁死火焰预案
+        if(redisService.getCacheObject("subjectByHuoyan"+subFunction.getSubId())!=null){
+            return flag;
+        }
 
         //将风险预案写入归属组级表里面
         LabRiskPlanAbnormalGroup labRiskPlanAbnormalGroup = new LabRiskPlanAbnormalGroup();
@@ -1047,10 +1050,6 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
             labRiskPlanLevel.setFloorId(labRiskPlan.getFloorId());
             labRiskPlanLevel.setTopName(labRiskPlan.getTopName());
 
-            //todo 这里判断火焰预案,就不继续往下执行了,锁死火焰预案
-            if(redisService.getCacheObject("subjectByHuoyan"+subFunction.getSubId())!=null){
-                return flag;
-            }
 
             //这里处理,如果是火焰预案,需要redis额外缓存
             Optional.ofNullable(subFunction.getFunctionStatuses()).orElseGet(Collections::emptyList).stream().filter(a -> "huoyan".equals(a.getFunNum())).forEach(a -> {
@@ -1726,9 +1725,13 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
      * @return 结果
      */
     public LabRiskPlanLevel matchingRiskPlan(SubFunction<SensorFunctionStatus> subFunction) {
-        LabRiskPlan newRiskPlan = null;
+        LabRiskPlanLevel labRiskPlanLevel = new LabRiskPlanLevel();
         //实验室关联预案的所有传感器列表
         List<LabRiskPlanSensorRelation> labRiskPlanSensorRelations = labRiskPlanSensorRelationMapper.selectSensorListBySubId(subFunction.getSubId());
+        if (labRiskPlanSensorRelations == null || labRiskPlanSensorRelations.size() == 0) {
+            log.info("实验室未绑定预案!");
+            return labRiskPlanLevel;
+        }
         LinkedHashMap<Long, List<LabRiskPlanSensorRelation>> collect = Optional.ofNullable(labRiskPlanSensorRelations).orElseGet(Collections::emptyList).stream().collect(Collectors.groupingBy(LabRiskPlanSensorRelation::getRiskPlanLevelId, LinkedHashMap::new, Collectors.toList()));
         List<Long> list = new ArrayList<>();
         collect.forEach((key, value) -> {
@@ -1770,10 +1773,10 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
         //根据预案级别查询预案信息
 //        LabRiskPlanLevel labRiskPlanLevel = labRiskPlanLevelService.getOne(new LambdaQueryWrapper<LabRiskPlanLevel>().in(LabRiskPlanLevel::getId, sb.substring(0, sb.length() - 1)).orderByDesc(LabRiskPlanLevel::getRiskPlanLevel).last(" limit 1"));
         if(StringUtils.isNotBlank(sb.toString())){
-            LabRiskPlanLevel labRiskPlanLevel = labRiskPlanLevelService.queryRiskPlanLevelByLevelIds(sb.substring(0, sb.length() - 1));
+            labRiskPlanLevel = labRiskPlanLevelService.queryRiskPlanLevelByLevelIds(sb.substring(0, sb.length() - 1));
             return labRiskPlanLevel;
         }
-        return new LabRiskPlanLevel();
+        return labRiskPlanLevel;
 
 //        //预案列表循环
 //        int maxCount = 0;

+ 12 - 2
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabBuildFloorLayoutMapper.xml

@@ -25,7 +25,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         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.build_id, t.floor_id,
+        case when t.sub_id=-1 then null else t.sub_id end 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
@@ -35,7 +37,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         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,
-        (select st.name from lab_subject st where st.id = t.sub_id) subName from lab_build_floor_layout as t
+        (select st.name from lab_subject st where st.id = t.sub_id) subName,
+        sd.dict_label roomTypeName
+        from lab_build_floor_layout as t
+        LEFT JOIN
+         (
+            SELECT sd.dict_label,sd.dict_value FROM sys_dict_data sd WHERE sd.dict_type='layout_room_type'
+            UNION ALL
+            SELECT '其他' dict_label,-99 dict_value FROM DUAL
+        ) sd ON sd.dict_value = t.room_type
     </sql>
 
     <select id="selectLabBuildFloorLayoutList" parameterType="com.zd.laboratory.domain.LabBuildFloorLayout" resultType="com.zd.laboratory.domain.vo.LabBuildFloorLayoutVo">

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

@@ -185,7 +185,7 @@
     <select id="selectSensorListBySubId" resultType="com.zd.laboratory.domain.LabRiskPlanSensorRelation">
     SELECT lrpsr.*
     FROM lab_risk_planjoinsub lrp
-    LEFT JOIN lab_risk_plan_sensor_relation lrpsr on lrp.risk_plan_id = lrpsr.risk_plan_id
+    INNER JOIN lab_risk_plan_sensor_relation lrpsr on lrp.risk_plan_id = lrpsr.risk_plan_id
     WHERE lrp.subject_id = #{subId}
     </select>
 </mapper>