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 cn.gistack.sm.patrol.feign.PatrolTaskClient;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import org.apache.logging.log4j.util.Strings;
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
import org.springblade.core.secure.utils.AuthUtil;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springblade.core.tool.utils.StringUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* 告警记录服务实现层
|
* @author zhongrj
|
* @date 2023-05-23
|
*/
|
@Service
|
public class AlarmRecordServiceImpl extends BaseServiceImpl<AlarmRecordMapper, AlarmRecord> implements AlarmRecordService {
|
|
@Autowired
|
private AlarmRuleService alarmRuleService;
|
|
@Autowired
|
private PatrolTaskClient patrolTaskClient;
|
|
/**
|
* 自定义分页列表查询
|
* @param page
|
* @param alarmRecord
|
* @return
|
*/
|
@Override
|
public Object selectAlarmRecordPage(IPage<AlarmRecordVO> page, AlarmRecordVO alarmRecord) {
|
// if (!Strings.isBlank(alarmRecord.getAdCode())){
|
// alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
|
// }
|
if (null != alarmRecord.getIsExport()){
|
return baseMapper.selectAlarmRecordPage(null,alarmRecord);
|
}
|
return page.setRecords(baseMapper.selectAlarmRecordPage(page,alarmRecord));
|
}
|
|
/**
|
* 按行政区统计告警-按三大类
|
* @param alarmRecord
|
* @return
|
*/
|
@Override
|
public Object statisticAlarmRecordByType(AlarmRecordVO alarmRecord) {
|
if (!Strings.isBlank(alarmRecord.getAdCode())){
|
alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
|
}
|
// 查询统计数据
|
List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecordByType(alarmRecord);
|
// 返回数据
|
return list;
|
}
|
|
@Override
|
public Object statisticAlarmRecordByAlarmRuleType(AlarmRecordVO alarmRecord) {
|
if (!Strings.isBlank(alarmRecord.getAdCode())){
|
alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
|
}
|
// 查询统计数据
|
List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecordByAlarmRuleType(alarmRecord);
|
// 返回数据
|
return list;
|
}
|
|
/**
|
* 按行政区统计告警
|
* @param alarmRecord
|
* @return
|
*/
|
@Override
|
public Object statisticAlarmRecord(AlarmRecordVO alarmRecord) {
|
if (Strings.isBlank(alarmRecord.getAdCode())){
|
// 获取当前用户的行政区划
|
alarmRecord.setAdCode("420000000000");
|
}
|
// 查询所有的市级行政区
|
List<String> adNameList = baseMapper.getAdNameList(alarmRecord.getAdCode());
|
|
if (alarmRecord.getAdLevel().equals("4")) {
|
adNameList = baseMapper.getAdNameListByAdCode(alarmRecord.getAdCode());
|
}
|
|
// 查询符合条件的告警类型
|
List<AlarmRule> alarmRuleList = baseMapper.listAlarmRule(alarmRecord);
|
// 查询统计数据
|
if (!Strings.isBlank(alarmRecord.getAdCode())){
|
alarmRecord.setAdCode(alarmRecord.getAdCode().replaceAll("0+$", ""));
|
}
|
List<StatisticAlarmRecord> list = baseMapper.statisticAlarmRecord(alarmRecord);
|
// 按行政区分组
|
Map<String, List<StatisticAlarmRecord>> listMap = list.stream().filter(item->null!=item.getAdName()).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;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Boolean updateStatus(AlarmRecord alarmRecord) {
|
|
AlarmRecordVO vo = baseMapper.getVODetail(alarmRecord.getId());
|
String processDefinitionId = "c2d5326e-e27b-11ed-a04e-00ff0b362ee4";
|
|
//日常巡查
|
String taskType = "1641037874390999041";
|
String title = StringUtil.format("{}{}巡查",
|
vo.getReservoirName(),vo.getAlarmRuleType());
|
|
String tm = DateUtil.format(vo.getCreateTime(),"MM月dd日HH时mm分");
|
|
//杨树堰水库在20231206 080005时近1h水位陡降
|
String content = StringUtil.format("{}在{}时{}",
|
vo.getReservoirName(),tm,vo.getRuleName());
|
|
//创建新任务
|
String taskId = patrolTaskClient.createTask(processDefinitionId, taskType, title, content, vo.getReservoirNumber());
|
|
//更新状态
|
alarmRecord.setTaskId(taskId);
|
boolean b = updateById(alarmRecord);
|
|
return b;
|
}
|
|
@Override
|
public Object statisticsPie(AlarmRecordVO alarmRecordVO) {
|
if (!Strings.isBlank(alarmRecordVO.getAdCode())){
|
alarmRecordVO.setAdCode(alarmRecordVO.getAdCode().replaceAll("0+$", ""));
|
}
|
// 查询统计数据
|
List<StatisticAlarmRecord> list = baseMapper.statisticsPie(alarmRecordVO);
|
return list;
|
}
|
|
/**
|
* 告警统计按告警分类-等级统计
|
* @param alarmRecord
|
* @return
|
*/
|
@Override
|
public Object statisticAlaByTypeAndLev(AlarmRecordVO alarmRecord) {
|
Map<String, Object> map = new HashMap<>(4);
|
List<StatisticAlarmRecord> recordList = baseMapper.statisticAlaByTypeAndLev(alarmRecord);
|
if (recordList.size()>0){
|
map.put("水情监测",setAlaStatisticListByData(recordList,"水情监测"));
|
map.put("雨情监测",setAlaStatisticListByData(recordList,"雨情监测"));
|
map.put("渗压监测",setAlaStatisticListByData(recordList,"渗压监测"));
|
map.put("渗流监测",setAlaStatisticListByData(recordList,"渗流监测"));
|
map.put("变形监测",setAlaStatisticListByData(recordList,"变形监测"));
|
}else {
|
map.put("水情监测",setAlaStatisticList());
|
map.put("雨情监测",setAlaStatisticList());
|
map.put("渗压监测",setAlaStatisticList());
|
map.put("渗流监测",setAlaStatisticList());
|
map.put("变形监测",setAlaStatisticList());
|
}
|
return map;
|
}
|
|
/**
|
* 设置组装预警统计数据-带参数
|
* @return
|
*/
|
private List<StatisticAlarmRecord> setAlaStatisticListByData(List<StatisticAlarmRecord> recordList, String typeName) {
|
List<StatisticAlarmRecord> list = new ArrayList<>();
|
List<String> levelList = new ArrayList<>(){{
|
add("蓝色预警");
|
add("黄色预警");
|
add("橙色预警");
|
add("红色预警");
|
}};
|
List<String> alarmLevelList = recordList.stream()
|
.filter(a -> a.getRuleName().equals(typeName))
|
.map(StatisticAlarmRecord::getAlarmLevel)
|
.distinct()
|
.collect(Collectors.toList());
|
// 先取差集
|
List<String> diffList = levelList.stream().filter(item -> !alarmLevelList.contains(item)).collect(Collectors.toList());
|
for (StatisticAlarmRecord alarmRecord : recordList) {
|
if (alarmRecord.getRuleName().equals(typeName)){
|
StatisticAlarmRecord statisticAlarmRecord = new StatisticAlarmRecord();
|
statisticAlarmRecord.setAlarmLevel(alarmRecord.getAlarmLevel());
|
statisticAlarmRecord.setNum(alarmRecord.getNum());
|
list.add(statisticAlarmRecord);
|
}
|
}
|
if (diffList.size()>0){
|
for (String level : diffList) {
|
StatisticAlarmRecord statisticAlarmRecord = new StatisticAlarmRecord();
|
statisticAlarmRecord.setAlarmLevel(level);
|
statisticAlarmRecord.setNum(0);
|
list.add(statisticAlarmRecord);
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 设置组装预警统计数据
|
* @return
|
*/
|
private List<StatisticAlarmRecord> setAlaStatisticList() {
|
List<StatisticAlarmRecord> list = new ArrayList<>();
|
StatisticAlarmRecord statisticAlarmRecord1 = new StatisticAlarmRecord();
|
statisticAlarmRecord1.setAlarmLevel("蓝色预警");
|
statisticAlarmRecord1.setNum(0);
|
|
StatisticAlarmRecord statisticAlarmRecord2 = new StatisticAlarmRecord();
|
statisticAlarmRecord2.setAlarmLevel("黄色预警");
|
statisticAlarmRecord2.setNum(0);
|
|
StatisticAlarmRecord statisticAlarmRecord3 = new StatisticAlarmRecord();
|
statisticAlarmRecord3.setAlarmLevel("橙色预警");
|
statisticAlarmRecord3.setNum(0);
|
|
StatisticAlarmRecord statisticAlarmRecord4 = new StatisticAlarmRecord();
|
statisticAlarmRecord4.setAlarmLevel("红色预警");
|
statisticAlarmRecord4.setNum(0);
|
|
list.add(statisticAlarmRecord1);
|
list.add(statisticAlarmRecord2);
|
list.add(statisticAlarmRecord3);
|
list.add(statisticAlarmRecord4);
|
return list;
|
}
|
}
|