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

809 lines
41 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.model.dto.ApiDto;
import com.whdc.model.dto.GroupWarningDto;
import com.whdc.model.dto.WarnDppleDto;
import com.whdc.model.entity.AddressBook;
import com.whdc.model.entity.AddressBookOld;
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.HttpUtil;
import com.whdc.utils.ResultJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.cache.annotation.Cacheable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static com.whdc.controller.WarningController.THIS_REDIS_KEY;
//湖北省防汛抗旱调度系统-气象预警
@Slf4j
@Api(tags = "气象预警 - Controller")
@RestController
@RequestMapping("/qxwarning")
public class QXWarnController {
@Autowired
private IAddressBookService addressBookService;
@Autowired
private IAddressBookOldService addressBookOldService;
@Autowired
private IAdinfoService adinfoService;
@Autowired
private IWarnMsgFBService warnMsgFBService;
@Autowired
private IQXWarningService service;
@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);
}
/**
* 气象预警-正在生效的预警信息
*
* @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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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);
}
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<AddressBookOld> dpples = addressBookOldService.getListByAdnm2(cnnm2);
System.out.println("dpple个数"+dpples.size());
for(AddressBookOld dpple:dpples){
WarnDppleVO warndpple = new WarnDppleVO();
warndpple.setCtnm(dto.getCtnm());
warndpple.setCnnm(cnnm);
warndpple.setName(dpple.getName());
warndpple.setPosition(dpple.getPosition());
warndpple.setPhone(dpple.getPhone());
warnDpples.add(warndpple);
}
}else{
log.info("当前行政区划不存在: " + dto.getCnnm());
}
}
return ResultJson.ok(warnDpples);
}
/**
* 确认处理完成
*/
@ApiOperation(value = "确认处理完成")
@PostMapping("/confirmHandle")
@Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()")
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("该名称或编码重复");
}
boolean save = warnMsgFBService.save(dto);
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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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<QXWarningVO> getHistoryGroupWarning(@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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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(qxWarningList);
}
return ResultJson.ok("");
}
/**
* 历史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)+" "+
"00"+":"+"08"+":"+"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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/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";
}
}