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 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> 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 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 data = json.getJSONArray("data").toJavaList(WarningData.class); List warningList = getList(data, publishUnit, warnSignalLevel, warnSignalType); //将warningList存起来 for(int i=0;i> getDpple( @RequestBody WarnDppleDto dto) { List warnDpples = new ArrayList<>(); String[] cnnms = dto.getCnnm().split(","); for(int i=0;i 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> 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 getHistoryStats(@RequestBody GroupWarningDto dto) { WarnStatsVO warnStatsVO = new WarnStatsVO(); int dayWarnNum = 0;//日预警个数 int weekWarnNum = 0;//周预警个数 int monthWarnNum = 0;//月预警个数 int yearWarnNum = 0;//年预警个数 List 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 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 data = dayjson.getJSONArray("data").toJavaList(WarningData.class); // return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType)); // List 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 data = weekjson.getJSONArray("data").toJavaList(WarningData.class); // return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType)); // List 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 data = monthjson.getJSONArray("data").toJavaList(WarningData.class); // return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType)); // List 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 data = yearjson.getJSONArray("data").toJavaList(WarningData.class); //// return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType)); // List 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 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 getHistoryGroupWarning(@RequestBody GroupWarningDto dto) { List 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 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 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 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 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 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 data = weekjson.getJSONArray("data").toJavaList(WarningData.class); // return ResultJson.ok(getCount(data, publishUnit, warnSignalLevel, warnSignalType)); // List 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 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 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 data){ int sum = 0; FBStatsVO fbStats = new FBStatsVO(); // Set cnCallList = new ArrayList<>(); Set cnOrgCallList = new HashSet<>(); Set cnRedCallList = new HashSet<>(); int orgfbSum = 0; int redfbSum = 0; List warnList = Lists.newArrayList();//汇总 for (WarningData datum : data) { for (WarningData.TypeList typeList : datum.getTypeList()) { warnList.addAll(typeList.getWarnList()); } } List list = warnList.stream().filter(o -> "暴雨".equals(o.getWarnSignalType())).collect(Collectors.toList()); //统计暴雨橙色预警 List orgList = list.stream().filter(o -> "橙色".equals(o.getWarnSignalLevel())).collect(Collectors.toList()); //统计暴雨红色预警 List 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 msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(warning.getId()));//查询msgfb String cn = warning.getEffectArea(); String[] cnList = cn.split(","); for(int i=0;i(cnOrgCallList)); //查询叫应信息:根据warnid查询——暴雨红色预警 //根据预警id,查找有没有呼叫过 for(WarningData.Warning warning:redList){ List msgfbList = warnMsgFBService.find(new WarnMsgFB().setWarnid(warning.getId()));//查询msgfb String cn = warning.getEffectArea(); String[] cnList = cn.split(","); for(int i=0;i(cnRedCallList)); return fbStats; } private List getPageWarning(List data, int pageNumber, int pageSize){ List qxWarningVOS = new ArrayList<>(); // List warnList = Lists.newArrayList();//汇总 List warnList = Lists.newArrayList();//汇总 for (WarningData datum : data) { String ctnm = datum.getEffectArea();//市级范围 for (WarningData.TypeList typeList : datum.getTypeList()) {//里面的 // 预警类型 String type = typeList.getType(); List 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 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 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() 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 getLatestTen(List data){ List qxWarningVOS = new ArrayList<>(); // List warnList = Lists.newArrayList();//汇总 List warnList = Lists.newArrayList();//汇总 for (WarningData datum : data) { String ctnm = datum.getEffectArea();//市级范围 for (WarningData.TypeList typeList : datum.getTypeList()) {//里面的 // 预警类型 String type = typeList.getType(); List 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 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 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 getList(List data, String reqPublishUnit, String reqWarnSignalLevel, String reqWarnSignalType) { List respList = Lists.newArrayList(); for (WarningData datum : data) {//最外层的列表 String ctnm = datum.getEffectArea();//市级范围 for (WarningData.TypeList typeList : datum.getTypeList()) {//里面的 // 预警类型 String type = typeList.getType(); List 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 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 warnListFilter(List warnList, String publishUnit, String warnSignalLevel, String warnSignalType ) { if (StringUtils.isNotBlank(publishUnit)) { HashSet 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 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 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 data){ int sum = 0; DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); List 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"; } }