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

新增 获取虫情预警要素功能

zhaiyifei 9 месяцев назад
Родитель
Сommit
24c9877a93

+ 1 - 0
src/main/java/com/yunfeiyun/agmp/iots/warn/job/WarnJob.java

@@ -39,6 +39,7 @@ public class WarnJob {
     /**
      * 病虫害告警定时检查方法
      */
+    @Scheduled(cron = "* * * * * ?")
     public void pestWarnJob() {
         // 处理虫害
         warnService.processWarningPestData();

+ 18 - 0
src/main/java/com/yunfeiyun/agmp/iots/warn/mapper/IotWarnBussinessMapper.java

@@ -4,6 +4,7 @@ import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarncount;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnindicator;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnlog;
+import com.yunfeiyun.agmp.iots.warn.model.IotWarnconfigDevVo;
 import com.yunfeiyun.agmp.iots.warn.model.WarnConfigInfo;
 import org.apache.ibatis.annotations.Param;
 
@@ -62,4 +63,21 @@ public interface IotWarnBussinessMapper {
     void autoDealWarnOfflineLog(IotWarnlog iotWarnlog);
 
     List<IotWarnindicator> selectIotWarnPestConfigInfoList(@Param("code") String code);
+
+    List<IotWarnindicator> selectIotWarnindicatorList(IotWarnindicator iotWarnindicator);
+
+
+    /**
+     * 查询测报灯设备所有告警配置信息列表
+     * @return
+     */
+    List<IotWarnindicator> selectCbdIndicatorAllList();
+
+
+    /**
+     * 查询测报灯设备所有告警配置信息列表
+     *
+     * @return
+     */
+    List<IotWarnconfigDevVo> selectIotWarnconfigCbdDevList();
 }

+ 16 - 0
src/main/java/com/yunfeiyun/agmp/iots/warn/model/IotWarnconfigCbdInfoVo.java

@@ -0,0 +1,16 @@
+package com.yunfeiyun.agmp.iots.warn.model;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
+import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
+import com.yunfeiyun.agmp.iot.common.domain.IotWarnindicator;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class IotWarnconfigCbdInfoVo extends IotWarnconfig {
+
+    private IotDevice iotDevice;
+
+    private List<IotWarnindicator> iotWarnindicatorList;
+}

+ 13 - 0
src/main/java/com/yunfeiyun/agmp/iots/warn/model/IotWarnconfigDevVo.java

@@ -0,0 +1,13 @@
+package com.yunfeiyun.agmp.iots.warn.model;
+
+import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
+import lombok.Data;
+
+@Data
+public class IotWarnconfigDevVo extends IotWarnconfig {
+    private String wiBid;
+    private String devBid;
+    private String devCode;
+    private String devtypeBid;
+    private String devCbdrecogtype;
+}

+ 89 - 5
src/main/java/com/yunfeiyun/agmp/iots/warn/service/IotWarnBussinessService.java

@@ -4,12 +4,14 @@ import com.yunfeiyun.agmp.common.enums.RedisCacheKey;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
-import com.yunfeiyun.agmp.common.web.system.domain.SysConfig;
 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 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;
@@ -19,10 +21,7 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 @Slf4j
@@ -250,4 +249,89 @@ public class IotWarnBussinessService {
         // 获取统计结果,默认为0
         return result != null ? ((Number) result.get("totalPestCount")).intValue() : 0;
     }
+
+    /**
+     * 查询告警指标,存储所有与告警相关的指标信息列表
+     *
+     * @param iotWarnindicator 告警指标,存储所有与告警相关的指标信息
+     * @return 告警指标,存储所有与告警相关的指标信息集合
+     */
+    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){
+            String wcBid = item.getWcBid();
+            if(!iotWarnindicatorMap.containsKey(wcBid)){
+                iotWarnindicatorMap.put(wcBid,new ArrayList<>());
+            }
+            iotWarnindicatorMap.get(wcBid).add(item);
+        }
+        return iotWarnindicatorMap;
+    }
+
+    /**
+     * 查询测报灯设备所有告警配置信息
+     * @return
+     */
+
+    public Map<String, List<IotWarnindicator>> selectCbdIndicatorAllMap(){
+        List<IotWarnindicator> iotWarnindicators = iotWarnBussinessMapper.selectCbdIndicatorAllList();
+        Map<String, List<IotWarnindicator>> iotWarnindicatorMap = new LinkedHashMap<>();
+        for(IotWarnindicator iotWarnindicator : iotWarnindicators){
+            String wcBid = iotWarnindicator.getWcBid();
+            if(!iotWarnindicatorMap.containsKey(wcBid)){
+                iotWarnindicatorMap.put(wcBid,new ArrayList<>());
+            }
+            iotWarnindicatorMap.get(wcBid).add(iotWarnindicator);
+        }
+        return iotWarnindicatorMap;
+    }
+
+    /**
+     * 查询测报灯设备所有告警配置信息列表
+     *
+     * @return
+     */
+
+    public List<IotWarnconfigCbdInfoVo> selectIotWarnconfigCbdInfoList() {
+        List<IotWarnconfigDevVo> iotWarnconfigDevVoList = iotWarnBussinessMapper.selectIotWarnconfigCbdDevList();
+        Map<String, List<IotWarnindicator>> iotWarnindicatorMap = selectCbdIndicatorAllMap();
+        List<IotWarnconfigCbdInfoVo> iotWarnconfigCbdInfoVoList = new ArrayList<>();
+        List<String> parentbidList = new ArrayList<>();
+        for(IotWarnconfigDevVo iotWarnconfigDevVo : iotWarnconfigDevVoList){
+            String wcBid = iotWarnconfigDevVo.getWcBid();
+            List<IotWarnindicator> iotWarnindicatorList = iotWarnindicatorMap.get(wcBid);
+            for(IotWarnindicator item: iotWarnindicatorList){
+                String wiCode = item.getWiCode();
+                if("pestDetail".equals(wiCode)){
+                    parentbidList.add(item.getWiBid());
+                }
+            }
+            IotDevice iotDevice = new IotDevice();
+            BeanUtils.copyProperties(iotWarnconfigDevVo, iotDevice);
+
+            IotWarnconfigCbdInfoVo iotWarnconfigCbdInfoVo = new IotWarnconfigCbdInfoVo();
+            BeanUtils.copyProperties(iotWarnconfigDevVo, iotWarnconfigCbdInfoVo);
+            iotWarnconfigCbdInfoVo.setIotDevice(iotDevice);
+            iotWarnconfigCbdInfoVo.setIotWarnindicatorList(iotWarnindicatorList);
+            iotWarnconfigCbdInfoVoList.add(iotWarnconfigCbdInfoVo);
+        }
+        if(!parentbidList.isEmpty()){
+            IotWarnindicator selectIotWarnindicator = new IotWarnindicator();
+            selectIotWarnindicator.setWiParentbidList(parentbidList);
+            Map<String, List<IotWarnindicator>> iotMap = selectIotWarnindicatorMap(selectIotWarnindicator);
+            for(IotWarnconfigCbdInfoVo cbdInfoVo : iotWarnconfigCbdInfoVoList){
+                String wcBid = cbdInfoVo.getWcBid();
+                List<IotWarnindicator> pestDetailList = iotMap.get(wcBid);
+                List<IotWarnindicator> iotWarnindicatorList = cbdInfoVo.getIotWarnindicatorList();
+                for(IotWarnindicator item: iotWarnindicatorList){
+                    String wiCode = item.getWiCode();
+                    if("pestDetail".equals(wiCode)){
+                        item.setChildrenList(pestDetailList);
+                    }
+                }
+            }
+        }
+        return iotWarnconfigCbdInfoVoList;
+    }
 }

