Sfoglia il codice sorgente

新增 获取虫情矩阵折线图接口

zhaiyifei 1 anno fa
parent
commit
16cebbd4c5

+ 103 - 111
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/controller/IotPestController.java

@@ -1,25 +1,16 @@
 package com.yunfeiyun.agmp.iotm.device.pest.controller;
 
-import com.alibaba.fastjson2.JSONArray;
-import com.yunfeiyun.agmp.common.annotation.Log;
 import com.yunfeiyun.agmp.common.core.controller.BaseController;
 import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
-import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
-import com.yunfeiyun.agmp.common.enums.BusinessType;
-import com.yunfeiyun.agmp.common.utils.poi.ExcelUtil;
-import com.yunfeiyun.agmp.iot.common.domain.*;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotAidispestService;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 害虫信息Controller
@@ -39,31 +30,6 @@ public class IotPestController extends BaseController
     private IIotAidispestService iotAidispestService;
 
     /**
-     * 查询害虫信息列表
-     */
-    @PreAuthorize("@ss.hasPermi('iot:pest:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(IotPest iotPest)
-    {
-        startPage();
-        List<IotPest> list = iotPestService.selectIotPestList(iotPest);
-        return getDataTable(list);
-    }
-
-    /**
-     * 导出害虫信息列表
-     */
-    @PreAuthorize("@ss.hasPermi('iot:pest:export')")
-    @Log(title = "害虫信息", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, IotPest iotPest)
-    {
-        List<IotPest> list = iotPestService.selectIotPestList(iotPest);
-        ExcelUtil<IotPest> util = new ExcelUtil<IotPest>(IotPest.class);
-        util.exportExcel(response, list, "害虫信息数据");
-    }
-
-    /**
      * 获取害虫信息详细信息
      */
     @PreAuthorize("@ss.hasPermi('iot:pest:query')")
@@ -73,77 +39,103 @@ public class IotPestController extends BaseController
         return success(iotPestService.selectIotPestByPestBid(pestBid));
     }
 
