zhongrj
2023-10-11 b707eeb64691f2b06e7eb7057c281b5403c2d823
新增预计统计接口,可以按类型时间等筛选
5 files modified
1 files added
204 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/StatisticAlarmRecord.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/controller/AlarmRecordController.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.java 23 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml 72 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/AlarmRecordService.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java 67 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/StatisticAlarmRecord.java
New file
@@ -0,0 +1,24 @@
package cn.gistack.alerts.alarmRule.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class StatisticAlarmRecord implements Serializable {
    /**
     * 区域名称
     */
    private String adName;
    /**
     * 规则名称
     */
    private String ruleName;
    /**
     * 数量
     */
    private Integer num;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/controller/AlarmRecordController.java
@@ -111,4 +111,15 @@
        return R.data(alarmRecord);
    }
    /**
     * 按行政区统计告警
     * @param alarmRecord
     * @return
     */
    @ApiOperation(value="告警记录-告警统计", notes="告警记录-告警统计")
    @GetMapping(value = "/statisticAlarmRecord")
    public R statisticAlarmRecord(AlarmRecordVO alarmRecord) {
        return R.data(alarmRecordService.statisticAlarmRecord(alarmRecord));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.java
@@ -1,7 +1,9 @@
package cn.gistack.alerts.alarmRule.mapper;
import cn.gistack.alerts.alarmRule.entity.AlarmRecord;
import cn.gistack.alerts.alarmRule.entity.AlarmRule;
import cn.gistack.alerts.alarmRule.vo.AlarmRecordVO;
import cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
@@ -22,4 +24,25 @@
     * @return
     */
    List<AlarmRecordVO> selectAlarmRecordPage(IPage<AlarmRecordVO> page,@Param("alarmRecord") AlarmRecordVO alarmRecord);
    /**
     * 查询告警统计数据
     * @param alarmRecord
     * @return
     */
    List<StatisticAlarmRecord> statisticAlarmRecord(@Param("alarmRecord") AlarmRecordVO alarmRecord);
    /**
     * 按行政区code 查询下级行政区
     * @param adCode
     * @return
     */
    List<String> getAdNameList(@Param("adCode") String adCode);
    /**
     * 查询符合条件的告警类型
     * @param alarmRecord
     * @return
     */
    List<AlarmRule> listAlarmRule(@Param("alarmRecord") AlarmRecordVO alarmRecord);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -47,4 +47,76 @@
        order by sar.id desc
    </select>
    <!--按行政区code 查询下级行政区-->
    <select id="getAdNameList" resultType="java.lang.String">
        select "ad_name" from SJZT_MD."att_ad_base" where "p_ad_code" = #{adCode} order by "guid"
    </select>
    <!--查询告警统计数据-->
    <select id="statisticAlarmRecord" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord">
        select cityName as adName,rule_name as ruleName,count(*) num from (
            select
            sar.id,sar.alarm_rule_id,sar.create_time,sar.reservoir_number,
            arb."name",
            e.rule_name,
            case when b."ad_grad" = 4 THEN b."ad_name" ELSE NULL END AS townName,
            case when b."ad_grad" = 3 THEN b."ad_name"
                when c."ad_grad" = 3 THEN c."ad_name" END AS countyName,
            case when b."ad_grad" = 3 THEN b."ad_code"
                when c."ad_grad" = 3 THEN c."ad_code" END AS countyCode,
            case when b."ad_grad" = 2 THEN b."ad_code"
                when c."ad_grad" = 2 THEN c."ad_code"
                ELSE d."ad_code" END AS cityCode,
            case when b."ad_grad" = 2 THEN b."ad_name"
                when c."ad_grad" = 2 THEN c."ad_name"
                ELSE d."ad_name" END AS cityName
            from YWXT.sm_alarm_record sar
            left join SJZT_MD."att_res_base" arb on arb."guid" = sar.reservoir_number
            left join SJZT_MD."att_ad_base" b ON arb."interior_ad_guid" = b."guid"
            left join SJZT_MD."att_ad_base" c ON b."p_ad_code" = c."guid"
            left join SJZT_MD."att_ad_base" d ON c."p_ad_code" = d."guid"
            left join YWXT.sm_alarm_rule e on e.id = sar.alarm_rule_id
            where sar.is_deleted = 0
            <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
                and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
            </if>
            <if test="alarmRecord.type!=null and alarmRecord.type!=''">
                and e.type = #{alarmRecord.type}
            </if>
            <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
                and e.alarm_rule_type = #{alarmRecord.alarmRuleType}
            </if>
            <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
                and e.create_alarm_type = #{alarmRecord.createAlarmType}
            </if>
            <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
                and e.rule_name = #{alarmRecord.ruleName}
            </if>
            <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
                and date_format(sar.create_time,'%Y-%m-%d') >= #{alarmRecord.startTime}
            </if>
            <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
                and date_format(sar.create_time,'%Y-%m-%d') &lt;= #{alarmRecord.endTime}
            </if>
        ) f
        group by cityName,rule_name
    </select>
    <!--查询符合条件的告警类型-->
    <select id="listAlarmRule" resultType="cn.gistack.alerts.alarmRule.entity.AlarmRule">
        select * from YWXT.sm_alarm_rule where is_deleted = 0
        <if test="alarmRecord.type!=null and alarmRecord.type!=''">
            and type = #{alarmRecord.type}
        </if>
        <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
            and alarm_rule_type = #{alarmRecord.alarmRuleType}
        </if>
        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
            and create_alarm_type = #{alarmRecord.createAlarmType}
        </if>
        <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
            and rule_name = #{alarmRecord.ruleName}
        </if>
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/AlarmRecordService.java
@@ -19,4 +19,11 @@
     * @return
     */
    Object selectAlarmRecordPage(IPage<AlarmRecordVO> page, AlarmRecordVO alarmRecord);
    /**
     * 按行政区统计告警
     * @param alarmRecord
     * @return
     */
    Object statisticAlarmRecord(AlarmRecordVO alarmRecord);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/service/impl/AlarmRecordServiceImpl.java
@@ -1,12 +1,26 @@
package cn.gistack.alerts.alarmRule.service.impl;
import cn.gistack.alerts.alarmRule.entity.AlarmRecord;
import cn.gistack.alerts.alarmRule.entity.AlarmRule;
import cn.gistack.alerts.alarmRule.mapper.AlarmRecordMapper;
import cn.gistack.alerts.alarmRule.service.AlarmRecordService;
import cn.gistack.alerts.alarmRule.service.AlarmRuleService;
import cn.gistack.alerts.alarmRule.vo.AlarmRecordVO;
import cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord;
import cn.gistack.alerts.sms.vo.Temp;
import cn.gistack.sm.intelligentCall.entity.Scene;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 告警记录服务实现层
@@ -15,6 +29,9 @@
 */
@Service
public class AlarmRecordServiceImpl extends BaseServiceImpl<AlarmRecordMapper, AlarmRecord> implements AlarmRecordService {
    @Autowired
    private AlarmRuleService alarmRuleService;
    /**
     * 自定义分页列表查询
@@ -29,4 +46,54 @@
        }
        return page.setRecords(baseMapper.selectAlarmRecordPage(page,alarmRecord));
    }
    /**
     * 按行政区统计告警
     * @param alarmRecord
     * @return
     */
    @Override
    public Object statisticAlarmRecord(AlarmRecordVO alarmRecord) {
        // 获取当前用户的行政区划
        String adCode = "420000000000";
        // 查询所有的市级行政区
        List<String> adNameList = baseMapper.getAdNameList(adCode);
        // 查询符合条件的告警类型
        List<AlarmRule> alarmRuleList = baseMapper.listAlarmRule(alarmRecord);
        // 查询统计数据
        List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecord(alarmRecord);
        // 按行政区分组
        Map<String, List<StatisticAlarmRecord>> listMap = list.stream().collect(Collectors.groupingBy(StatisticAlarmRecord::getAdName));
        // 补全行政区
        for (String adName : adNameList) {
            if (!listMap.containsKey(adName)){
                List<StatisticAlarmRecord> arrayList = new ArrayList<>();
                listMap.put(adName,arrayList);
            }
        }
        List<String> ruleNameList = alarmRuleList.stream().map(alarmRule -> alarmRule.getRuleName()).collect(Collectors.toList());
        // 补全告警类型
        listMap.forEach((adName,statisticAlarmRecords)->{
            // 取出已有的告警类型
            List<String> newRuleNameList = statisticAlarmRecords.stream().map(alarmRule -> alarmRule.getRuleName()).collect(Collectors.toList());
            // 取差集
            List<String> resultAlarmRuleList = ruleNameList.stream().filter(item -> !newRuleNameList.contains(item)).collect(Collectors.toList());
            for (String ruleName : resultAlarmRuleList) {
                StatisticAlarmRecord newStatisticAlarmRecord = new StatisticAlarmRecord();
                newStatisticAlarmRecord.setRuleName(ruleName);
                newStatisticAlarmRecord.setNum(0);
                newStatisticAlarmRecord.setAdName(adName);
                statisticAlarmRecords.add(newStatisticAlarmRecord);
            }
        });
        List<Object> objects = new ArrayList<>();
        // 重新录入排序
        for (String adName : adNameList) {
            if (listMap.containsKey(adName)){
                objects.add(listMap.get(adName));
            }
        }
        // 返回数据
        return objects;
    }
}