Browse Source

bug修复

hecheng 3 years ago
parent
commit
53b53286ef

+ 3 - 6
docker/zd/docker-compose.env

@@ -1,17 +1,14 @@
 # JVM参数
 # 可通过docker-compose -f docker-compose-services.yml config命令查看是否生效
-JAVA_OPTS=-Xmx128m -Xms128m
-
-# 环境配置
-SPRING_PROFILES_ACTIVE=dev
+JAVA_OPTS='-Xmx128m -Xms128m'
 
 # nacos配置
-NACOS_HOST=zd-nacos
+NACOS_HOST=192.168.1.88
 NACOS_PORT=8848
 NACOS_DATA_BASE=cloud_data_test
 
 # Redis配置
-REDIS_HOST=zd-redis
+REDIS_HOST=192.168.1.43
 REDIS_PORT=16379
 REDIS_PASS=2ask8to9
 

+ 67 - 53
zd-modules/zd-forward/src/main/java/com/zd/forward/serivce/CheckService.java

@@ -87,67 +87,71 @@ public class CheckService {
     private RemoteLaboratoryService laboratoryService;
 
 
-
     private static final String warn = "违规操作告警:请{},离开实验室!";
 
     /**
      * 合并检查 三合一套餐
      */
     public R checkAndCommit(Long id, MultipartFile file, Long subId) {
+        logger.info("===============1.进入方法=================");
         try {
             int alarmNum = 0;
             //========= 请求超时验证部分开始 ===========
             //600 则代表退出验证流程 需要重新刷卡
             R<Long> fail = getObjectR(id);
-            logger.info("===============1================={}",fail);
-            if (fail.getCode() != 200) return fail;
+            logger.info("===============1================={}", fail);
+            if (fail.getCode() != 200) {
+                return fail;
+            }
             //根据实验室id查询检查项
             R<Map<Object, Object>> subject = laboratoryService.getCheckInfo(subId);
-            logger.info("===============2================={}",subject);
-            if (subject.getCode() != 200) return subject;
+            logger.info("===============2================={}", subject);
+            if (subject.getCode() != 200) {
+                return subject;
+            }
             Map<Object, Object> map = subject.getData();
-            Object labCheckInObj=map.get("checkIn");
-            if(StringUtils.isNull(labCheckInObj)){
+            Object labCheckInObj = map.get("checkIn");
+            if (StringUtils.isNull(labCheckInObj)) {
                 return R.fail(700, "未配置检查项");
             }
-            String labSkipped="0";
-            String labCheckCount="2";
-            Object labSkippedObj=map.get("skipped");
-            if(StringUtils.isNotNull(labSkippedObj)){
-                labSkipped=String.valueOf(labSkippedObj);
+            String labSkipped = "0";
+            String labCheckCount = "2";
+            Object labSkippedObj = map.get("skipped");
+            if (StringUtils.isNotNull(labSkippedObj)) {
+                labSkipped = String.valueOf(labSkippedObj);
             }
-            Object labCheckCountObj=map.get("checkCount");
-            if(StringUtils.isNotNull(labCheckCountObj)){
-                labCheckCount=String.valueOf(labCheckCountObj);
+            Object labCheckCountObj = map.get("checkCount");
+            if (StringUtils.isNotNull(labCheckCountObj)) {
+                labCheckCount = String.valueOf(labCheckCountObj);
             }
-            logger.info("########{}########",labCheckCount);
+            logger.info("########{}########", labCheckCount);
             String labCheckIn = String.valueOf(labCheckInObj);
             String[] checkItem = labCheckIn.split(",");
             for (String code : checkItem) {
                 //========= 获取算法INFO ===========
                 AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
                 MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
-                HttpEntity<MultiValueMap<String, Object>> files=getHttpEntityMap(file,params);
-                ImgPostResponse<DataPostAnalysisRespDto> send = HttpUtils.send(restTemplateLocal,files,algorithmYml);
+                HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(file, params);
+                ImgPostResponse<DataPostAnalysisRespDto> send = HttpUtils.send(restTemplateLocal, files, algorithmYml);
                 if (send == null || send.getStatus_code() != 1000) {
                     assert send != null;
                     logger.error(send.getMessage());
                     return R.fail("算法服务错误,请重试!");
                 }
-                R algorithm = saveAlgorithm(send,checkValid);
+                R algorithm = saveAlgorithm(send, checkValid);
                 if (algorithm.getCode() != 200) return algorithm;
                 DataPostAnalysisRespDto data = send.getData();
 
-                Map<String,Object> result = (Map<String, Object>) data.getAnalysisDatas().get(0).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("============{}============",data);
-                logger.info("============算法请求日志打印:算法ID:{},请求结果:{}",code,algorithmData.getOrDefault("is_alert", ""));
+                Map<String, Object> result = (Map<String, Object>) data.getAnalysisDatas().get(0).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("============{}============", data);
+                logger.info("============算法请求日志打印:算法ID:{},请求结果:{}", code, algorithmData.getOrDefault("is_alert", ""));
                 //通过的
-                if(algorithmData.getOrDefault("is_alert", "").toString().equals("false") && !objects.isEmpty()){
+                if (algorithmData.getOrDefault("is_alert", "").toString().equals("false") && !objects.isEmpty()) {
                     alarmNum++;
-                }else{
+                } else {
                     //不跳过
                     if (StringUtils.isNotEmpty(labSkipped) && labSkipped.equals("1")) {
                         //如果没有通过则次数加一
@@ -155,7 +159,7 @@ public class CheckService {
                         String key = Constants.SINGIN_CHECK_JUMP_KEY + id + "_" + code;
                         Long increment = redisService.redisTemplate.opsForValue().increment(key);
                         redisService.expire(key, Constants.SINGIN_OUT_TIME);
-                        if (increment!=null && increment >= Integer.parseInt(labCheckCount)) {
+                        if (increment != null && increment >= Integer.parseInt(labCheckCount)) {
                             //黎晨这里让把跳过时状态码改为700,所以700的含义为检查失败并且跳过
                             return R.fail(700, "符合跳过条件执行跳过");
                         }
@@ -163,8 +167,8 @@ public class CheckService {
                     return R.fail(300, "算法识别未通过", code);
                 }
                 Boolean f = send.getStatus_code() == 1000;
-                String msg=f?"解析成功!":"解析失败!";
-                send(code, id, f,msg);
+                String msg = f ? "解析成功!" : "解析失败!";
+                send(code, id, f, msg);
             }
             if (alarmNum == checkItem.length) {
                 return R.ok();
@@ -177,13 +181,15 @@ public class CheckService {
     }
 
     /**
-     * @param id   进出记录ID
+     * @param id 进出记录ID
      */
     public R checkAndCommit(String code, MultipartFile file, Long id) {
         //========= 请求超时验证部分开始 ===========
         //600 则代表退出验证流程 需要重新刷卡
         R<Long> fail = getObjectR(id);
-        if (fail.getCode() != 200) return fail;
+        if (fail.getCode() != 200) {
+            return fail;
+        }
         //========= 请求超时验证部分结束 ===========
         //========= 获取算法INFO ===========
         AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
@@ -200,7 +206,7 @@ public class CheckService {
         R apply = R.fail("算法服务错误,请重试!");
         Boolean f = false;
         try {
-            if (send == null || send.getInteger("status_code") != 1000l) {
+            if (send == null || send.getInteger("status_code") != 1000L) {
                 apply = R.fail("算法服务错误,请重试!");
                 return apply;
             }
@@ -226,11 +232,11 @@ public class CheckService {
                     apply.setCode(700);
                 }
             }
-        }catch (Exception ex){
+        } catch (Exception ex) {
             ex.printStackTrace();
             apply = R.fail("算法服务返回数据错误,请联系管理员!");
             return apply;
-        } finally{
+        } finally {
 //            //无论成功失败,插入记录数据,异步请求远程接口
             send(code, id, f, apply.getMsg());
 //            //保存识别记录
@@ -248,7 +254,7 @@ public class CheckService {
         }
         //=========算法服务返回结果验证结束
         logger.info(apply.toString());
-        if (apply.getCode()==200){
+        if (apply.getCode() == 200) {
             //加奖励分
             // laboratoryService.addRecord();
         }
@@ -370,14 +376,18 @@ public class CheckService {
         }
         //刷新key
         boolean expire = redisService.expire(Constants.SINGIN_id_KEY + id, 120);
-        if (!expire) return R.fail(600, "签到&签出已超时,请重新刷卡重试!");
+        if (!expire) {
+            return R.fail(600, "签到&签出已超时,请重新刷卡重试!");
+        }
         return R.ok(subId);
     }
 
     //给黎晨用的模拟方法 他让给他mock个方法测试
     public R mockTest(String code, MultipartFile file, Long id) {
         R<Long> objectR = getObjectR(id);
-        if (objectR.getCode() != 200) return objectR;
+        if (objectR.getCode() != 200) {
+            return objectR;
+        }
         //随机成功或失败
         Boolean f = RandomUtil.randomInt(0, 2) == 0;
         //无论成功失败,插入记录数据,异步请求远程接口
@@ -402,17 +412,20 @@ public class CheckService {
 
     public void send(String code, Long id, Boolean f, String msg) {
         String token = Objects.requireNonNull(ServletUtils.getRequest()).getHeader(SecurityConstants.TOKEN_AUTHENTICATION);
-        if (CharSequenceUtil.isBlank(token)) throw new ServiceException("无权限!");
+        if (CharSequenceUtil.isBlank(token)) {
+            throw new ServiceException("无权限!");
+        }
         sendSginAccessLogService.sendAddLogRest(code, id, f, msg, token, algorithmYml.getLoginUri() + algorithmYml.getCheckLogUrl());
     }
 
     /**
      * 获取算法请求地址
+     *
      * @param checkValid
      * @param id
      * @return
      */
-    private String getPostUrl(AlgorithmYml.CheckValid checkValid, Long id){
+    private String getPostUrl(AlgorithmYml.CheckValid checkValid, Long id) {
         //设置请求体,注意是LinkedMultiValueMap
         MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
         Set<String> keySet = params.keySet();
@@ -497,31 +510,32 @@ public class CheckService {
 
     /**
      * 存储数据
+     *
      * @param send
      * @param checkValid
      */
-    private R saveAlgorithm(ImgPostResponse<DataPostAnalysisRespDto> send,AlgorithmYml.CheckValid checkValid){
+    private R saveAlgorithm(ImgPostResponse<DataPostAnalysisRespDto> send, AlgorithmYml.CheckValid checkValid) {
         DataPostAnalysisRespDto analysisRespDto = send.getData();
         List<AnalysisData> analysisDatas = analysisRespDto.getAnalysisDatas();
-        if (!analysisDatas.isEmpty()){
-            for (AnalysisData data:analysisDatas) {
+        if (!analysisDatas.isEmpty()) {
+            for (AnalysisData data : analysisDatas) {
                 String picture = data.getRet_image();
-                String header = "data:image/jpeg;base64,"+picture;
+                String header = "data:image/jpeg;base64," + picture;
                 MultipartFile multipartFile = Base64DecodedMultipartFile.base64ToMultipart(header);
                 R<SysFile> sysFileR = remoteFileService.upload(multipartFile);
                 String imageUrl = sysFileR.getData().getUrl();
-                Map<String,Object> result = (Map<String, Object>) data.getResult();
-                Map<String,Object> map=new HashMap<>();
-                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<String, Object> result = (Map<String, Object>) data.getResult();
+                Map<String, Object> map = new HashMap<>();
+                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{
+                } else {
                     map.put("isAlarm", 1);
                 }
-                map.put("did",checkValid.getDid());
-                map.put("aid",checkValid.getAlgoId());
+                map.put("did", checkValid.getDid());
+                map.put("aid", checkValid.getAlgoId());
                 map.put("src_img", imageUrl);
                 map.put("type", "image");
                 map.put("algorithmName", checkValid.getAlgorithmName());

+ 0 - 35
zd-modules/zd-forward/src/test/java/com/zd/forward/serivce/CheckServiceTest.java

@@ -1,35 +0,0 @@
-package com.zd.forward.serivce;
-
-
-import com.alibaba.fastjson.JSON;
-import com.zd.common.redis.service.RedisService;
-import com.zd.forward.domain.ImgPostResponse;
-import org.junit.jupiter.api.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-/**
- * @Author: zhoupan
- * @Date: 2021/11/14/15:50
- * @Description:
- */
-
-@SpringBootTest
-class CheckServiceTest {
-    @Autowired
-    CheckService checkService;
-    @Autowired
-    RedisService redisService;
-
-    @Test
-    public void testX()
-    {
-
-
-    }
-
-
-
-
-}

+ 20 - 2
zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/FridServiceImpl.java

@@ -9,12 +9,21 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.zd.common.core.constant.Constants.MAP_INIT_SIZE;
+
+/**
+ * @author Administrator
+ */
 @Service
 @Slf4j
 public class FridServiceImpl implements IFridService {
 
-    private final ThreadPoolTaskExecutor taskExecutor= SpringUtils.getBean("taskExecutor");
+    private final ThreadPoolTaskExecutor taskExecutor = SpringUtils.getBean("taskExecutor");
 
+    private final Map<String, Thread> threadMap = new HashMap<>(MAP_INIT_SIZE);
 
     private IService rfidService(Integer type) {
         return SpringUtils.getBean(ManufacturerTypeEnum.matchByValue(type).getService());
@@ -22,12 +31,21 @@ public class FridServiceImpl implements IFridService {
 
     @Override
     public void start(RemoteLabHardware hardware) {
-        taskExecutor.execute(()->rfidService(hardware.getManufacturerType()).start(hardware));
+        taskExecutor.execute(() -> {
+            rfidService(hardware.getManufacturerType()).start(hardware);
+            log.info("===================thread name:{}===============", Thread.currentThread().getName());
+            threadMap.computeIfAbsent(hardware.getIpAddress(), f -> Thread.currentThread());
+        });
     }
 
     @Override
     public void stop(RemoteLabHardware hardware) {
         rfidService(hardware.getManufacturerType()).disconnect(hardware);
+        Thread thread = threadMap.get(hardware.getIpAddress());
+        if (thread != null && thread.isAlive()) {
+            thread.interrupt();
+            threadMap.remove(hardware.getIpAddress());
+        }
     }
 
     @Override