Przeglądaj źródła

Merge branch 'dev' of http://192.168.1.43:3000/v2/zd-parents into dev

chaiyunlong 3 lat temu
rodzic
commit
c3d68396fe
26 zmienionych plików z 407 dodań i 119 usunięć
  1. 3 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/entity/OneClickFireDTO.java
  2. 11 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/entity/SensorFunctionStatus.java
  3. 3 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteLaboratoryService.java
  4. 5 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteLaboratoryFallbackFactory.java
  5. 1 1
      zd-auth/src/main/java/com/zd/auth/controller/TokenController.java
  6. 2 2
      zd-auth/src/main/java/com/zd/auth/service/SysLoginService.java
  7. 1 0
      zd-model/src/main/java/com/zd/model/enums/SenseType.java
  8. 15 1
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/controller/FireDeviceController.java
  9. 5 5
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/utils/FireDeviceStatusTask.java
  10. 23 0
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/config/AlgorithmYml.java
  11. 15 0
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/domain/AnalysisReturnData.java
  12. 66 19
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/CheckService.java
  13. 0 15
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/LoginService.java
  14. 24 2
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/utils/HttpUtils.java
  15. 18 6
      zd-modules/zd-base/src/main/java/com/zd/base/files/file/controller/SysFileController.java
  16. 6 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/AlgorithmController.java
  17. 2 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabRiskPlanController.java
  18. 1 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSubjectLayoutController.java
  19. 3 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabRiskPlanSubVo.java
  20. 2 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/event/LabMessageListener.java
  21. 131 43
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/config/MqttConfig.java
  22. 17 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanAbnormalLogServiceImpl.java
  23. 38 12
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanServiceImpl.java
  24. 6 5
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanAbnormalGroupMapper.xml
  25. 8 5
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanMapper.xml
  26. 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/entity/OneClickFireDTO.java

@@ -17,4 +17,7 @@ public class OneClickFireDTO {
 
     @ApiModelProperty("是否火灾 0否 1是")
     private Integer ifFire;
+
+    @ApiModelProperty("自动执行/手动执行 0手动 1自动")
+    private Integer automanual;
 }

+ 11 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/entity/SensorFunctionStatus.java

@@ -68,6 +68,17 @@ public class SensorFunctionStatus extends BasicFunctionStatus {
 
     private String  configName;
 
+    @ApiModelProperty("手动灭火/自动灭火 0/1")
+    private Integer automanual;
+
+    public Integer getAutomanual() {
+        return automanual;
+    }
+
+    public void setAutomanual(Integer automanual) {
+        this.automanual = automanual;
+    }
+
     public SensorFunctionStatus() {
         //获取当前时间
         LocalDateTime newTime = LocalDateTime.now();

+ 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());
             }

+ 1 - 1
zd-auth/src/main/java/com/zd/auth/controller/TokenController.java

@@ -170,7 +170,7 @@ public class TokenController {
         String username = form.getUsername();
         R<LoginUser> userR = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
         if (userR.getCode() != HttpStatus.SUCCESS || userR.getData() == null) {
-            throw new ServiceException("登录用户:" + username + " 不存在", 530);
+            throw new ServiceException("用户不存在", 530);
         }
         String key = BaseConstants.DEFAULT_CODE_KEY + BaseConstants.GRANT_TYPE_MOBILE + "@" + username;
         String code = RandomUtil.randomNumbers(6);

+ 2 - 2
zd-auth/src/main/java/com/zd/auth/service/SysLoginService.java

@@ -65,7 +65,7 @@ public class SysLoginService {
         }
         if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
 //            recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
-            throw new ServiceException("登录用户:" + username + " 不存在", 530);
+            throw new ServiceException("账号或密码错误", 530);
         }
         LoginUser userInfo = userResult.getData();
         SysUser user = userResult.getData().getSysUser();
@@ -79,7 +79,7 @@ public class SysLoginService {
         }
         if (!SecurityUtils.matchesPassword(password, user.getPassword())) {
 //            recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码错误");
-            throw new ServiceException("用户不存在/密码错误", 530);
+            throw new ServiceException("账号或密码错误", 530);
         }
         recordLogininfor(user, BaseConstants.LOGIN_SUCCESS, "登录成功");
         return userInfo;

