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

新增 性诱测报2.0业务端对接

zhaiyifei 11 месяцев назад
Родитель
Сommit
6629003d8c

+ 27 - 9
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/controller/IotXycbController.java

@@ -13,7 +13,6 @@ import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotPest;
 import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
-import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iotm.common.controller.BaseController;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceBaseFunReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
@@ -22,7 +21,8 @@ import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceCommonService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceRefreshService;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestService;
 import com.yunfeiyun.agmp.iotm.device.xycb.domain.*;
-import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXycbService;
+import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXycbUtilService;
+import com.yunfeiyun.agmp.iotm.device.xycb.service.IIotXyinfoService;
 import com.yunfeiyun.agmp.iotm.util.ValidateUtil;
 import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
@@ -37,6 +37,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 性诱测报Controller
@@ -53,15 +54,10 @@ public class IotXycbController extends BaseController
     private IIotDeviceconfigService iIotDeviceconfigService;
     @Resource
     private IIotCmdtaskService iIotCmdtaskService;
-    @Resource
-    private MongoService mongoService;
 
     @Autowired
     private IIotDeviceService iIotDeviceService;
 
-    @Autowired
-    private IIotXycbService iIotXycbService;
-
     @Resource
     private IotDeviceRefreshService iotDeviceRefreshService;
 
@@ -71,6 +67,11 @@ public class IotXycbController extends BaseController
     @Autowired
     private IIotPestService iotPestService;
 
+    @Autowired
+    private IIotXyinfoService iIotXyinfoService;
+
+    @Autowired
+    private IIotXycbUtilService iIotXycbUtilService;
 
 
 
@@ -229,6 +230,23 @@ public class IotXycbController extends BaseController
         }
         reqVo.setDevtypeBidList(Arrays.asList(devTypeList));
         List<IotDeviceListResVo> list = iIotDeviceService.selectIotDeviceListByType(reqVo);
+        List<String> devBidList = list.stream().map(IotDeviceListResVo::getDevBid).collect(Collectors.toList());
+        List<IotXyinfoDto> iotXyinfoDtoList = iIotXyinfoService.selectIotXyinfoListByDevBidList(devBidList);
+        Map<String, IotXyinfoDto> iotXyinfoMap = new HashMap<>();
+        for(IotXyinfoDto item : iotXyinfoDtoList){
+            iotXyinfoMap.put(item.getDevBid(), item);
+        }
+
+        Map<String, String> pestTotalMap = iIotXycbUtilService.getPestTotalMap(list);
+        for(IotDeviceListResVo item : list){
+            String devBid = item.getDevBid();
+            IotXyinfoDto iotXyinfoDto = iotXyinfoMap.getOrDefault(devBid, new IotXyinfoDto());
+            String pestTotal = pestTotalMap.getOrDefault(devBid, "0");
+            iotXyinfoDto.setPestTotal(pestTotal);
+
+            item.setIotXyinfoDto(iotXyinfoDto);
+        }
+
         return getDataTable(list);
     }
 
@@ -354,8 +372,8 @@ public class IotXycbController extends BaseController
         return new AjaxResult(ErrorCode.SUCCESS.getCode(), "下发成功,等待设备响应结果", taskId);
     }
 
