skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NewSwFuturePo.java
New file @@ -0,0 +1,11 @@ package cn.gistack.nky.resultpojo; import lombok.Data; @Data public class NewSwFuturePo { private String time; private String sw; } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IHsybService.java
@@ -1,8 +1,12 @@ package cn.gistack.nky.service; import cn.gistack.nky.resultpojo.NewSwFuturePo; import java.util.List; public interface IHsybService { List<List<String>> getFuture(String resCd); List<NewSwFuturePo> getNewFuture(String resId); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HstPredictServiceImpl.java
@@ -7,6 +7,7 @@ import cn.gistack.nky.requestpojo.PredictWatersPo; import cn.gistack.nky.requestpojo.QueryReqPo; import cn.gistack.nky.resultpojo.DataResChildrenPo; import cn.gistack.nky.resultpojo.NewSwFuturePo; import cn.gistack.nky.service.IHstPredictService; import cn.gistack.nky.service.IHsybService; import cn.gistack.nky.service.INkyService; @@ -36,7 +37,11 @@ @Override public void getData(String type) { List<DataResChildrenPo> cdList = getCdList(type); List<DataResChildrenPo> collect = cdList.stream().filter(item -> item.getRes_cd().equals("42011640018") || item.getRes_cd().equals("42128140006")).collect(Collectors.toList()); List<DataResChildrenPo> collect = cdList.stream().filter( // item -> item.getRes_cd().equals("42011640018") || item.getRes_cd().equals("42128140006") item -> item.getRes_cd().equals("42011640018") || item.getRes_cd().equals("42130350046")|| item.getRes_cd().equals("42092250024")|| item.getRes_cd().equals("42022250039")|| item.getRes_cd().equals("42132150292") ).collect(Collectors.toList()); collect.forEach(dataResChildrenPo -> { //循环请求预测结果 QueryReqPo queryReqPo = new QueryReqPo(dataResChildrenPo, type); @@ -54,97 +59,104 @@ @Override public void predictData(String type) { List<DataResChildrenPo> cdList = getCdList(type); //暂时筛选出这两个水库的数据 List<DataResChildrenPo> collect = cdList.stream().filter(item -> item.getRes_cd().equals("42011640018") || item.getRes_cd().equals("42128140006")).collect(Collectors.toList()); //暂时筛选出数据 List<DataResChildrenPo> collect = cdList.stream().filter( item -> item.getRes_cd().equals("42011640018") || item.getRes_cd().equals("42130350046")|| item.getRes_cd().equals("42092250024")|| item.getRes_cd().equals("42022250039")|| item.getRes_cd().equals("42132150292") ).collect(Collectors.toList()); predict(collect,type); // predict(collect,type); newPredict(collect,type); // // if (type.equals("1")) { // //渗压 // collect.forEach(dataResChildrenPo -> { // //所有水库请求预报数据 //// if (!resCd.equals(dataResChildrenPo.getRes_cd())) { // //请求预报水位 // List<List<String>> future = hsybService.getFuture(dataResChildrenPo.getRes_cd()); // resCd = dataResChildrenPo.getRes_cd(); // if (future != null && future.size() > 0) { // List<PredictWatersPo> po = new ArrayList<>(); // future.forEach(item -> { // PredictWatersPo predictWatersPo = new PredictWatersPo(); // //设置时间 // predictWatersPo.setTime(item.get(0)); // //设置预测水位 // predictWatersPo.setValue(Double.parseDouble(item.get(2))); // po.add(predictWatersPo); // }); // HstPredictReqPo arimaPredictReqPo = new HstPredictReqPo(dataResChildrenPo, type, po); // //循环预测请求 // nkyService.hstPredict(arimaPredictReqPo); // } //// } // }); // } else if (type.equals("2")) { // //渗流 // collect.forEach(dataResChildrenPo -> { // //所有水库请求预报数据 //// if (!resCd.equals(dataResChildrenPo.getRes_cd())) { // //请求预报水位 // List<List<String>> future = hsybService.getFuture(dataResChildrenPo.getRes_cd()); // resCd = dataResChildrenPo.getRes_cd(); // if (future != null && future.size() > 0) { // List<PredictWatersPo> po = new ArrayList<>(); // future.forEach(item -> { // PredictWatersPo predictWatersPo = new PredictWatersPo(); // //设置时间 // predictWatersPo.setTime(item.get(0)); // //设置预测水位 // predictWatersPo.setValue(Double.parseDouble(item.get(2))); // po.add(predictWatersPo); // }); // HstPredictReqPo arimaPredictReqPo = new HstPredictReqPo(dataResChildrenPo, type, po); // //循环预测请求 // nkyService.hstPredict(arimaPredictReqPo); // } //// } // }); // // // } else if (type.equals("3") || type.equals("4") || type.equals("5")) { // collect.forEach(dataResChildrenPo -> { // //所有水库请求预报数据 //// if (!resCd.equals(dataResChildrenPo.getRes_cd())) { // //请求预报水位 // List<List<String>> future = hsybService.getFuture(dataResChildrenPo.getRes_cd()); // resCd = dataResChildrenPo.getRes_cd(); // if (future != null && future.size() > 0) { // List<PredictWatersPo> po = new ArrayList<>(); // future.forEach(item -> { // PredictWatersPo predictWatersPo = new PredictWatersPo(); // //设置时间 // predictWatersPo.setTime(item.get(0)); // //设置预测水位 // predictWatersPo.setValue(Double.parseDouble(item.get(2))); // po.add(predictWatersPo); // }); // //循环预测请求(位移一起请求减少请求次数) // HstPredictReqPo arimaPredictReqPoX = new HstPredictReqPo(dataResChildrenPo, "3", po); // nkyService.hstPredict(arimaPredictReqPoX); // // HstPredictReqPo arimaPredictReqPoY = new HstPredictReqPo(dataResChildrenPo, "4", po); // nkyService.hstPredict(arimaPredictReqPoY); // // HstPredictReqPo arimaPredictReqPoZ = new HstPredictReqPo(dataResChildrenPo, "5", po); // nkyService.hstPredict(arimaPredictReqPoZ); // } //// } // }); } private void newPredict(List<DataResChildrenPo> collect, String type) { String resCd = ""; //无数据直接返回 if (collect.size() == 0){ return; } List<NewSwFuturePo> future = new ArrayList<>(); if (type.equals("1") || type.equals("2")){ for (int i = 0; i < collect.size(); i++) { DataResChildrenPo dataResChildrenPo = collect.get(i); String currentResCd = dataResChildrenPo.getRes_cd(); //第一个水库 if (future.size() == 0 && resCd.equals("")){ future = hsybService.getNewFuture(currentResCd); //当前水库 resCd = currentResCd; } else if (!resCd.equals(currentResCd)) { //其他水库,获取新的预测数据 future = hsybService.getNewFuture(currentResCd); //更换为新水库 resCd = currentResCd; } //预测数据构造请求数据 if (future != null && future.size() > 0) { List<PredictWatersPo> po = new ArrayList<>(); future.forEach(item -> { PredictWatersPo predictWatersPo = new PredictWatersPo(); //设置时间 predictWatersPo.setTime(item.getTime()); //设置预测水位 predictWatersPo.setValue(Double.parseDouble(item.getSw())); po.add(predictWatersPo); }); HstPredictReqPo arimaPredictReqPo = new HstPredictReqPo(dataResChildrenPo, type, po); //循环预测请求 nkyService.hstPredict(arimaPredictReqPo); } } }else if (type.equals("3") || type.equals("4") || type.equals("5")){ // } // resCd = ""; for (int i = 0; i < collect.size(); i++) { DataResChildrenPo dataResChildrenPo = collect.get(i); String currentResCd = dataResChildrenPo.getRes_cd(); //第一个水库 if (future.size() == 0 && resCd.equals("")){ future = hsybService.getNewFuture(currentResCd); //当前水库 resCd = currentResCd; } else if (!resCd.equals(currentResCd)) { //其他水库,获取新的预测数据 future = hsybService.getNewFuture(currentResCd); //更换为新水库 resCd = currentResCd; } //预测数据构造请求数据 if (future != null && future.size() > 0) { List<PredictWatersPo> po = new ArrayList<>(); future.forEach(item -> { PredictWatersPo predictWatersPo = new PredictWatersPo(); //设置时间 predictWatersPo.setTime(item.getTime()); //设置预测水位 predictWatersPo.setValue(Double.parseDouble(item.getSw())); po.add(predictWatersPo); }); //循环预测请求(位移一起请求减少请求次数) HstPredictReqPo arimaPredictReqPoX = new HstPredictReqPo(dataResChildrenPo, "3", po); nkyService.hstPredict(arimaPredictReqPoX); HstPredictReqPo arimaPredictReqPoY = new HstPredictReqPo(dataResChildrenPo, "4", po); nkyService.hstPredict(arimaPredictReqPoY); HstPredictReqPo arimaPredictReqPoZ = new HstPredictReqPo(dataResChildrenPo, "5", po); nkyService.hstPredict(arimaPredictReqPoZ); } } } } private void predict(List<DataResChildrenPo> collect, String type) { skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HsybServiceImpl.java
@@ -2,20 +2,19 @@ import cn.gistack.common.utils.CommonUtil; import cn.gistack.common.utils.SpringContextUtil; import cn.gistack.nky.resultpojo.HsybGetFuturePo; import cn.gistack.nky.resultpojo.*; import cn.gistack.nky.service.IHsybService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.DateUtil; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springblade.core.tool.utils.StringUtil; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.*; import java.util.stream.Collectors; @Service @@ -25,8 +24,10 @@ private static String ONLINE = "http://10.42.7.148:50001"; private static String LOCAL = "https://sk.hubeishuiyi.cn"; private static String GET_FUTURE = "/hsybApi/api/fh-admin/skkr/getFuture"; private static String GET_FUTURE_ONLINE = "/api/fh-admin/skkr/getFuture"; private static String GET_FUTURE = "/hsybApi/api/fh-admin/skkr/getFuture"; private static String GET_NEW_FUTURE = "/hsybApi/api/fh-admin/skkr/getSkFutureSw"; private static String GET_FUTURE_ONLINE = "/api/fh-admin/skkr/getFuture"; private static String GET_NEW_FUTURE_ONLINE = "/api/fh-admin/skkr/getSkFutureSw"; private static String AUTHORIZATION = "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJBRE1JTiIsIlVzZXJJZCI6IjEiLCJzY29wZSI6WyJhbGwiXSwiVXNlclJlYWxOYW1lIjoi6LaF57qn566h55CG5ZGYIiwiVXNlclh6cWhkbSI6IjQyMDUiLCJleHAiOjI1MTk3NzIwMTAsImp0aSI6ImExNTcxYzk1LTBkNjMtNDkyYi1iOWEyLTE2ZTIzNTQ5ZTY1ZiIsImNsaWVudF9pZCI6InVzZXItc2VydmljZSJ9.ebNVZrw9LbhKaj2w6RR8b2wccQiDkhvBeq79SxxCK-yWiOlIFqBkotTN4TNJg8umcpyYvLILwvqXWRJhffEtgi25sX2y6MqLIWM4kMZ9d8ptdnSmTpBPhltSiQOM0KFa1kl5nSDCBwYOLn-pESJglam76cjpgZNoC88x3iNHacdiXDItY0rtY85HrQ26uyJu9UovKtmYmZRHsIbGMpDta5Q1p4vfaCIr-YUayDrCweZJiQDEEcOSpWJ7O7RMk3pRkX_4UmPHFzrOI2lMp1jQIhxnSTE7EVAz_4z8h8r46muSkpF54Ic4XSawHKqdSLHx8T05LB0MpvOzWMPS6c1uHA"; @@ -45,15 +46,63 @@ } } @Override public List<NewSwFuturePo> getNewFuture(String resId) { Map<String, Object> params = new HashMap<>(); params.put("resId", resId); HsybGetFuturePo get = apiRequest(GET_NEW_FUTURE, "GET", params); //程序转为hashmap,手动转换类型 List<NewSwFuturePo> data =JSON.parseArray(JSON.toJSONString(get.getData()), NewSwFuturePo.class); List<NewSwFuturePo> filterData = filterPredict(data); log.info(StringUtil.format("过滤后的预测水位数据:{}", JSON.toJSONString(filterData))); return filterData; } private HsybGetFuturePo apiRequest(String url, String type, Map<String, Object> params) { // 获取环境 String activeProfile = SpringContextUtil.getActiveProfile(); if (activeProfile.equals("dev")) { url = LOCAL + url; } if (activeProfile.equals("prod")) { url = ONLINE + GET_NEW_FUTURE_ONLINE; } if (activeProfile.equals("test")) { url = ONLINE + GET_NEW_FUTURE_ONLINE; } HttpMethod method; if (type.toLowerCase().equals("get".toLowerCase())) { method = HttpMethod.GET; } else { method = HttpMethod.POST; } // 声明一个header变量 HttpHeaders headers = new HttpHeaders(); url = url + "?resId=" + params.get("resId"); HttpEntity<String> httpEntity = new HttpEntity(null, headers); log.info("请求地址:" + url); log.info("请求参数:" + params); RestTemplate template = new RestTemplate(); ResponseEntity<HsybGetFuturePo> response = template.exchange(url, method, httpEntity, HsybGetFuturePo.class); if (response.getStatusCodeValue() == 200) { return response.getBody(); } return null; } public HsybGetFuturePo apiRequest(String url, String jsonparams) { // 获取环境 String activeProfile = SpringContextUtil.getActiveProfile(); if (activeProfile.equals("dev")) { url = LOCAL+ url ; url = LOCAL + url; } if (activeProfile.equals("prod")) { url = ONLINE+ GET_FUTURE_ONLINE ; url = ONLINE + GET_FUTURE_ONLINE; } if (activeProfile.equals("test")) { url = ONLINE + GET_FUTURE_ONLINE; @@ -101,18 +150,11 @@ //获取等于当前时间的水位数据 List<List<String>> collect = data.stream().filter(infoList -> infoList.get(0).equals(nowTime)).collect(Collectors.toList()); collect.forEach(infoList->{ collect.forEach(infoList -> { //给第一项重新赋值,因为后面取的是第一项,且预测参数时间只要日期 infoList.set(0,infoList.get(4).split(" ")[0]); infoList.set(0, infoList.get(4).split(" ")[0]); }); return collect; // @@ -173,10 +215,42 @@ // return distinctList; } public Integer findIndex(List<List<String>> list,String reg){ public List<NewSwFuturePo> filterPredict(List<NewSwFuturePo> list){ /** * { * "sw": "88.72", * "time": "2024-02-01 16:00:00", * "resId": "42092250024" * }, * { * "sw": "88.72", * "time": "2024-02-01 17:00:00", * "resId": "42092250024" * }, */ if (list.size() == 0){ return null; } //先拿第一个数据,第一个数据就是当前时间的下一个整点的预测数据 NewSwFuturePo newSwFuturePo = list.get(0); //获取预测数据中,和第一条时间部分相同的数据;再筛选掉水位为0的数据 List<NewSwFuturePo> filterList = list.stream().filter(item -> item.getTime().indexOf(newSwFuturePo.getTime().split(" ")[1]) > -1).filter(item->!item.getSw().equals("0.0")).collect(Collectors.toList()); //给时间重新赋值,因为南科院hst预测只需要日期 filterList.forEach(e->{ e.setTime(e.getTime().split(" ")[0]); }); return filterList; } public Integer findIndex(List<List<String>> list, String reg) { for (int i = 0; i < list.size(); i++) { if (list.get(i).get(0).indexOf(reg)>-1){ return i; if (list.get(i).get(0).indexOf(reg) > -1) { return i; } } return -1; skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/damSecurity/mapper/DamSecurityMapper.xml
@@ -1745,10 +1745,10 @@ </if> <if test="vo.startTime != null and vo.startTime != ''"> AND NAG.time >= #{dam.startTime} AND NAG.time >= #{vo.startTime} </if> <if test="vo.endTime != null and vo.endTime !='' "> AND NAG.time <= #{dam.endTime} AND NAG.time <= #{vo.endTime} </if> <if test="vo.level != null and vo.level !='' "> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
@@ -48,7 +48,8 @@ list.add(text); } this.provinceInfo = String.join("\n\r\r\r\r",list); // this.provinceInfo = String.join("\n\r\r\r\r",list); this.provinceInfo = String.join("\n",list); } private String generateSzInfo(SzInfo szInfo){ @@ -112,7 +113,7 @@ } String detail = StringUtil.join(detailList,","); text = StringUtil.format("{}{}水位{}米,{}库水位{}米,({}{}米,{})。", text = StringUtil.format(" {}{}水位{}米,{}库水位{}米,({}{}米,{})。", resNm,oldTm,oldRz,newTm,newRz,upOrDown,diffRz,detail); return text; @@ -141,8 +142,11 @@ midListInfo.add(generateDzkInfo(dzkInfo)); } this.overBigInfo = String.join("\n\r\r\r\r",bigListInfo); this.overMidInfo = String.join("\n\r\r\r\r",midListInfo); // this.overBigInfo = String.join("\n\r\r\r\r",bigListInfo); // this.overMidInfo = String.join("\n\r\r\r\r",midListInfo); this.overBigInfo = String.join("\n",bigListInfo); this.overMidInfo = String.join("\n",midListInfo); } private String generateDzkInfo(DzkInfo dzkInfo){ @@ -169,7 +173,7 @@ } String detail = String.join(",",detailList); text = StringUtil.format("{}{}{}({})。",dzkInfo.getP_ad_name(),dzkInfo.getAd_name(),dzkInfo.getRes_name(),detail); text = StringUtil.format(" {}{}{}({})。",dzkInfo.getP_ad_name(),dzkInfo.getAd_name(),dzkInfo.getRes_name(),detail); return text; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docxBinary files differ