From a4d06f653442ecb91cc48f7ffb4042d6db8d8745 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Thu, 22 Feb 2024 18:34:16 +0800
Subject: [PATCH] 新预测水位接口

---
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HsybServiceImpl.java |  225 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 207 insertions(+), 18 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HsybServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HsybServiceImpl.java
index 6c8369e..38c89ef 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HsybServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/HsybServiceImpl.java
@@ -1,69 +1,258 @@
 package cn.gistack.nky.service.impl;
 
 import cn.gistack.common.utils.CommonUtil;
-import cn.gistack.nky.resultpojo.HsybGetFuturePo;
+import cn.gistack.common.utils.SpringContextUtil;
+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.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
+@Slf4j
 public class HsybServiceImpl implements IHsybService {
 
-	private static String GET_FUTURE = "https://sk.hubeishuiyi.cn/hsybApi/api/fh-admin/skkr/getFuture";
+	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_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";
 
 
 	@Override
 	public List<List<String>> getFuture(String resCd) {
-		HsybGetFuturePo hsybGetFuturePo  = apiRequest(GET_FUTURE, resCd);
+		HsybGetFuturePo hsybGetFuturePo = apiRequest(GET_FUTURE, resCd);
 
-		if (hsybGetFuturePo != null && hsybGetFuturePo.getRespCode().equals("200")){
+		if (hsybGetFuturePo != null && hsybGetFuturePo.getRespCode().equals("200")) {
 			List<List<String>> data = hsybGetFuturePo.getData();
 
-			//过滤空值数据,过滤过去时间
-			List<List<String>> collect =
-				data.stream().filter(item -> item.get(0) != null).filter(item -> CommonUtil.strToDate(item.get(0)).after(DateUtil.now())).collect(Collectors.toList());
+			List<List<String>> collect = filterPredictData(data);
 			return collect;
-		}else {
+		} else {
 			return null;
 		}
 	}
 
-	public HsybGetFuturePo apiRequest(String url, String jsonparams){
+	@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);
 
-//		Long param = Long.parseLong(jsonparams);
-		System.out.println("请求参数:"+ jsonparams);
+		//程序转为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;
+		}
+		if (activeProfile.equals("prod")) {
+			url = ONLINE + GET_FUTURE_ONLINE;
+		}
+		if (activeProfile.equals("test")) {
+			url = ONLINE + GET_FUTURE_ONLINE;
+		}
+
+
+		log.info("预测水位请求参数:" + jsonparams);
+		log.info("预测水位请求地址:" + url);
+
 		// 声明一个header变量
 		HttpHeaders headers = new HttpHeaders();
 		// 设置为json格式
 		MediaType mediaType = MediaType.parseMediaType("application/json;charset=utf-8");
 		headers.setContentType(mediaType);
 		//设置请求头
-		headers.set("Authorization",AUTHORIZATION);
+		headers.set("Authorization", AUTHORIZATION);
 		headers.add("Accept", MediaType.APPLICATION_JSON.toString());
 
 		HttpEntity<String> httpEntity = new HttpEntity(jsonparams, headers);
 		RestTemplate template = new RestTemplate();
 		try {
 			HsybGetFuturePo hsybGetFuturePo = template.postForObject(url, httpEntity, HsybGetFuturePo.class);
-			System.out.println(hsybGetFuturePo.toString());
+			log.info("预测水位返回结果:" + hsybGetFuturePo.toString());
 			return hsybGetFuturePo;
-		}catch (Exception e){
+		} catch (Exception e) {
 			System.out.println(e);
 		}
 
 		return null;
 	}
+
+
+	/**
+	 * 对预测数据进行过滤
+	 *
+	 * @param data
+	 * @return
+	 */
+	public List<List<String>> filterPredictData(List<List<String>> data) {
+
+		//获取当前时间
+		String formatter = "HH:00";
+		String nowTime = DateUtil.format(new Date(), formatter);
+
+		//获取等于当前时间的水位数据
+		List<List<String>> collect = data.stream().filter(infoList -> infoList.get(0).equals(nowTime)).collect(Collectors.toList());
+
+		collect.forEach(infoList -> {
+			//给第一项重新赋值,因为后面取的是第一项,且预测参数时间只要日期
+			infoList.set(0, infoList.get(4).split(" ")[0]);
+		});
+		return collect;
+
+
+//
+//		String formatter = "yyyy-MM-dd";
+//		String today = DateUtil.format(new Date(), formatter);
+//
+//		Long time = new Date().getTime() + 60 * 60 * 24 * 1000;
+//		Date tomorrowDate = new Date(time);
+//		String tomorrow = DateUtil.format(tomorrowDate, formatter);
+//
+//
+//		String nowHour = DateUtil.format(new Date(),"HH");
+//
+//		//过滤空值数据
+//		List<List<String>> collect = data.stream().filter(item -> item.get(0) != null).collect(Collectors.toList());
+//
+//		//切割过去数据
+//		Integer nowIndex = findIndex(collect, nowHour);
+//		List<List<String>> subList = collect.subList(nowIndex, collect.size());
+//		int index = -1;
+//		//添加日期
+//		for (int i = 0; i < subList.size(); i++) {
+//			List<String> temp = subList.get(i);
+//			if (index == -1 && temp.get(0).indexOf("/")>-1){
+//				index = i;
+//				temp.set(0,tomorrow + " " +temp.get(0).substring(5));
+//			}
+//
+//			if (index != -1){
+//				temp.set(0,tomorrow + " " + temp.get(0).substring(5));
+//			}else {
+//				//给后面的时间添加今天的日期
+//				temp.set(0,today + " " +  temp.get(0));
+//			}
+//
+//		}
+//
+//
+//		//截取掉时间部分
+//		subList.forEach(e->{
+//			e.set(0,e.get(0).split(" ")[0]);
+//		});
+//
+//		//去除重复数据
+//		List<List<String>> distinctList = subList.stream().distinct().collect(Collectors.toList());
+//
+//
+//		//去重
+//		for  ( int  i  =   0 ; i  <  distinctList.size()  -   1 ; i ++ )  {
+//			for  ( int  j  =  distinctList.size()  -   1 ; j  >  i; j -- )  {
+//				// 这里是对象的比较,如果去重条件不一样,在这里修改即可
+//				if  (distinctList.get(j).get(0).equals(distinctList.get(i).get(0)))  {
+//					distinctList.remove(i);
+//				}
+//			}
+//		}
+
+//		return distinctList;
+	}
+
+	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;
+			}
+		}
+		return -1;
+	}
 }

--
Gitblit v1.9.3