Bläddra i källkod

v5 算法的修改解析

donggaosheng 3 år sedan
förälder
incheckning
b485521cfa

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

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