package com.whdc.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Sets; import com.whdc.exception.MyException; import com.whdc.model.dto.ApiDto; import com.whdc.model.dto.GroupWarningDto; import com.whdc.model.dto.WarnDppleDto; import com.whdc.model.entity.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.DateUtils; import com.whdc.utils.ExcelCommon; import com.whdc.utils.HttpUtil; import com.whdc.utils.ResultJson; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; import static com.whdc.controller.WarningController.THIS_REDIS_KEY; import static com.whdc.model.MyConstant.REDIS_KEY; //湖北省防汛抗旱调度系统-气象预警 @Slf4j @Api(tags = "气象预警 - Controller") @RestController @RequestMapping("/qxwarning") public class QXWarnController { public static final String QX_TEMP_REDIS_KEY = REDIS_KEY + "warning:temp:"; @Autowired private IAddressBookService addressBookService; @Autowired private IAddressBookOldService addressBookOldService; @Autowired private IAdinfoService adinfoService; @Autowired private IWarnMsgFBService warnMsgFBService; @Autowired private IQXWarningService service; @Autowired private RedisTemplate stringRedisTemplate; @Value("${getGroupWarning}") public String getGroupWarning; @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); } // @Async @ApiOperation(value = "预警数据同步接口", notes = "预警数据同步接口") @PostMapping("/syncData") // @Scheduled(cron ="0 0/5 * * * ?") public void syncData(@RequestBody GroupWarningDto dto) { log.info("预警数据同步开始!!!"); ApiDto apiDto = new ApiDto(); if (StringUtils.isNotBlank(dto.getStartTime())) { apiDto.setStartTime(dto.getStartTime()); } if (StringUtils.isNotBlank(dto.getEndTime())) { apiDto.setEndTime(dto.getEndTime()); } apiDto.setFilter(Lists.newArrayList()); String str = HttpUtil.sendPost(getGroupWarning, JSON.toJSONString(apiDto)); // String str = HttpUtil.sendPost("http://127.0.0.1:20000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto)); JSONObject json = JSON.parseObject(str); if (json != null && json.getInteger("code") == HttpStatus.SC_OK) { List data = json.getJSONArray("data").toJavaList(WarningData.class); List warningList = getList(data, null, null, null); log.info("预警数据同步获取数据条数 " + warningList.size()); List warnIds = warningList.stream().map(QXWarningVO::getWarnid).collect(Collectors.toList()); List list = service.lambdaQuery().in(QXWarning::getWarnid, warnIds).list(); log.info("预警数据同步已存预警 " + list.size()); Set dbWarnSet = list.stream().map(QXWarning::getWarnid).collect(Collectors.toSet()); List adds = Lists.newArrayList(); for (QXWarningVO warningVO : warningList) { if (!dbWarnSet.contains(warningVO.getWarnid())) { QXWarning qxwarning = new QXWarning(); qxwarning.setCreateTime(DateUtils.dateToStrYMDHds(warningVO.getCreateTime())); qxwarning.setPublishTime(DateUtils.dateToStrYMDHds(warningVO.getPublishTime())); qxwarning.setStartTime(DateUtils.dateToStrYMDHds(warningVO.getStartTime())); qxwarning.setEndTime(DateUtils.dateToStrYMDHds(warningVO.getEndTime())); qxwarning.setWarnSignalType(warningVO.getWarnSignalType()); qxwarning.setWarnSignalLevel(warningVO.getWarnSignalLevel()); qxwarning.setPublishUnit(warningVO.getPublishUnit()); qxwarning.setContent(warningVO.getContent()); qxwarning.setWarnid(warningVO.getWarnid()); qxwarning.setCtnm(warningVO.getCtnm()); qxwarning.setCnnm(warningVO.getCnnm()); adds.add(qxwarning); } } if (CollectionUtils.isNotEmpty(adds)) { log.info("预警数据同步待添加预警 " + adds.size()); if (this.service.saveBatch(adds)) { log.info("添加成功 " + adds.size()); } } } log.info("预警数据同步执行完成!!!"); } /** * 气象预警-正在生效的预警信息 * * @param dto * @return */ @ApiOperation(value = "气象预警-正在生效的预警信息") @PostMapping("/getGroupWarning") public ResultJson> getGroupWarning() { Set tempKeys = stringRedisTemplate.keys(QX_TEMP_REDIS_KEY + "*"); if (CollectionUtils.isNotEmpty(tempKeys)) { List data = Lists.newArrayList(); tempKeys.forEach(o -> { String value = stringRedisTemplate.opsForValue().get(o); QXWarningVO qxWarningVO = JSON.parseObject(value, QXWarningVO.class); data.add(qxWarningVO); }); if (CollectionUtils.isNotEmpty(data)) { return ResultJson.ok(data.stream().sorted(Comparator.comparing(QXWarningVO::getPublishTime).reversed()).collect(Collectors.toList())); } } List data = service.find(); if (CollectionUtils.isEmpty(data)) { return ResultJson.ok(data); } Set keys = stringRedisTemplate.keys(THIS_REDIS_KEY + ":WARNID:*"); data.forEach(o -> { Integer warnid = o.getWarnid(); String key = THIS_REDIS_KEY + ":WARNID:" + warnid; if (!keys.contains(key)) { data.get(0).setPlay(true); stringRedisTemplate.opsForValue().set(key, String.valueOf(warnid)); } }); return ResultJson.ok(data); } // // /** // * 气象预警-正在生效的预警信息 // * // * @param dto // * @return // */ // @ApiOperation(value = "气象预警-正在生效的预警信息") // @PostMapping("/getGroupWarning") //// @Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()") // public ResultJson> 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(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 < warningList.size(); i++) { // DateTimeFormatter SECOND_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // QXWarningVO warningVO = warningList.get(i); // QXWarning qxwarning = new QXWarning(); // qxwarning.setCreateTime(Date.from(LocalDateTime.parse(warningVO.getCreateTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant())); // qxwarning.setPublishTime(Date.from(LocalDateTime.parse(warningVO.getPublishTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant())); // qxwarning.setStartTime(Date.from(LocalDateTime.parse(warningVO.getStartTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant())); // qxwarning.setEndTime(Date.from(LocalDateTime.parse(warningVO.getEndTime(), SECOND_FORMATTER).atZone(ZoneId.systemDefault()).toInstant())); // qxwarning.setWarnSignalType(warningVO.getWarnSignalType()); // qxwarning.setWarnSignalLevel(warningVO.getWarnSignalLevel()); // qxwarning.setPublishUnit(warningVO.getPublishUnit()); // qxwarning.setContent(warningVO.getContent()); // qxwarning.setWarnid(warningVO.getWarnid()); // qxwarning.setCtnm(warningVO.getCtnm()); // qxwarning.setCnnm(warningVO.getCnnm()); // insert(qxwarning); // } // warningList = warningList.stream().filter(o -> o.getStatus().equals("0")).collect(Collectors.toList()); // return ResultJson.ok(warningList); // } // // return ResultJson.ok(json); // } /** * 获取联系人 */ @ApiOperation(value = "获取预警信息的防御责任人") @PostMapping("/getDpple") @Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()") public ResultJson> getDpple( @RequestBody WarnDppleDto dto) { List 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 dpples = addressBookOldService.getListByAdnm2(cnnm2); System.out.println("dpple个数:" + dpples.size()); for (AddressBookOld dpple : dpples) { dpple.decryptPhone(); WarnDppleVO warndpple = new WarnDppleVO(); warndpple.setCtnm(dto.getCtnm()); warndpple.setCnnm(cnnm); warndpple.setName(dpple.getName()); warndpple.setPosition(dpple.getPosition()); warndpple.setPhone(dpple.getPhone()); warnDpples.add(warndpple); } } else { log.info("当前行政区划不存在: " + dto.getCnnm()); } } return ResultJson.ok(warnDpples); } /** * 确认处理完成 */ @ApiOperation(value = "确认处理完成") @PostMapping("/confirmHandle") 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("该名称或编码重复"); } // if (dto.getCallTime() == null) { // dto.setCallTime(dto.getHandleTime()); // } boolean save = warnMsgFBService.save(dto); log.info("warnId " + dto.getWarnid()); if (Boolean.FALSE.equals(stringRedisTemplate.delete(QX_TEMP_REDIS_KEY + dto.getWarnid()))) { log.error("缓存删除失败: " + dto.getWarnid()); } return ResultJson.ok(save); } /** * 历史气象预警统计 * * @param dto * @return */ @ApiOperation(value = "历史气象预警统计") @PostMapping("/getHistoryStats") @Cacheable(value = THIS_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()") public ResultJson 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(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(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(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(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 getHistoryWarning(@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(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(historyWarnsVO); // } // // return ResultJson.ok(""); return ResultJson.ok(service.page(dto)); } /** * 历史气象预警统计 * * @param dto * @return */ @ApiOperation(value = "历史气象预警导出") @PostMapping("/getHistoryWarning/download") public void getHistoryWarningDownload(@RequestBody @Validated GroupWarningDto dto, HttpServletResponse response) { if (LocalDate.parse(dto.getStartTime().split(" ")[0]).plusDays(90).compareTo(LocalDate.parse(dto.getEndTime().split(" ")[0])) < 0){ throw new MyException("时间差不能超过90天"); } List list = service.list(dto); ExcelCommon.exportExcel(list, null, "历史气象预警", QXWarning.class, "历史气象预警.xlsx", response); } /** * 历史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) + " " + "08" + ":" + "00" + ":" + "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(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(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 < 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 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 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 < pageNumber * pageSize; i++) { 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"); } 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 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"; } /** * https://shdata.cloudowr.cn/sysuser/dologin * https://shdata.cloudowr.cn/shwarn/msg/totalquery?stm=2024-06-01&etm=2024-06-12 * * @return */ @ApiOperation(value = "预警统计") @GetMapping(value = "/statistics/{stm}/{etm}") public ResultJson totalquery(@PathVariable("stm") @ApiParam(name = "stm", value = "开始时间, yyyy-MM-dd") String stmStr, @PathVariable("etm") @ApiParam(name = "etm", value = "结束时间, yyyy-MM-dd") String etmStr) { DateTimeFormatter pattern = DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN); LocalDateTime stm = LocalDateTime.parse(stmStr, DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN)); LocalDateTime etm = LocalDateTime.parse(etmStr, DateTimeFormatter.ofPattern(DateUtils.DATE_TIME_PATTERN)); QXWarnStatisticsVo vo = new QXWarnStatisticsVo(); String s = HttpUtil.sendPost("https://shdata.cloudowr.cn/sysuser/dologin", "{\"phone\":\"18888888888\",\"password\":\"18888888888\"}"); String userobj = null; JSONObject jsonObject = JSON.parseObject(s); if (jsonObject != null && jsonObject.getInteger("ok") == 1) { userobj = jsonObject.getString("results"); } String str = HttpUtil.getBySetCookie("https://shdata.cloudowr.cn/shwarn/msg/totalquery?stm=" + stm.toLocalDate().toString() + "&etm=" + etm.toLocalDate().toString(), "userobj=" + userobj); JSONObject json = JSON.parseObject(str); if (json != null && json.getInteger("ok") == 1) { TotalQueryVo data = json.getJSONObject("results").toJavaObject(TotalQueryVo.class); StringBuilder warnStr = new StringBuilder(); warnStr.append(stm.getYear()).append("年").append(stm.getMonthValue()).append("月").append(stm.getDayOfMonth()).append("日至") .append(etm.getYear()).append("年").append(etm.getMonthValue()).append("月").append(etm.getDayOfMonth()).append("日,湖北省"); List yjtj = data.getYjtj(); TotalQueryVo.Summary summary = data.getSummary(); long sum = yjtj.stream().mapToLong(TotalQueryVo.Yjtj::getCount).sum(); long wbSum = yjtj.stream().mapToLong(TotalQueryVo.Yjtj::getWbcount).sum(); List page = data.getPage(); long yjrs = page.stream().mapToLong(TotalQueryVo.Page::getYjrs).sum(); long rs = page.stream().mapToLong(TotalQueryVo.Page::getRs).sum(); long dxzs = page.stream().mapToLong(TotalQueryVo.Page::getYj).sum() + page.stream().mapToLong(TotalQueryVo.Page::getZdy).sum() + page.stream().mapToLong(TotalQueryVo.Page::getQt).sum() + page.stream().mapToLong(TotalQueryVo.Page::getGb).sum(); List outlist = data.getSsdxtj().getOutlist(); long szdxls = outlist.stream().filter(o -> !"420000000000".equals(o.getAdcd())).mapToLong(TotalQueryVo.Outlist::getSum).sum(); long szdxlsAll = outlist.stream().mapToLong(TotalQueryVo.Outlist::getSum).sum(); TotalQueryVo.Syw syw = data.getSyw(); TotalQueryVo.Sgxpt sgxpt = data.getSgxpt(); warnStr.append(yjtj.size()).append("个县共产生山洪预警").append(sum).append("次,") .append("对外发布预警").append(wbSum).append("次,") .append("共发送山洪预警短信").append(summary.getYj()).append("条,") .append("涉及防汛责任人").append(yjrs).append("人次,") .append("另发送防洪警示短信").append(dxzs - summary.getYj()).append("条,") .append("涉及防汛责任人").append(rs - yjrs).append("人次;") .append("市级平台共发送防洪警示短信").append(szdxls).append("条,") .append("涉及防汛责任人").append(szdxls).append("人次;") .append("省级平台共发送防洪警示、运维提示短信").append(syw.getSum() + sgxpt.getCNT() + szdxlsAll).append("条,") .append("涉及防汛责任人").append(syw.getRs() + sgxpt.getRS() + szdxlsAll).append("人次。") ; vo.setShWarnStr(warnStr.toString()); } List list = service.getWarnAndMsg(stm.format(pattern), etm.format(pattern)); if (CollectionUtils.isNotEmpty(list)) { StringBuilder warnStr = new StringBuilder(); warnStr.append(stm.getYear()).append("年").append(stm.getMonthValue()).append("月").append(stm.getDayOfMonth()).append("日至") .append(etm.getYear()).append("年").append(etm.getMonthValue()).append("月").append(etm.getDayOfMonth()).append("日,"); // List qxWarnings = service.lambdaQuery().between(QXWarning::getPublishTime, stm, etm).list(); Map> map = list.stream() .collect(Collectors.groupingBy(QXWarning::getWarnSignalLevel)); List orange = map.get("橙色"); List red = map.get("红色"); if (CollectionUtils.isNotEmpty(orange) && CollectionUtils.isNotEmpty(red)) { warnStr.append("我省共产生橙色气象预警").append(orange.size()).append("次,电话叫应"); Map> orangeList = orange.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList())); List oraCnnms = Lists.newArrayList(); orangeList.forEach((k, v) -> { warnStr.append(getCnnmStr(v, oraCnnms)); }); warnStr.setCharAt(warnStr.length() - 1, '等'); warnStr.append(oraCnnms.size()).append("个县市区,").append(orange.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。"); warnStr.append("红色气象预警").append(red.size()).append("次,电话叫应"); Map> redList = red.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList())); List redCnnms = Lists.newArrayList(); redList.forEach((k, v) -> { warnStr.append(getCnnmStr(v, redCnnms)); }); warnStr.setCharAt(warnStr.length() - 1, '等'); warnStr.append(redCnnms.size()).append("个县市区,").append(red.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。"); } else if (CollectionUtils.isNotEmpty(orange) && CollectionUtils.isEmpty(red)) { warnStr.append("我省共产生橙色气象预警").append(orange.size()).append("次,电话叫应"); Map> orangeList = orange.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList())); List oraCnnms = Lists.newArrayList(); orangeList.forEach((k, v) -> { warnStr.append(getCnnmStr(v, oraCnnms)); }); warnStr.setCharAt(warnStr.length() - 1, '等'); warnStr.append(oraCnnms.size()).append("个县市区,").append(orange.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。"); } else if (CollectionUtils.isNotEmpty(red) && CollectionUtils.isEmpty(orange)) { warnStr.append("我省共产生红色气象预警").append(red.size()).append("次,电话叫应"); Map> redList = red.stream().collect(Collectors.groupingBy(QXWarning::getCtnm, Collectors.toList())); List redCnnms = Lists.newArrayList(); redList.forEach((k, v) -> { warnStr.append(getCnnmStr(v, redCnnms)); }); warnStr.setCharAt(warnStr.length() - 1, '等'); warnStr.append(redCnnms.size()).append("个县市区,").append(red.stream().filter(o -> Objects.nonNull(o.getCallTime())).count()).append("次。"); } vo.setByWarnStr(warnStr.toString()); } return ResultJson.ok(vo); } private StringBuilder getCnnmStr(List list, List cnnms) { List lists = list.stream().map(QXWarning::getCnnm).distinct().collect(Collectors.toList()); HashSet cnnmSet = Sets.newHashSet(); for (String str : lists) { String[] split = str.split(","); cnnmSet.addAll(Arrays.asList(split)); } StringBuilder builder = new StringBuilder(); cnnmSet.forEach(s -> builder.append(s).append("、")); cnnms.addAll(cnnmSet); return builder; } }