+ 1 - 0
zd-model/src/main/java/com/zd/model/enums/SenseType.java

@@ -36,6 +36,7 @@ public enum SenseType implements BaseEnum<Integer>, HardwareType {
     FLAME(15, "火焰", "火焰", "icon_22", ""),
     COCl2(16, "光气", "光气", "icon_22", "ppm"),
     Cl2(17, "氯气", "氯气", "icon_22", "ppm"),
+    HCHO(18, "甲醛", "甲醛", "icon_22", "ppm"),
     ;
     private Integer code;
     private String name;

+ 15 - 1
zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/controller/FireDeviceController.java

@@ -14,6 +14,7 @@ import com.zd.common.core.log.BusinessType;
 import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.web.controller.BaseController;
+import com.zd.laboratory.api.entity.OneClickFireDTO;
 import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.model.constant.CacheConstants;
 import com.zd.model.constant.CacheDevice;
@@ -431,6 +432,13 @@ public class FireDeviceController extends BaseController {
             map = sendOutFireMsg(hdlist,map,list.get(0).getDeviceCode());
         }
 
+        //通知预案(手动灭火)
+        OneClickFireDTO dto = new OneClickFireDTO();
+        dto.setDeviceCode(list.get(0).getDeviceCode());
+        dto.setIfFire(1);
+        dto.setAutomanual(0);
+        remoteLaboratoryService.oneClickFire(dto);
+
         //灭火日志添加
         HardwareFireDeviceLog fireDeviceLog = new HardwareFireDeviceLog();
         fireDeviceLog.setFireDeviceId(list.get(0).getId());
@@ -527,7 +535,7 @@ public class FireDeviceController extends BaseController {
         // 1离线 2在线 3异常
         if (StringUtils.isNull(jsonObject)) {
             vo.setDeviceStatus(1);
-        } else if (StringUtils.isNotNull(jsonObject.get("msg").toString())) {
+        } else if (StringUtils.isNotNull(jsonObject.get("msg").toString()) && jsonObject.get("msg").toString().length()>0) {
             vo.setDeviceStatus(3);
             vo.setDescribe(jsonObject.get("msg").toString());
         } else {
@@ -596,6 +604,12 @@ public class FireDeviceController extends BaseController {
         }
     }
 
+
+    @GetMapping(value = "/test")
+    public ResultData test(String code) {
+        return ResultData.success( redisService.getCacheObject(code));
+    }
+
     public static void main(String[] args) {
         Map<String,Object> map = new HashMap<>();
         map.put("fireStatus",1);

+ 5 - 5
zd-modules/zd-algorithm/src/main/java/com/zd/alg/fire/utils/FireDeviceStatusTask.java

@@ -68,18 +68,18 @@ public class FireDeviceStatusTask {
                 //兼容指令无反应问题
                 Thread.sleep(500);
                 mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE + vo.getDeviceCode(), activeCodeByte);
-                logger.info("集合数量:" + list.size() + ",mqtt消息推送, 灭火装置状态请求,实验室id:" + vo.getSubjectId() + ",继电器编号:" + vo.getDeviceCode()+",采集器编号"+vo.getRelayCode());
+                logger.info("集合数量:" + list.size() + ",mqtt消息推送, 灭火装置状态请求,实验室id:" + vo.getSubjectId() + ",采集器编号:" + vo.getDeviceCode()+",继电器编号"+vo.getRelayCode());
 
 
                 //获取灭火主机最后一次响应时间,判断响应是否超时
-                Long timeJson = redisService.getCacheObject(CacheConstants.FIRE_DEVICE_RESPOND_TIME+list.get(0).getDeviceCode());
+                Long timeJson = redisService.getCacheObject(CacheConstants.FIRE_DEVICE_RESPOND_TIME+vo.getDeviceCode());
                 if (StringUtils.isNull(timeJson)) {
-                    logger.info("设备掉线");
+                    logger.info("设备掉线,实验室id:"+vo.getSubjectId()+",采集器编号:"+vo.getDeviceCode());
                     //离线
-                    mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE+list.get(0).getDeviceCode(), "0");
+                    mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE+vo.getDeviceCode(), "0");
                 }else{
                     //在线
-                    mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE+list.get(0).getDeviceCode(), "1");
+                    mqttSend.send(MqttConstants.TOPIC_FIRE_DEVICE_ONLINE+vo.getDeviceCode(), "1");
                 }
             }
         } else {

+ 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));
+    }
 }