-    @GetMapping("/lure")
-    public AjaxResult modifyLure(IotXycbModifyLureReqVo reqVo){
+    @PostMapping("/modify/lure")
+    public AjaxResult modifyLure(@RequestBody IotXycbModifyLureReqVo reqVo){
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("modifyLure");

+ 2 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXyinfoDto.java

@@ -37,4 +37,6 @@ public class IotXyinfoDto extends IotBaseEntity
     /** 害虫业务标识 */
     @Excel(name = "害虫业务标识")
     private String pestBusid;
+
+    private String pestTotal;
 }

+ 0 - 25
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotXyinfoPestTotalDto.java

@@ -1,25 +0,0 @@
-package com.yunfeiyun.agmp.iotm.device.xycb.domain;
-
-import com.yunfeiyun.agmp.common.annotation.Excel;
-import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;
-import lombok.Data;
-
-/**
- * 性诱测报详细信息对象 IotXyinfo
- *
- * @author 杨晓辉
- * @date 2024-06-03
- */
-@Data
-public class IotXyinfoPestTotalDto extends IotBaseEntity
-{
-    private static final long serialVersionUID = 1L;
-
-    /** 设备业务标识 */
-    @Excel(name = "设备业务标识")
-    private String devBid;
-
-    /** 害虫业务标识 */
-    @Excel(name = "害虫识别总数")
-    private Integer pestTotal;
-}

+ 0 - 1
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/domain/IotYfXycbDataListRspVo.java

@@ -11,7 +11,6 @@ import lombok.Data;
 @Data
 public class IotYfXycbDataListRspVo {
 
-    @Excel( name = "序号")
     public String id;
 
     /**

+ 11 - 10
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXycbCommService.java

@@ -7,6 +7,7 @@ import com.yunfeiyun.agmp.common.core.page.PageDomain;
 import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
 import com.yunfeiyun.agmp.common.core.page.TableSupport;
 import com.yunfeiyun.agmp.common.log.LogCore;
+import com.yunfeiyun.agmp.common.service.WeatherService;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.SecurityUtils;
@@ -18,7 +19,6 @@ import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
 import com.yunfeiyun.agmp.iot.common.domain.*;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
-import com.yunfeiyun.agmp.common.service.WeatherService;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iotm.device.common.domin.DeviceRefreshDto;
 import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceDataListReqVo;
@@ -26,7 +26,6 @@ import com.yunfeiyun.agmp.iotm.device.common.domin.IotDeviceExportReqVo;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
 import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
 import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestService;
-import com.yunfeiyun.agmp.iotm.device.pest.service.IIotPestrecogService;
 import com.yunfeiyun.agmp.iotm.device.xycb.domain.*;
 import com.yunfeiyun.agmp.iotm.util.MongoUtil;
 import com.yunfeiyun.agmp.iotm.web.service.IIotCmdtaskService;
@@ -66,12 +65,6 @@ public class IIotXycbCommService extends IotDeviceBaseServiceImpl implements Iot
     private WeatherService weatherService;
 
     @Autowired
-    private IIotPestrecogService iIotPestrecogService;
-
-    @Autowired
-    private IIotXycbService iIotXycbService;
-
-    @Autowired
     private IIotPestService iotPestService;
 
     public Class getTableClass(String devtypeBid) {
@@ -130,6 +123,7 @@ public class IIotXycbCommService extends IotDeviceBaseServiceImpl implements Iot
             }
             IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
             xycbDataListRspVo.setDevBid(devBid);
+            xycbDataListRspVo.setDevCode(findDevice.getDevCode());
             xycbDataListRspVo.setDs("1");
             xycbDataListRspVo.setWs("1");
             xycbDataListRspVo.setAt(jsonObject.getString("at"));
@@ -277,8 +271,8 @@ public class IIotXycbCommService extends IotDeviceBaseServiceImpl implements Iot
         SortOperation sortOperation = Aggregation.sort(Sort.Direction.DESC, "xycbdataCreatedDate");
 
         ProjectionOperation projectionOperation = Aggregation.project()
-                .and("at").as("at")
-                .and("ah").as("ah")
+                .and("xycbdataContent.at").as("at")
+                .and("xycbdataContent.ah").as("ah")
                 .andExpression("{$convert: {input: '$xycbdataContent.infr_ct', to: 'int', onError: 0, onNull: 0}}").as("ct");
 
         GroupOperation groupOperation = Aggregation.group()
@@ -411,6 +405,12 @@ public class IIotXycbCommService extends IotDeviceBaseServiceImpl implements Iot
     public int modifyLure(IotXycbModifyLureReqVo reqVo) {
         String devBid = reqVo.getDevBid();
         String pestBusid = reqVo.getPestBusid();
+
+        IotDevice iotDevice = iIotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+        }
+
         IotPest iotPest = iotPestService.selectIotPestByPestBid(pestBusid);
         if(iotPest == null){
             throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "诱芯不存在");
@@ -418,6 +418,7 @@ public class IIotXycbCommService extends IotDeviceBaseServiceImpl implements Iot
         IotXyinfoDto iotXyinfoDto = iIotXyinfoService.selectIotXyinfoByDevBid(devBid);
 
         IotXyinfo iotXyinfo = new IotXyinfo();
+        iotXyinfo.setTid(iotDevice.getTid());
         iotXyinfo.setDevBid(reqVo.getDevBid());
         iotXyinfo.setPestBusid(iotPest.getPestBid());
         iotXyinfo.setXyinfoLurename(iotPest.getPestName());

+ 91 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXycbUtilService.java

@@ -0,0 +1,91 @@
+package com.yunfeiyun.agmp.iotm.device.xycb.service;
+
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
+import com.yunfeiyun.agmp.iot.common.domain.IotYfXycb2data;
+import com.yunfeiyun.agmp.iot.common.domain.IotYfXycbIIIdata;
+import com.yunfeiyun.agmp.iot.common.service.MongoService;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXycbInfoResVo;
+import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.GroupOperation;
+import org.springframework.data.mongodb.core.aggregation.MatchOperation;
+import org.springframework.data.mongodb.core.aggregation.ProjectionOperation;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class IIotXycbUtilService {
+
+    @Autowired
+    private MongoService mongoService;
+
+    public Class getTableClass(String devtypeBid) {
+        Class tableClass = null;
+        switch (devtypeBid){
+            case IotDeviceDictConst.TYPE_YF_XYCB_III:
+                tableClass = IotYfXycbIIIdata.class;
+                break;
+            case IotDeviceDictConst.TYPE_YF_XYCB_2:
+                tableClass = IotYfXycb2data.class;
+                break;
+            default:
+                break;
+        }
+        return tableClass;
+    }
+
+    public Map<String, String> getPestTotalMap(List<IotDeviceListResVo> iotDeviceListResVo) {
+
+        Map<String, ArrayList<String>> devtypeListMap = new HashMap<>();
+        for(IotDeviceListResVo iotDevice: iotDeviceListResVo){
+            String devtypeBid = iotDevice.getDevtypeBid();
+            devtypeListMap.computeIfAbsent(devtypeBid, k -> new ArrayList<>()).add(iotDevice.getDevBid());
+        }
+
+        Map<String, String> pestTotalMap = new HashMap<>();
+
+        for(Map.Entry<String, ArrayList<String>> entry: devtypeListMap.entrySet()){
+            String devtypeBid = entry.getKey();
+            List<String> devBidList = entry.getValue();
+
+            Criteria criteria = new Criteria()
+                    .and("devBid").in(devBidList);
+            MatchOperation matchOperation = Aggregation.match(criteria);
+
+            ProjectionOperation projectionOperation = Aggregation.project()
+                    .and("devBid").as("devBid")
+                    .andExpression("{$convert: {input: '$xycbdataContent.infr_ct', to: 'int', onError: 0, onNull: 0}}").as("ct");
+
+            GroupOperation groupOperation = Aggregation.group("devBid")
+                    .sum("ct").as("pestTotal");
+
+            ProjectionOperation projectionOperation2 = Aggregation.project()
+                    .and("devBid").as("devBid")
+                    .and("pestTotal").as("pestTotal");
+
+            Class tableClass = getTableClass(devtypeBid);
+            Aggregation aggregation = Aggregation.newAggregation(
+                    matchOperation,
+                    projectionOperation,
+                    groupOperation,
+                    projectionOperation2
+            );
+
+            List<IotXycbInfoResVo> iotXyinfoTotalResList = mongoService.aggregate(
+                    tableClass, aggregation, IotXycbInfoResVo.class
+            );
+            for(IotXycbInfoResVo iotXyinfoTotalRes: iotXyinfoTotalResList){
+                pestTotalMap.put(iotXyinfoTotalRes.getDevBid(), String.valueOf(iotXyinfoTotalRes.getPestTotal()));
+            }
+        }
+        return pestTotalMap;
+    }
+}

+ 0 - 8
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/IIotXyinfoService.java

@@ -15,14 +15,6 @@ public interface IIotXyinfoService
 {
     /**
      * 查询性诱测报详细信息列表
-     * 
-     * @param iotXyinfo 性诱测报详细信息
-     * @return 性诱测报详细信息集合
-     */
-    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo);
-
-    /**
-     * 查询性诱测报详细信息列表
      *
      * @param iotXyinfo 性诱测报详细信息
      * @return 性诱测报详细信息集合

+ 1 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXycb2ServiceImpl.java

@@ -88,6 +88,7 @@ public class IotXycb2ServiceImpl extends IIotXycbCommService {
             }
             IotYfXycbDataListRspVo xycbDataListRspVo = new IotYfXycbDataListRspVo();
             xycbDataListRspVo.setDevBid(devBid);
+            xycbDataListRspVo.setDevCode(findDevice.getDevCode());
             xycbDataListRspVo.setDs("1");
             xycbDataListRspVo.setWs("1");
             xycbDataListRspVo.setAt(jsonObject.getString("at"));

+ 0 - 11
src/main/java/com/yunfeiyun/agmp/iotm/device/xycb/service/impl/IotXyinfoServiceImpl.java

@@ -24,17 +24,6 @@ public class IotXyinfoServiceImpl implements IIotXyinfoService
     /**
      * 查询性诱测报详细信息列表
      *
-     * @param iotXyinfo 性诱测报详细信息
-     * @return 性诱测报详细信息集合
-     */
-    @Override
-    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo) {
-        return iotXyinfoMapper.selectIotXyinfoList(iotXyinfo);
-    }
-
-    /**
-     * 查询性诱测报详细信息列表
-     *
      * @param devBidList@return 性诱测报详细信息集合
      */
     @Override

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/domain/resvo/IotDeviceListResVo.java

