787 lines
39 KiB
Java
787 lines
39 KiB
Java
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)+" "+
|
||
zerofill(hour)+":"+zerofill(minute)+":"+zerofill(second);
|
||
System.out.println(nowTime);
|
||
ArrayList<ApiDto.Filter> filter = Lists.newArrayList();
|
||
FBStatsVO fbStatsVO = null;
|
||
//当前时间往前7天——本周预警统计
|
||
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);
|
||
// 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);
|
||
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.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();
|
||
}
|
||
}
|