From a49185944b1f162af2e462e7391738cc5a01f7ca Mon Sep 17 00:00:00 2001 From: wany <13995595726@qq.com> Date: Thu, 18 Jul 2024 16:49:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B0=94=E8=B1=A1=E9=A2=84?= =?UTF-8?q?=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gunshi/project/xyt/entity/vo/ApiVo.java | 48 +++++++ .../project/xyt/entity/vo/HomeWarnVo.java | 3 +- .../project/xyt/entity/vo/QXWarningVo.java | 52 ++++++++ .../project/xyt/entity/vo/WarningData.java | 68 ++++++++++ .../project/xyt/service/StQxWarnRService.java | 122 ++++++++++++++---- src/main/resources/config-common.yml | 1 + 6 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/gunshi/project/xyt/entity/vo/ApiVo.java create mode 100644 src/main/java/com/gunshi/project/xyt/entity/vo/QXWarningVo.java create mode 100644 src/main/java/com/gunshi/project/xyt/entity/vo/WarningData.java diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/ApiVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/ApiVo.java new file mode 100644 index 0000000..934fec7 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/ApiVo.java @@ -0,0 +1,48 @@ +package com.gunshi.project.xyt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Author xusan + * @Date 2023/7/4 10:28 + * @Notes + **/ +@Data +public class ApiVo { + + @Schema(description = "开始时间, 格式应为:yyyy-MM-dd HH:mm:ss", example = "2023-06-15 08:00:00") + private String startTime; + + @Schema(description = "结束时间, 格式应为:yyyy-MM-dd HH:mm:ss", example = "2023-06-15 08:00:00") + private String endTime; + + @Schema(description = "页数", example = "1") + private Integer pageNumber = 1; + + @Schema(description = "条数", example = "10") + private Integer pageSize = 10; + + @Schema(description = "过滤条件", example = "[]") + private List filter; + + @AllArgsConstructor + @NoArgsConstructor + @Data + public static class Filter { + + @Schema(description = "查询列名 publishUnit:发布单位,warnSignalType:类型,warnSignalLevel:级别", example = "publishUnit") + private String name; + + @Schema(description = "查询类型", example = "like") + private String condition; + + @Schema(description = "值", example = "%1%") + private String description; + + } +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/HomeWarnVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/HomeWarnVo.java index bbdf0b2..f5c12fb 100644 --- a/src/main/java/com/gunshi/project/xyt/entity/vo/HomeWarnVo.java +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/HomeWarnVo.java @@ -1,6 +1,5 @@ package com.gunshi.project.xyt.entity.vo; -import com.gunshi.project.xyt.model.StQxWarnR; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -20,7 +19,7 @@ public class HomeWarnVo { private String rzWarn; @Schema(description="气象告警") - private List qxWarn; + private List qxWarn; @Schema(description="位移告警") private List shiftWarn; diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/QXWarningVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/QXWarningVo.java new file mode 100644 index 0000000..23a8e6a --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/QXWarningVo.java @@ -0,0 +1,52 @@ +package com.gunshi.project.xyt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QXWarningVo { + + @Schema(description = "是否播放报警声音") + private Boolean play; + + @Schema(description = "生成时间") + private String createTime; + + @Schema(description = "发布时间") + private String publishTime; + + @Schema(description = "起始时间") + private String startTime; + + @Schema(description = "终止时间") + private String endTime; + + @Schema(description = "发布单位") + private String publishUnit; + + @Schema(description = "预警类型") + private String warnSignalType; + + @Schema(description = "预警级别") + private String warnSignalLevel; + + @Schema(description = "区县名称") + private String cnnm; + + @Schema(description = "市名称") + private String ctnm; + + @Schema(description = "预警内容") + private String content; + + @Schema(description = "状态") + private String status; + + @Schema(description = "预警信息id") + private Integer warnid; + +} diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/WarningData.java b/src/main/java/com/gunshi/project/xyt/entity/vo/WarningData.java new file mode 100644 index 0000000..706e0b9 --- /dev/null +++ b/src/main/java/com/gunshi/project/xyt/entity/vo/WarningData.java @@ -0,0 +1,68 @@ +package com.gunshi.project.xyt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * @Author xusan + * @Date 2023/7/4 10:28 + * @Notes + **/ +@Data +public class WarningData { + + @Schema(description = "服务名") + private String effectArea; + + @Schema(description = "预警信息列表") + private List typeList; + + + @Data + public static class TypeList { + + @Schema(description = "预警信息详情") + private List warnList; + + @Schema(description = "预警信号") + private String type; + + } + + @Data + public static class Warning { + + @Schema(description = "ID") + private int id; + + @Schema(description = "创建时间") + private String createTime; + + @Schema(description = "发布时间") + private String publishTime; + + @Schema(description = "预警开始时间") + private String startTime; + + @Schema(description = "预警结束时间") + private String endTime; + + @Schema(description = "预警类型") + private String warnSignalType; + + @Schema(description = "预警级别") + private String warnSignalLevel; + + @Schema(description = "预警地区") + private String effectArea; + + @Schema(description = "发布单位") + private String publishUnit; + + @Schema(description = "预警内容") + private String content; + + } +} diff --git a/src/main/java/com/gunshi/project/xyt/service/StQxWarnRService.java b/src/main/java/com/gunshi/project/xyt/service/StQxWarnRService.java index a859bf7..4d066bc 100644 --- a/src/main/java/com/gunshi/project/xyt/service/StQxWarnRService.java +++ b/src/main/java/com/gunshi/project/xyt/service/StQxWarnRService.java @@ -1,20 +1,34 @@ package com.gunshi.project.xyt.service; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; import com.gunshi.db.dto.DateTimeRangeSo; -import com.gunshi.project.xyt.entity.vo.AttResBaseVo; -import com.gunshi.project.xyt.entity.vo.HomeWarnVo; -import com.gunshi.project.xyt.entity.vo.OsmoticWarnVo; +import com.gunshi.project.xyt.entity.vo.*; import com.gunshi.project.xyt.mapper.AttResBaseMapper; import com.gunshi.project.xyt.mapper.StQxWarnRMapper; import com.gunshi.project.xyt.model.StImgWarnR; import com.gunshi.project.xyt.model.StQxWarnR; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -27,8 +41,10 @@ import java.util.stream.Collectors; @Service @Slf4j @Transactional(rollbackFor = Exception.class) -public class StQxWarnRService extends ServiceImpl -{ +public class StQxWarnRService extends ServiceImpl { + + @Value("${shqxjsWarnPath}") + private String shqxjsWarnPath; @Resource private StImgWarnRService imgWarnRService; @@ -43,44 +59,102 @@ public class StQxWarnRService extends ServiceImpl AttResBaseVo attResBaseVo = attResBaseVos.get(0); Date tm = attResBaseVo.getTm(); //水位的最新采集时间不在24小时内 - if(tm.before(dateTimeRangeSo.getStart())){ + if (tm.before(dateTimeRangeSo.getStart())) { vo.setRzWarn("-"); - }else{ + } else { BigDecimal rz = attResBaseVo.getRz(); - if(attResBaseVo.getCalState() == 1){ + if (attResBaseVo.getCalState() == 1) { BigDecimal aboveCal = rz.subtract(attResBaseVo.getCalFloodLev()); - vo.setRzWarn("超校核("+aboveCal+")"); + vo.setRzWarn("超校核(" + aboveCal + ")"); attResBaseVo.setDesState(0); attResBaseVo.setFlState(0); - }else if(attResBaseVo.getDesState() == 1){ + } else if (attResBaseVo.getDesState() == 1) { BigDecimal aboveDes = rz.subtract(attResBaseVo.getDesFloodLev()); - vo.setRzWarn("超设计("+aboveDes+")"); + vo.setRzWarn("超设计(" + aboveDes + ")"); attResBaseVo.setFlState(0); - }else if(attResBaseVo.getFlState() == 1){ - vo.setRzWarn("超汛限("+attResBaseVo.getAFsltdz()+")"); - }else if(rz.compareTo(attResBaseVo.getDeadLev()) < 0){ + } else if (attResBaseVo.getFlState() == 1) { + vo.setRzWarn("超汛限(" + attResBaseVo.getAFsltdz() + ")"); + } else if (rz.compareTo(attResBaseVo.getDeadLev()) < 0) { BigDecimal aboveDead = rz.subtract(attResBaseVo.getDeadLev()); - vo.setRzWarn("低水位("+aboveDead+")"); - }else { - vo.setRzWarn("正常("+attResBaseVo.getAFsltdz()+")"); + vo.setRzWarn("低水位(" + aboveDead + ")"); + } else { + vo.setRzWarn("正常(" + attResBaseVo.getAFsltdz() + ")"); } } - List qxWarn = this.lambdaQuery() - .ge(StQxWarnR::getTm, dateTimeRangeSo.getStart()).lt(StQxWarnR::getTm, dateTimeRangeSo.getEnd()).list(); - vo.setQxWarn(qxWarn); + vo.setQxWarn(queryQxWarn()); List warnVos = baseMapper.queryOsmoticWarn(dateTimeRangeSo); - - vo.setPressWarn(warnVos.stream().filter(o->o.getType() == 1).collect(Collectors.toList())); - vo.setFlowWarn(warnVos.stream().filter(o->o.getType() == 2).collect(Collectors.toList())); - vo.setShiftWarn(warnVos.stream().filter(o->o.getType() == 3).collect(Collectors.toList())); + vo.setPressWarn(warnVos.stream().filter(o -> o.getType() == 1).collect(Collectors.toList())); + vo.setFlowWarn(warnVos.stream().filter(o -> o.getType() == 2).collect(Collectors.toList())); + vo.setShiftWarn(warnVos.stream().filter(o -> o.getType() == 3).collect(Collectors.toList())); Long aiWarnCount = imgWarnRService.lambdaQuery() .ge(StImgWarnR::getTm, dateTimeRangeSo.getStart()).lt(StImgWarnR::getTm, dateTimeRangeSo.getEnd()).count(); vo.setAiWarnCount(aiWarnCount); return vo; } + + private List queryQxWarn() { + List list = new ArrayList<>(); + ApiVo apiVo = new ApiVo(); + apiVo.setFilter(Lists.newArrayList()); + ObjectMapper om = new ObjectMapper(); + HttpClient httpClient = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost(shqxjsWarnPath); + StringEntity stringEntity; + try { + stringEntity = new StringEntity(om.writeValueAsString(apiVo), ContentType.APPLICATION_JSON); + httpPost.setEntity(stringEntity); + HttpResponse response = httpClient.execute(httpPost); + HttpEntity entity = response.getEntity(); + JSONObject dataObject = JSONUtil.parseObj(EntityUtils.toString(entity)); + JSONArray data = dataObject.getJSONArray("data"); + if (data == null) return list; + List dataList = data.toList(WarningData.class); + list = getList(dataList); + } catch (Exception e) { + e.printStackTrace(); + } + return list; + } + + private List getList(List data) { + 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(); + + for (WarningData.Warning warning : warnList) { + String cnnm = warning.getEffectArea(); + if("麻城".equals(cnnm)){ + QXWarningVo vo = new QXWarningVo(); + String publishUnit = warning.getPublishUnit(); + 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()); + 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()); + } } diff --git a/src/main/resources/config-common.yml b/src/main/resources/config-common.yml index 697792f..2d4653a 100644 --- a/src/main/resources/config-common.yml +++ b/src/main/resources/config-common.yml @@ -27,3 +27,4 @@ gunshi: privateBucket: test.by-lyf.tmp shqxjsCloudowrCnPath: http://shqxjs.cloudowr.cn/service/ +shqxjsWarnPath: http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/getGroupWarning