fxkh-txl-service/src/main/java/com/whdc/controller/QXWarnController.java

1126 lines
56 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.whdc.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Sets;
import com.whdc.exception.MyException;
import com.whdc.model.dto.ApiDto;
import com.whdc.model.dto.GroupWarningDto;
import com.whdc.model.dto.WarnDppleDto;
import com.whdc.model.entity.WarningResponder;
import com.whdc.model.entity.QXWarning;
import com.whdc.model.entity.WarnMsgFB;
import com.whdc.model.vo.*;
import com.whdc.service.*;
import com.whdc.utils.DateUtils;
import com.whdc.utils.ExcelCommon;
import com.whdc.utils.HttpUtil;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static com.whdc.controller.WarningController.THIS_REDIS_KEY;
import static com.whdc.model.MyConstant.REDIS_KEY;
//湖北省防汛抗旱调度系统-气象预警
@Slf4j
@Api(tags = "气象预警 - Controller")
@RestController
@RequestMapping("/qxwarning")
public class QXWarnController {
public static final String QX_TEMP_REDIS_KEY = REDIS_KEY + "warning:temp:";
@Autowired
private IAddressBookService addressBookService;
@Autowired
private IWarningResponderService warningResponderService;
@Autowired
private IAdinfoService adinfoService;
@Autowired
private IWarnMsgFBService warnMsgFBService;
@Autowired
private IQXWarningService service;
@Autowired
private RedisTemplate<String, String> stringRedisTemplate;
@Value("${getGroupWarning}")
public String getGroupWarning;
@ApiOperation(value = "新增")
@PostMapping(value = "/add")
public ResultJson<String> insert(@RequestBody @Validated QXWarning dto) {
//根据warnid是否重复
if (CollectionUtils.isNotEmpty(
service.lambdaQuery()
.eq(QXWarning::getWarnid, dto.getWarnid()).list()
)
) {
return ResultJson.error("该名称或编码重复");
}
boolean save = service.save(dto);
return ResultJson.ok(save);
}
// @Async
@ApiOperation(value = "预警数据同步接口", notes = "预警数据同步接口")
@PostMapping("/syncData")
// @Scheduled(cron ="0 0/5 * * * ?")
public void syncData(@RequestBody GroupWarningDto dto) {
log.info("预警数据同步开始!!!");
ApiDto apiDto = new ApiDto();
if (StringUtils.isNotBlank(dto.getStartTime())) {
apiDto.setStartTime(dto.getStartTime());
}
if (StringUtils.isNotBlank(dto.getEndTime())) {
apiDto.setEndTime(dto.getEndTime());
}
apiDto.setFilter(Lists.newArrayList());
String str = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(apiDto));
// String str = HttpUtil.sendPost("http://127.0.0.1:20000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto));
JSONObject json = JSON.parseObject(str);
if (json != null && json.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = json.getJSONArray("data").toJavaList(WarningData.class);
List<QXWarningVO> warningList = getList(data, null, null, null);
log.info("预警数据同步获取数据条数 " + warningList.size());
List<Integer> warnIds = warningList.stream().map(QXWarningVO::getWarnid).collect(Collectors.toList());
List<QXWarning> list = service.lambdaQuery().in(QXWarning::getWarnid, warnIds).list();
log.info("预警数据同步已存预警 " + list.size());
Set<Integer> dbWarnSet = list.stream().map(QXWarning::getWarnid).collect(Collectors.toSet());
List<QXWarning> adds = Lists.newArrayList();
for (QXWarningVO warningVO : warningList) {
if (!dbWarnSet.contains(warningVO.getWarnid())) {
QXWarning qxwarning = new QXWarning();
qxwarning.setCreateTime(DateUtils.dateToStrYMDHds(warningVO.getCreateTime()));
qxwarning.setPublishTime(DateUtils.dateToStrYMDHds(warningVO.getPublishTime()));
qxwarning.setStartTime(DateUtils.dateToStrYMDHds(warningVO.getStartTime()));
qxwarning.setEndTime(DateUtils.dateToStrYMDHds(warningVO.getEndTime()));
qxwarning.setWarnSignalType(warningVO.getWarnSignalType());
qxwarning.setWarnSignalLevel(warningVO.getWarnSignalLevel());
qxwarning.setPublishUnit(warningVO.getPublishUnit());
qxwarning.setContent(warningVO.getContent());
qxwarning.setWarnid(warningVO.getWarnid());
qxwarning.setCtnm(warningVO.getCtnm());
qxwarning.setCnnm(warningVO.getCnnm());
adds.add(qxwarning);
}
}
if (CollectionUtils.isNotEmpty(adds)) {
log.info("预警数据同步待添加预警 " + adds.size());
if (this.service.saveBatch(adds)) {
log.info("添加成功 " + adds.size());
}
}
}
log.info("预警数据同步执行完成!!!");
}
/**
* 气象预警-正在生效的预警信息
*
* @param
* @return
*/
@ApiOperation(value = "气象预警-正在生效的预警信息")
@PostMapping("/getGroupWarning")
public ResultJson<List<QXWarningVO>> getGroupWarning() {
Set<String> tempKeys = stringRedisTemplate.keys(QX_TEMP_REDIS_KEY + "*");
if (CollectionUtils.isNotEmpty(tempKeys)) {
List<QXWarningVO> data = Lists.newArrayList();
tempKeys.forEach(o -> {
String value = stringRedisTemplate.opsForValue().get(o);
QXWarningVO qxWarningVO = JSON.parseObject(value, QXWarningVO.class);
data.add(qxWarningVO);
});
if (CollectionUtils.isNotEmpty(data)) {
return ResultJson.ok(data.stream().sorted(Comparator.comparing(QXWarningVO::getPublishTime).reversed()).collect(Collectors.toList()));
}
}
List<QXWarningVO> data = service.find();
if (CollectionUtils.isEmpty(data)) {
return ResultJson.ok(data);
}
Set<String> keys = stringRedisTemplate.keys(THIS_REDIS_KEY + ":WARNID:*");
data.forEach(o -> {
Integer warnid = o.getWarnid();
String key = THIS_REDIS_KEY + ":WARNID:" + warnid;
if (!keys.contains(key)) {
data.get(0).setPlay(true);
stringRedisTemplate.opsForValue().set(key, String.valueOf(warnid));
}
});
return ResultJson.ok(data);
}
//
// /**
// * 气象预警-正在生效的预警信息
// *
// * @param dto
// * @return
// */
// @ApiOperation(value = "气象预警-正在生效的预警信息")
// @PostMapping("/getGroupWarning")
//// @Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()")
// public ResultJson<List<QXWarningVO>> getGroupWarning(
// @RequestBody GroupWarningDto dto) {
//
// ApiDto apiDto = new ApiDto();
// apiDto.setStartTime(dto.getStartTime());//!!!!!!需要注释掉!!!!!!
// apiDto.setEndTime(dto.getEndTime());//!!!!!!需要注释掉!!!!!!
// apiDto.setPageNumber(dto.getPageNumber());
// apiDto.setPageSize(dto.getPageSize());
// ArrayList<ApiDto.Filter> filter = Lists.newArrayList();
// String publishUnit = dto.getPublishUnit();
// String warnSignalLevel = dto.getWarnSignalLevel();
// String warnSignalType = dto.getWarnSignalType();
// apiDto.setFilter(filter);
// System.out.println(apiDto);
// String str = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(apiDto));
//// String str = HttpUtil.sendPost("http://127.0.0.1:20000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto));
// JSONObject json = JSON.parseObject(str);
// if (json != null && json.getInteger("code") == HttpStatus.SC_OK) {
// List<WarningData> data = json.getJSONArray("data").toJavaList(WarningData.class);
// List<QXWarningVO> warningList = getList(data, publishUnit, warnSignalLevel, warnSignalType);
// //将warningList存起来
// for (int i = 0; i < warningList.size(); i++) {
// DateTimeFormatter SECOND_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// QXWarningVO warningVO = warningList.get(i);
// QXWarning qxwarning = new QXWarning();
// qxwarning.setCreateTime(Date.from(LocalDateTime.parse(warningVO.getCreateTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant()));
// qxwarning.setPublishTime(Date.from(LocalDateTime.parse(warningVO.getPublishTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant()));
// qxwarning.setStartTime(Date.from(LocalDateTime.parse(warningVO.getStartTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant()));
// qxwarning.setEndTime(Date.from(LocalDateTime.parse(warningVO.getEndTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant()));
// qxwarning.setWarnSignalType(warningVO.getWarnSignalType());
// qxwarning.setWarnSignalLevel(warningVO.getWarnSignalLevel());
// qxwarning.setPublishUnit(warningVO.getPublishUnit());
// qxwarning.setContent(warningVO.getContent());
// qxwarning.setWarnid(warningVO.getWarnid());
// qxwarning.setCtnm(warningVO.getCtnm());
// qxwarning.setCnnm(warningVO.getCnnm());
// insert(qxwarning);
// }
// warningList = warningList.stream().filter(o -> o.getStatus().equals("0")).collect(Collectors.toList());
// return ResultJson.ok(warningList);
// }
//
// return ResultJson.ok(json);
// }
/**
* 获取联系人
*/
@ApiOperation(value = "获取预警信息的防御责任人")
@PostMapping("/getDpple")
@Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()")
public ResultJson<List<WarnDppleVO>> getDpple(
@RequestBody WarnDppleDto dto) {
List<WarnDppleVO> warnDpples = new ArrayList<>();
String[] cnnms = dto.getCnnm().split(",");
for (int i = 0; i < cnnms.length; i++) {
String cnnm = cnnms[i];
String cnnm2 = cnnm.replace("县", "").replace("区", "");
// String adcd = adinfoService.getAdcdByAdnm2(cnnm2);//根据区县的名字找到对应的adcd
// System.out.println(adcd);
if (StringUtils.isNotBlank(cnnm2)) {
List<WarningResponder> dpples = warningResponderService.getListByAdnm2(cnnm2);
System.out.println("dpple个数" + dpples.size());
for (WarningResponder dpple : dpples) {
dpple.decryptPhone();
WarnDppleVO warndpple = new WarnDppleVO();
warndpple.setCtnm(dto.getCtnm());
warndpple.setCnnm(cnnm);
warndpple.setName(dpple.getName());
warndpple.setPosition(dpple.getPosition());
warndpple.setPhone(dpple.getPhone());
warndpple.setLevel(dpple.getLevel());
warnDpples.add(warndpple);
}
} else {
log.info("当前行政区划不存在: " + dto.getCnnm());
}
}
return ResultJson.ok(warnDpples);
}
/**
* 确认处理完成
*/
@ApiOperation(value = "确认处理完成")
@PostMapping("/confirmHandle")
public ResultJson<List<WarnDppleVO>> confirmHandle(
@RequestBody WarnMsgFB dto) {
//根据warnid和phone判断是否重复
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(
warnMsgFBService.lambdaQuery()
.eq(WarnMsgFB::getWarnid, dto.getWarnid())
.eq(WarnMsgFB::getCalledPhone, String.valueOf(dto.getCalledPhone())).list()
)
) {
return ResultJson.error("该名称或编码重复");
}
// if (dto.getCallTime() == null) {
// dto.setCallTime(dto.getHandleTime());
// }
boolean save = warnMsgFBService.save(dto);
log.info("warnId " + dto.getWarnid());
if (Boolean.FALSE.equals(stringRedisTemplate.delete(QX_TEMP_REDIS_KEY + dto.getWarnid()))) {
log.error("缓存删除失败: " + dto.getWarnid());
}
return ResultJson.ok(save);
}
/**
* 历史气象预警统计
*
* @param dto
* @return
*/
@ApiOperation(value = "历史气象预警统计")
@PostMapping("/getHistoryStats")
@Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()")
public ResultJson<WarnStatsVO> getHistoryStats(@RequestBody GroupWarningDto dto) {
WarnStatsVO warnStatsVO = new WarnStatsVO();
int dayWarnNum = 0;//日预警个数
int weekWarnNum = 0;//周预警个数
int monthWarnNum = 0;//月预警个数
int yearWarnNum = 0;//年预警个数
List<QXWarningVO> warnList = new ArrayList<>();
//当前时间
Calendar startCalendarDay = Calendar.getInstance();
int year = startCalendarDay.get(Calendar.YEAR);
int month = startCalendarDay.get(Calendar.MONTH) + 1; //第一个月从0开始所以得到月份1
int day = startCalendarDay.get(Calendar.DAY_OF_MONTH);
int hour = startCalendarDay.get(Calendar.HOUR_OF_DAY);
int minute = startCalendarDay.get(Calendar.MINUTE);
int second = startCalendarDay.get(Calendar.SECOND);
String nowTime = zerofill(year) + "-" + zerofill(month) + "-" + zerofill(day) + " " +
zerofill(hour) + ":" + zerofill(minute) + ":" + zerofill(second);
System.out.println(nowTime);
//当前时间往前24小时——今日预警统计
String dayStartTime = zerofill(year) + "-" + zerofill(month) + "-" + zerofill(day) + " " +
"00" + ":" + "00" + ":" + "00";
System.out.println(dayStartTime);
ApiDto dayDto = new ApiDto();
dayDto.setStartTime(dayStartTime);
dayDto.setEndTime(nowTime);
dayDto.setPageNumber(dto.getPageNumber());
dayDto.setPageSize(99999);
ArrayList<ApiDto.Filter> filter = Lists.newArrayList();
String publishUnit = dto.getPublishUnit();
String warnSignalLevel = dto.getWarnSignalLevel();
String warnSignalType = dto.getWarnSignalType();
dayDto.setFilter(filter);
String daystr = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(dayDto));
// String str = HttpUtil.sendPost("http://127.0.0.1:20000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto));
JSONObject dayjson = JSON.parseObject(daystr);
if (dayjson != null && dayjson.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = dayjson.getJSONArray("data").toJavaList(WarningData.class);
// return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType));
// List<WarningHistoryListVo> listWarnStats = getCount(data, publishUnit, warnSignalLevel, warnSignalType);
// System.out.println("日统计:"+listWarnStats.size());
// for(WarningHistoryListVo warnList:listWarnStats){
// System.out.println("日统计-"+warnList.getSumCount()+"个");
// }
dayWarnNum = getCount2(data);
System.out.println("日统计:" + dayWarnNum + "个");
}
//当前时间往前7天——本周预警统计
int day_of_week = startCalendarDay.get(Calendar.DAY_OF_WEEK);
int weekminus = day_of_week == 0 ? 7 : day_of_week - 1;
Calendar weekStartDay = Calendar.getInstance();
weekStartDay.add(Calendar.DAY_OF_YEAR, (weekminus - 1) * (-1));
String weekStartTime = CalendarDayStartToString(weekStartDay);
System.out.println(weekStartTime);
ApiDto weekDto = new ApiDto();
weekDto.setStartTime(weekStartTime);
weekDto.setEndTime(nowTime);
weekDto.setPageNumber(dto.getPageNumber());
weekDto.setPageSize(99999);
weekDto.setFilter(filter);
String weekstr = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(weekDto));
JSONObject weekjson = JSON.parseObject(weekstr);
System.out.println("weekstr:" + weekjson);
if (weekjson != null && weekjson.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = weekjson.getJSONArray("data").toJavaList(WarningData.class);
// return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType));
// List<WarningHistoryListVo> listWarnStats = getCount(data, publishUnit, warnSignalLevel, warnSignalType);
// System.out.println("周统计:"+listWarnStats.size());
// for(WarningHistoryListVo warnList:listWarnStats){
// System.out.println("周统计-"+warnList.getSumCount()+"个");
// }
weekWarnNum = getCount2(data);
System.out.println("周统计:" + weekWarnNum + "个");
}
//当前时间往前30天——本月预警统计
int day_of_month = startCalendarDay.get(Calendar.DAY_OF_MONTH);
Calendar monthStartDay = Calendar.getInstance();
int monthdayminus = day_of_month - 1;
monthStartDay.add(Calendar.DAY_OF_YEAR, monthdayminus * (-1));
String monthStartTime = CalendarDayStartToString(monthStartDay);
System.out.println(monthStartTime);
ApiDto monthDto = new ApiDto();
monthDto.setStartTime(monthStartTime);
monthDto.setEndTime(nowTime);
monthDto.setPageNumber(dto.getPageNumber());
monthDto.setPageSize(99999);
monthDto.setFilter(filter);
String monthstr = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(monthDto));
JSONObject monthjson = JSON.parseObject(monthstr);
System.out.println("monthstr:" + monthjson);
if (monthjson != null && monthjson.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = monthjson.getJSONArray("data").toJavaList(WarningData.class);
// return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType));
// List<WarningHistoryListVo> listWarnStats = getCount(data, publishUnit, warnSignalLevel, warnSignalType);
// System.out.println("月统计:"+listWarnStats.size());
// for(WarningHistoryListVo warnList:listWarnStats){
// System.out.println("月统计-"+warnList.getSumCount()+"个");
// }
monthWarnNum = getCount2(data);
System.out.println("月统计:" + monthWarnNum + "个");
}
//当前时间往前360天——全年预警数
int day_of_year = startCalendarDay.get(Calendar.DAY_OF_YEAR);
Calendar yearStartDay = Calendar.getInstance();
int yeardayminus = day_of_year - 1;
yearStartDay.add(Calendar.DAY_OF_YEAR, yeardayminus * (-1));
String yearStartTime = CalendarDayStartToString(yearStartDay);
System.out.println(yearStartTime);
ApiDto yearDto = new ApiDto();
yearDto.setStartTime(yearStartTime);
yearDto.setEndTime(nowTime);
yearDto.setPageNumber(dto.getPageNumber());
yearDto.setPageSize(99999);
yearDto.setFilter(filter);
String yearstr = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(yearDto));
JSONObject yearjson = JSON.parseObject(yearstr);
// System.out.println("yearstr:" + yearjson);
if (yearjson != null && yearjson.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = yearjson.getJSONArray("data").toJavaList(WarningData.class);
//// return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType));
// List<WarningHistoryListVo> listWarnStats = getCount(data, publishUnit, warnSignalLevel, warnSignalType);
// System.out.println("年统计:"+listWarnStats.size());
// for(WarningHistoryListVo warnList:listWarnStats){
// System.out.println("年统计-"+warnList.getSumCount()+"个");
// }
yearWarnNum = getCount2(data);
System.out.println("年统计:" + yearWarnNum + "个");
}
warnStatsVO.setDayWarnNum(dayWarnNum);
warnStatsVO.setWeekWarnNum(weekWarnNum);
warnStatsVO.setMonthWarnNum(monthWarnNum);
warnStatsVO.setYearWarnNum(yearWarnNum);
//查找最近10条数据,放到warnList属性上
// List<QXWarningVO> qxWarningList = getLatestTen(data);
return ResultJson.ok(warnStatsVO);
}
/**
* 历史气象预警统计
*
* @param dto
* @return
*/
@ApiOperation(value = "历史气象预警查询")
@PostMapping("/getHistoryWarning")
@Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()")
public ResultJson<HistoryWarnsVO> getHistoryWarning(@RequestBody GroupWarningDto dto) {
// List<QXWarningVO> warnList = new ArrayList<>();
// HistoryWarnsVO historyWarnsVO = new HistoryWarnsVO();
// ApiDto apiDto = new ApiDto();
// apiDto.setStartTime(dto.getStartTime());//一年的起始时间
// apiDto.setEndTime(dto.getEndTime());//当前时间
// apiDto.setPageNumber(dto.getPageNumber());//第几页
// apiDto.setPageSize(dto.getPageSize());//一页10个
// ArrayList<ApiDto.Filter> filter = Lists.newArrayList();
//
// int pageNumber = dto.getPageNumber();
// int pageSize = dto.getPageSize();
//
// String publishUnit = dto.getPublishUnit();
// String warnSignalLevel = dto.getWarnSignalLevel();
// String warnSignalType = dto.getWarnSignalType();
// apiDto.setFilter(filter);
// String str = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(apiDto));
//// String str = HttpUtil.sendPost("http://127.0.0.1:20000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto));
// JSONObject json = JSON.parseObject(str);
// if (json != null && json.getInteger("code") == HttpStatus.SC_OK) {
// List<WarningData> data = json.getJSONArray("data").toJavaList(WarningData.class);
// int count = getCount2(data);
// System.out.println("历史预警数量:" + data.size());
// System.out.println("历史预警数量2" + count);
// historyWarnsVO.setCount(count);
// //查找最近10条数据,放到warnList属性上
// List<QXWarningVO> qxWarningList = null;
// //getLatestTen(data);
// if (Objects.isNull(pageNumber) || Objects.isNull(pageSize)) {
// System.out.println("pageNumber和pageSize有至少一个为null");
// qxWarningList = getLatestTen(data);
// } else {
// System.out.println("pageNumber和pageSize全不为null");
// System.out.println("pageNumber:" + pageNumber);
// System.out.println("pageSize:" + pageSize);
// qxWarningList = getPageWarning(data, pageNumber, pageSize);
// }
// historyWarnsVO.setWarnList(qxWarningList);
// return ResultJson.ok(historyWarnsVO);
// }
//
// return ResultJson.ok("");
return ResultJson.ok(service.page(dto));
}
/**
* 历史气象预警统计
*
* @param dto
* @return
*/
@ApiOperation(value = "历史气象预警导出")
@PostMapping("/getHistoryWarning/download")
public void getHistoryWarningDownload(@RequestBody @Validated GroupWarningDto dto, HttpServletResponse response) {
if (LocalDate.parse(dto.getStartTime().split(" ")[0]).plusDays(90).compareTo(LocalDate.parse(dto.getEndTime().split(" ")[0])) < 0){
throw new MyException("时间差不能超过90天");
}
List<QXWarning> list = service.list(dto);
if (CollectionUtils.isNotEmpty(list)){
ExcelCommon.exportExcel(list,
null, "历史气象预警", QXWarning.class, "历史气象预警.xlsx",
response);
}else{
throw new MyException("没有查询到数据");
}
}
/**
* 历史7天暴雨预警叫应信息统计
*
* @param dto
* @return
*/
@ApiOperation(value = "历史n天暴雨预警叫应信息统计")
@PostMapping("/getFBStats")
@Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()")
public ResultJson<FBStatsVO> getFeedBackStats(@RequestBody GroupWarningDto dto) {
String startTime = dto.getStartTime();
String endTime = dto.getEndTime();
if (Objects.isNull(startTime) && Objects.isNull(endTime)) {
//当前时间
Calendar startCalendarDay = Calendar.getInstance();
int year = startCalendarDay.get(Calendar.YEAR);
int month = startCalendarDay.get(Calendar.MONTH) + 1; //第一个月从0开始所以得到月份1
int day = startCalendarDay.get(Calendar.DAY_OF_MONTH);
int hour = startCalendarDay.get(Calendar.HOUR_OF_DAY);
int minute = startCalendarDay.get(Calendar.MINUTE);
int second = startCalendarDay.get(Calendar.SECOND);
String nowTime = zerofill(year) + "-" + zerofill(month) + "-" + zerofill(day) + " " +
"08" + ":" + "00" + ":" + "00";
System.out.println(nowTime);
ArrayList<ApiDto.Filter> filter = Lists.newArrayList();
FBStatsVO fbStatsVO = null;
//当前时间往前7天——本周预警统计
int day_of_week = startCalendarDay.get(Calendar.DAY_OF_WEEK);
int weekminus = day_of_week == 0 ? 7 : day_of_week - 1;
Calendar weekStartDay = Calendar.getInstance();
weekStartDay.add(Calendar.DAY_OF_YEAR, (weekminus - 1) * (-1));
String weekStartTime = CalendarDayStartToString2(weekStartDay);
// Calendar weekStartDay = Calendar.getInstance();
// weekStartDay.add(Calendar.DAY_OF_YEAR, 37*(-1));
// String weekStartTime = CalendarDayStartToString(weekStartDay);
System.out.println(weekStartTime);
ApiDto weekDto = new ApiDto();
weekDto.setStartTime(weekStartTime);
weekDto.setEndTime(nowTime);
weekDto.setPageNumber(dto.getPageNumber());
weekDto.setPageSize(99999);
weekDto.setFilter(filter);
String weekstr = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(weekDto));
JSONObject weekjson = JSON.parseObject(weekstr);
System.out.println("weekstr:" + weekjson);
if (weekjson != null && weekjson.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = weekjson.getJSONArray("data").toJavaList(WarningData.class);
// return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType));
// List<WarningHistoryListVo> listWarnStats = getCount(data, publishUnit, warnSignalLevel, warnSignalType);
// System.out.println("周统计:"+listWarnStats.size());
// for(WarningHistoryListVo warnList:listWarnStats){
// System.out.println("周统计-"+warnList.getSumCount()+"个");
// }
fbStatsVO = getCount3(data);
fbStatsVO.setStartTime(weekDto.getStartTime());//Date.from(LocalDateTime.parse(weekDto.getStartTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant())
fbStatsVO.setEndTime(weekDto.getEndTime());//Date.from(LocalDateTime.parse(weekDto.getEndTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant())
// System.out.println("周统计:"+weekWarnNum +"个");
return ResultJson.ok(fbStatsVO);
}
} else {
ApiDto searchDto = new ApiDto();
ArrayList<ApiDto.Filter> filter = Lists.newArrayList();
searchDto.setStartTime(startTime);
searchDto.setEndTime(endTime);
searchDto.setPageNumber(dto.getPageNumber());
searchDto.setPageSize(99999);
searchDto.setFilter(filter);
String searchstr = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(searchDto));
JSONObject searchjson = JSON.parseObject(searchstr);
System.out.println("searchjson:" + searchjson);
FBStatsVO fbStatsVO = null;
if (searchjson != null && searchjson.getInteger("code") == HttpStatus.SC_OK) {
List<WarningData> data = searchjson.getJSONArray("data").toJavaList(WarningData.class);
fbStatsVO = getCount3(data);
fbStatsVO.setStartTime(startTime);
fbStatsVO.setEndTime(endTime);
return ResultJson.ok(fbStatsVO);
}
}
return null;
}
private FBStatsVO getCount3(List<WarningData> data) {
int sum = 0;
FBStatsVO fbStats = new FBStatsVO();
// Set<String> cnCallList = new ArrayList<>();
Set cnOrgCallList = new HashSet<>();
Set cnRedCallList = new HashSet<>();
int orgfbSum = 0;
int redfbSum = 0;
List<WarningData.Warning> warnList = Lists.newArrayList();//汇总
for (WarningData datum : data) {
for (WarningData.TypeList typeList : datum.getTypeList()) {
warnList.addAll(typeList.getWarnList());
}
}
List<WarningData.Warning> list = warnList.stream().filter(o -> "暴雨".equals(o.getWarnSignalType())).collect(Collectors.toList());
//统计暴雨橙色预警
List<WarningData.Warning> orgList = list.stream().filter(o -> "橙色".equals(o.getWarnSignalLevel())).collect(Collectors.toList());
//统计暴雨红色预警
List<WarningData.Warning> redList = list.stream().filter(o -> "红色".equals(o.getWarnSignalLevel())).collect(Collectors.toList());
//暴雨橙色预警个数
fbStats.setOrgWarnSum(orgList.size());
//暴雨红色预警个数
fbStats.setRedWarnSum(redList.size());
//查询叫应信息根据warnid查询——暴雨橙色预警
//根据预警id查找有没有呼叫过
for (WarningData.Warning warning : orgList) {
List<WarnMsgFB> msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(warning.getId()));//查询msgfb
String cn = warning.getEffectArea();
String[] cnList = cn.split(",");
for (int i = 0; i < cnList.length; i++) {
cnOrgCallList.add(cnList[i]);
}
orgfbSum += msgfbList.size();
}
fbStats.setCallOrgSum(orgfbSum);
fbStats.setCnOrgCallList(new ArrayList<>(cnOrgCallList));
//查询叫应信息根据warnid查询——暴雨红色预警
//根据预警id查找有没有呼叫过
for (WarningData.Warning warning : redList) {
List<WarnMsgFB> msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(warning.getId()));//查询msgfb
String cn = warning.getEffectArea();
String[] cnList = cn.split(",");
for (int i = 0; i < cnList.length; i++) {
cnRedCallList.add(cnList[i]);
}
redfbSum += msgfbList.size();
}
fbStats.setCallOrgSum(redfbSum);
fbStats.setCnOrgCallList(new ArrayList<>(cnRedCallList));
return fbStats;
}
private List<QXWarningVO> getPageWarning(List<WarningData> data, int pageNumber, int pageSize) {
List<QXWarningVO> qxWarningVOS = new ArrayList<>();
// List<WarningData.Warning> warnList = Lists.newArrayList();//汇总
List<QXWarningVO> warnList = Lists.newArrayList();//汇总
for (WarningData datum : data) {
String ctnm = datum.getEffectArea();//市级范围
for (WarningData.TypeList typeList : datum.getTypeList()) {//里面的
// 预警类型
String type = typeList.getType();
List<WarningData.Warning> warnListOrigin = typeList.getWarnList();
// warnList = warnListFilter(warnList, reqPublishUnit, reqWarnSignalLevel, reqWarnSignalType);
for (WarningData.Warning warning : warnListOrigin) {
String cnnm = warning.getEffectArea();
QXWarningVO vo = new QXWarningVO();
String publishUnit = warning.getPublishUnit();
// vo.setTitle(publishUnit + "发布" + type + "预警");
vo.setCtnm(ctnm);//市级名称
vo.setCnnm(cnnm);//县级名称
vo.setPublishUnit(publishUnit);//发布单位
vo.setPublishTime(warning.getPublishTime());//预警发布时间
vo.setWarnSignalType(warning.getWarnSignalType());//预警类型
vo.setWarnSignalLevel(warning.getWarnSignalLevel());//预警级别
vo.setContent(warning.getContent());//预警内容
vo.setWarnid(warning.getId());
// vo.setAdnm(publishUnit.replace("气象台", ""));
String adnm = publishUnit.replace("气象台", "");
// String adcd = adinfoService.getAdcdByAdnm2(adnm);
// if (StringUtils.isNotBlank(adcd)){
//// vo.setAddressBooks(addressBookService.getListByAdnm(adcd));
// }else{
// log.info("当前行政区划不存在: " + adnm);
// }
warnList.add(vo);
}
}
}
List<QXWarningVO> dataList2 = warnList.stream().sorted(Comparator.comparing(QXWarningVO::getPublishTime).reversed()).collect(Collectors.toList());
dataList2 = dataList2.stream().filter(o -> "暴雨".equals(o.getWarnSignalType()) || "雷雨大风".equals(o.getWarnSignalType())).collect(Collectors.toList());
dataList2 = dataList2.stream().filter(o -> "红色".equals(o.getWarnSignalLevel()) || "橙色".equals(o.getWarnSignalLevel())).collect(Collectors.toList());
if (dataList2.size() >= (pageNumber - 1) * pageSize && dataList2.size() >= pageNumber * pageSize) {
for (int i = (pageNumber - 1) * pageSize; i < pageNumber * pageSize; i++) {
QXWarningVO qxWarningVO = dataList2.get(i);
//根据预警id查找有没有呼叫过
List<WarnMsgFB> msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(qxWarningVO.getWarnid()));//warning
if (msgfbList.size() > 0) {
qxWarningVO.setStatus("1");
} else {
qxWarningVO.setStatus("0");
}
qxWarningVOS.add(qxWarningVO);
}
} else if (dataList2.size() >= (pageNumber - 1) * pageSize && dataList2.size() < pageNumber * pageSize) {
for (int i = (pageNumber - 1) * pageSize; i < dataList2.size(); i++) {
QXWarningVO qxWarningVO = dataList2.get(i);
//根据预警id查找有没有呼叫过
List<WarnMsgFB> msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(qxWarningVO.getWarnid()));//warning
if (msgfbList.size() > 0) {
qxWarningVO.setStatus("1");
} else {
qxWarningVO.setStatus("0");
}
qxWarningVOS.add(qxWarningVO);
}
} else {
}
return qxWarningVOS;
}
private List<QXWarningVO> getLatestTen(List<WarningData> data) {
List<QXWarningVO> qxWarningVOS = new ArrayList<>();
// List<WarningData.Warning> warnList = Lists.newArrayList();//汇总
List<QXWarningVO> warnList = Lists.newArrayList();//汇总
for (WarningData datum : data) {
String ctnm = datum.getEffectArea();//市级范围
for (WarningData.TypeList typeList : datum.getTypeList()) {//里面的
// 预警类型
String type = typeList.getType();
List<WarningData.Warning> warnListOrigin = typeList.getWarnList();
// warnList = warnListFilter(warnList, reqPublishUnit, reqWarnSignalLevel, reqWarnSignalType);
for (WarningData.Warning warning : warnListOrigin) {
String cnnm = warning.getEffectArea();
QXWarningVO vo = new QXWarningVO();
String publishUnit = warning.getPublishUnit();
// vo.setTitle(publishUnit + "发布" + type + "预警");
vo.setCtnm(ctnm);//市级名称
vo.setCnnm(cnnm);//县级名称
vo.setPublishUnit(publishUnit);//发布单位
vo.setPublishTime(warning.getPublishTime());//预警发布时间
vo.setWarnSignalType(warning.getWarnSignalType());//预警类型
vo.setWarnSignalLevel(warning.getWarnSignalLevel());//预警级别
vo.setContent(warning.getContent());//预警内容
vo.setWarnid(warning.getId());
// vo.setAdnm(publishUnit.replace("气象台", ""));
String adnm = publishUnit.replace("气象台", "");
// String adcd = adinfoService.getAdcdByAdnm2(adnm);
// if (StringUtils.isNotBlank(adcd)){
//// vo.setAddressBooks(addressBookService.getListByAdnm(adcd));
// }else{
// log.info("当前行政区划不存在: " + adnm);
// }
warnList.add(vo);
}
}
}
List<QXWarningVO> dataList2 = warnList.stream().sorted(Comparator.comparing(QXWarningVO::getPublishTime).reversed()).collect(Collectors.toList());
dataList2 = dataList2.stream().filter(o -> "暴雨".equals(o.getWarnSignalType()) || "雷雨大风".equals(o.getWarnSignalType())).collect(Collectors.toList());
dataList2 = dataList2.stream().filter(o -> "红色".equals(o.getWarnSignalLevel()) || "橙色".equals(o.getWarnSignalLevel())).collect(Collectors.toList());
if (dataList2.size() >= 10) {
for (int i = 0; i < 10; i++) {
// System.out.println("时间:"+dataList2.get(i).getPublishTime());
// QXWarningVO qxWarningVO = new QXWarningVO();
// qxWarningVO.setPublishTime(dataList2.get(i).getPublishTime());
// qxWarningVOS.add(qxWarningVO);
QXWarningVO qxWarningVO = dataList2.get(i);
//根据预警id查找有没有呼叫过
List<WarnMsgFB> msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(qxWarningVO.getWarnid()));//warning
if (msgfbList.size() > 0) {
qxWarningVO.setStatus("1");
} else {
qxWarningVO.setStatus("0");
}
// qxWarningVO.setStatus();
qxWarningVOS.add(qxWarningVO);
}
} else {
qxWarningVOS = dataList2;
}
return qxWarningVOS;
// respList.stream().sorted(Comparator.comparing(WarningListVo::getPublishTime).reversed()).collect(Collectors.toList())
}
/**
* 正在生效预警
*
* @param data
* @return
*/
private List<QXWarningVO> getList(List<WarningData> data,
String reqPublishUnit,
String reqWarnSignalLevel,
String reqWarnSignalType) {
List<QXWarningVO> respList = Lists.newArrayList();
for (WarningData datum : data) {//最外层的列表
String ctnm = datum.getEffectArea();//市级范围
for (WarningData.TypeList typeList : datum.getTypeList()) {//里面的
// 预警类型
String type = typeList.getType();
List<WarningData.Warning> warnList = typeList.getWarnList();
warnList = warnListFilter(warnList, reqPublishUnit, reqWarnSignalLevel, reqWarnSignalType);
for (WarningData.Warning warning : warnList) {
String cnnm = warning.getEffectArea();
QXWarningVO vo = new QXWarningVO();
String publishUnit = warning.getPublishUnit();
// vo.setTitle(publishUnit + "发布" + type + "预警");
vo.setCtnm(ctnm);//市级名称
vo.setCnnm(cnnm);//县级名称
vo.setPublishUnit(publishUnit);//发布单位
vo.setPublishTime(warning.getPublishTime());//预警发布时间
vo.setWarnSignalType(warning.getWarnSignalType());//预警类型
vo.setWarnSignalLevel(warning.getWarnSignalLevel());//预警级别
vo.setContent(warning.getContent());//预警内容
vo.setWarnid(warning.getId());
vo.setCreateTime(warning.getCreateTime());
vo.setStartTime(warning.getStartTime());
vo.setEndTime(warning.getEndTime());
// vo.setAdnm(publishUnit.replace("气象台", ""));
String adnm = publishUnit.replace("气象台", "");
//根据预警id查找有没有呼叫过
List<WarnMsgFB> msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(warning.getId()));//warning
if (msgfbList.size() > 0) {
vo.setStatus("1");
} else {
vo.setStatus("0");
}
// String adcd = adinfoService.getAdcdByAdnm2(adnm);
// if (StringUtils.isNotBlank(adcd)){
//// vo.setAddressBooks(addressBookService.getListByAdnm(adcd));
// }else{
// log.info("当前行政区划不存在: " + adnm);
// }
respList.add(vo);
}
}
}
respList = respList.stream().filter(o -> "暴雨".equals(o.getWarnSignalType()) || "雷雨大风".equals(o.getWarnSignalType())).collect(Collectors.toList());
respList = respList.stream().filter(o -> "红色".equals(o.getWarnSignalLevel()) || "橙色".equals(o.getWarnSignalLevel())).collect(Collectors.toList());
return respList.stream().sorted(Comparator.comparing(QXWarningVO::getPublishTime).reversed())
.collect(Collectors.toList());
}
/**
* 正在生效预警
*
* @return
*/
private List<WarningData.Warning> warnListFilter(List<WarningData.Warning> warnList,
String publishUnit,
String warnSignalLevel,
String warnSignalType
) {
if (StringUtils.isNotBlank(publishUnit)) {
HashSet<String> set = Sets.newHashSet(publishUnit.split(","));
if (CollectionUtils.isNotEmpty(set)) {
warnList = warnList.stream()
.filter(w ->
set.contains(w.getPublishUnit().split("气象")[0])
).collect(Collectors.toList());
}
}
if (StringUtils.isNotBlank(warnSignalLevel)) {
HashSet<String> set = Sets.newHashSet(warnSignalLevel.split(","));
if (CollectionUtils.isNotEmpty(set)) {
warnList = warnList.stream()
.filter(w ->
set.contains(w.getWarnSignalLevel())
).collect(Collectors.toList());
}
}
if (StringUtils.isNotBlank(warnSignalType)) {
HashSet<String> set = Sets.newHashSet(warnSignalType.split(","));
if (CollectionUtils.isNotEmpty(set)) {
warnList = warnList.stream()
.filter(w ->
set.contains(w.getWarnSignalType())
).collect(Collectors.toList());
}
}
return warnList;
}
static String zerofill(int number) {
return String.valueOf(number).length() > 1 ? String.valueOf(number) : "0" + String.valueOf(number);
}
static String CalendarDayStartToString(Calendar calendarTime) {
int year = calendarTime.get(Calendar.YEAR);
int month = calendarTime.get(Calendar.MONTH) + 1; //第一个月从0开始所以得到月份1
int day = calendarTime.get(Calendar.DAY_OF_MONTH);
int hour = calendarTime.get(Calendar.HOUR_OF_DAY);
int minute = calendarTime.get(Calendar.MINUTE);
int second = calendarTime.get(Calendar.SECOND);
return zerofill(year) + "-" + zerofill(month) + "-" + zerofill(day) + " " +
"00" + ":" + "00" + ":" + "00";
}
//统计函数
private int getCount2(List<WarningData> data) {
int sum = 0;
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<WarningData.Warning> warnList = Lists.newArrayList();//汇总
for (WarningData datum : data) {
for (WarningData.TypeList typeList : datum.getTypeList()) {
warnList.addAll(typeList.getWarnList());
}
}
warnList = warnList.stream().filter(o -> {
LocalDate date = LocalDate.parse(o.getPublishTime(), format);
return date.isAfter(LocalDate.parse("2024-04-28 08:00:00", format));
}).collect(Collectors.toList());
warnList = warnList.stream().filter(o -> "暴雨".equals(o.getWarnSignalType()) || "雷雨大风".equals(o.getWarnSignalType())).collect(Collectors.toList());
warnList = warnList.stream().filter(o -> "红色".equals(o.getWarnSignalLevel()) || "橙色".equals(o.getWarnSignalLevel())).collect(Collectors.toList());
return warnList.size();
}
static String CalendarDayStartToString2(Calendar calendarTime) {
int year = calendarTime.get(Calendar.YEAR);
int month = calendarTime.get(Calendar.MONTH) + 1; //第一个月从0开始所以得到月份1
int day = calendarTime.get(Calendar.DAY_OF_MONTH);
int hour = calendarTime.get(Calendar.HOUR_OF_DAY);
int minute = calendarTime.get(Calendar.MINUTE);
int second = calendarTime.get(Calendar.SECOND);
return zerofill(year) + "-" + zerofill(month) + "-" + zerofill(day) + " " +
"00" + ":" + "08" + ":" + "00";
}
/**
* https://shdata.cloudowr.cn/sysuser/dologin
* https://shdata.cloudowr.cn/shwarn/msg/totalquery?stm=2024-06-01&etm=2024-06-12
*
* @return
*/
@ApiOperation(value = "预警统计")
@GetMapping(value = "/statistics/{stm}/{etm}")
public ResultJson<QXWarnStatisticsVo> totalquery(@PathVariable("stm") @ApiParam(name = "stm", value = "开始时间, yyyy-MM-dd") String stmStr,
@PathVariable("etm") @ApiParam(name = "etm", value = "结束时间, yyyy-MM-dd") String etmStr) {
DateTimeFormatter pattern = DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN);
LocalDateTime stm = LocalDateTime.parse(stmStr, DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN));
LocalDateTime etm = LocalDateTime.parse(etmStr, DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN));
QXWarnStatisticsVo vo = new QXWarnStatisticsVo();
String s = HttpUtil.sendPost("https://shdata.cloudowr.cn/sysuser/dologin", "{\"phone\":\"18888888888\",\"password\":\"18888888888\"}");
String userobj = null;
JSONObject jsonObject = JSON.parseObject(s);
if (jsonObject != null && jsonObject.getInteger("ok") == 1) {
userobj = jsonObject.getString("results");
}
String str = HttpUtil.getBySetCookie("https://shdata.cloudowr.cn/shwarn/msg/totalquery?stm=" + stm.toLocalDate().toString() + "&etm=" + etm.toLocalDate().toString(),
"userobj=" + userobj);
JSONObject json = JSON.parseObject(str);
if (json != null && json.getInteger("ok") == 1) {
TotalQueryVo data = json.getJSONObject("results").toJavaObject(TotalQueryVo.class);
StringBuilder warnStr = new StringBuilder();
warnStr.append(stm.getYear()).append("年").append(stm.getMonthValue()).append("月").append(stm.getDayOfMonth()).append("日至")
.append(etm.getYear()).append("年").append(etm.getMonthValue()).append("月").append(etm.getDayOfMonth()).append("日,湖北省");
List<TotalQueryVo.Yjtj> yjtj = data.getYjtj();
TotalQueryVo.Summary summary = data.getSummary();
long sum = yjtj.stream().mapToLong(TotalQueryVo.Yjtj::getCount).sum();
long wbSum = yjtj.stream().mapToLong(TotalQueryVo.Yjtj::getWbcount).sum();
List<TotalQueryVo.Page> page = data.getPage();
long yjrs = page.stream().mapToLong(TotalQueryVo.Page::getYjrs).sum();
long rs = page.stream().mapToLong(TotalQueryVo.Page::getRs).sum();
long dxzs = page.stream().mapToLong(TotalQueryVo.Page::getYj).sum()
+ page.stream().mapToLong(TotalQueryVo.Page::getZdy).sum()
+ page.stream().mapToLong(TotalQueryVo.Page::getQt).sum()
+ page.stream().mapToLong(TotalQueryVo.Page::getGb).sum();
List<TotalQueryVo.Outlist> outlist = data.getSsdxtj().getOutlist();
long szdxls = outlist.stream().filter(o -> !"420000000000".equals(o.getAdcd())).mapToLong(TotalQueryVo.Outlist::getSum).sum();
long szdxlsAll = outlist.stream().mapToLong(TotalQueryVo.Outlist::getSum).sum();
TotalQueryVo.Syw syw = data.getSyw();
TotalQueryVo.Sgxpt sgxpt = data.getSgxpt();
warnStr.append(yjtj.size()).append("个县共产生山洪预警").append(sum).append("次,")
.append("对外发布预警").append(wbSum).append("次,")
.append("共发送山洪预警短信").append(summary.getYj()).append("条,")
.append("涉及防汛责任人").append(yjrs).append("人次,")
.append("另发送防洪警示短信").append(dxzs - summary.getYj()).append("条,")
.append("涉及防汛责任人").append(rs - yjrs).append("人次;")
.append("市级平台共发送防洪警示短信").append(szdxls).append("条,")
.append("涉及防汛责任人").append(szdxls).append("人次;")
.append("省级平台共发送防洪警示、运维提示短信").append(syw.getSum() + sgxpt.getCNT() + szdxlsAll).append("条,")
.append("涉及防汛责任人").append(syw.getRs() + sgxpt.getRS() + szdxlsAll).append("人次。")
;
vo.setShWarnStr(warnStr.toString());
}
List<QXWarning> list = service.getWarnAndMsg(stm.format(pattern), etm.format(pattern));
if (CollectionUtils.isNotEmpty(list)) {
StringBuilder warnStr = new StringBuilder();
warnStr.append(stm.getYear()).append("年").append(stm.getMonthValue()).append("月").append(stm.getDayOfMonth()).append("日至")
.append(etm.getYear()).append("年").append(etm.getMonthValue()).append("月").append(etm.getDayOfMonth()).append("日,");
// List<QXWarning> qxWarnings = service.lambdaQuery().between(QXWarning::getPublishTime, stm, etm).list();
Map<String, List<QXWarning>> map = list.stream()
.collect(Collectors.groupingBy(QXWarning::getWarnSignalLevel));
List<QXWarning> orange = map.get("橙色");
List<QXWarning> red = map.get("红色");
if (CollectionUtils.isNotEmpty(orange) && CollectionUtils.isNotEmpty(red)) {
warnStr.append("我省共产生橙色气象预警").append(orange.size()).append("次,电话叫应");
Map<String, List<QXWarning>> orangeList = orange.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList()));
List<String> oraCnnms = Lists.newArrayList();
orangeList.forEach((k, v) -> {
warnStr.append(getCnnmStr(v, oraCnnms));
});
warnStr.setCharAt(warnStr.length() - 1, '等');
warnStr.append(oraCnnms.size()).append("个县市区,").append(orange.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。");
warnStr.append("红色气象预警").append(red.size()).append("次,电话叫应");
Map<String, List<QXWarning>> redList = red.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList()));
List<String> redCnnms = Lists.newArrayList();
redList.forEach((k, v) -> {
warnStr.append(getCnnmStr(v, redCnnms));
});
warnStr.setCharAt(warnStr.length() - 1, '等');
warnStr.append(redCnnms.size()).append("个县市区,").append(red.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。");
} else if (CollectionUtils.isNotEmpty(orange) && CollectionUtils.isEmpty(red)) {
warnStr.append("我省共产生橙色气象预警").append(orange.size()).append("次,电话叫应");
Map<String, List<QXWarning>> orangeList = orange.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList()));
List<String> oraCnnms = Lists.newArrayList();
orangeList.forEach((k, v) -> {
warnStr.append(getCnnmStr(v, oraCnnms));
});
warnStr.setCharAt(warnStr.length() - 1, '等');
warnStr.append(oraCnnms.size()).append("个县市区,").append(orange.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。");
} else if (CollectionUtils.isNotEmpty(red) && CollectionUtils.isEmpty(orange)) {
warnStr.append("我省共产生红色气象预警").append(red.size()).append("次,电话叫应");
Map<String, List<QXWarning>> redList = red.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList()));
List<String> redCnnms = Lists.newArrayList();
redList.forEach((k, v) -> {
warnStr.append(getCnnmStr(v, redCnnms));
});
warnStr.setCharAt(warnStr.length() - 1, '等');
warnStr.append(redCnnms.size()).append("个县市区,").append(red.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。");
}
vo.setByWarnStr(warnStr.toString());
}
return ResultJson.ok(vo);
}
private StringBuilder getCnnmStr(List<QXWarning> list, List<String> cnnms) {
List<String> lists = list.stream().map(QXWarning::getCnnm).distinct().collect(Collectors.toList());
HashSet<String> cnnmSet = Sets.newHashSet();
for (String str : lists) {
String[] split = str.split(",");
cnnmSet.addAll(Arrays.asList(split));
}
StringBuilder builder = new StringBuilder();
cnnmSet.forEach(s -> builder.append(s).append("、"));
cnnms.addAll(cnnmSet);
return builder;
}
}