-    /**
-     * 获取害虫信息详细信息
-     */
-    @PreAuthorize("@ss.hasPermi('iot:pest:plug:query')")
-    @GetMapping(value = "/plug/info")
-    public AjaxResult getPlugInfo(@RequestParam("pestBid") String pestBid)
-    {
-        Criteria criteria = new Criteria();
-        criteria.and("pestBusid").is(pestBid);
-        Query query = new Query(criteria);
-        query.with(Sort.by(Sort.Direction.DESC, "pestrecogCreatedDate"));
-        IotPestrecog iotPestrecog = mongoTemplate.findOne(query, IotPestrecog.class, "IotPestrecog");
-        IotPest iotPest = iotPestService.selectIotPestByPestBid(pestBid);
-        if (iotPestrecog != null) {
-            Criteria criteria2 = new Criteria();
-            criteria2.and("pestrecogBid").is(iotPestrecog.getPestrecogBid());
-            IotCbdpest iotCbdpest = mongoTemplate.findOne(new Query(criteria2), IotCbdpest.class, "IotCbdpest");
-            if (iotCbdpest != null) {
-                Criteria criteria3 = new Criteria();
-                criteria3.and("cbdrecogBid").is(iotCbdpest.getCbdrecogBid());
-                IotCbdrecog iotCbdrecog = mongoTemplate.findOne(new Query(criteria3), IotCbdrecog.class, "IotCbdrecog");
-                if (iotCbdrecog != null) {
-                    Criteria criteria4 = new Criteria();
-                    criteria4.and("cbdimgBid").is(iotCbdrecog.getCbdimgBid());
-                    IotCbdimg iotCbdimg = mongoTemplate.findOne(new Query(criteria4), IotCbdimg.class, "IotCbdimg");
-                    iotPest.setPestImgUrl(iotCbdimg.getCbdimgAddr());
-                }
-            }
-        }
-
-        try {
-            JSONArray preventiveMeasuresInfo = iotAidispestService.getPreventiveMeasuresInfo(iotPest.getPestName());
-            if (preventiveMeasuresInfo.size() > 0) {
-                iotPest.setPestInfo(preventiveMeasuresInfo.getJSONObject(0).toJSONString());
-            }
-        } catch (Exception e) {
-            logger.error("获得防治措施异常", e);
-        }
-        return success(iotPest);
-    }
-
-    /**
-     * 新增害虫信息
-     */
-    @PreAuthorize("@ss.hasPermi('iot:pest:add')")
-    @Log(title = "害虫信息", businessType = BusinessType.INSERT)
-    @PostMapping("/add")
-    public AjaxResult add(@RequestBody IotPest iotPest)
-    {
-        return toAjax(iotPestService.insertIotPest(iotPest));
-    }
-
-    /**
-     * 修改害虫信息
-     */
-    @PreAuthorize("@ss.hasPermi('iot:pest:edit')")
-    @Log(title = "害虫信息", businessType = BusinessType.UPDATE)
-    @PutMapping("/edit")
-    public AjaxResult edit(@RequestBody IotPest iotPest)
-    {
-        return toAjax(iotPestService.updateIotPest(iotPest));
-    }
-
-    /**
-     * 删除害虫信息
-     */
-    @PreAuthorize("@ss.hasPermi('iot:pest:remove')")
-    @Log(title = "害虫信息", businessType = BusinessType.DELETE)
-	@DeleteMapping("/delete")
-    public AjaxResult remove(@RequestParam("ids") Long[] ids)
-    {
-        return toAjax(iotPestService.deleteIotPestByIds(ids));
-    }
+//    /**
+//     * 查询害虫信息列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:list')")
+//    @GetMapping("/list")
+//    public TableDataInfo list(IotPest iotPest)
+//    {
+//        startPage();
+//        List<IotPest> list = iotPestService.selectIotPestList(iotPest);
+//        return getDataTable(list);
+//    }
+//
+//    /**
+//     * 导出害虫信息列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:export')")
+//    @Log(title = "害虫信息", businessType = BusinessType.EXPORT)
+//    @PostMapping("/export")
+//    public void export(HttpServletResponse response, IotPest iotPest)
+//    {
+//        List<IotPest> list = iotPestService.selectIotPestList(iotPest);
+//        ExcelUtil<IotPest> util = new ExcelUtil<IotPest>(IotPest.class);
+//        util.exportExcel(response, list, "害虫信息数据");
+//    }
+//
+//
+//    /**
+//     * 获取害虫信息详细信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:plug:query')")
+//    @GetMapping(value = "/plug/info")
+//    public AjaxResult getPlugInfo(@RequestParam("pestBid") String pestBid)
+//    {
+//        Criteria criteria = new Criteria();
+//        criteria.and("pestBusid").is(pestBid);
+//        Query query = new Query(criteria);
+//        query.with(Sort.by(Sort.Direction.DESC, "pestrecogCreatedDate"));
+//        IotPestrecog iotPestrecog = mongoTemplate.findOne(query, IotPestrecog.class, "IotPestrecog");
+//        IotPest iotPest = iotPestService.selectIotPestByPestBid(pestBid);
+//        if (iotPestrecog != null) {
+//            Criteria criteria2 = new Criteria();
+//            criteria2.and("pestrecogBid").is(iotPestrecog.getPestrecogBid());
+//            IotCbdpest iotCbdpest = mongoTemplate.findOne(new Query(criteria2), IotCbdpest.class, "IotCbdpest");
+//            if (iotCbdpest != null) {
+//                Criteria criteria3 = new Criteria();
+//                criteria3.and("cbdrecogBid").is(iotCbdpest.getCbdrecogBid());
+//                IotCbdrecog iotCbdrecog = mongoTemplate.findOne(new Query(criteria3), IotCbdrecog.class, "IotCbdrecog");
+//                if (iotCbdrecog != null) {
+//                    Criteria criteria4 = new Criteria();
+//                    criteria4.and("cbdimgBid").is(iotCbdrecog.getCbdimgBid());
+//                    IotCbdimg iotCbdimg = mongoTemplate.findOne(new Query(criteria4), IotCbdimg.class, "IotCbdimg");
+//                    iotPest.setPestImgUrl(iotCbdimg.getCbdimgAddr());
+//                }
+//            }
+//        }
+//
+//        try {
+//            JSONArray preventiveMeasuresInfo = iotAidispestService.getPreventiveMeasuresInfo(iotPest.getPestName());
+//            if (preventiveMeasuresInfo.size() > 0) {
+//                iotPest.setPestInfo(preventiveMeasuresInfo.getJSONObject(0).toJSONString());
+//            }
+//        } catch (Exception e) {
+//            logger.error("获得防治措施异常", e);
+//        }
+//        return success(iotPest);
+//    }
+//
+//    /**
+//     * 新增害虫信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:add')")
+//    @Log(title = "害虫信息", businessType = BusinessType.INSERT)
+//    @PostMapping("/add")
+//    public AjaxResult add(@RequestBody IotPest iotPest)
+//    {
+//        return toAjax(iotPestService.insertIotPest(iotPest));
+//    }
+//
+//    /**
+//     * 修改害虫信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:edit')")
+//    @Log(title = "害虫信息", businessType = BusinessType.UPDATE)
+//    @PutMapping("/edit")
+//    public AjaxResult edit(@RequestBody IotPest iotPest)
+//    {
+//        return toAjax(iotPestService.updateIotPest(iotPest));
+//    }
+//
+//    /**
+//     * 删除害虫信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('iot:pest:remove')")
+//    @Log(title = "害虫信息", businessType = BusinessType.DELETE)
+//	@DeleteMapping("/delete")
+//    public AjaxResult remove(@RequestParam("ids") Long[] ids)
+//    {
+//        return toAjax(iotPestService.deleteIotPestByIds(ids));
+//    }
 }