@@ -3,6 +3,7 @@ package com.yunfeiyun.agmp.iotm.web.domain.resvo;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
 import com.yunfeiyun.agmp.iotm.device.scd.domain.IotYfScdDataVo;
+import com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoDto;
 import lombok.Data;
 
 @Data
@@ -23,4 +24,6 @@ public class IotDeviceListResVo extends IotDevice {
 
     private IotYfScdDataVo iotYfScdDataVo;
 
+    private IotXyinfoDto iotXyinfoDto;
+
 }

+ 0 - 8
src/main/java/com/yunfeiyun/agmp/iotm/web/mapper/IotXyinfoMapper.java

@@ -16,14 +16,6 @@ public interface IotXyinfoMapper
 
     /**
      * 查询性诱测报详细信息列表
-     * 
-     * @param iotXyinfo 性诱测报详细信息
-     * @return 性诱测报详细信息集合
-     */
-    public List<IotXyinfo> selectIotXyinfoList(IotXyinfo iotXyinfo);
-
-    /**
-     * 查询性诱测报详细信息列表
      *
      * @param iotXyinfo 性诱测报详细信息
      * @return 性诱测报详细信息集合

+ 2 - 17
src/main/resources/mapper/IotXyinfoMapper.xml

@@ -23,23 +23,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select id, xyinfoBid, cId, devBid, xyinfoLurename, xyinfoLureexpireddate, pestBusid, xyinfoCreator, xyinfoModifier, xyinfoModifieddate, xyinfoCreatedDate, xyinfoDelstatus from IotXyinfo
     </sql>
 
-    <select id="selectIotXyinfoList" parameterType="IotXyinfo" resultMap="IotXyinfoResult">
-        <include refid="selectIotXyinfoVo"/>
-        <where>  
-            <if test="xyinfoBid != null  and xyinfoBid != ''"> and xyinfoBid = #{xyinfoBid}</if>
-            <if test="cId != null  and cId != ''"> and cId = #{cId}</if>
-            <if test="devBid != null  and devBid != ''"> and devBid = #{devBid}</if>
-            <if test="xyinfoLurename != null  and xyinfoLurename != ''"> and xyinfoLurename like concat('%', #{xyinfoLurename}, '%')</if>
-            <if test="xyinfoLureexpireddate != null  and xyinfoLureexpireddate != ''"> and xyinfoLureexpireddate = #{xyinfoLureexpireddate}</if>
-            <if test="pestBusid != null  and pestBusid != ''"> and pestBusid = #{pestBusid}</if>
-            <if test="xyinfoCreator != null  and xyinfoCreator != ''"> and xyinfoCreator = #{xyinfoCreator}</if>
-            <if test="xyinfoModifier != null  and xyinfoModifier != ''"> and xyinfoModifier = #{xyinfoModifier}</if>
-            <if test="xyinfoModifieddate != null  and xyinfoModifieddate != ''"> and xyinfoModifieddate = #{xyinfoModifieddate}</if>
-            <if test="xyinfoCreatedDate != null  and xyinfoCreatedDate != ''"> and xyinfoCreatedDate = #{xyinfoCreatedDate}</if>
-            <if test="xyinfoDelstatus != null  and xyinfoDelstatus != ''"> and xyinfoDelstatus = #{xyinfoDelstatus}</if>
-        </where>
-    </select>
-
     <select id="selectIotXyinfoListByDevBidList" parameterType="java.util.List"
             resultType="com.yunfeiyun.agmp.iotm.device.xycb.domain.IotXyinfoDto">
         <include refid="selectIotXyinfoVo"/>
@@ -87,6 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="xyinfoModifieddate != null">xyinfoModifieddate,</if>
             <if test="xyinfoCreatedDate != null">xyinfoCreatedDate,</if>
             <if test="xyinfoDelstatus != null">xyinfoDelstatus,</if>
+            tid
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="xyinfoBid != null">#{xyinfoBid},</if>
@@ -100,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="xyinfoModifieddate != null">#{xyinfoModifieddate},</if>
             <if test="xyinfoCreatedDate != null">#{xyinfoCreatedDate},</if>
             <if test="xyinfoDelstatus != null">#{xyinfoDelstatus},</if>
+            #{tid}
         </trim>
     </insert>
 </mapper>