linfutong пре 2 година
родитељ
комит
c1e1c46fe0

+ 16 - 0
release/V2.2版说明.md

@@ -0,0 +1,16 @@
+## 版本发布实现功能
+
+基于 中国矿业大学环测学院 和 苏州大学的的服务更新及bug修改。
+
+### 优化及bug修复处理
+1, 化学品一体机更新升级:
+- 化学品入库、领用、归还处,称重录制视频提交报“视频录制出错,请返回重新操作”错解决处理;
+- 录制视频操作过快(6s内),应用程序卡顿、卡死处理;
+- 录制视频取消再进入,程序卡死无响应问题处理;
+
+2,RFID门禁添加和编辑页,添加端口号需求开发实现及优化;
+
+3,智能柜锁开锁失败,采集器更换开发对接实现;
+
+4,安全准入模块新楼层楼栋关联处理;
+

+ 3 - 0
release/V2.3版说明.md

@@ -0,0 +1,3 @@
+## 版本发布实现功能
+
+基于V2.0版,对苏州大学 和 中国矿业大学环测学院的服务更新及bug修改等。

+ 0 - 0
release/sql/db_sql_v2.3.sql


+ 59 - 0
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/domain/AlgorithmResponseResult.java

@@ -0,0 +1,59 @@
+package com.zd.alg.forward.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>算法服务响应结果</p>
+ *
+ * @author linft
+ * @version 1.0
+ * @date 3/13/2023
+ */
+@Data
+public class AlgorithmResponseResult {
+
+    /**
+     * 响应code
+     */
+    private Long code;
+
+    /**
+     * 响应msg
+     */
+    private String message;
+
+    /**
+     * 是否验证通过
+     */
+    private Boolean isPass;
+
+
+    private String aid;
+
+    /**
+     * 识别cid
+     */
+    private String cid;
+
+    /**
+     * 识别图片
+     */
+    private String srcImage;
+
+    /**
+     * 响应识别图片
+     */
+    private String retImage;
+
+    /**
+     * 对象
+     */
+    private List<Object> objects;
+
+    /**
+     * 响应body
+     */
+    private String responseBody;
+}

+ 112 - 81
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/CheckService.java

@@ -139,60 +139,106 @@ public class CheckService {
                 //添加一条算法请求记录
                 R alg = insertRequestRecordLog(orgImgUrl, subId, checkValid);
                 logger.info("【调用算法服务】 添加算法调用日志,添加结果:"+JSONObject.toJSONString(alg));
+
+                //请求算法服务
                 ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
-                //算法记录更新
+                AlgorithmResponseResult responseResult = getResponseResult(send);
+                //添加成功,更新算法日志记录
                 if (alg.getCode() == 200) {
-                    try {
-                        updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, send);
-                        logger.info("【调用算法服务】 更新算法调用日志");
-                    } catch (Exception e) {
-                        logger.error("【调用算法服务】 更新日志异常,异常信息",e);
-                    }
+                    updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, responseResult);
+                    logger.info("【调用算法服务】 更新算法调用日志记录");
                 }
                 //判断算法