+ 33 - 16
src/main/java/com/yunfeiyun/agmp/iots/warn/service/WarnPestService.java

@@ -4,17 +4,22 @@ import com.yunfeiyun.agmp.common.constant.ErrorCode;
 import com.yunfeiyun.agmp.common.exception.BizException;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
+import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnindicator;
 import com.yunfeiyun.agmp.iot.common.enums.EnumWarnRuleOp;
+import com.yunfeiyun.agmp.iots.warn.model.IotWarnconfigCbdInfoVo;
 import com.yunfeiyun.agmp.iots.warn.model.WarnResult;
 import com.yunfeiyun.agmp.iots.warn.model.WarnStatusDto;
 import com.yunfeiyun.agmp.iots.warn.util.CompareUtil;
 import com.yunfeiyun.agmp.iots.warn.util.WarnMessageBuilderUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 @Service
 @Slf4j
@@ -29,19 +34,31 @@ public class WarnPestService {
      */
     public void process() {
         //单个配置单个设备的处理逻辑,外层需要遍历
-
-        //需要的参数,devId
-        String devId = "";
-        //需要的参数,iotWarnindicator的:默认全部,外加+devCode,devTypeBid
-        IotWarnindicator pestByTypeWarnindicator = new IotWarnindicator();
-        IotWarnindicator pestByCountWarnindicator = new IotWarnindicator();
-        IotWarnindicator designatePestWarnindicator = new IotWarnindicator();
-
-        //需要的参数,iotWarnconfig的:全部
-        IotWarnconfig iotWarnconfig = new IotWarnconfig();
-
-        //底层调用:统一处理一个虫情设备的三个要素
-        processPestIotWarnindicators(devId, iotWarnconfig, pestByTypeWarnindicator, pestByCountWarnindicator, designatePestWarnindicator);
+        List<IotWarnconfigCbdInfoVo> iotWarnconfigCbdInfoVoList = iotWarnBussinessService.selectIotWarnconfigCbdInfoList();
+        for (IotWarnconfigCbdInfoVo iotWarnconfigCbdInfoVo : iotWarnconfigCbdInfoVoList) {
+            IotDevice iotDevice = iotWarnconfigCbdInfoVo.getIotDevice();
+            String devBid = iotDevice.getDevBid();
+            List<IotWarnindicator> iotWarnindicatorList = iotWarnconfigCbdInfoVo.getIotWarnindicatorList();
+            IotWarnconfig iotWarnconfig = new IotWarnconfig();
+            BeanUtils.copyProperties(iotWarnconfigCbdInfoVo, iotWarnconfig);
+
+            IotWarnindicator pestByTypeWarnindicator = new IotWarnindicator();
+            IotWarnindicator pestByCountWarnindicator = new IotWarnindicator();
+            IotWarnindicator designatePestWarnindicator = new IotWarnindicator();
+            for(IotWarnindicator iotWarnindicator : iotWarnindicatorList){
+                BeanUtils.copyProperties(iotDevice, iotWarnindicator);
+
+                if("pestType".equals(iotWarnindicator.getWiCode())){
+                    BeanUtils.copyProperties(iotWarnindicator, pestByTypeWarnindicator);
+                }else if("pestNum".equals(iotWarnindicator.getWiCode())){
+                    BeanUtils.copyProperties(iotWarnindicator, pestByCountWarnindicator);
+                }else if("pestDetail".equals(iotWarnindicator.getWiCode())){
+                    BeanUtils.copyProperties(iotWarnindicator, designatePestWarnindicator);
+                }
+            }
+            //底层调用:统一处理一个虫情设备的三个要素
+            processPestIotWarnindicators(devBid, iotWarnconfig, pestByTypeWarnindicator, pestByCountWarnindicator, designatePestWarnindicator);
+        }
     }
 
     /**
@@ -99,7 +116,7 @@ public class WarnPestService {
             EnumWarnRuleOp warnRuleOp = EnumWarnRuleOp.findEnumByCode(expression);
             boolean tempSuccess = CompareUtil.comp(currentValue + "", expression, targetValue);
             WarnStatusDto warnStatusDto = new WarnStatusDto();
-            warnStatusDto.setDevType(iotWarnindicator.getDevTypeBid());
+            warnStatusDto.setDevType(iotWarnindicator.getDevtypeBid());
             warnStatusDto.setDevCode(iotWarnindicator.getDevCode());
             warnStatusDto.setName(iotWarnindicator.getWiName());
             warnStatusDto.setValue(currentValue + "");
@@ -212,8 +229,8 @@ public class WarnPestService {
             log.error("【设备预警】病虫害:设备code 不可为空");
             throw new BizException(ErrorCode.FAILURE.getCode(), "设备code不可为空");
         }
-        String devTypeBid = warnStatusDto.getDevTypeBid();
-        if (StringUtils.isEmpty(devTypeBid)) {
+        String devtypeBid = warnStatusDto.getDevtypeBid();
+        if (StringUtils.isEmpty(devtypeBid)) {
             log.error("【设备预警】病虫害:设备类型 不可为空");
             throw new BizException(ErrorCode.FAILURE.getCode(), "病虫害:设备类型 不可为空");
         }

+ 50 - 0
src/main/resources/mapper/IotWarnBusinessMapper.xml

@@ -167,4 +167,54 @@
         where devBid = #{devBid} and wlType='1' and status='0'
 
     </update>
+
+    <select id="selectIotWarnconfigCbdDevList" resultType="com.yunfeiyun.agmp.iots.warn.model.IotWarnconfigDevVo">
+        SELECT wi.wiBid, d.devBid, d.devCode, d.devtypeBid, d.devCbdrecogtype, wc.*
+        FROM IotWarnindicator AS wi
+            LEFT JOIN IotWarnconfig AS wc ON wc.wcBid = wi.wcBid
+            LEFT JOIN IotWarnobject AS wo ON wo.wcBid = wc.wcBid
+            LEFT JOIN IotDevice AS d ON d.devBid = wo.devBid
+        WHERE wi.wiCode = "pestDetail" AND wc.wcStatus = "0" AND d.devDelstatus = "0"
+    </select>
+
+
+    <select id="selectCbdIndicatorAllList"
+            resultType="com.yunfeiyun.agmp.iot.common.domain.IotWarnindicator">
+        SELECT wi.*
+        FROM IotWarnindicator AS wi
+        LEFT JOIN IotWarnconfig AS wc ON wc.wcBid = wi.wcBid
+        WHERE wi.wiCode IN ('pestType', 'pestNum', 'pestDetail') AND wc.wcStatus = "0"
+    </select>
+
+    <select id="selectIotWarnindicatorList" parameterType="IotWarnindicator" resultType="IotWarnindicator">
+        select id, wiBid, wcBid, wdBid, wiAddress, wiCode, wiName, wiUnit,wiStatus,wiExpression, wiValue, wiCreator,
+            wiCreateddate, wiModifieddate, wiModifier, tid, wiOptiontype, wiParentbid
+        from IotWarnindicator
+        <where>
+            <if test="wiBid != null  and wiBid != ''"> and wiBid = #{wiBid}</if>
+            <if test="wcBid != null  and wcBid != ''"> and wcBid = #{wcBid}</if>
+            <if test="wdBid != null  and wdBid != ''"> and wdBid = #{wdBid}</if>
+            <if test="wiAddress != null  and wiAddress != ''"> and wiAddress = #{wiAddress}</if>
+            <if test="wiCode != null  and wiCode != ''"> and wiCode = #{wiCode}</if>
+            <if test="wiName != null  and wiName != ''"> and wiName = #{wiName}</if>
+            <if test="wiUnit != null  and wiUnit != ''"> and wiUnit = #{wiUnit}</if>
+            <if test="wiStatus != null  and wiStatus != ''"> and wiStatus = #{wiStatus}</if>
+            <if test="wiExpression != null  and wiExpression != ''"> and wiExpression = #{wiExpression}</if>
+            <if test="wiValue != null  and wiValue != ''"> and wiValue = #{wiValue}</if>
+            <if test="wiCreator != null  and wiCreator != ''"> and wiCreator = #{wiCreator}</if>
+            <if test="wiCreateddate != null  and wiCreateddate != ''"> and wiCreateddate = #{wiCreateddate}</if>
+            <if test="wiModifieddate != null  and wiModifieddate != ''"> and wiModifieddate = #{wiModifieddate}</if>
+            <if test="wiModifier != null  and wiModifier != ''"> and wiModifier = #{wiModifier}</if>
+            <if test="tid != null  and tid != ''"> and tid = #{tid}</if>
+            <if test="wiOptiontype != null  and wiOptiontype != ''"> and wiOptiontype = #{wiOptiontype}</if>
+            <if test="wiParentbid != null  and wiParentbid != ''"> and wiParentbid = #{wiParentbid}</if>
+            <if test="wiParentbidList != null and wiParentbidList.size() > 0">
+                and wiParentbid in
+                <foreach collection="wiParentbidList" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
 </mapper>