2024-05-24 14:02:15 +08:00
|
|
|
package com.whdc.controller;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.whdc.exception.MyException;
|
|
|
|
|
import com.whdc.model.dto.ApiDto;
|
|
|
|
|
import com.whdc.model.dto.GroupWarningDto;
|
|
|
|
|
import com.whdc.model.vo.WarningData;
|
|
|
|
|
import com.whdc.model.vo.WarningHistoryListVo;
|
|
|
|
|
import com.whdc.model.vo.WarningListVo;
|
|
|
|
|
import com.whdc.service.IAddressBookService;
|
|
|
|
|
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.compress.utils.Lists;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.http.HttpStatus;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
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.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Description:
|
|
|
|
|
* Created by XuSan on 2024/5/23.
|
|
|
|
|
*
|
|
|
|
|
* @author XuSan
|
|
|
|
|
* @version 1.0
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Api(tags = "预警 - Controller")
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/warning")
|
|
|
|
|
public class WarningController {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IAddressBookService addressBookService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 气象预警
|
|
|
|
|
*
|
|
|
|
|
* @param dto
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation(value = "气象预警")
|
|
|
|
|
@PostMapping("/getGroupWarning")
|
|
|
|
|
public ResultJson<List<WarningListVo>> 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();
|
|
|
|
|
|
2024-05-27 10:10:37 +08:00
|
|
|
String publishUnit = dto.getPublishUnit();
|
|
|
|
|
if (StringUtils.isNotBlank(publishUnit)) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String[] split = publishUnit.split(",");
|
2024-05-27 14:50:18 +08:00
|
|
|
if (split.length > 1) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String str = "(";
|
|
|
|
|
for (String s : split) {
|
2024-05-27 14:50:18 +08:00
|
|
|
str += s + ",";
|
2024-05-27 10:41:58 +08:00
|
|
|
}
|
2024-05-27 14:50:18 +08:00
|
|
|
str = str.substring(0, str.length() - 1) + ")";
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("publishUnit", "in " + str, ""));
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
} else {
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("publishUnit", "like", String.format("%s%s%s", "%", publishUnit, "%")));
|
2024-05-27 10:10:37 +08:00
|
|
|
}
|
2024-05-24 14:02:15 +08:00
|
|
|
}
|
2024-05-27 10:10:37 +08:00
|
|
|
String warnSignalLevel = dto.getWarnSignalLevel();
|
|
|
|
|
if (StringUtils.isNotBlank(warnSignalLevel)) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String[] split = warnSignalLevel.split(",");
|
2024-05-27 14:50:18 +08:00
|
|
|
if (split.length > 1) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String str = "(";
|
|
|
|
|
for (String s : split) {
|
2024-05-27 14:50:18 +08:00
|
|
|
str += s + ",";
|
2024-05-27 10:41:58 +08:00
|
|
|
}
|
2024-05-27 14:50:18 +08:00
|
|
|
str = str.substring(0, str.length() - 1) + ")";
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalLevel", "in " + str, ""));
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
} else {
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalLevel", "like", String.format("%s%s%s", "%", warnSignalLevel, "%")));
|
2024-05-27 10:10:37 +08:00
|
|
|
}
|
2024-05-24 14:02:15 +08:00
|
|
|
}
|
2024-05-27 10:10:37 +08:00
|
|
|
String warnSignalType = dto.getWarnSignalType();
|
|
|
|
|
if (StringUtils.isNotBlank(warnSignalType)) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String[] split = warnSignalType.split(",");
|
2024-05-27 14:50:18 +08:00
|
|
|
if (split.length > 1) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String str = "(";
|
|
|
|
|
for (String s : split) {
|
2024-05-27 14:50:18 +08:00
|
|
|
str += s + ",";
|
2024-05-27 10:41:58 +08:00
|
|
|
}
|
2024-05-27 14:50:18 +08:00
|
|
|
str = str.substring(0, str.length() - 1) + ")";
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalType", "in " + str, ""));
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
} else {
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalType", "like", String.format("%s%s%s", "%", warnSignalType, "%")));
|
2024-05-27 10:10:37 +08:00
|
|
|
}
|
2024-05-24 14:02:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
apiDto.setFilter(filter);
|
2024-05-27 14:50:18 +08:00
|
|
|
String str = HttpUtil.sendPost("http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto));
|
2024-05-27 10:41:58 +08:00
|
|
|
// String str = HttpUtil.sendPost("http://127.0.0.1:20000/shzh/met/zyqxfw/api/warning/getGroupWarning", JSON.toJSONString(apiDto));
|
2024-05-24 14:02:15 +08:00
|
|
|
JSONObject json = JSON.parseObject(str);
|
|
|
|
|
if (json != null && json.getInteger("code") == HttpStatus.SC_OK) {
|
|
|
|
|
List<WarningData> data = json.getJSONArray("data").toJavaList(WarningData.class);
|
|
|
|
|
return ResultJson.ok(getList(data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ResultJson.ok(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2024-05-24 15:12:16 +08:00
|
|
|
* 历史气象预警统计
|
2024-05-24 14:02:15 +08:00
|
|
|
*
|
|
|
|
|
* @param dto
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
2024-05-24 15:12:16 +08:00
|
|
|
@ApiOperation(value = "历史气象预警统计")
|
2024-05-24 14:02:15 +08:00
|
|
|
@PostMapping("/getHistoryGroupWarning")
|
|
|
|
|
public ResultJson<List<WarningListVo>> getHistoryGroupWarning(@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();
|
|
|
|
|
|
2024-05-27 10:41:58 +08:00
|
|
|
String publishUnit = dto.getPublishUnit();
|
|
|
|
|
if (StringUtils.isNotBlank(publishUnit)) {
|
|
|
|
|
String[] split = publishUnit.split(",");
|
2024-05-27 14:50:18 +08:00
|
|
|
if (split.length > 1) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String str = "(";
|
|
|
|
|
for (String s : split) {
|
2024-05-27 14:50:18 +08:00
|
|
|
str += s + ",";
|
2024-05-27 10:41:58 +08:00
|
|
|
}
|
2024-05-27 14:50:18 +08:00
|
|
|
str = str.substring(0, str.length() - 1) + ")";
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("publishUnit", "in " + str, ""));
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
} else {
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("publishUnit", "like", String.format("%s%s%s", "%", publishUnit, "%")));
|
|
|
|
|
}
|
2024-05-24 14:02:15 +08:00
|
|
|
}
|
2024-05-27 10:41:58 +08:00
|
|
|
String warnSignalLevel = dto.getWarnSignalLevel();
|
|
|
|
|
if (StringUtils.isNotBlank(warnSignalLevel)) {
|
|
|
|
|
String[] split = warnSignalLevel.split(",");
|
2024-05-27 14:50:18 +08:00
|
|
|
if (split.length > 1) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String str = "(";
|
|
|
|
|
for (String s : split) {
|
2024-05-27 14:50:18 +08:00
|
|
|
str += s + ",";
|
2024-05-27 10:41:58 +08:00
|
|
|
}
|
2024-05-27 14:50:18 +08:00
|
|
|
str = str.substring(0, str.length() - 1) + ")";
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalLevel", "in " + str, ""));
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
} else {
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalLevel", "like", String.format("%s%s%s", "%", warnSignalLevel, "%")));
|
|
|
|
|
}
|
2024-05-24 14:02:15 +08:00
|
|
|
}
|
2024-05-27 10:41:58 +08:00
|
|
|
String warnSignalType = dto.getWarnSignalType();
|
|
|
|
|
if (StringUtils.isNotBlank(warnSignalType)) {
|
|
|
|
|
String[] split = warnSignalType.split(",");
|
2024-05-27 14:50:18 +08:00
|
|
|
if (split.length > 1) {
|
2024-05-27 10:41:58 +08:00
|
|
|
String str = "(";
|
|
|
|
|
for (String s : split) {
|
2024-05-27 14:50:18 +08:00
|
|
|
str += s + ",";
|
2024-05-27 10:41:58 +08:00
|
|
|
}
|
2024-05-27 14:50:18 +08:00
|
|
|
str = str.substring(0, str.length() - 1) + ")";
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalType", "in " + str, ""));
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
} else {
|
2024-05-27 10:41:58 +08:00
|
|
|
filter.add(new ApiDto.Filter("warnSignalType", "like", String.format("%s%s%s", "%", warnSignalType, "%")));
|
|
|
|
|
}
|
2024-05-24 14:02:15 +08:00
|
|
|
}
|
|
|
|
|
|
2024-05-27 10:41:58 +08:00
|
|
|
|
2024-05-24 14:02:15 +08:00
|
|
|
apiDto.setFilter(filter);
|
2024-05-27 14:50:18 +08:00
|
|
|
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));
|
2024-05-24 14:02:15 +08:00
|
|
|
JSONObject json = JSON.parseObject(str);
|
|
|
|
|
if (json != null && json.getInteger("code") == HttpStatus.SC_OK) {
|
|
|
|
|
List<WarningData> data = json.getJSONArray("data").toJavaList(WarningData.class);
|
|
|
|
|
return ResultJson.ok(getCount(data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ResultJson.ok(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 正在生效预警
|
|
|
|
|
*
|
|
|
|
|
* @param data
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private List<WarningListVo> getList(List<WarningData> data) {
|
|
|
|
|
|
|
|
|
|
List<WarningListVo> respList = Lists.newArrayList();
|
|
|
|
|
for (WarningData datum : data) {
|
|
|
|
|
String effectArea = datum.getEffectArea();
|
|
|
|
|
for (WarningData.TypeList typeList : datum.getTypeList()) {
|
|
|
|
|
// 预警类型
|
|
|
|
|
String type = typeList.getType();
|
|
|
|
|
for (WarningData.Warning warning : typeList.getWarnList()) {
|
|
|
|
|
WarningListVo vo = new WarningListVo();
|
|
|
|
|
String publishUnit = warning.getPublishUnit();
|
|
|
|
|
vo.setTitle(effectArea + publishUnit + "发布" + type + "预警");
|
|
|
|
|
vo.setPublishTime(warning.getPublishTime());
|
|
|
|
|
vo.setContent(warning.getContent());
|
|
|
|
|
vo.setWarnSignalType(warning.getWarnSignalType());
|
|
|
|
|
vo.setWarnSignalLevel(warning.getWarnSignalLevel());
|
|
|
|
|
vo.setAddressBooks(addressBookService.getListByAdnm(publishUnit.replace("气象台", "")));
|
|
|
|
|
respList.add(vo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return respList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 正在生效预警
|
|
|
|
|
*
|
|
|
|
|
* @param data
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private List<WarningHistoryListVo> getCount(List<WarningData> data) {
|
|
|
|
|
|
|
|
|
|
List<WarningHistoryListVo> respList = Lists.newArrayList();
|
|
|
|
|
for (WarningData datum : data) {
|
|
|
|
|
WarningHistoryListVo vo = new WarningHistoryListVo();
|
|
|
|
|
vo.setWarnSignalType("全部");
|
|
|
|
|
vo.setEffectArea(datum.getEffectArea());
|
|
|
|
|
|
|
|
|
|
List<WarningHistoryListVo> child = Lists.newArrayList();
|
|
|
|
|
for (WarningData.TypeList typeList : datum.getTypeList()) {
|
|
|
|
|
// 预警类型
|
|
|
|
|
|
|
|
|
|
List<WarningData.Warning> warnList = typeList.getWarnList();
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
// 地区分组
|
|
|
|
|
Map<String, List<WarningData.Warning>> area = warnList.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(WarningData.Warning::getEffectArea, Collectors.toList()));
|
2024-05-24 14:02:15 +08:00
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
area.forEach((areaStr, areaV) -> {
|
|
|
|
|
List<WarningHistoryListVo> countyChild = Lists.newArrayList();
|
2024-05-24 14:02:15 +08:00
|
|
|
WarningHistoryListVo childVo = new WarningHistoryListVo();
|
2024-05-27 14:50:18 +08:00
|
|
|
childVo.setWarnSignalType("全部");
|
|
|
|
|
childVo.setEffectArea(areaStr);
|
|
|
|
|
|
|
|
|
|
// 类型分组
|
|
|
|
|
Map<String, List<WarningData.Warning>> types = area.get(areaStr).stream()
|
|
|
|
|
.collect(Collectors.groupingBy(WarningData.Warning::getEffectArea, Collectors.toList()));
|
|
|
|
|
types.forEach((k, v) -> {
|
|
|
|
|
WarningHistoryListVo county = new WarningHistoryListVo();
|
|
|
|
|
// 等级分组
|
|
|
|
|
Map<String, Long> levels = v.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(WarningData.Warning::getWarnSignalLevel, Collectors.counting()));
|
|
|
|
|
|
|
|
|
|
levels.forEach((k1, v1) -> {
|
|
|
|
|
switch (k1) {
|
|
|
|
|
case "红色":
|
|
|
|
|
county.setRedCount(v1.intValue());
|
|
|
|
|
childVo.setRedCount(v1.intValue() + childVo.getRedCount());
|
|
|
|
|
vo.setRedCount(v1.intValue() + vo.getRedCount());
|
|
|
|
|
break;
|
|
|
|
|
case "橙色":
|
|
|
|
|
county.setOraCount(v1.intValue());
|
|
|
|
|
childVo.setOraCount(v1.intValue() + childVo.getOraCount());
|
|
|
|
|
vo.setOraCount(v1.intValue() + vo.getOraCount());
|
|
|
|
|
break;
|
|
|
|
|
case "黄色":
|
|
|
|
|
county.setYelCount(v1.intValue());
|
|
|
|
|
childVo.setYelCount(v1.intValue() + childVo.getYelCount());
|
|
|
|
|
vo.setYelCount(v1.intValue() + vo.getYelCount());
|
|
|
|
|
break;
|
|
|
|
|
case "蓝色":
|
|
|
|
|
county.setBluCount(v1.intValue());
|
|
|
|
|
childVo.setBluCount(v1.intValue() + childVo.getBluCount());
|
|
|
|
|
vo.setBluCount(v1.intValue() + vo.getBluCount());
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new MyException("当前预警等级不存在: " + k1);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
county.setWarnSignalType(k);
|
|
|
|
|
county.setSumCount(levels.size());
|
|
|
|
|
countyChild.add(county);
|
2024-05-24 14:02:15 +08:00
|
|
|
});
|
|
|
|
|
|
2024-05-27 14:50:18 +08:00
|
|
|
childVo.setSumCount(areaV.size());
|
|
|
|
|
childVo.setChild(countyChild);
|
|
|
|
|
vo.setSumCount(vo.getSumCount() + areaV.size());
|
|
|
|
|
|
2024-05-24 14:02:15 +08:00
|
|
|
child.add(childVo);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vo.setSumCount(datum.getTypeList().size());
|
|
|
|
|
vo.setChild(child);
|
|
|
|
|
respList.add(vo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return respList;
|
|
|
|
|
}
|
|
|
|
|
}
|