Explorar el Código

增加测报灯测试

yf_zn hace 9 meses
padre
commit
b6993c8d32

+ 8 - 10
src/main/java/com/yunfeiyun/agmp/iots/device/controller/TestController.java

@@ -3,6 +3,7 @@ package com.yunfeiyun.agmp.iots.device.controller;
 import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.constant.ErrorCode;
 import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
+import com.yunfeiyun.agmp.common.exception.BizException;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
@@ -16,6 +17,7 @@ import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iot.common.util.dev.DevTypeUtil;
 import com.yunfeiyun.agmp.iots.core.cmd.core.CmdDispatcherService;
+import com.yunfeiyun.agmp.iots.core.manager.ConnectionManager;
 import com.yunfeiyun.agmp.iots.device.domain.WarnTestReq;
 import com.yunfeiyun.agmp.iots.device.mapper.IotDeviceMapper;
 import com.yunfeiyun.agmp.iots.device.service.IYfQxzDevice;
@@ -24,6 +26,7 @@ import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
 import com.yunfeiyun.agmp.iots.service.IIotDevicelasteddataService;
 import com.yunfeiyun.agmp.iots.service.IIotYfScddataService;
 import com.yunfeiyun.agmp.iots.service.impl.IotCbdImgService;
+import com.yunfeiyun.agmp.iots.warn.service.WarnPestService;
 import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -736,8 +739,11 @@ public class TestController {
     private IotCbdImgService iotCbdImgService;
 
     @RequestMapping("/warn/cmd/cbd")
-    public AjaxResult cmdCbdWarn(WarnTestReq req) {
+    public AjaxResult cmdCbdWarn(@RequestBody WarnTestReq req) {
         JSONObject jsonObject = req.getData();
+        if (StringUtils.isEmpty(req.getDevCode())) {
+            throw new BizException(ErrorCode.FAILURE.getCode(), "设备code为空");
+        }
         List<IotDevice> oldIotDevice = iIotDeviceService.selectIotDeviceByDevCode(req.getDevCode());
         for (IotDevice iotDevice : oldIotDevice) {
             String devtypeBid = "3";
@@ -746,15 +752,6 @@ public class TestController {
             //String devCode = jsonObject.getString("imei");
             String devCode = req.getDevCode();
             log.info("【解析测报灯图片数据】:devtypeBid:{},deviceTypeId,{},devCode:{}", devtypeBid, deviceTypeId, devCode);
-            boolean isCbd = true;
-            if (StringUtils.isNotEmpty(deviceTypeId) && !deviceTypeId.equals("3")) {
-                devtypeBid = "xct";
-                isCbd = false;
-            }
-
-            if (!isCbd) {
-                continue;
-            }
             String cbdimgAddr = jsonObject.getString("Image");
             if (StringUtils.isEmpty(cbdimgAddr)) {
                 continue;
@@ -763,6 +760,7 @@ public class TestController {
             iotCbdImgService.insertIotCbdimg(iotDevice, jsonObject, DateUtils.dateTimeNow());
         }
 
+        SpringUtils.getBean(WarnPestService.class).process();
 
         return AjaxResult.success();
     }

+ 9 - 0
src/main/java/com/yunfeiyun/agmp/iots/warn/model/CountResultDto.java

@@ -0,0 +1,9 @@
+package com.yunfeiyun.agmp.iots.warn.model;
+
+import lombok.Data;
+
+@Data
+public class CountResultDto {
+    private int pestTypesCount;
+
+}

+ 44 - 34
src/main/java/com/yunfeiyun/agmp/iots/warn/service/IotWarnBussinessService.java

@@ -6,16 +6,12 @@ import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
 import com.yunfeiyun.agmp.iot.common.domain.*;
 import com.yunfeiyun.agmp.iots.warn.mapper.IotWarnBussinessMapper;
-import com.yunfeiyun.agmp.iots.warn.model.IotWarnconfigCbdInfoVo;
-import com.yunfeiyun.agmp.iots.warn.model.IotWarnconfigDevVo;
-import com.yunfeiyun.agmp.iots.warn.model.WarnConfigInfo;
-import com.yunfeiyun.agmp.iots.warn.model.WarnResult;
+import com.yunfeiyun.agmp.iots.warn.model.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.aggregation.Aggregation;
-import org.springframework.data.mongodb.core.aggregation.AggregationResults;
+import org.springframework.data.mongodb.core.aggregation.*;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
@@ -194,34 +190,47 @@ public class IotWarnBussinessService {
     /**
      * 统计设备的虫子种类数量
      *
-     * @param devBid     设备业务标识
+     * @param devBid    设备业务标识
      * @param startTime 开始时间
      * @param endTime   结束时间
      * @return 虫子种类数量
      */
     public int statPestTypeCountByDevBid(String devBid, String startTime, String endTime) {
-        Query query = new Query();
+        // 创建匹配条件
+        MatchOperation matchOperation = Aggregation.match(
+                new Criteria().andOperator(
+                        Criteria.where("devBid").is(devBid),
+                        Criteria.where("pestrecogCreatedDate").gte(startTime).lte(endTime)
+                )
+        );
 
-        // 添加条件:设备业务标识
-        query.addCriteria(Criteria.where("devBid").is(devBid));
+        // 分组操作,按pestBusid分组
+        GroupOperation groupOperation = Aggregation.group("pestBusid");
 
-        // 添加条件:创建时间在指定范围内
-        query.addCriteria(Criteria.where("pestrecogCreatedDate").gte(startTime).lte(endTime));
+        // 计数操作
+        CountOperation countOperation = Aggregation.count().as("pestTypesCount");
 
-        // 只查询害虫业务标识字段
-        query.fields().include("pestBusid");
+        // 构建聚合管道
+        Aggregation aggregation = Aggregation.newAggregation(matchOperation, groupOperation, countOperation);
 
-        // 去重查询害虫业务标识
-        List<String> pestTypes = mongoTemplate.findDistinct(query, "pestBusid", IotPestrecog.class, String.class);
+        // 执行聚合查询
+        AggregationResults<CountResultDto> results = mongoTemplate.aggregate(aggregation, "IotPestrecog", CountResultDto.class);
+
+        // 获取结果
+        List<CountResultDto> mappedResults = results.getMappedResults();
+        if (mappedResults != null && !mappedResults.isEmpty()) {
+            return mappedResults.get(0).getPestTypesCount();
+        }
 
-        // 返回去重后的害虫类型数量
-        return pestTypes.size();
+        // 如果没有结果,则返回0
+        return 0;
     }
 
+
     /**
      * 统计设备的虫子总数量
      *
-     * @param devBid     设备业务标识
+     * @param devBid    设备业务标识
      * @param startTime 开始时间
      * @param endTime   结束时间
      * @return 虫子总数量
@@ -280,13 +289,13 @@ public class IotWarnBussinessService {
      * @param iotWarnindicator 告警指标,存储所有与告警相关的指标信息
      * @return 告警指标,存储所有与告警相关的指标信息集合
      */
-    public Map<String, List<IotWarnindicator>> selectIotWarnindicatorMap(IotWarnindicator iotWarnindicator){
+    public Map<String, List<IotWarnindicator>> selectIotWarnindicatorMap(IotWarnindicator iotWarnindicator) {
         List<IotWarnindicator> iotWarnindicatorList = iotWarnBussinessMapper.selectIotWarnindicatorList(iotWarnindicator);
         Map<String, List<IotWarnindicator>> iotWarnindicatorMap = new HashMap<>();
-        for(IotWarnindicator item: iotWarnindicatorList){
+        for (IotWarnindicator item : iotWarnindicatorList) {
             String wcBid = item.getWcBid();
-            if(!iotWarnindicatorMap.containsKey(wcBid)){
-                iotWarnindicatorMap.put(wcBid,new ArrayList<>());
+            if (!iotWarnindicatorMap.containsKey(wcBid)) {
+                iotWarnindicatorMap.put(wcBid, new ArrayList<>());
             }
             iotWarnindicatorMap.get(wcBid).add(item);
         }
@@ -295,16 +304,17 @@ public class IotWarnBussinessService {
 
     /**
      * 查询测报灯设备所有告警配置信息
+     *
      * @return
      */
 
-    public Map<String, List<IotWarnindicator>> selectCbdIndicatorAllMap(){
+    public Map<String, List<IotWarnindicator>> selectCbdIndicatorAllMap() {
         List<IotWarnindicator> iotWarnindicators = iotWarnBussinessMapper.selectCbdIndicatorAllList();
         Map<String, List<IotWarnindicator>> iotWarnindicatorMap = new LinkedHashMap<>();
-        for(IotWarnindicator iotWarnindicator : iotWarnindicators){
+        for (IotWarnindicator iotWarnindicator : iotWarnindicators) {
             String wcBid = iotWarnindicator.getWcBid();
-            if(!iotWarnindicatorMap.containsKey(wcBid)){
-                iotWarnindicatorMap.put(wcBid,new ArrayList<>());
+            if (!iotWarnindicatorMap.containsKey(wcBid)) {
+                iotWarnindicatorMap.put(wcBid, new ArrayList<>());
             }
             iotWarnindicatorMap.get(wcBid).add(iotWarnindicator);
         }
@@ -322,12 +332,12 @@ public class IotWarnBussinessService {
         Map<String, List<IotWarnindicator>> iotWarnindicatorMap = selectCbdIndicatorAllMap();
         List<IotWarnconfigCbdInfoVo> iotWarnconfigCbdInfoVoList = new ArrayList<>();
         List<String> parentbidList = new ArrayList<>();
-        for(IotWarnconfigDevVo iotWarnconfigDevVo : iotWarnconfigDevVoList){
+        for (IotWarnconfigDevVo iotWarnconfigDevVo : iotWarnconfigDevVoList) {
             String wcBid = iotWarnconfigDevVo.getWcBid();
             List<IotWarnindicator> iotWarnindicatorList = iotWarnindicatorMap.get(wcBid);
-            for(IotWarnindicator item: iotWarnindicatorList){
+            for (IotWarnindicator item : iotWarnindicatorList) {
                 String wiCode = item.getWiCode();
-                if("pestDetail".equals(wiCode)){
+                if ("pestDetail".equals(wiCode)) {
                     parentbidList.add(item.getWiBid());
                 }
             }
@@ -340,17 +350,17 @@ public class IotWarnBussinessService {
             iotWarnconfigCbdInfoVo.setIotWarnindicatorList(iotWarnindicatorList);
             iotWarnconfigCbdInfoVoList.add(iotWarnconfigCbdInfoVo);
         }
-        if(!parentbidList.isEmpty()){
+        if (!parentbidList.isEmpty()) {
             IotWarnindicator selectIotWarnindicator = new IotWarnindicator();
             selectIotWarnindicator.setWiParentbidList(parentbidList);
             Map<String, List<IotWarnindicator>> iotMap = selectIotWarnindicatorMap(selectIotWarnindicator);
-            for(IotWarnconfigCbdInfoVo cbdInfoVo : iotWarnconfigCbdInfoVoList){
+            for (IotWarnconfigCbdInfoVo cbdInfoVo : iotWarnconfigCbdInfoVoList) {
                 String wcBid = cbdInfoVo.getWcBid();
                 List<IotWarnindicator> pestDetailList = iotMap.get(wcBid);
                 List<IotWarnindicator> iotWarnindicatorList = cbdInfoVo.getIotWarnindicatorList();
-                for(IotWarnindicator item: iotWarnindicatorList){
+                for (IotWarnindicator item : iotWarnindicatorList) {
                     String wiCode = item.getWiCode();
-                    if("pestDetail".equals(wiCode)){
+                    if ("pestDetail".equals(wiCode)) {
                         item.setChildrenList(pestDetailList);
                     }
                 }

+ 11 - 4
src/main/java/com/yunfeiyun/agmp/iots/warn/service/WarnPestService.java

@@ -18,6 +18,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 
@@ -87,20 +88,26 @@ public class WarnPestService {
      */
     private WarnStatusDto processPestByType(IotWarnindicator iotWarnindicator) {
         validateParam(iotWarnindicator);
-        String startTime = DateUtils.getDate() + " 00:00:00";
-        String endTime = DateUtils.getDate() + " 23:59:59";
+        String datePre = getDateBefore();
+        String startTime = datePre + " 00:00:00";
+        String endTime = datePre + " 23:59:59";
         String devBid = iotWarnindicator.getDevBid();
         int currentValue = iotWarnBussinessService.statPestTypeCountByDevBid(devBid, startTime, endTime);
         return buildWarnStatusDto(currentValue, iotWarnindicator);
     }
 
+    String getDateBefore() {
+        return DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(new Date(), -1));
+    }
+
     /**
      * 根据虫害总数处理
      */
     private WarnStatusDto processPestByCount(IotWarnindicator iotWarnindicator) {
         validateParam(iotWarnindicator);
-        String startTime = DateUtils.getDate() + " 00:00:00";
-        String endTime = DateUtils.getDate() + " 23:59:59";
+        String datePre = getDateBefore();
+        String startTime = datePre + " 00:00:00";
+        String endTime = datePre + " 23:59:59";
         String devBid = iotWarnindicator.getDevBid();
         int currentValue = iotWarnBussinessService.statPestCountByDevBid(devBid, startTime, endTime);
         return buildWarnStatusDto(currentValue, iotWarnindicator);