-                if (send == null || send.getStatus_code() != 1000) {
-                    assert send != null;
-                    logger.error("【调用算法服务】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
-                    return R.fail("算法服务错误,请重试!");
-                }
-                AnalysisReturnData data = send.getData();
-                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");
-                logger.info("【调用算法服务】 算法请求日志打印:算法ID:{},请求结果:{}", code, algorithmData.getOrDefault("is_alert", ""));
-                //通过
-                if (algorithmData.getOrDefault("is_alert", "").toString().equals("false") && !objects.isEmpty()) {
-                    alarmNum++;
-                } else {
-                    //不跳过
-                    if (StringUtils.isNotEmpty(labSkipped) && labSkipped.equals("1")) {
-                        //如果没有通过则次数加一
-                        //键为前缀+签到id +下划线+验证类型
-                        String key = BaseConstants.SINGIN_CHECK_JUMP_KEY + id + "_" + code;
-                        Long increment = redisTemplate.opsForValue().increment(key);
-                        redisService.expire(key, BaseConstants.SINGIN_OUT_TIME);
-                        if (increment != null && increment >= Integer.parseInt(labCheckCount)) {
-                            //黎晨这里让把跳过时状态码改为700,所以700的含义为检查失败并且跳过
-                            return R.fail(700, "符合跳过条件执行跳过");
+                if (responseResult.getCode() == 1000) {
+                    //通过
+                    if (responseResult.getIsPass()) {
+                        alarmNum++;
+                    } else {
+                        //不跳过
+                        if (StringUtils.isNotEmpty(labSkipped) && labSkipped.equals("1")) {
+                            //如果没有通过则次数加一
+                            //键为前缀+签到id +下划线+验证类型
+                            String key = BaseConstants.SINGIN_CHECK_JUMP_KEY + id + "_" + code;
+                            Long increment = redisTemplate.opsForValue().increment(key);
+                            redisService.expire(key, BaseConstants.SINGIN_OUT_TIME);
+                            if (increment != null && increment >= Integer.parseInt(labCheckCount)) {
+                                //黎晨这里让把跳过时状态码改为700,所以700的含义为检查失败并且跳过
+                                return R.fail(700, "符合跳过条件执行跳过");
+                            }
                         }
+                        return R.fail(300, "算法识别未通过", code);
                     }
-                    return R.fail(300, "算法识别未通过", code);
+                    Boolean f = send.getStatus_code() == 1000;
+                    String msg = f ? "解析成功!" : "解析失败!";
+                    send(code, id, f, msg);
+                } else {
+                    assert send != null;
+                    //logger.error("【调用算法服务】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
+                    return R.fail("算法服务错误,请重试!");
                 }
-                Boolean f = send.getStatus_code() == 1000;
-                String msg = f ? "解析成功!" : "解析失败!";
-                send(code, id, f, msg);
             }
             if (alarmNum == checkItem.length) {
                 return R.ok();
             }
         } catch (Exception e) {
-            logger.error("【算法服务异常】异常信息",e);
+            logger.error("【调用算法服务】 算法服务调用发生异常", e);
         }
         return R.fail();
     }
 
     /**
+     * 获取响应结果
+     * @param send
+     * @return
+     */
+    private AlgorithmResponseResult getResponseResult(ImgPostResponse<AnalysisReturnData> send) {
+        AlgorithmResponseResult responseResult = new AlgorithmResponseResult();
+        if (send != null) {
+            responseResult.setCode(send.getStatus_code());
+            responseResult.setMessage(send.getMessage());
+            if (send.getStatus_code() == 1000 && send.getData() != null) {
+                AnalysisReturnData data = send.getData();
+                responseResult.setAid(data.getAid());
+                responseResult.setCid(data.getCid());
+                responseResult.setRetImage(data.getRet_image());
+                responseResult.setSrcImage(data.getSrc_image());
+                //检查结果
+                JSONObject result = (JSONObject) data.getResult();
+                JSONObject algorithmData = result.getJSONObject("algorithm_data");
+                JSONObject model = result.getJSONObject("model_data");
+                List<Object> objects = model.getJSONArray("objects");
+                //是否验证通过
+                //if(!algorithmData.getBoolean("is_alert") && objects.size()>0){
+                //算法厂家技术人员前期要添加objects判断精准性,后面对接人员要让去掉对objects的判断
+                if (!algorithmData.getBoolean("is_alert")) {
+                    //不报警,代表验证通过
+                    responseResult.setIsPass(Boolean.TRUE);
+                } else {
+                    //报警,代表不通过
+                    responseResult.setIsPass(Boolean.FALSE);
+                }
+                responseResult.setObjects(objects);
+                //存响应实体数据,去掉图片
+                data.setRet_image("");
+                data.setSrc_image("");
+                ImgPostResponse<AnalysisReturnData> response = new ImgPostResponse<>();
+                response.setData(data);
+                response.setStatus_code(send.getStatus_code());
+                response.setMessage(send.getMessage());
+                responseResult.setResponseBody(JSONObject.toJSONString(response));
+            } else {
+                responseResult.setResponseBody(JSONObject.toJSONString(send));
+            }
+        } else {
+            responseResult.setCode(0L);
+            responseResult.setMessage("算法服务未响应");
+            responseResult.setResponseBody("算法服务未响应");
+        }
+        logger.info("【调用算法服务】 算法服务请求结果:code = {}, message = {}, isPass = {}", responseResult.getCode(), responseResult.getMessage(), responseResult.getIsPass());
+        return responseResult;
+    }
+
+    /**
      * 添加日志记录
      * @param fileUrl
      * @param subId
@@ -213,52 +259,38 @@ public class CheckService {
     /**
      * 算法调用日志更新
      * @param id
-     * @param send
+     * @param responseResult
      */
-    private void updateRequestRecordLog(Long id,ImgPostResponse<AnalysisReturnData> send) {
-        Algorithm algorithm = new Algorithm();
-        algorithm.setId(id);
-        //请求成功
-        if (send != null && send.getStatus_code() == 1000) {
-            AnalysisReturnData data =  send.getData();
-            //识别后的图片
-            String picture = data.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();
-            algorithm.setAlgorithmResult(imageUrl);
-            //识别id
-            algorithm.setSignId(Long.parseLong(data.getCid()));
-            //是否报警
-            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){
-                algorithm.setIsAlarm(0);
-            }else{
-                algorithm.setIsAlarm(1);
+    private void updateRequestRecordLog(Long id, AlgorithmResponseResult responseResult) {
+        try {
+            Algorithm algorithm = new Algorithm();
+            algorithm.setId(id);
+            if (responseResult.getCode() == 1000) {
+                //识别后的图片
+                String picture = responseResult.getRetImage();
+                String header = "data:image/jpeg;base64," + picture;
+                MultipartFile multipartFile = Base64DecodedMultipartFile.base64ToMultipart(header);
+                R<SysFile> sysFileR = remoteFileService.upload(multipartFile);
+                String imageUrl = sysFileR.getData().getUrl();
+                algorithm.setAlgorithmResult(imageUrl);
+                //识别id
+                algorithm.setSignId(Long.parseLong(responseResult.getCid()));
+                //是否通过
+                algorithm.setIsAlarm(responseResult.getIsPass()?0:1);
+                algorithm.setStatus(1);
+
+            } else {
+                algorithm.setStatus(0);
             }
-            algorithm.setStatus(1);
-        } else {
-            algorithm.setStatus(0);
-        }
-        //存原始数据
-        AnalysisReturnData respData = send != null?send.getData():null;
-        if (respData != null) {
-            respData.setRet_image("Removed to save respBody");
-            respData.setSrc_image("Removed to save respBody");
-            ImgPostResponse<AnalysisReturnData> response = new ImgPostResponse<>();
-            response.setData(respData);
-            response.setStatus_code(send.getStatus_code());
-            response.setMessage(send.getMessage());
-            algorithm.setRespData(JSONObject.toJSONString(response));
-            algorithm.setRespCode(send.getStatus_code());
+            //存响应实体数据
+            algorithm.setRespData(responseResult.getResponseBody());
+            algorithm.setRespCode(responseResult.getCode());
+            algorithm.setUpdateTime(new Date());
+            //logger.info("【算法服务】 更新日志实体信息:"+JSONObject.toJSONString(algorithm));
+            laboratoryService.update(algorithm);
+        } catch (Exception e) {
+            logger.error("【调用算法服务】调用算法服务后,更新日志记录发生异常", e);
         }
-        algorithm.setUpdateTime(new Date());
-        //logger.info("【算法服务】 更新日志实体信息:"+JSONObject.toJSONString(algorithm));
-        laboratoryService.update(algorithm);
     }
 
     /**
@@ -379,7 +411,6 @@ public class CheckService {
         return algorithm;
     }
 
-
     /**
      * @param algorithmResult
      * @param type

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

@@ -52,7 +52,6 @@ public class AlgorithmController extends BaseController {
 
     @PostMapping("/saveAlgorithm")
     public ResultData saveAlgorithmData(@RequestBody Algorithm algorithm) {
-        logger.info("===================记录添加========================");
         Object flg =algorithmService.saveData(algorithm);
         return  ResultData.success(Integer.valueOf(flg.toString())>0?algorithm.getId():Integer.valueOf(flg.toString()));
     }

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

@@ -282,7 +282,7 @@ public class MqttConfig {
             public void handleMessage(Message<?> message) throws MessagingException {
                 MessageHeaders messageHeaders = message.getHeaders();
                 String receivedTopic = (String) messageHeaders.get(MqttHeaders.RECEIVED_TOPIC);
-//                logger.info("[通道] - [{}],[{}]", receivedTopic,message.getPayload());
+				//logger.info("[通道] - [{}],[{}]", receivedTopic,message.getPayload());
                 String messageStr = message.getPayload().toString();
                 if (receivedTopic.startsWith(devicePrefix)) {
                     if (receivedTopic.contains("788D4C6C6187ABC")) {

+ 0 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectAccessRecordServiceImpl.java

@@ -321,7 +321,6 @@ public class LabSubjectAccessRecordServiceImpl implements ILabSubjectAccessRecor
                         }
                     });
         }
-
         return i;
     }