فهرست منبع

优化测报灯图片存储表结构,避免过多关联导致mongodb查询过慢的问题

zhaiyifei 1 سال پیش
والد
کامیت
dd9e980d72

+ 8 - 1
src/main/java/com/yunfeiyun/agmp/iots/core/mqtt/network/MqttSubscriber.java

@@ -55,7 +55,14 @@ public class MqttSubscriber implements MqttCallbackExtended {
         try {
             String msgContent = new String(mqttMessage.getPayload(), StandardCharsets.UTF_8);
             log.info("【上报数据:收到】收到mqtt消息:" + topic + ", " + msgContent);
-            JSONObject obj = JSON.parseObject(msgContent);
+            JSONObject obj = null;
+            try{
+                obj = JSON.parseObject(msgContent);
+            }catch (Exception e){
+                log.error("【上报数据:解析异常】收到mqtt消息:" + topic + ", " + msgContent);
+                return;
+            }
+
             Device device = mqttCore.getDevice();
             if (null == device) {
                 // 当收到mqtt消息无对应的设备类型时,则丢弃消息。

+ 19 - 9
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/CqCbdDeviceImpl.java

@@ -7,23 +7,21 @@ import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.common.utils.reflect.ReflectUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
 import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;
 import com.yunfeiyun.agmp.iot.common.domain.IotCbddata;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdModel;
-import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iot.common.service.IotAddressService;
-import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
-import com.yunfeiyun.agmp.iots.config.TestConst;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iots.core.manager.MqttManager;
 import com.yunfeiyun.agmp.iots.device.common.DeviceAbstractImpl;
-import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdMsgUtil;
-import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdTakephotoMsg;
-import com.yunfeiyun.agmp.iots.device.service.*;
 import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdConfigMsg;
+import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdMsgUtil;
 import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdReqMsg;
-import com.yunfeiyun.agmp.iots.core.manager.MqttManager;
-import com.yunfeiyun.agmp.iots.core.mqtt.network.MqttPublisher;
+import com.yunfeiyun.agmp.iots.device.domain.cbd.YfCbdTakephotoMsg;
+import com.yunfeiyun.agmp.iots.device.service.ICbdDevice;
 import com.yunfeiyun.agmp.iots.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
@@ -339,6 +337,16 @@ public class CqCbdDeviceImpl extends DeviceAbstractImpl implements ICbdDevice {
         return true;
     }
 
+    private JSONObject makeTestData(JSONObject jsonObject){
+        jsonObject.put("Image", "https://web.hnyfwlw.com:58003/Basics/cbd/866547058614465/2024/7/13/192.168.1.105_01_20240520134121057_ALARM_INPUT.jpg");
+        jsonObject.put("Result_c", "0,26");
+        jsonObject.put("Image_b", "https://web.hnyfwlw.com:58003/Basics/cbd/866547058614465/2024/7/13/192.168.1.105_01_20240520134121057_ALARM_INPUT.jpg");
+        jsonObject.put("Result_image_b", "https://web.hnyfwlw.com:58003/ResultB/cbd/866547058614465/2024/7/13/192.168.1.105_01_20240520134121057_ALARM_INPUT.jpg");
+        jsonObject.put("Result_b", "160,1#260,1");
+        jsonObject.put("Result_code_b", "[{'160': [2116, 2679, 2220, 2749, 0.92]}, {'260': [2401, 2355, 2446, 2378, 0.79]}]");
+        return jsonObject;
+    }
+
     /**
      *
      * @param jsonObject
@@ -357,7 +365,7 @@ public class CqCbdDeviceImpl extends DeviceAbstractImpl implements ICbdDevice {
         String devtypeBid = iotDevice.getDevtypeBid();
         String deviceTypeId = jsonObject.getString("device_type_id");
         String devCode = jsonObject.getString("imei");
-        log.info("【解析测报灯数据】:devtypeBid:{},deviceTypeId,{},devCode:{}", devtypeBid, deviceTypeId, devCode);
+        log.info("【解析测报灯图片数据】:devtypeBid:{},deviceTypeId,{},devCode:{}", devtypeBid, deviceTypeId, devCode);
         boolean isCbd = true;
         if (StringUtils.isNotEmpty(deviceTypeId) && !deviceTypeId.equals("3")) {
             devtypeBid = "xct";
@@ -368,6 +376,8 @@ public class CqCbdDeviceImpl extends DeviceAbstractImpl implements ICbdDevice {
             return "暂不处理吸虫塔设备";
         }
 
+        jsonObject = makeTestData(jsonObject);
+
         String cbdimgAddr = jsonObject.getString("Image");
         if (StringUtils.isEmpty(cbdimgAddr)) {
             return "图片地址不存在,则不处理";

+ 244 - 154
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/IotCbdImgService.java

@@ -2,25 +2,25 @@ package com.yunfeiyun.agmp.iots.device.serviceImp;
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.yunfeiyun.agmp.common.constant.ErrorCode;
 import com.yunfeiyun.agmp.common.constant.ResConstants;
-import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
-
-import com.yunfeiyun.agmp.iot.common.domain.*;
+import com.yunfeiyun.agmp.iot.common.domain.IotCbdPestrecog;
+import com.yunfeiyun.agmp.iot.common.domain.IotCbdimg;
+import com.yunfeiyun.agmp.iot.common.domain.IotCbdrecog;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.enums.EnumCbdMarkType;
 import com.yunfeiyun.agmp.iot.common.enums.EnumCbdRecogType;
-import com.yunfeiyun.agmp.iot.common.model.IotWarncheck;
+import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iot.common.service.YfCbdRecogeService;
 import com.yunfeiyun.agmp.iot.common.util.tmn.cbd.CbdInsectIdentifyUtil;
-
 import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
 import com.yunfeiyun.agmp.iots.service.IIotPestService;
 import com.yunfeiyun.agmp.iots.service.impl.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -58,10 +58,25 @@ public class IotCbdImgService {
         return StringUtils.isNotEmpty(v) && !v.equals("0") ? v : "";
     }
 
-    private void saveRecogImgByA(IotDevice iotDevice, IotCbdimg iotCbdimg, JSONObject jsonObject, IotPestRecogService.PestRecogResult pestRecogResult){
-        String cbdrecogResult = this.getJsonData("Result", jsonObject);
-        String cbdrecogAddr = this.getJsonData("Result_image", jsonObject);
-        String cbdrecogMachinemark = this.getJsonData("Result_code", jsonObject);
+    private IotCbdrecog makeRecogImg(EnumCbdRecogType enumCbdRecogType, EnumCbdMarkType enumCbdMarkType,
+                                     IotDevice iotDevice, IotCbdimg iotCbdimg, JSONObject jsonObject, long cbdrecogTotalnum){
+
+        String cbdRecogType = enumCbdRecogType.getCode();
+        String cbdMarkType = enumCbdMarkType.getCode();
+        String cbdrecogResult = null;
+        String cbdrecogAddr = null;
+        String cbdrecogMachinemark = null;
+        if(Objects.equals(cbdRecogType, EnumCbdRecogType.A.getCode())){
+            cbdrecogResult = this.getJsonData("Result", jsonObject);
+            cbdrecogAddr = this.getJsonData("Result_image", jsonObject);
+            cbdrecogMachinemark = this.getJsonData("Result_code", jsonObject);
+        }else if(Objects.equals(cbdRecogType, EnumCbdRecogType.B.getCode())){
+            cbdrecogResult = this.getJsonData("Result_b", jsonObject);
+            cbdrecogAddr = this.getJsonData("Result_image_b", jsonObject);
+            cbdrecogMachinemark = this.getJsonData("Result_code_b", jsonObject);
+        }else{
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "不支持的识别类型:" + cbdRecogType);
+        }
 
         String recogBid = iotCbdimg.getUUId();
         JSONArray recogArray = JSONArray.parseArray(cbdrecogMachinemark);
@@ -73,43 +88,103 @@ public class IotCbdImgService {
             cbdrecogAddr = getPestRecogImgOssUrl(iotCbdimg.getCbdimgAddr(), recogBid, points);
         }
 
-        // 保存 测报灯图片识别信息
-        IotCbdrecog iotCbdrecog = iotCbdRecogService.saveIotCbdRecog(
-                EnumCbdRecogType.A, recogBid, iotCbdimg, iotDevice, cbdrecogAddr, cbdrecogResult, cbdrecogMachinemark, pestRecogResult);
+        // 生成测报灯图片识别信息
+        IotCbdrecog iotCbdrecog = iotCbdRecogService.makeIotCbdRecog(recogBid, iotCbdimg, iotDevice, cbdrecogAddr,
+                cbdrecogResult, cbdrecogMachinemark);
 
-        // 保存 虫情识别信息
-        iotPestRecogService.savePestRecog(pestRecogResult, iotDevice, iotCbdrecog);
-    }
+        iotCbdrecog.setCbdrecogType(cbdRecogType);
+        iotCbdrecog.setCbdrecogMarktype(cbdMarkType);
+        iotCbdrecog.setCbdrecogTotalnum(cbdrecogTotalnum);
 
-    private void saveRecogImgByB(IotDevice iotDevice, IotCbdimg iotCbdimg, JSONObject jsonObject, IotPestRecogService.PestRecogResult pestRecogResult){
-        String cbdrecogResultB = this.getJsonData("Result_b", jsonObject);
-        String cbdrecogAddrB = this.getJsonData("Result_image_b", jsonObject);
-        String cbdrecogMachinemarkB = this.getJsonData("Result_code_b", jsonObject);
+        IotPestRecogService.PestRecogResult pestRecogResult = iotPestRecogService.getIotPestrecogResult(
+                iotDevice, iotCbdrecog);
 
-        String recogBid = iotCbdimg.getUUId();
-        JSONArray recogArray = JSONArray.parseArray(cbdrecogMachinemarkB);
-        if (recogArray != null){
-            List<JSONObject> points = new ArrayList<>();
-            for(Object o: JSONArray.parseArray(cbdrecogMachinemarkB)){
-                points.add((JSONObject) o);
-            }
-            cbdrecogAddrB = getPestRecogImgOssUrl(iotCbdimg.getCbdimgAddr(), recogBid, points);
-        }
+        List<IotCbdPestrecog> iotCbdPestrecogList = pestRecogResult.getIotCbdPestrecogList();
+        iotCbdrecog.setCbdrecogPestnum(pestRecogResult.getCbdimgRecognumTotal());
+        iotCbdrecog.setCbdrecogTypenum(pestRecogResult.getCbdrecogTypenum());
+        Map<String, List<IotCbdPestrecog>> pestrecogMap = new HashMap<>();
+        pestrecogMap.put(cbdMarkType, iotCbdPestrecogList);
+        iotCbdrecog.setPestrecog(pestrecogMap);
 
-        // 保存 测报灯图片识别信息
-        IotCbdrecog iotCbdrecog = iotCbdRecogService.saveIotCbdRecog(
-                EnumCbdRecogType.B, recogBid, iotCbdimg, iotDevice, cbdrecogAddrB, cbdrecogResultB, cbdrecogMachinemarkB, pestRecogResult);
+        log.info("【测报灯生成解析图片】:{} 内容 {}",iotDevice, JSONUtils.toJSONString(iotCbdrecog));
 
         // 保存 虫情识别信息
-        iotPestRecogService.savePestRecog(pestRecogResult, iotDevice, iotCbdrecog);
+        iotPestRecogService.savePestRecog(pestRecogResult);
+        return iotCbdrecog;
     }
+//
+//    private IotCbdrecog saveRecogImgByA(IotDevice iotDevice, IotCbdimg iotCbdimg, JSONObject jsonObject,
+//                                        long cbdrecogTotalnum){
+//        String cbdrecogResult = this.getJsonData("Result", jsonObject);
+//        String cbdrecogAddr = this.getJsonData("Result_image", jsonObject);
+//        String cbdrecogMachinemark = this.getJsonData("Result_code", jsonObject);
+//
+//        String recogBid = iotCbdimg.getUUId();
+//        JSONArray recogArray = JSONArray.parseArray(cbdrecogMachinemark);
+//        if (recogArray != null){
+//            List<JSONObject> points = new ArrayList<>();
+//            for(Object o: JSONArray.parseArray(cbdrecogMachinemark)){
+//                points.add((JSONObject) o);
+//            }
+//            cbdrecogAddr = getPestRecogImgOssUrl(iotCbdimg.getCbdimgAddr(), recogBid, points);
+//        }
+//
+//        // 生成测报灯图片识别信息
+//        IotCbdrecog iotCbdrecog = iotCbdRecogService.makeIotCbdRecog(recogBid, iotCbdimg, iotDevice, cbdrecogAddr,
+//                cbdrecogResult, cbdrecogMachinemark);
+//
+//        String enumCbdRecogType = EnumCbdRecogType.A.getCode();
+//        String enumCbdMarkType = EnumCbdMarkType.AUTO.getCode();
+//        iotCbdrecog.setCbdrecogType(enumCbdRecogType);
+//        iotCbdrecog.setCbdrecogMarktype(enumCbdMarkType);
+//        iotCbdrecog.setCbdrecogTotalnum(cbdrecogTotalnum);
+//
+//        IotPestRecogService.PestRecogResult pestRecogResult = iotPestRecogService.getIotPestrecogResult(
+//                iotDevice, iotCbdrecog);
+//
+//        List<IotCbdPestrecog> iotCbdPestrecogList = pestRecogResult.getIotCbdPestrecogList();
+//        iotCbdrecog.setCbdrecogPestnum(pestRecogResult.getCbdimgRecognumTotal());
+//        iotCbdrecog.setCbdrecogTypenum(pestRecogResult.getCbdrecogTypenum());
+//        Map<String, List<IotCbdPestrecog>> pestrecogMap = new HashMap<>();
+//        pestrecogMap.put(enumCbdMarkType, iotCbdPestrecogList);
+//        iotCbdrecog.setPestrecog(pestrecogMap);
+//
+//        log.info("【测报灯生成解析图片】:{} 内容 {}",iotDevice, JSONUtils.toJSONString(iotCbdrecog));
+//
+//        // 保存 虫情识别信息
+//        iotPestRecogService.savePestRecog(pestRecogResult);
+//        return iotCbdrecog;
+//    }
+
+//    private void saveRecogImgByB(IotDevice iotDevice, IotCbdimg iotCbdimg, JSONObject jsonObject, IotPestRecogService.PestRecogResult pestRecogResult){
+//        String cbdrecogResultB = this.getJsonData("Result_b", jsonObject);
+//        String cbdrecogAddrB = this.getJsonData("Result_image_b", jsonObject);
+//        String cbdrecogMachinemarkB = this.getJsonData("Result_code_b", jsonObject);
+//
+//        String recogBid = iotCbdimg.getUUId();
+//        JSONArray recogArray = JSONArray.parseArray(cbdrecogMachinemarkB);
+//        if (recogArray != null){
+//            List<JSONObject> points = new ArrayList<>();
+//            for(Object o: JSONArray.parseArray(cbdrecogMachinemarkB)){
+//                points.add((JSONObject) o);
+//            }
+//            cbdrecogAddrB = getPestRecogImgOssUrl(iotCbdimg.getCbdimgAddr(), recogBid, points);
+//        }
+//
+//        // 保存 测报灯图片识别信息
+//        IotCbdrecog iotCbdrecog = iotCbdRecogService.saveIotCbdRecog(
+//                EnumCbdRecogType.B, recogBid, iotCbdimg, iotDevice, cbdrecogAddrB, cbdrecogResultB, cbdrecogMachinemarkB, pestRecogResult);
+//
+//        // 保存 虫情识别信息
+//        iotPestRecogService.savePestRecog(pestRecogResult, iotDevice, iotCbdrecog);
+//    }
 
     /**
      *  保存测报灯图片基础数据到mongodb
      * @return
      */
     public IotCbdimg insertIotCbdimg(IotDevice iotDevice, JSONObject jsonObject, String devUpdateddate){
-        long cbdimgPestnum;
+        long cbdrecogTotalnum;
 
         String cbdimgAddr = this.getJsonData("Image", jsonObject);
         String cbdrecogResult = this.getJsonData("Result", jsonObject);
@@ -119,51 +194,63 @@ public class IotCbdImgService {
         String cbdrecogResultB = this.getJsonData("Result_b", jsonObject);
 
         try{
-            cbdimgPestnum = Long.parseLong(cbdimgPestnumStr.split(",")[1]);
+            cbdrecogTotalnum = Long.parseLong(cbdimgPestnumStr.split(",")[1]);
         } catch (Exception e) {
-            cbdimgPestnum = 0L;
+            cbdrecogTotalnum = 0L;
         }
 
-        IotPestRecogService.PestRecogResult pestRecogResult = iotPestRecogService.getIotPestrecogResult(
-                iotDevice, cbdrecogResult, devUpdateddate);
-
-        IotPestRecogService.PestRecogResult pestRecogResultB = iotPestRecogService.getIotPestrecogResult(
-                iotDevice, cbdrecogResultB, devUpdateddate);
-
+        Map<String, IotCbdrecog> cbdrecog = new HashMap<>();
         // 保存 测报灯基础图片信息
         IotCbdimg iotCbdimg = new IotCbdimg();
         iotCbdimg.setCbdimgBid(iotCbdimg.getUUId());
         iotCbdimg.setTid(iotDevice.getTid());
         iotCbdimg.setDevBid(iotDevice.getDevBid());
+        iotCbdimg.setCbdimgTotalnum(cbdrecogTotalnum);
         iotCbdimg.setCbdimgAddr(cbdimgAddr);
-        iotCbdimg.setCbdimgPestnum(cbdimgPestnum);
-        iotCbdimg.setCbdimgRecognum(pestRecogResult.getCbdimgRecognumTotal());
         iotCbdimg.setCbdimgModifieddate(devUpdateddate);
         iotCbdimg.setCbdimgCreatedDate(devUpdateddate);
+        iotCbdimg.setCbdrecog(cbdrecog);
         iotCbdimg.setCbdimgDelstatus("0");
-        mongoService.saveOne(iotCbdimg);
 
-        log.info("【测报灯】 开始A模型识别图片:" + cbdimgAddr);
-        saveRecogImgByA(iotDevice, iotCbdimg, jsonObject, pestRecogResult);
-        log.info("【测报灯】 结束A模型识别图片:" + cbdimgAddr);
-        log.info("【测报灯】 是否识别B模型:" + cbdimgAddrB + (StringUtils.isNotEmpty(cbdimgAddrB) && cbdimgAddrB.startsWith("http")));
+        if(cbdrecogTotalnum == 0){
+            log.info("【测报灯】 {} 没有识别结果,识别终止。{}", iotDevice, jsonObject);
+            mongoService.saveOne(iotCbdimg);
+            return iotCbdimg;
+        }
+
+        IotCbdrecog iotCbdrecogA = null;
+        IotCbdrecog iotCbdrecogB = null;
+
+        log.info("【测报灯】 是否识别A模型:" + StringUtils.isNotEmpty(cbdrecogResult) + " " + iotDevice);
+        if(StringUtils.isNotEmpty(cbdrecogResult)){
+            log.info("【测报灯】 开始A模型识别图片:" + cbdimgAddr);
+            iotCbdrecogA = makeRecogImg(EnumCbdRecogType.A, EnumCbdMarkType.AUTO, iotDevice, iotCbdimg, jsonObject, cbdrecogTotalnum);
+            log.info("【测报灯】 结束A模型识别图片:" + cbdimgAddr);
+            cbdrecog.put(EnumCbdRecogType.A.getCode(), iotCbdrecogA);
+        }
+
+        log.info("【测报灯】 是否识别B模型:" + StringUtils.isNotEmpty(cbdrecogResultB) + " " + iotDevice);
         // 保存 测报灯B模型图片识别信息
-        if(StringUtils.isNotEmpty(cbdimgAddrB) && cbdimgAddrB.startsWith("http")){
+        if(StringUtils.isNotEmpty(cbdrecogResultB)){
             log.info("【测报灯】 开始B模型识别图片:" + cbdimgAddrB);
-            saveRecogImgByB(iotDevice, iotCbdimg, jsonObject, pestRecogResultB);
+            iotCbdrecogB = makeRecogImg(EnumCbdRecogType.B, EnumCbdMarkType.AUTO, iotDevice, iotCbdimg, jsonObject, cbdrecogTotalnum);
             log.info("【测报灯】 结束B模型识别图片:" + cbdimgAddrB);
+            cbdrecog.put(EnumCbdRecogType.B.getCode(), iotCbdrecogB);
         }
 
-        if("3".equals(warnService.getWarnVer()) ){
-            //要求预警检查 V3
-            IotWarncheck warncheck = new IotWarncheck();
-            warncheck.setDevBid(iotDevice.getDevBid());
-            // TODO
-            // iotsMqService.sendMsg(IotMqConstant.TOPIC_WARNCHECK, IotMqConstant.TOPIC_WARNCHECK, warncheck);
-        }else{
-            //预警
-            warnService.checkCbdData("0","",iotDevice.getDevBid());
-        }
+        iotCbdimg.setCbdrecog(cbdrecog);
+        mongoService.saveOne(iotCbdimg);
+
+//        if("3".equals(warnService.getWarnVer()) ){
+//            //要求预警检查 V3
+//            IotWarncheck warncheck = new IotWarncheck();
+//            warncheck.setDevBid(iotDevice.getDevBid());
+//            // TODO
+//            // iotsMqService.sendMsg(IotMqConstant.TOPIC_WARNCHECK, IotMqConstant.TOPIC_WARNCHECK, warncheck);
+//        }else{
+//            //预警
+//            warnService.checkCbdData("0","",iotDevice.getDevBid());
+//        }
         return iotCbdimg;
     }
 
@@ -203,96 +290,99 @@ public class IotCbdImgService {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void iotmAgainRecog(String content) throws Exception {
-        JSONObject contentObject = JSONObject.parseObject(content);
-        String devBid = contentObject.getString("devBid");
-        String cbdimgBid = contentObject.getString("cbdimgBid");
-        String cbdrecogType = contentObject.getString("cbdrecogType");
-
-        JSONObject recogeData=null;
-        try{
-             recogeData = getRecogeResult(cbdimgBid, cbdrecogType);
-
-        }catch (Exception e){
-            log.error("{}",e);
-
-        }
-        if(recogeData==null){
-            recogeData=new JSONObject();
-        }
-        String cbdrecogResult = this.getJsonData("Result", recogeData);
-        String cbdrecogResultB = this.getJsonData("Result_b", recogeData);
-        String cbdimgAddrB = this.getJsonData("Result_image_b", recogeData);
-
-        String devUpdateddate = DateUtils.dateTimeNow();
-
-        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
-
-        IotPestRecogService.PestRecogResult pestRecogResult = iotPestRecogService.getIotPestrecogResult(
-                iotDevice, cbdrecogResult, devUpdateddate);
-
-        IotPestRecogService.PestRecogResult pestRecogResultB = iotPestRecogService.getIotPestrecogResult(
-                iotDevice, cbdrecogResultB, devUpdateddate);
-
-        Criteria criteria = Criteria.where("cbdimgBid").is(cbdimgBid);
-        Query query = new Query(criteria);
-
-        Map<String, Object> updateField = new HashMap<>();
-        updateField.put("cbdimgRecognum", pestRecogResult.getCbdimgRecognumTotal());
-        updateField.put("cbdimgModifieddate", devUpdateddate);
-        mongoService.update(IotCbdimg.class, query, updateField);
-
-        IotCbdimg iotCbdimg = (IotCbdimg) mongoService.findOne("cbdimgBid", cbdimgBid, IotCbdimg.class);
-        String cbdimgAddr = iotCbdimg.getCbdimgAddr();
-
-        Map<String, String> recogeSelectMap = new HashMap<>();
-        recogeSelectMap.put("cbdimgBid", cbdimgBid);
-        recogeSelectMap.put("cbdrecogMarktype", "1");
-        recogeSelectMap.put("cbdrecogType", cbdrecogType);
-        List<IotCbdrecog> iotCbdrecogList = mongoService.findAll(IotCbdrecog.class, recogeSelectMap);
-        List<String> cbdrecogBidList = new ArrayList<>();
-        if(iotCbdrecogList != null && iotCbdrecogList.size() > 0){
-            for(IotCbdrecog iotCbdrecog : iotCbdrecogList){
-                String cbdrecogBid = iotCbdrecog.getCbdrecogBid();
-                cbdrecogBidList.add(cbdrecogBid);
-            }
-        }
-        // newList_picBid
-        List<String> pestrecogBidList = new ArrayList<>();
-        List<String> cbdpestBidList = new ArrayList<>();
-        if(cbdrecogBidList.size() > 0){
-            Map<String, Object> pestSelectMap = new HashMap<>();
-            pestSelectMap.put("newList_cbdrecogBid", cbdrecogBidList);
-            List<IotCbdpest> IotCbdpestList = mongoService.findAll(IotCbdpest.class, pestSelectMap);
-            if(IotCbdpestList != null && IotCbdpestList.size() > 0){
-                for(IotCbdpest iotCbdpest : IotCbdpestList) {
-                    String pestrecogBid = iotCbdpest.getPestrecogBid();
-                    String cbdpestBid = iotCbdpest.getCbdpestBid();
-                    pestrecogBidList.add(pestrecogBid);
-                    cbdpestBidList.add(cbdpestBid);
-                }
-            }
-        }
-        if(cbdrecogBidList.size() > 0) {
-            mongoService.removeAllByBatch("cbdrecogBid", cbdrecogBidList, IotCbdrecog.class.getAnnotation(TableName.class).value());
-        }
-        if(cbdpestBidList.size() > 0) {
-            mongoService.removeAllByBatch("cbdpestBid", cbdpestBidList, IotCbdpest.class.getAnnotation(TableName.class).value());
-        }
-        if(pestrecogBidList.size() > 0) {
-            mongoService.removeAllByBatch("pestrecogBid", pestrecogBidList, IotPestrecog.class.getAnnotation(TableName.class).value());
-        }
-
-        log.info("【测报灯】 开始A模型识别图片:" + cbdimgAddr);
-        saveRecogImgByA(iotDevice, iotCbdimg, recogeData, pestRecogResult);
-        log.info("【测报灯】 结束A模型识别图片:" + cbdimgAddr);
-        log.info("【测报灯】 是否识别B模型:" + cbdimgAddrB + (StringUtils.isNotEmpty(cbdimgAddrB) && cbdimgAddrB.startsWith("http")));
-        // 保存 测报灯B模型图片识别信息
-        if(StringUtils.isNotEmpty(cbdimgAddrB) && cbdimgAddrB.startsWith("http")){
-            log.info("【测报灯】 开始B模型识别图片:" + cbdimgAddrB);
-            saveRecogImgByB(iotDevice, iotCbdimg, recogeData, pestRecogResultB);
-            log.info("【测报灯】 结束B模型识别图片:" + cbdimgAddrB);
-        }
-    }
+    public void iotmAgainRecog(String content) throws Exception {}
+
+//    @Transactional(rollbackFor = Exception.class)
+//    public void iotmAgainRecog(String content) throws Exception {
+//        JSONObject contentObject = JSONObject.parseObject(content);
+//        String devBid = contentObject.getString("devBid");
+//        String cbdimgBid = contentObject.getString("cbdimgBid");
+//        String cbdrecogType = contentObject.getString("cbdrecogType");
+//
+//        JSONObject recogeData=null;
+//        try{
+//             recogeData = getRecogeResult(cbdimgBid, cbdrecogType);
+//
+//        }catch (Exception e){
+//            log.error("{}",e);
+//
+//        }
+//        if(recogeData==null){
+//            recogeData=new JSONObject();
+//        }
+//        String cbdrecogResult = this.getJsonData("Result", recogeData);
+//        String cbdrecogResultB = this.getJsonData("Result_b", recogeData);
+//        String cbdimgAddrB = this.getJsonData("Result_image_b", recogeData);
+//
+//        String devUpdateddate = DateUtils.dateTimeNow();
+//
+//        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+//
+//        IotPestRecogService.PestRecogResult pestRecogResult = iotPestRecogService.getIotPestrecogResult(
+//                iotDevice, cbdrecogResult, devUpdateddate);
+//
+//        IotPestRecogService.PestRecogResult pestRecogResultB = iotPestRecogService.getIotPestrecogResult(
+//                iotDevice, cbdrecogResultB, devUpdateddate);
+//
+//        Criteria criteria = Criteria.where("cbdimgBid").is(cbdimgBid);
+//        Query query = new Query(criteria);
+//
+//        Map<String, Object> updateField = new HashMap<>();
+//        updateField.put("cbdimgRecognum", pestRecogResult.getCbdimgRecognumTotal());
+//        updateField.put("cbdimgModifieddate", devUpdateddate);
+//        mongoService.update(IotCbdimg.class, query, updateField);
+//
+//        IotCbdimg iotCbdimg = (IotCbdimg) mongoService.findOne("cbdimgBid", cbdimgBid, IotCbdimg.class);
+//        String cbdimgAddr = iotCbdimg.getCbdimgAddr();
+//
+//        Map<String, String> recogeSelectMap = new HashMap<>();
+//        recogeSelectMap.put("cbdimgBid", cbdimgBid);
+//        recogeSelectMap.put("cbdrecogMarktype", "1");
+//        recogeSelectMap.put("cbdrecogType", cbdrecogType);
+//        List<IotCbdrecog> iotCbdrecogList = mongoService.findAll(IotCbdrecog.class, recogeSelectMap);
+//        List<String> cbdrecogBidList = new ArrayList<>();
+//        if(iotCbdrecogList != null && iotCbdrecogList.size() > 0){
+//            for(IotCbdrecog iotCbdrecog : iotCbdrecogList){
+//                String cbdrecogBid = iotCbdrecog.getCbdrecogBid();
+//                cbdrecogBidList.add(cbdrecogBid);
+//            }
+//        }
+//        // newList_picBid
+//        List<String> pestrecogBidList = new ArrayList<>();
+//        List<String> cbdpestBidList = new ArrayList<>();
+//        if(cbdrecogBidList.size() > 0){
+//            Map<String, Object> pestSelectMap = new HashMap<>();
+//            pestSelectMap.put("newList_cbdrecogBid", cbdrecogBidList);
+//            List<IotCbdpest> IotCbdpestList = mongoService.findAll(IotCbdpest.class, pestSelectMap);
+//            if(IotCbdpestList != null && IotCbdpestList.size() > 0){
+//                for(IotCbdpest iotCbdpest : IotCbdpestList) {
+//                    String pestrecogBid = iotCbdpest.getPestrecogBid();
+//                    String cbdpestBid = iotCbdpest.getCbdpestBid();
+//                    pestrecogBidList.add(pestrecogBid);
+//                    cbdpestBidList.add(cbdpestBid);
+//                }
+//            }
+//        }
+//        if(cbdrecogBidList.size() > 0) {
+//            mongoService.removeAllByBatch("cbdrecogBid", cbdrecogBidList, IotCbdrecog.class.getAnnotation(TableName.class).value());
+//        }
+//        if(cbdpestBidList.size() > 0) {
+//            mongoService.removeAllByBatch("cbdpestBid", cbdpestBidList, IotCbdpest.class.getAnnotation(TableName.class).value());
+//        }
+//        if(pestrecogBidList.size() > 0) {
+//            mongoService.removeAllByBatch("pestrecogBid", pestrecogBidList, IotPestrecog.class.getAnnotation(TableName.class).value());
+//        }
+//
+//        log.info("【测报灯】 开始A模型识别图片:" + cbdimgAddr);
+//        saveRecogImgByA(iotDevice, iotCbdimg, recogeData, pestRecogResult);
+//        log.info("【测报灯】 结束A模型识别图片:" + cbdimgAddr);
+//        log.info("【测报灯】 是否识别B模型:" + cbdimgAddrB + (StringUtils.isNotEmpty(cbdimgAddrB) && cbdimgAddrB.startsWith("http")));
+//        // 保存 测报灯B模型图片识别信息
+//        if(StringUtils.isNotEmpty(cbdimgAddrB) && cbdimgAddrB.startsWith("http")){
+//            log.info("【测报灯】 开始B模型识别图片:" + cbdimgAddrB);
+//            saveRecogImgByB(iotDevice, iotCbdimg, recogeData, pestRecogResultB);
+//            log.info("【测报灯】 结束B模型识别图片:" + cbdimgAddrB);
+//        }
+//    }
 }
 

+ 9 - 18
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/IotCbdRecogService.java

@@ -1,46 +1,37 @@
 package com.yunfeiyun.agmp.iots.device.serviceImp;
 
-import com.yunfeiyun.agmp.common.utils.JSONUtils;
-import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;
 import com.yunfeiyun.agmp.iot.common.domain.IotCbdimg;
 import com.yunfeiyun.agmp.iot.common.domain.IotCbdrecog;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
-import com.yunfeiyun.agmp.iot.common.enums.EnumCbdRecogType;
-import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @Slf4j
 public class IotCbdRecogService {
 
-    @Autowired
-    private MongoService<IotBaseEntity> mongoService;
-
-    public IotCbdrecog saveIotCbdRecog(EnumCbdRecogType enumCbdRecogType, String recogBid, IotCbdimg iotCbdimg, IotDevice iotDevice, String cbdrecogAddr,
-                                       String cbdrecogResult, String cbdrecogMachinemark, IotPestRecogService.PestRecogResult pestRecogResult) {
+    public IotCbdrecog makeIotCbdRecog(String recogBid, IotCbdimg iotCbdimg, IotDevice iotDevice, String cbdrecogAddr,
+                                       String cbdrecogResult, String cbdrecogMachinemark) {
 
         IotCbdrecog iotCbdrecog = new IotCbdrecog();
-        iotCbdrecog.setTid(iotCbdimg.getTid());
         iotCbdrecog.setCbdrecogBid(recogBid);
+        iotCbdrecog.setTid(iotCbdimg.getTid());
         iotCbdrecog.setCbdimgBid(iotCbdimg.getCbdimgBid());
-        iotCbdrecog.setCbdrecogType(enumCbdRecogType.getCode());
+        iotCbdrecog.setDevBid(iotDevice.getDevBid());
         iotCbdrecog.setCbdrecogAddr(cbdrecogAddr);
         iotCbdrecog.setCbdrecogManualaddr("");
         iotCbdrecog.setCbdrecogResult(cbdrecogResult);
-        iotCbdrecog.setCbdrecogMarktype("1");
+        iotCbdrecog.setCbdrecogResultManual("");
         iotCbdrecog.setCbdrecogMachinemark(cbdrecogMachinemark);
+        iotCbdrecog.setCbdrecogManualmark("");
+        iotCbdrecog.setCbdrecogTotalnumManual(0L);
+        iotCbdrecog.setCbdrecogPestnumManual(0L);
+        iotCbdrecog.setCbdrecogTypenumManual(0L);
         iotCbdrecog.setCbdrecogCreator(iotDevice.getDevCreator());
         iotCbdrecog.setCbdrecogModifier(iotDevice.getDevModifier());
         iotCbdrecog.setCbdrecogCreatedDate(iotCbdimg.getCbdimgCreatedDate());
         iotCbdrecog.setCbdrecogModifieddate(iotCbdimg.getCbdimgModifieddate());
         iotCbdrecog.setCbdrecogDelstatus("0");
-
-        iotCbdrecog.setCbdimgRecognum(pestRecogResult.getCbdimgRecognumTotal());
-
-        log.info("【保存解析图片】:内容{}", JSONUtils.toJSONString(iotCbdrecog));
-        mongoService.saveOne(iotCbdrecog);
         return iotCbdrecog;
     }
 }

+ 43 - 43
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/IotPestRecogService.java

@@ -7,21 +7,20 @@ import com.yunfeiyun.agmp.common.enums.RedisCacheKey;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.iot.common.domain.*;
+import com.yunfeiyun.agmp.iot.common.enums.EnumCbdMarkType;
 import com.yunfeiyun.agmp.iot.common.service.IotWeatherService;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iots.service.IIotPestService;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -44,7 +43,8 @@ public class IotPestRecogService {
     @Data
     class PestRecogResult {
         long cbdimgRecognumTotal;
-        List<IotPestrecog> iotPestrecogList;
+        long cbdrecogTypenum;
+        List<IotCbdPestrecog> iotCbdPestrecogList;
 
     }
 
@@ -115,15 +115,17 @@ public class IotPestRecogService {
      * @param cbdrecogResult
      * @return
      */
-    public PestRecogResult getIotPestrecogResult(IotDevice iotDevice, String cbdrecogResult, String createDate) {
+    public PestRecogResult getIotPestrecogResult(IotDevice iotDevice, IotCbdrecog iotCbdrecog) {
         HashMap<String, BigDecimal> atMap = getDeviceAtAndAh(iotDevice);
 
         BigDecimal at = atMap.get("at");
         BigDecimal ah = atMap.get("ah");
 
         HashMap<String, IotPest> iotPestHashMap = iotPestService.selectIotPestHashMap(new IotPest());
-        List<IotPestrecog> iotPestrecogList = new ArrayList<>();
-        String[] resultList = cbdrecogResult.split("#");
+        List<IotCbdPestrecog> iotCbdPestrecogList = new ArrayList<>();
+        String[] resultList = iotCbdrecog.getCbdrecogResult().split("#");
+        Set<String> pestTypeSet = new HashSet<>();
+
         long cbdimgRecognumTotal = 0L;
         for (String result : resultList) {
             try {
@@ -132,25 +134,33 @@ public class IotPestRecogService {
                 long cbdimgPestnum = Long.parseLong(s[1]);
 
                 if (iotPestHashMap.containsKey(pestId)) {
-                    IotPestrecog iotPestrecog = new IotPestrecog();
-                    iotPestrecog.setCId(iotDevice.getTid());
-                    iotPestrecog.setPestrecogBid(iotPestrecog.getUUId());
-                    iotPestrecog.setDevBid(iotDevice.getDevBid());
-                    iotPestrecog.setDevtypeBid(iotDevice.getDevtypeBid());
-                    iotPestrecog.setPestrecogAt(at);
-                    iotPestrecog.setPestrecogAh(ah);
-                    iotPestrecog.setPestrecogLng(iotDevice.getDevLng());
-                    iotPestrecog.setPestrecogLat(iotDevice.getDevLat());
-                    iotPestrecog.setPestrecogProvince(iotDevice.getDevProvince());
-                    iotPestrecog.setPestrecogCity(iotDevice.getDevCity());
-                    iotPestrecog.setPestrecogDistrict(iotDevice.getDevDistrict());
-                    iotPestrecog.setPestBusid(iotPestHashMap.get(pestId).getPestBid());
-                    iotPestrecog.setPestName(iotPestHashMap.get(pestId).getPestName());
-                    iotPestrecog.setPestrecogNum(cbdimgPestnum);
-                    iotPestrecog.setPestrecogMarktype("1");
-                    iotPestrecog.setPestrecogCreatedDate(createDate);
-
-                    iotPestrecogList.add(iotPestrecog);
+                    IotPest iotPest = iotPestHashMap.get(pestId);
+                    String pestBusid = iotPest.getPestBid();
+                    IotCbdPestrecog pestrecog = new IotCbdPestrecog();
+                    pestrecog.setPestrecogBid(pestrecog.getUUId());
+                    pestrecog.setCId(iotDevice.getTid());
+                    pestrecog.setTid(iotDevice.getTid());
+                    pestrecog.setDevBid(iotDevice.getDevBid());
+                    pestrecog.setDevtypeBid(iotDevice.getDevtypeBid());
+                    pestrecog.setRecogBid(iotCbdrecog.getCbdrecogBid());
+                    pestrecog.setImgBid(iotCbdrecog.getCbdimgBid());
+                    pestrecog.setPestrecogMarktype(EnumCbdMarkType.AUTO.getCode());
+                    pestrecog.setCbdrecogType(iotCbdrecog.getCbdrecogType());
+                    pestrecog.setPestrecogAt(at);
+                    pestrecog.setPestrecogAh(ah);
+                    pestrecog.setPestrecogLng(iotDevice.getDevLng());
+                    pestrecog.setPestrecogLat(iotDevice.getDevLat());
+                    pestrecog.setPestrecogProvince(iotDevice.getDevProvince());
+                    pestrecog.setPestrecogCity(iotDevice.getDevCity());
+                    pestrecog.setPestrecogDistrict(iotDevice.getDevDistrict());
+                    pestrecog.setPestBusid(pestBusid);
+                    pestrecog.setPestName(iotPest.getPestName());
+                    pestrecog.setPestrecogNum(cbdimgPestnum);
+                    pestrecog.setPestrecogCreatedDate(iotCbdrecog.getCbdrecogCreatedDate());
+
+                    iotCbdPestrecogList.add(pestrecog);
+
+                    pestTypeSet.add(pestBusid);
                 }
                 cbdimgRecognumTotal += cbdimgPestnum;
             } catch (Exception e) {
@@ -158,28 +168,18 @@ public class IotPestRecogService {
             }
         }
         PestRecogResult pestRecogResult = new PestRecogResult();
-        pestRecogResult.setIotPestrecogList(iotPestrecogList);
+        pestRecogResult.setIotCbdPestrecogList(iotCbdPestrecogList);
         pestRecogResult.setCbdimgRecognumTotal(cbdimgRecognumTotal);
+        pestRecogResult.setCbdrecogTypenum(pestTypeSet.size());
         return pestRecogResult;
     }
 
-    public void savePestRecog(PestRecogResult pestRecogResult, IotDevice iotDevice, IotCbdrecog iotCbdrecog) {
-        for (IotPestrecog iotPestrecog : pestRecogResult.getIotPestrecogList()) {
+    public void savePestRecog(PestRecogResult pestRecogResult) {
+        for (IotCbdPestrecog item : pestRecogResult.getIotCbdPestrecogList()) {
+            IotPestrecog iotPestrecog = new IotPestrecog();
+            BeanUtils.copyProperties(item, iotPestrecog);
             mongoService.saveOne(iotPestrecog);
-
-            // 保存 测报灯图片识别和虫情信息关联信息
-            IotCbdpest iotCbdpest = new IotCbdpest();
-            iotCbdpest.setTid(iotDevice.getTid());
-            iotCbdpest.setCbdpestBid(iotCbdpest.getUUId());
-            iotCbdpest.setPestrecogBid(iotPestrecog.getPestrecogBid());
-            iotCbdpest.setCbdrecogBid(iotCbdrecog.getCbdrecogBid());
-            mongoService.saveOne(iotCbdpest);
         }
-
-    }
-
-    public void savePestRecog(IotPestrecog iotPestrecog){
-        mongoService.saveOne(iotPestrecog);
     }
 }