Просмотр исходного кода

新增 获取测报灯害虫始见期高峰期终见期接口

zhaiyifei 8 месяцев назад
Родитель
Сommit
d670c907da

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/domain/IotPestRecogPeriodInfoResVo.java

@@ -21,4 +21,7 @@ public class IotPestRecogPeriodInfoResVo {
     private String pic;
     private String seeTimes;
     private String pestName;
+    private int seeTimesNum;
+    private int endInPeriodNum;
+    private int fastigiumNum;
 }

+ 21 - 12
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/service/impl/IotPestrecogServiceImpl.java

@@ -481,21 +481,29 @@ public class IotPestrecogServiceImpl implements IIotPestrecogService {
                 .and("pestrecog.pestrecogNum").as("pestrecogNum")
                 .and("pestrecog.pestrecogCreatedDate").as("pestrecogCreatedDate");
 
-        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "pestrecogCreatedDate");
 
-        Map<String, String> dataMap = new HashMap<>();
-        dataMap.put("pestrecogNum", "$pestrecogNum");
-        dataMap.put("pestrecogCreatedDate", "$pestrecogCreatedDate");
+        GroupOperation groupOperation = Aggregation.group("pestrecogCreatedDate")
+               .sum("pestrecogNum").as("pestrecogNum")
+               .first("$$ROOT").as("data");
 
-        GroupOperation groupOperation = Aggregation.group()
-                .first("pestName").as("pestName")
-                .push(dataMap).as("dataList");
+        FacetOperation facetOperation = Aggregation.facet()
+                .and(Aggregation.sort(Sort.Direction.ASC, "_id"), Aggregation.limit(1)).as("seeTimesData")
+                .and(Aggregation.sort(Sort.Direction.DESC, "_id"), Aggregation.limit(1)).as("endInPeriodData")
+                .and(Aggregation.sort(Sort.Direction.DESC, "pestrecogNum"), Aggregation.limit(1)).as("fastigiumData");
+
+        ProjectionOperation projectionOperation3 = Aggregation.project()
+                .andExpression("{'$first': '$seeTimesData'}").as("seeTimesData")
+               .andExpression("{'$first': '$endInPeriodData'}").as("endInPeriodData")
+               .andExpression("{'$first': '$fastigiumData'}").as("fastigiumData");
 
         ProjectionOperation projectionOperationResult = Aggregation.project()
-                .and("pestName").as("pestName")
-                .andExpression("{'$substrBytes': {{'$first': '$dataList.pestrecogCreatedDate'}, 0, 10}}").as("seeTimes")
-                .andExpression("{'$substrBytes': {{'$last': '$dataList.pestrecogCreatedDate'}, 0, 10}}").as("endInPeriod")
-                .andExpression("{'$substrBytes': {{'$max': '$dataList.pestrecogCreatedDate'}, 0, 10}}").as("fastigium");
+                .andExpression("{'$substrBytes': {'$seeTimesData.data.pestrecogCreatedDate', 0, 10}}").as("seeTimes")
+                .andExpression("{'$substrBytes': {'$endInPeriodData.data.pestrecogCreatedDate', 0, 10}}").as("endInPeriod")
+                .andExpression("{'$substrBytes': {'$fastigiumData.data.pestrecogCreatedDate', 0, 10}}").as("fastigium")
+                .and("seeTimesData.data.pestrecogNum").as("seeTimesNum")
+               .and("endInPeriodData.data.pestrecogNum").as("endInPeriodNum")
+               .and("fastigiumData.data.pestrecogNum").as("fastigiumNum")
+                .and("seeTimesData.data.pestName").as("pestName");
 
         Aggregation aggregation = Aggregation.newAggregation(
                 matchOperation,
@@ -503,8 +511,9 @@ public class IotPestrecogServiceImpl implements IIotPestrecogService {
                 unwindOperation,
                 matchOperation2,
                 projectionOperation2,
-                sortOperation,
                 groupOperation,
+                facetOperation,
+                projectionOperation3,
                 projectionOperationResult
         );
         List<IotPestRecogPeriodInfoResVo> infoResVoList = mongoService.aggregate(

+ 8 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/controller/IotScreenController.java

@@ -278,4 +278,12 @@ public class IotScreenController extends BaseController {
         return AjaxResult.success(iIotScreenService.cbdPestRankList(reqVo));
     }
 
+    /**
+     * 根据害虫业务标识查询始见期高峰期终见期
+     */
+    @GetMapping("/device/cbd/pest/period/stat")
+    public AjaxResult cbdPestPeriodStat(IotPestRecogPeriodReqVo reqVo) {
+        return AjaxResult.success(iIotScreenService.cbdPestPeriodStat(reqVo));
+    }
+
 }

+ 8 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/service/IIotScreenService.java

@@ -10,6 +10,7 @@ import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.monitor.domin.IotMonitorAddressGetReqVo;
 import com.yunfeiyun.agmp.iotm.device.monitor.domin.IotMonitorCaptureReqVo;
 import com.yunfeiyun.agmp.iotm.device.monitor.domin.IotMonitorPtzReqVo;
+import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestRecogPeriodInfoResVo;
 import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestRecogPeriodReqVo;
 import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestrecogGroupByNameListResVo;
 import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestrecogGroupByNameResVo;
@@ -121,4 +122,11 @@ public interface IIotScreenService {
      * @return
      */
     public List<IotPestrecogGroupByNameResVo> cbdPestRankList(IotDeviceDataListReqVo reqVo);
+
+    /**
+     * 根据害虫业务标识查询始见期高峰期终见期
+     * @param reqVo
+     * @return
+     */
+    public IotPestRecogPeriodInfoResVo cbdPestPeriodStat(IotPestRecogPeriodReqVo reqVo);
 }

+ 11 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotScreenServiceImpl.java

@@ -577,5 +577,16 @@ public class IotScreenServiceImpl implements IIotScreenService {
         return iIotPestrecogService.groupByName(reqVo);
     }
 
+    /**
+     * 根据害虫业务标识查询始见期高峰期终见期
+     *
+     * @param reqVo
+     * @return
+     */
+    @Override
+    public IotPestRecogPeriodInfoResVo cbdPestPeriodStat(IotPestRecogPeriodReqVo reqVo) {
+        return iIotPestrecogService.period(reqVo);
+    }
+
 
 }