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') <= #{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; } }