+ 0 - 15
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/LoginService.java

@@ -1,6 +1,5 @@
 package com.zd.alg.forward.serivce;
 
-import com.alibaba.fastjson.JSON;
 import com.zd.alg.forward.config.AlgorithmYml;
 import com.zd.auth.feign.RemoteAuthService;
 import com.zd.auth.form.LoginBody;
@@ -10,19 +9,12 @@ import com.zd.model.constant.SecurityConstants;
 import com.zd.model.domain.R;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.web.client.RestClientException;
-import org.springframework.web.client.RestTemplate;
-
 import javax.annotation.Resource;
-import java.util.HashMap;
 import java.util.Map;
 
 @Service
@@ -68,12 +60,6 @@ public class LoginService {
         }
     }
 
-
-    public String getCacheToken() {
-        //换取缓存的token
-        return getToken();
-    }
-
     /**
      * 刷新key
      */
@@ -98,5 +84,4 @@ public class LoginService {
             refreshToken();
         }
     }
-
 }

+ 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();
+    }
 }

+ 18 - 6
zd-modules/zd-base/src/main/java/com/zd/base/files/file/controller/SysFileController.java

@@ -31,12 +31,24 @@ public class SysFileController {
     @PostMapping("upload")
     public R<SysFile> upload(MultipartFile file) {
         try {
-            // 上传并返回访问地址
-            String url = sysFileService.uploadFile(file);
-            SysFile sysFile = new SysFile();
-            sysFile.setName(FileUtils.getName(url));
-            sysFile.setUrl(url);
-            return R.ok(sysFile);
+            String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+            String[] picSuffixList = {".jpg", ".png", ".jpeg", ".gif", ".bmp", ".ico",".pdf",".doc",".docx",".ppt",".pptx",".mp3",".mp4",".xls",".xlsx",".csv",".txt"};
+            boolean suffixFlag = false;
+            for (String white_suffix : picSuffixList) {
+                if (fileSuffix.toLowerCase().equals(white_suffix)) {
+                    suffixFlag = true;
+                    break;
+                }
+            }
+            if (suffixFlag) {
+                // 上传并返回访问地址
+                String url = sysFileService.uploadFile(file);
+                SysFile sysFile = new SysFile();
+                sysFile.setName(FileUtils.getName(url));
+                sysFile.setUrl(url);
+                return R.ok(sysFile);
+            }
+            return R.fail("文件上传类型不正确!");
         } catch (Exception e) {
             log.error("上传文件失败", e);
             return R.fail(e.getMessage());

+ 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){

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

@@ -263,9 +263,10 @@ public class LabRiskPlanController extends BaseController {
                     List<SensorFunctionStatus> sensorFunctionStatuses = new ArrayList<>();
                     SensorFunctionStatus sensorFunctionStatus = new SensorFunctionStatus();
                     sensorFunctionStatus.setVal("1");
-                    sensorFunctionStatus.setFunNum("火焰");
+                    sensorFunctionStatus.setFunNum("huoyan");
                     sensorFunctionStatus.setHardwareNum(oneClickFireDTO.getDeviceCode());
                     sensorFunctionStatus.setDescribe("火焰");
+                    sensorFunctionStatus.setAutomanual(oneClickFireDTO.getAutomanual());
                     sensorFunctionStatuses.add(sensorFunctionStatus);
                     subFunction.setSubId(hardwareFireDeviceVO.getSubjectId());
                     subFunction.setFunctionStatuses(sensorFunctionStatuses);

+ 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;

+ 3 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/LabRiskPlanSubVo.java

@@ -38,6 +38,9 @@ public class LabRiskPlanSubVo {
     @ApiModelProperty(name = "实验室ids")
     private String subjectIds;
 
+    @ApiModelProperty(name = "当前用户id")
+    private Long userId;
+
 //    @ApiModelProperty(name = "传感器类型字符串")
 //    private String types;
 

+ 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());

+ 131 - 43
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/config/MqttConfig.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.zd.algorithm.api.fire.RemoteFireDeviceService;
 import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.utils.SpringUtils;
+import com.zd.laboratory.api.entity.OneClickFireDTO;
+import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.laboratory.event.LabMessageEvent;
 import com.zd.laboratory.event.SensorNewStatusEvent;
 import com.zd.laboratory.mqtt.service.TerminalRouter;
@@ -68,6 +70,8 @@ public class MqttConfig {
 
     @Resource
     RemoteFireDeviceService remoteFireDeviceService;
+    @Resource
+    RemoteLaboratoryService remoteLaboratoryService;
 
     @Value("${mqtt.username:}")
     private String username;
@@ -158,6 +162,37 @@ public class MqttConfig {
     }
 
     /**
+     * 通道2
+     * @return
+     */
+    @Bean(name = MQTT_OUTBOUND_CHANNEL)
+    public MessageChannel mqttInputChannelTwo() {
+        return new DirectChannel();
+    }
+
+    /**
+     * 配置client2,监听的willTopic
+     * @return
+     */
+    @Bean
+    public MessageProducer inboundByte() {
+        // 可同时消费(订阅)多个Topic
+        adapter = new MqttPahoMessageDrivenChannelAdapter(consumerClientId, mqttClientFactory(), StringUtils.split(defaultTopic, ","));
+        adapter.setCompletionTimeout(5000);
+//        adapter.setConverter(new DefaultPahoMessageConverter());
+        adapter.setQos(2);
+
+        // 设置转换器,接收bytes
+        DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
+        converter.setPayloadAsBytes(true);
+        adapter.setConverter(converter);
+
+        // 设置订阅通道
+        adapter.setOutputChannel(mqttInboundChannel());
+        return adapter;
+    }
+
+    /**
      * 发送者消息处理
      *
      * @return
@@ -202,6 +237,82 @@ public class MqttConfig {
     }
 
     /**
+     * 通过通道2获取数据
+     * @return
+     */
+    @Bean
+    @ServiceActivator(inputChannel = MQTT_INBOUND_CHANNEL)
+    public  MessageHandler handlerByte() {
+        logger.info("=======进入消息处理器2=====");
+        return message -> {
+            String receivedTopic = message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC).toString();
+
+            try{
+                if(!(message.getPayload() instanceof byte[])){
+                    return;
+                }
+                logger.info("topic:"+receivedTopic);
+                if(receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)){
+
+                    logger.info("消息处理器2:message:"+message.getPayload().toString());
+                    //String type = topic.substring(topic.lastIndexOf("/")+1, topic.length());
+                    String messageStr = bytes2HexString((byte[])message.getPayload());
+                    logger.info("灭火消息,主机回复指令:"+messageStr);
+                    //返回非指令时不向下执行
+                    if(messageStr!=null && messageStr.length()<30){
+                        logger.info("灭火消息指令不正确");
+                        return;
+                    }
+
+                    //获取采集器编号
+                    receivedTopic = receivedTopic.substring(receivedTopic.lastIndexOf("/") + 1, receivedTopic.length());
+                    //根据状态指令获取主机状态
+                    JSONObject jsonObject = FireLaborUtil.getFireStatus(messageStr);
+                    logger.info("灭火主机状态:"+jsonObject+"采集器编号"+receivedTopic+",响应时间key:"+CacheConstants.FIRE_DEVICE_RESPOND_TIME+receivedTopic);
+                    //redis存值 采集器编号:主机状态json
+                    redisService.setCacheObject(receivedTopic, jsonObject, 1L, TimeUnit.MINUTES);
+                    //redis存值 灭火主机响应时间
+                    redisService.setCacheObject(CacheConstants.FIRE_DEVICE_RESPOND_TIME+receivedTopic, System.currentTimeMillis(), 1L, TimeUnit.MINUTES);
+                    logger.info("灭火消息,redis存值完毕========");
+
+                    Integer fireNumber = Integer.valueOf(jsonObject.get("fireNumber").toString());
+                    //灭火主机发生预警
+                    if (fireNumber > 0) {
+                        logger.info("灭火设备传感器异常,通知预案,状态:" + jsonObject.toJSONString());
+                        //发现灭火设备异常,发送消息通知小程序和PC
+                        commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_WARN+receivedTopic,jsonObject.toJSONString());
+                        if (fireNumber == 2) {
+                            logger.info("=====>>>>>>发现自动灭火");
+                            //通知预案
+                            //commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_CATCHFIRE+receivedTopic,jsonObject.toJSONString());
+                            OneClickFireDTO dto = new OneClickFireDTO();
+                            dto.setDeviceCode(receivedTopic);
+                            dto.setIfFire(1);
+                            dto.setAutomanual(1);
+                            remoteLaboratoryService.oneClickFire(dto);
+
+                            String isExist = redisService.getCacheObject(CacheConstants.FIRE_LOG_IS_EXIST);
+                            //redis中是否已存在日志已添加标识
+                            if(StringUtils.isEmpty(isExist)){
+                                //自动灭火日志添加
+                                R r = remoteFireDeviceService.addFireLog(receivedTopic);
+                                //redis存值,灭火日志已经添加标识
+                                redisService.setCacheObject(CacheConstants.FIRE_LOG_IS_EXIST, r.getData(), 60L, TimeUnit.MINUTES);
+                                logger.info("灭火日志添加执行结果," + r.getData());
+                            }
+                        }
+                    }
+
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        };
+    }
+
+
+
+    /**
      * 消费者消息处理
      * 设备心跳
      *
@@ -268,49 +379,7 @@ public class MqttConfig {
                             String relayCode = prefix[prefix.length - 1];
                             TerminalRouter.routerMap.get("HxpLockService").offLine(relayCode);
                         }
-                }}else if(receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)){
-                    String messageStrTest = byte2Hex(message.getPayload().toString().getBytes(StandardCharsets.UTF_8));
-                    logger.info("灭火消息返回,"+messageStrTest);
-                    logger.info("灭火消息消费,receivedTopic:" + receivedTopic + " messageStr:" + messageStr);
-                    //返回非指令时不向下执行
-                    if(receivedTopic!=null && receivedTopic.length()<30){
-                        logger.info("灭火消息指令不正确");
-                        return;
-                    }
-
-                    //获取采集器编号
-                    receivedTopic = receivedTopic.substring(receivedTopic.lastIndexOf("/") + 1, receivedTopic.length());
-                    //根据状态指令获取主机状态
-                    JSONObject jsonObject = FireLaborUtil.getFireStatus(messageStr);
-                    //redis存值 采集器编号:主机状态json
-                    redisService.setCacheObject(receivedTopic, jsonObject, 1L, TimeUnit.MINUTES);
-                    //redis存值 灭火主机响应时间
-                    redisService.setCacheObject(CacheConstants.FIRE_DEVICE_RESPOND_TIME+receivedTopic, System.currentTimeMillis(), 1L, TimeUnit.MINUTES);
-                    logger.info("灭火消息,redis存值完毕========");
-
-                    Integer fireNumber = Integer.valueOf(jsonObject.get("fireNumber").toString());
-                    //灭火主机发生预警
-                    if (fireNumber > 0) {
-                        logger.info("灭火设备传感器异常,通知预案,状态:" + jsonObject.toJSONString());
-                        //发现灭火设备异常,发送消息通知小程序和PC
-                        commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_WARN+receivedTopic,jsonObject.toJSONString());
-                        if (fireNumber == 2) {
-                            logger.info("=====>>>>>>发现自动灭火");
-                            //通知预案
-                            //commonSend.send(MqttConstants.TOPIC_FIRE_DEVICE_CATCHFIRE+receivedTopic,jsonObject.toJSONString());
-                            String isExist = redisService.getCacheObject(CacheConstants.FIRE_LOG_IS_EXIST);
-                            //redis中是否已存在日志已添加标识
-                            if(StringUtils.isEmpty(isExist)){
-                                //自动灭火日志添加
-                                R r = remoteFireDeviceService.addFireLog(receivedTopic);
-                                //redis存值,灭火日志已经添加标识
-                                redisService.setCacheObject(CacheConstants.FIRE_LOG_IS_EXIST, r.getData(), 60L, TimeUnit.MINUTES);
-                                logger.info("灭火日志添加执行结果," + r.getData());
-                            }
-                        }
-                    }
-                  }
-
+                }}
                 // TODO
 //                MessageBody messageBody = JSONObject.parseObject(messageStr, MessageBody.class);
 //                mqttResHandler.deal(JSONUtil.toBean(msg,com.ffy.mqtt.model.Message.class));
@@ -322,6 +391,25 @@ public class MqttConfig {
         };
     }
 
+    /**
+     * byte 数组转string
+     * @param b
+     * @return
+     */
+    public static String bytes2HexString(byte[] b) {
+        String r = "";
+
+        for (int i = 0; i < b.length; i++) {
+            String hex = Integer.toHexString(b[i] & 0xFF);
+            if (hex.length() == 1) {
+                hex = '0' + hex;
+            }
+            r += hex.toUpperCase()+" ";
+        }
+
+        return r;
+    }
+
     public static String byte2Hex(byte[] bytes) {
         logger.info("byte长度:"+bytes.length);
         StringBuilder builder = new StringBuilder();

+ 17 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabRiskPlanAbnormalLogServiceImpl.java

@@ -409,6 +409,23 @@ public class LabRiskPlanAbnormalLogServiceImpl implements ILabRiskPlanAbnormalLo
                     appVo.getVoiceOpreteActList().add(opreteVo);
                 }
 
+                //这里是查询一件灭火日志,是否插入。
+                labRiskPlanAbnormalLogVoByhard.setGroupId(b.getGroupId());
+                labRiskPlanAbnormalLogVoByhard.setRiskPlanId(b.getRiskPlanId());
+                labRiskPlanAbnormalLogVoByhard.setRiskStatus(6L);
+                List<LabRiskPlanAbnormalLogVO> riskPlanLogListByoneClickFire = labRiskPlanAbnormalLogMapper.adminSubByRiskPlan(labRiskPlanAbnormalLogVoByhard);
+                if(riskPlanLogListByoneClickFire.size()>0){
+                    HardwareOpreteActVO opreteVo = new HardwareOpreteActVO();
+                    opreteVo.setHardWareName("一键灭火");
+                    if("自动灭火".equals(riskPlanLogListByoneClickFire.get(0).getRemark())){
+                        opreteVo.setOpreteFlag(true);
+                    }else {
+                        opreteVo.setOpreteFlag(false);
+                    }
+                    opreteVo.setOpreteMes(riskPlanLogListByoneClickFire.get(0).getRemark());
+                    appVo.getHardwareOpreteActList().add(opreteVo);
+                }
+
                 //这里是查询语音电话短信,是否执行成功。
                 if(subDiy.size()>0){
                     SubDiyVO diyVo = subDiy.get(0);

+ 38 - 12
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 -> {
@@ -1093,7 +1092,6 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
 //                    remoteCameraService.startRecord("192.168.1.14");
                     remoteCameraService.startRecord(labHardware.getIpAddress());
                 }
-                R r = remoteCameraService.startRecord("192.168.1.64");
 
 
                 log.error("这里记录预警消息记录开始=======================================================");
@@ -1108,6 +1106,8 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
                 insertPlanAbnormalLogByPhone(labRiskPlanLevel, subFunction.getSubId(), groupId);
                 log.error("这里记录语音电话结束=======================================================");
 
+                insertPlanAbnormalLogByOneClickFire(labRiskPlanLevel, subFunction, groupId);
+
                 //向一体机推送语音播报
                 log.error("向一体机推送语音播报开始=======================================================");
                 try {
@@ -1629,6 +1629,28 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
         labRiskPlanAbnormalLogMapper.insertLabRiskPlanAbnormalLog(labRiskPlanAbnormalLog);
     }
 
+    public void insertPlanAbnormalLogByOneClickFire(LabRiskPlanLevel labRiskPlanLevel, SubFunction<SensorFunctionStatus> subFunction, Long groupId) {
+        //将一件灭火插入日志
+        subFunction.getFunctionStatuses().stream().filter(a->"huoyan".equals(a.getFunNum())).forEach(a -> {
+            if(a.getAutomanual()!=null){
+                LabRiskPlanAbnormalLog labRiskPlanAbnormalLog = new LabRiskPlanAbnormalLog();
+                labRiskPlanAbnormalLog.setRiskPlanId(labRiskPlanLevel.getRiskPlanId());
+                labRiskPlanAbnormalLog.setRiskPlanName("一键灭火");
+                labRiskPlanAbnormalLog.setSubjectId(subFunction.getSubId());
+                labRiskPlanAbnormalLog.setCreateTime(new Date());
+                labRiskPlanAbnormalLog.setGroupId(groupId);
+                labRiskPlanAbnormalLog.setRiskAttribute(labRiskPlanLevel.getRiskAttribute());
+                labRiskPlanAbnormalLog.setRiskPlanLevelId(labRiskPlanLevel.getId());
+                labRiskPlanAbnormalLog.setRiskPlanLevelName(RiskPlanLevelEnum.getValue(labRiskPlanLevel.getRiskPlanLevel()));
+                labRiskPlanAbnormalLog.setRiskPlanLevel(labRiskPlanLevel.getRiskPlanLevel());
+                labRiskPlanAbnormalLog.setRiskStatus(6L);
+                labRiskPlanAbnormalLog.setRemark(a.getAutomanual() == 1 ?"自动灭火":"手动灭火");
+                //插入风险日志
+                labRiskPlanAbnormalLogMapper.insertLabRiskPlanAbnormalLog(labRiskPlanAbnormalLog);
+            }
+        });
+    }
+
     /**
      * 调用执行硬件的接口,交由接口实现具体的设备开启或关闭
      *
@@ -1726,16 +1748,19 @@ 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()));
+        Map<SenseType, List<SensorFunctionStatus>> sensorFunctionStatusListMap = hardwareFunctionStatusConfig.getSensorFunctionStatusListMap();
         List<Long> list = new ArrayList<>();
         collect.forEach((key, value) -> {
             Integer count = 0;
 //            Integer fireCount = 0;
-
-            Map<SenseType, List<SensorFunctionStatus>> sensorFunctionStatusListMap = hardwareFunctionStatusConfig.getSensorFunctionStatusListMap();
             //预案级别下传感器列表
             for (LabRiskPlanSensorRelation labRiskPlanSensorRelation : value) {
                 List<SensorFunctionStatus> sensorFunctionStatuses = sensorFunctionStatusListMap.get(SenseType.getByCode(labRiskPlanSensorRelation.getSensorType()));
@@ -1770,10 +1795,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;
@@ -1936,6 +1961,7 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
     public Page<LabSubjectVO> getLabRiskPlanNoJoinSub(LabRiskPlanSubVo labRiskPlanSubVo) {
 //        String typeIds = getSensorTypesByRiskPlanId(labRiskPlanSubVo.getRiskPlanId());
 //        labRiskPlanSubVo.setTypes(typeIds);
+        labRiskPlanSubVo.setUserId(tokenService.getLoginUser().getUserid());
         Page<LabSubjectVO> labSubjectVOS = labRiskPlanMapper.getLabRiskPlanNoJoinSub(new Page<LabSubjectVO>(labRiskPlanSubVo.getPageNum(), labRiskPlanSubVo.getPageSize()), labRiskPlanSubVo);
         if (labSubjectVOS.getRecords().size() > 0) {
             for (LabSubjectVO labSubjectVO : labSubjectVOS.getRecords()) {
@@ -2067,7 +2093,7 @@ public class LabRiskPlanServiceImpl extends ServiceImpl<LabRiskPlanMapper, LabRi
                     return ResultData.success(map);
                 }
                 map.put("ifConflict","1");
-                map.put("message",tipsStr.substring(1) + "已关联预案与当前预案有传感器数值冲突,是否绑定到当前预案");
+                map.put("message",tipsStr.substring(1) + "中绑定的预案与当前预案存在监测数值冲突,是否替换为当前预案?");
                 return ResultData.success(map);
             }
         }

+ 6 - 5
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanAbnormalGroupMapper.xml

@@ -157,17 +157,18 @@
 
     <!-- 批量查询实验室预警 -->
     <select id="queryRiskExeRecordList" parameterType="com.zd.laboratory.domain.LabRiskPlanAbnormalGroup" resultType="com.zd.laboratory.domain.LabRiskPlanAbnormalGroup">
-        SELECT id, group_name, subject_id, subject_name, risk_attribute, status, create_time, create_by, update_time
-        FROM lab_risk_plan_abnormal_group
+        SELECT g.id, g.group_name, g.subject_id, CONCAT(s.name,s.room) AS subject_name, g.risk_attribute, g.STATUS, g.create_time, g.create_by, g.update_time
+        FROM lab_risk_plan_abnormal_group g
+        LEFT JOIN lab_subject s ON s.id = g.subject_id
         <where>
             <if test="searchValue != null and searchValue!='' ">and (
-                group_name like concat('%', #{searchValue}, '%')
-                or subject_name like concat('%', #{searchValue}, '%')
+                g.group_name like concat('%', #{searchValue}, '%')
+                or s.name like concat('%', #{searchValue}, '%')
                 )
             </if>
             <if test="riskAttribute != null ">and risk_attribute = #{riskAttribute}</if>
         </where>
-        ORDER  BY create_time DESC
+        ORDER  BY g.create_time DESC
     </select>
 
     <select id="selectById" resultMap="LabRiskPlanAbnormalGroupResult">

+ 8 - 5
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabRiskPlanMapper.xml

@@ -468,8 +468,8 @@
                 and (name like concat('%', #{riskPlanVo.searchValue}, '%')
                     or create_by like concat('%', #{riskPlanVo.searchValue}, '%'))
             </if>
-            <if test="riskPlanVo.startCondition != null">
-                and start_condition = #{riskPlanVo.startCondition}
+            <if test="riskPlanVo.startCondition != null and riskPlanVo.startCondition != ''">
+                and start_condition like concat('%', #{riskPlanVo.startCondition}, '%')
             </if>
         </where>
         order by create_time desc
@@ -489,7 +489,7 @@
                 and lrp.risk_plan_id = #{labRiskPlanSubVo.riskPlanId}
             </if>
             <if test="labRiskPlanSubVo.searchValue != null and labRiskPlanSubVo.searchValue != ''">
-                and ls.name = like concat('%', #{labRiskPlanSubVo.searchValue}, '%')
+                and ls.name like concat('%', #{labRiskPlanSubVo.searchValue}, '%')
             </if>
             <if test="labRiskPlanSubVo.level != null">
                 and ls.level = #{labRiskPlanSubVo.level}
@@ -520,11 +520,14 @@
                                                     LEFT JOIN lab_risk_plan_sensor_relation lrps on lrp.id = lrps.risk_plan_id
                                        where lrp.id = #{labRiskPlanSubVo.riskPlanId})
             </if>
+            <if test="labRiskPlanSubVo.userId != null">
+                and FIND_IN_SET (#{labRiskPlanSubVo.userId},ls.safe_user_id)
+            </if>
             <if test="labRiskPlanSubVo.searchValue != null and labRiskPlanSubVo.searchValue != ''">
-                and ls.name = like concat('%', #{labRiskPlanSubVo.searchValue}, '%')
+                and ls.name like concat('%', #{labRiskPlanSubVo.searchValue}, '%')
             </if>
             <if test="labRiskPlanSubVo.level != null">
-                #{labRiskPlanSubVo.level}
+                and ls.level = #{labRiskPlanSubVo.level}
             </if>
             <if test="labRiskPlanSubVo.typeId != null">
                 and ls.type_id = #{labRiskPlanSubVo.typeId}

+ 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>