+ 16 - 42
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/controller/IotPestrecogController.java

@@ -80,6 +80,22 @@ public class IotPestrecogController extends BaseController {
         ExcelUtil<IotPestrecogListExportResVo> util = new ExcelUtil<>(IotPestrecogListExportResVo.class);
         util.exportExcel(response, list, "识别数据");
     }
+
+
+    /**
+     * 虫情趋势矩阵
+     */
+    @PreAuthorize("@ss.hasPermi('iot:pestrecog:group:date:name')")
+    @GetMapping("/group/date/name")
+    public AjaxResult groupByDateName(IotDeviceDataListReqVo reqVo) {
+        if (StringUtils.isEmpty(reqVo.getStartTime()) || StringUtils.isEmpty(reqVo.getEndTime())) {
+            return AjaxResult.error(ErrorCode.INVALID_PARAMETER.getCode(), "时间不能为空");
+        }
+        List<IotPestrecogGroupByNameListResVo> results = iIotPestrecogService.groupByDateName(reqVo);
+        return AjaxResult.success(results);
+    }
+
+
 //
 //    /**
 //     * 根据害虫分组统计数量
@@ -157,48 +173,6 @@ public class IotPestrecogController extends BaseController {
 //        return AjaxResult.success(results);
 //    }
 //
-//    /**
-//     * 虫情趋势矩阵
-//     */
-//    @PreAuthorize("@ss.hasPermi('iot:pestrecog:group:date:name')")
-//    @GetMapping("/group/date/name")
-//    public AjaxResult groupByDateName(IotDeviceDataListReqVo reqVo) {
-//        if (StringUtils.isEmpty(reqVo.getStartTime()) || StringUtils.isEmpty(reqVo.getEndTime())) {
-//            return AjaxResult.error(ErrorCode.INVALID_PARAMETER.getCode(), "时间不能为空");
-//        }
-//        List<IotPestrecog> results = iIotPestrecogService.groupByDateName(reqVo);
-//
-//        //获取存在识别害虫集合
-//        List<IotPest> iotPests2 = getIotPestList(results);
-//
-//        List<Map<String, Object>> list1 = new ArrayList<>();
-//        //获取日期集合
-//        List<String> dateList = DatePlugUtil.getTwoDaysDayDes(reqVo.getStartTime(), reqVo.getEndTime());
-//        for (String s : dateList) {
-//            Map<String, Object> dateMap = new HashMap<>();
-//            dateMap.put("date", s);
-//            List<Map<String, Object>> list2 = new ArrayList<>();
-//            dateMap.put("data", list2);
-//            for (IotPest iotPest : iotPests2) {
-//                String pestBid = iotPest.getPestBid();
-//                Map<String, Object> pestMap = new HashMap<>();
-//                pestMap.put("pestName", iotPest.getPestName());
-//                pestMap.put("pestBid", iotPest.getPestBid());
-//                int sum = 0;
-//                for (IotPestrecog iotPestrecog : results) {
-//                    if (s.equals(iotPestrecog.getPestrecogCreatedDate().substring(0, 10))
-//                            && pestBid != null && pestBid.equals(iotPestrecog.getPestBusid())) {
-//                        sum += iotPestrecog.getPestrecogNum();
-//                    }
-//                }
-//                pestMap.put("sum", sum);
-//                list2.add(pestMap);
-//            }
-//            list1.add(dateMap);
-//        }
-//        return AjaxResult.success(list1);
-//    }
-//
 ////    /**
 ////     * 虫情趋势矩阵
 ////     */

+ 11 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/domain/IotPestrecogGroupByNameListResVo.java

@@ -0,0 +1,11 @@
+package com.yunfeiyun.agmp.iotm.device.pest.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class IotPestrecogGroupByNameListResVo {
+    private String date;
+    private List<IotPestrecogGroupByNameResVo> data;
+}

+ 1 - 2
src/main/java/com/yunfeiyun/agmp/iotm/device/pest/service/IIotPestrecogService.java

@@ -3,7 +3,6 @@ package com.yunfeiyun.agmp.iotm.device.pest.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.yunfeiyun.agmp.common.core.page.PageDomain;
-import com.yunfeiyun.agmp.iot.common.domain.IotPestrecog;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
 import com.yunfeiyun.agmp.iotm.device.pest.domain.*;
 import com.yunfeiyun.agmp.iotm.device.xy.domain.IotXyinfoPestTotalDto;
@@ -18,7 +17,7 @@ public interface IIotPestrecogService {
 
     public List<IotPestrecogGroupByNameResVo> groupByName(IotDeviceDataListReqVo reqVo);
 
-    public List<IotPestrecog> groupByDateName(IotDeviceDataListReqVo reqVo);
+    public List<IotPestrecogGroupByNameListResVo> groupByDateName(IotDeviceDataListReqVo reqVo);
     public List<IotXyinfoPestTotalDto> getIotXyinfoPestTotal(List<String> devBidList);
     public Map<String, IotXyinfoPestTotalDto> getIotXyinfoPestTotalMap(List<String> devBidList);
 

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

@@ -10,10 +10,7 @@ import com.yunfeiyun.agmp.iot.common.domain.resvo.IoPestResVo;
 import com.yunfeiyun.agmp.iot.common.enums.EnumCbdMarkType;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
-import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestRecogPeriodReqVo;
-import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestrecogGroupByNameResVo;
-import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestrecogListExportResVo;
-import com.yunfeiyun.agmp.iotm.device.pest.domain.IotPestrecogListResVo;
+import com.yunfeiyun.agmp.iotm.device.pest.domain.*;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestService;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestrecogService;
 import com.yunfeiyun.agmp.iotm.device.xy.domain.IotXyinfoPestTotalDto;
@@ -302,89 +299,78 @@ public class IotPestrecogServiceImpl implements IIotPestrecogService {
      * @return
      */
     @Override
-    public List<IotPestrecog> groupByDateName(IotDeviceDataListReqVo reqVo) {
+    public List<IotPestrecogGroupByNameListResVo> groupByDateName(IotDeviceDataListReqVo reqVo) {
         String startTime = reqVo.getStartTime();
         String endTime = reqVo.getEndTime();
         String devBid = reqVo.getDevBid();
-        String cbdRecogType = "";
-        String pestrecogMarktype = "";
-//        String cbdRecogType = reqVo.getCbdRecogType();
-//        String pestrecogMarktype = reqVo.getPestrecogMarktype();
+        String cbdrecogType = reqVo.getCbdrecogType();
+        String cbdrecogMarktype = reqVo.getCbdrecogMarktype();
+        String unit = "day";
 
         Criteria criteria = new Criteria()
                 .and("devBid").is(devBid)
                 .and("cbdimgDelstatus").is("0");
+
         if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
             criteria = criteria.andOperator(
-                    Criteria.where("cbdimgCreatedDate").gte(startTime),
-                    Criteria.where("cbdimgCreatedDate").lte(endTime)
+                    Criteria.where("cbdrecog." + cbdrecogType + ".cbdrecogModifieddate").gte(startTime),
+                    Criteria.where("cbdrecog." + cbdrecogType + ".cbdrecogModifieddate").lte(endTime)
             );
         } else if (StringUtils.isNotEmpty(startTime)) {
-            criteria = criteria.and("cbdimgCreatedDate").gte(startTime);
+            criteria = criteria.and("cbdrecog." + cbdrecogType + ".cbdrecogModifieddate").gte(startTime);
         } else if (StringUtils.isNotEmpty(endTime)) {
-            criteria = criteria.and("cbdimgCreatedDate").lte(endTime);
+            criteria = criteria.and("cbdrecog." + cbdrecogType + ".cbdrecogModifieddate").lte(endTime);
         }
+        criteria = criteria.and("cbdrecog." + cbdrecogType + ".pestrecog." + cbdrecogMarktype + ".pestBusid").exists(true);
+
         MatchOperation matchOperation = Aggregation.match(criteria);
 
         ProjectionOperation projectionOperation = Aggregation.project()
-                .andExclude("_id")
-                .and("$$ROOT").as("c");
-
-        LookupOperation lookupOperationIotCbdrecog = Aggregation.lookup(
-                "IotCbdrecog", "c.cbdimgBid", "cbdimgBid", "ce"
-        );
-        Criteria cbdRecogCriteria = new Criteria()
-                .and("ce.cbdrecogType").is(cbdRecogType)
-                .and("ce.cbdrecogMarktype").is(pestrecogMarktype);
-        MatchOperation cbdRecogMatchOperation = Aggregation.match(cbdRecogCriteria);
-        UnwindOperation unwindOperationCe = Aggregation.unwind("ce", false);
-
-        LookupOperation lookupOperationIotCbdpest = Aggregation.lookup(
-                "IotCbdpest", "ce.cbdrecogBid", "cbdrecogBid", "cp"
-        );
-        UnwindOperation unwindOperationCp = Aggregation.unwind("cp", false);
+                .and("cbdrecog." + cbdrecogType + ".pestrecog." + cbdrecogMarktype).as("pestrecog");
 
-        LookupOperation lookupOperationIotPestrecog = Aggregation.lookup(
-                "IotPestrecog", "cp.pestrecogBid", "pestrecogBid", "pr"
-        );
-        UnwindOperation unwindOperationPr = Aggregation.unwind("pr", false);
-        Criteria pestRecogCriteria = new Criteria()
-                .and("pr.pestrecogMarktype").is(pestrecogMarktype);
-        MatchOperation pestRecogMatchOperation = Aggregation.match(pestRecogCriteria);
+        UnwindOperation unwindOperation = Aggregation.unwind("pestrecog", false);
 
         ProjectionOperation projectionOperation2 = Aggregation.project()
-                .and("pr.pestBusid").as("pestBusid")
-                .and("pr.pestrecogNum").as("pestrecogNum")
+                .and("pestrecog.pestBusid").as("pestBusid")
+                .and("pestrecog.pestName").as("pestName")
+                .and("pestrecog.pestrecogNum").as("pestrecogNum")
                 .andExpression(
-                        "{$dateTrunc: {date: {$dateFromString: {dateString: '$pr.pestrecogCreatedDate', format: '%Y-%m-%d %H:%M:%S'}}, unit:'day'}}").as("pestrecogCreatedDate");
+                    "{$dateTrunc: {date: {$dateFromString: {dateString: '$pestrecog.pestrecogCreatedDate', format: '%Y-%m-%d %H:%M:%S'}}, unit:'" + unit + "'}}").as("date");
+        GroupOperation groupOperation = Aggregation.group("date", "pestBusid")
+                .sum("pestrecogNum").as("pestrecogNum")
+                .first("pestName").as("pestName");
 
-        GroupOperation groupOperation = Aggregation.group("pestrecogCreatedDate", "pestBusid")
-                .sum("pestrecogNum").as("pestrecogNum");
-        ProjectionOperation projectionOperation3 = Aggregation.project()
-                .and("_id.pestBusid").as("pestBusid")
-                .and("pestrecogNum").as("pestrecogNum")
-                .andExpression(
-                        "{$dateToString: { format: '%Y-%m-%d', date: '$_id.pestrecogCreatedDate'}}").as("pestrecogCreatedDate");
+        Map<String, String> sumMap = new HashMap<>();
+        sumMap.put("$toInt", "$pestrecogNum");
+
+        Map<String, Object> dateMap = new HashMap<>();
+        dateMap.put("sum", "$pestrecogNum");
+        dateMap.put("pestName", "$pestName");
+        dateMap.put("pestBid", "$_id.pestBusid");
+
+        GroupOperation groupOperation2 = Aggregation.group("$_id.date")
+                .push(dateMap).as("data");
+        SortOperation sortOperation = Aggregation.sort(Sort.Direction.ASC, "_id");
+
+        ProjectionOperation projectionOperationResult = Aggregation.project()
+                .and("data").as("data")
+                .andExpression("{'$dateToString':{'date': '$_id', 'format': '%Y-%m-%d'}}").as("date");
 
         Aggregation aggregation = Aggregation.newAggregation(
                 matchOperation,
                 projectionOperation,
-                lookupOperationIotCbdrecog,
-                unwindOperationCe,
-                cbdRecogMatchOperation,
-                lookupOperationIotCbdpest,
-                unwindOperationCp,
-                lookupOperationIotPestrecog,
-                unwindOperationPr,
-                pestRecogMatchOperation,
+                unwindOperation,
                 projectionOperation2,
                 groupOperation,
-                projectionOperation3
+                groupOperation2,
+                sortOperation,
+                projectionOperationResult
         );
-        List<IotPestrecog> iotPestrecogList = mongoService.aggregate(
-                IotCbdimg.class, aggregation, IotPestrecog.class
+
+        List<IotPestrecogGroupByNameListResVo> iotPestrecogGroupByNameResVoList = mongoService.aggregate(
+                IotCbdimg.class, aggregation, IotPestrecogGroupByNameListResVo.class
         );
-        return iotPestrecogList;
+        return iotPestrecogGroupByNameResVoList;
     }
 
     /**