From 45bcbb7dbde7d448dc0f2b20baac0bac3de930a4 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 17 Dec 2024 09:13:14 +0800
Subject: [PATCH] 增加发送打印信息

---
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java |  237 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 180 insertions(+), 57 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java
index c290bf4..a3f6be3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java
@@ -14,6 +14,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.*;
@@ -25,6 +26,8 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * 南科院水库预警算法api调用服务接口
@@ -110,30 +113,36 @@
 		// 获取当前时间
 		LocalDateTime now = LocalDateTime.now();
 		// 减去一个小时
-		LocalDateTime oneHourAgo = now.minusHours(1);
+		LocalDateTime oneHourAgo = now.minusHours(8);
 		// 格式化时间
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
 		String oneHour = oneHourAgo.format(formatter) + ":00";
 		String nowHour = now.format(formatter) + ":00";
+
 		// 调用中台接口获取实时测点数据
 		JSONArray ztData = getZtData("",
-			ZtConfigConstant.url_prefix + DamEnum.ofType(type).getApiUrl() + "?tm_list=" + "'" + oneHour + "'," + "'" + nowHour + "'");
+			ZtConfigConstant.url_prefix + DamEnum.ofType(type).getApiUrl() + "?start_tm=" + oneHour + "&end_tm=" + nowHour + "");
 		// 解析数据
 		for (int i = 0; i < ztData.size(); i++) {
 			JSONObject jsonObject = ztData.getJSONObject(i);
 			Map<String,Object> map = new HashMap<>();
-			map.put("batchId",UUID.randomUUID());
-			map.put("serialNo",getSerialNo());
 			// 水库信息设置
-			waterInfoSet(jsonObject, map);
-			// 测点信息设置
-			pointValueInfoSet(jsonObject,map, DamEnum.ofType(type).getName());
-			// 发送请求
-//			String response = sendPostJsonRequest(OpenApiConstant.POINT_VALUE_INLET_URL, map);
-//			JSONObject parseObject = JSON.parseObject(response);
-//			Integer status = parseObject.getInteger("status");
-//			flag = status==200?true:false;
-			log.info("测点输入结果:" + flag);
+			flag = waterInfoSet(jsonObject, map);
+			if (flag) {
+				// 测点信息设置
+				flag = pointValueInfoSet(jsonObject, map, type,flag);
+			}
+			if (flag) {
+				map.put("batchId",UUID.randomUUID());
+				map.put("serialNo",getSerialNo());
+				log.info("发送数据:{}",map);
+				// 发送请求
+				String response = sendPostJsonRequest(OpenApiConstant.POINT_VALUE_INLET_URL, map);
+				JSONObject parseObject = JSON.parseObject(response);
+				Integer status = parseObject.getInteger("status");
+				flag = status==200?true:false;
+				log.info("测点输入结果:" + flag);
+			}
 		}
 	}
 
@@ -142,40 +151,98 @@
 	 * @param jsonObject
 	 * @param map
 	 */
-	private void waterInfoSet(JSONObject jsonObject, Map<String, Object> map) {
-		List<Map<String,Object>> waterLevelInfoList = new ArrayList<>();
+	private boolean waterInfoSet(JSONObject jsonObject, Map<String, Object> map) {
+		String rz = jsonObject.getString("rz");
+		if(Strings.isBlank(rz)){
+			return false;
+		}
+		// 需要过滤2022高标准水库才发送
+		String res_cd = replaceSpecialStr(jsonObject.getString("res_cd"));
+		String flag = openApiMapper.getResInfoBy2022(res_cd);
+		if (Strings.isBlank(flag)){
+			return false;
+		}
+		List<Map<String, Object>> waterLevelInfoList = new ArrayList<>();
 		Map<String, Object> waterLevelInfoMap = new HashMap<>();
-		waterLevelInfoMap.put("damCode",jsonObject.getString("res_cd"));
-		waterLevelInfoMap.put("waterLevel",jsonObject.getString("res_cd"));
-		waterLevelInfoMap.put("waterLevelTime",jsonObject.getString("res_cd"));
-		waterLevelInfoMap.put("rainCondition",jsonObject.getString("res_cd"));
-		waterLevelInfoMap.put("rainConditionTime",jsonObject.getString("res_cd"));
+		waterLevelInfoMap.put("damCode", res_cd);
+		waterLevelInfoMap.put("waterLevel", jsonObject.getString("rz"));
+		waterLevelInfoMap.put("waterLevelTime", jsonObject.getString("rz_tm"));
+		waterLevelInfoMap.put("rainCondition", jsonObject.getString("drp"));
+		waterLevelInfoMap.put("rainConditionTime", jsonObject.getString("drp_tm"));
 		waterLevelInfoList.add(waterLevelInfoMap);
-		map.put("waterLevelInfo",waterLevelInfoList);
+		map.put("waterLevelInfo", waterLevelInfoList);
+		return true;
 	}
 
 	/**
 	 * 测点信息设置
 	 * @param map
 	 */
-	private void pointValueInfoSet(JSONObject jsonObject,Map<String, Object> map,String type) {
+	private boolean pointValueInfoSet(JSONObject jsonObject,Map<String, Object> map,String type,boolean flag) {
+		flag = false;
+		int num = 0;
 		List<Map<String,Object>> pointValueInfoList = new ArrayList<>();
 		JSONArray childArray = jsonObject.getJSONArray("child");
 		//遍历处理
 		for (int i = 0; i < childArray.size(); i++) {
 			JSONObject childArrayJSONObject = childArray.getJSONObject(i);
-			String pointCodeTemp = jsonObject.getString("res_cd") + "_"
-				+ childArrayJSONObject.getString("cd")
-				+ "_" + type;
-			Map<String, Object> pointValueInfoMap = new HashMap<>();
-			pointValueInfoMap.put("damCode",jsonObject.getString("res_cd"));
-			pointValueInfoMap.put("pointCode",pointCodeTemp);
-			pointValueInfoMap.put("type",type);
-			pointValueInfoMap.put("value",childArrayJSONObject.getString("sy_val"));
-			pointValueInfoMap.put("time",childArrayJSONObject.getString("tm"));
-			pointValueInfoList.add(pointValueInfoMap);
+			String sy_val = childArrayJSONObject.getString("sy_val");
+			// type 为3 时为位移,位移返回数据格式不一致
+			if (type.equals("3")){
+				// 获取-位移_z 垂直 du是数值位移(垂直),de向东位移(上下游),dn向北位移(左右岸)
+				String du = childArrayJSONObject.getString("du");
+				String de = childArrayJSONObject.getString("de");
+				String dn = childArrayJSONObject.getString("dn");
+				if (!Strings.isBlank(du)){
+					num = setPointValue(jsonObject, DamEnum.ofType("5").getName(), num, pointValueInfoList, childArrayJSONObject, du);
+				}
+				if (!Strings.isBlank(dn)){
+					num = setPointValue(jsonObject, DamEnum.ofType("4").getName(), num, pointValueInfoList, childArrayJSONObject, dn);
+				}
+				if (!Strings.isBlank(de)){
+					num = setPointValue(jsonObject, DamEnum.ofType("3").getName(), num, pointValueInfoList, childArrayJSONObject, de);
+				}
+			}else {
+				// 有测点值才加入
+				if (!Strings.isBlank(sy_val)) {
+					// 设置测点信息
+					num = setPointValue(jsonObject, DamEnum.ofType(type).getName(), num, pointValueInfoList, childArrayJSONObject, sy_val);
+				}
+			}
 		}
-		map.put("pointValueInfo",pointValueInfoList);
+		// 只要有一个测点值设置
+		if (num>0) {
+			flag = true;
+			map.put("pointValueInfo", pointValueInfoList);
+		}
+		return flag;
+	}
+
+	/**
+	 * 设置测点数据
+	 * @param jsonObject
+	 * @param type
+	 * @param num
+	 * @param pointValueInfoList
+	 * @param childArrayJSONObject
+	 * @param sy_val
+	 * @return
+	 */
+	private int setPointValue(JSONObject jsonObject, String type, int num, List<Map<String, Object>> pointValueInfoList, JSONObject childArrayJSONObject, String sy_val) {
+		num++;
+		String res_cd = replaceSpecialStr(jsonObject.getString("res_cd"));
+		// 测点编码:水库GUID+测点编码+类型
+		String pointCodeTemp = res_cd + "_"
+			+ childArrayJSONObject.getString("cd")
+			+ "_" + type;
+		Map<String, Object> pointValueInfoMap = new HashMap<>();
+		pointValueInfoMap.put("damCode", res_cd);
+		pointValueInfoMap.put("pointCode", pointCodeTemp);
+		pointValueInfoMap.put("type", type);
+		pointValueInfoMap.put("value", sy_val);
+		pointValueInfoMap.put("time", childArrayJSONObject.getString("tm"));
+		pointValueInfoList.add(pointValueInfoMap);
+		return num;
 	}
 
 	/**
@@ -210,6 +277,7 @@
 	 * @return
 	 */
 	public JSONArray getZtData(String params, String url) {
+		log.info("实时测点请求中台接口:{}",url);
 		//设置请求头
 		HttpHeaders headers = new HttpHeaders();
 		headers.add(ZtConfigConstant.header_key, ZtConfigConstant.header_value);
@@ -223,6 +291,7 @@
 					formEntity,
 					String.class);
 			JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
+			log.info("实时测点请求中台接口结果数据:{}",jsonObject);
 			// 返回
 			return JSONArray.parseArray(jsonObject.get("data").toString());
 		} catch (Exception e) {
@@ -246,21 +315,58 @@
 		for (int i = 0; i < dataJsonArray.size(); i++) {
 			DamAlarmRecord damAlarmRecord = new DamAlarmRecord();
 			JSONObject alarmRecordJSONObject = dataJsonArray.getJSONObject(i);
-			damAlarmRecord.setPointId(alarmRecordJSONObject.getString("pointId"));
+			// 设置测点信息,类型、测点编号
+			setPointInfo(damAlarmRecord,alarmRecordJSONObject.getString("pointId"));
+			// 设置其他信息
 			damAlarmRecord.setResGuid(alarmRecordJSONObject.getString("RS_CODE"));
 			damAlarmRecord.setCollecTime(alarmRecordJSONObject.getDate("collecTime"));
 			damAlarmRecord.setPointValue(alarmRecordJSONObject.getString("ponitValue"));
-			JSONObject generalInfo = alarmRecordJSONObject.getJSONObject("generalInfo");
-			damAlarmRecord.setPointWarnLevel(generalInfo.getInteger("pointWarnLevel"));
-			damAlarmRecord.setPointWarnInfo(generalInfo.getString("pointWarnInfo"));
 			damAlarmRecord.setCreateTime(new Date());
-			// 保存
+			// 获取回调类型:1:告警规则法 2: 预测法  3:待补充
+			Integer callbackType = alarmRecordJSONObject.getInteger("callbackType");
+			damAlarmRecord.setCallbackType(callbackType);
+			if (callbackType==1){
+				JSONObject generalInfo = alarmRecordJSONObject.getJSONObject("generalInfo");
+				damAlarmRecord.setPointWarnLevel(generalInfo.getInteger("pointWarnLevel"));
+				damAlarmRecord.setPointWarnInfo(generalInfo.getString("pointWarnInfo"));
+			}
+			if (callbackType==2){
+				damAlarmRecord.setValue(alarmRecordJSONObject.getString("value"));
+				damAlarmRecord.setTimeValue(alarmRecordJSONObject.getString("timeValue"));
+			}
+			// 保存详情,预测没有详情
 			flag = damAlarmRecordService.save(damAlarmRecord);
-			if (flag){
+			if (callbackType==1 && flag){
 				flag = saveDamAlarmRecordDetail(alarmRecordJSONObject.getJSONArray("detailInfo"),damAlarmRecord);
 			}
 		}
 		return flag;
+	}
+
+	/**
+	 * 设置测点信息
+	 * @param pointId
+	 */
+	private void setPointInfo(DamAlarmRecord damAlarmRecord,String pointId) {
+		damAlarmRecord.setPointId(pointId);
+		// 测点值解析赋值
+		String[] point = pointId.split("_");
+		// 渗压、渗流
+		if (point.length==3) {
+			// 设置测点id
+			damAlarmRecord.setStationId(point[1]);
+			String typeName = point[2];
+			// 设置 大坝安全监测类型
+			damAlarmRecord.setType(Integer.parseInt(DamEnum.ofName(typeName).getKey()));
+		}
+		// 位移
+		if (point.length==4) {
+			// 设置测点id
+			damAlarmRecord.setStationId(point[1]);
+			String typeName = point[2] + "_" + point[3];
+			// 设置 大坝安全监测类型
+			damAlarmRecord.setType(Integer.parseInt(DamEnum.ofName(typeName).getKey()));
+		}
 	}
 
 	/**
@@ -271,25 +377,42 @@
 	@Transactional(rollbackFor = Exception.class)
 	public boolean saveDamAlarmRecordDetail(JSONArray detailInfo,DamAlarmRecord damAlarmRecord) {
 		boolean flag = false;
-		List<DamAlarmRecordDetail> list = new ArrayList<>();
-		for (int i = 0; i < detailInfo.size(); i++) {
-			DamAlarmRecordDetail damAlarmRecordDetail = new DamAlarmRecordDetail();
-			JSONObject jsonObject = detailInfo.getJSONObject(i);
-			damAlarmRecordDetail.setDamAlarmRecordId(damAlarmRecord.getId());
-			damAlarmRecordDetail.setAlgorithmName(jsonObject.getString("algorithmName"));
-			damAlarmRecordDetail.setAlgorithmWarnLevel(jsonObject.getInteger("algorithmWarnLevel"));
-			damAlarmRecordDetail.setAlgorithmWarnInfo(jsonObject.getString("algorithmWarnInfo"));
-			damAlarmRecordDetail.setAlgorithmWarnExplain(jsonObject.getString("algorithmWarnExplain"));
-			damAlarmRecordDetail.setCreateTime(new Date());
-			// 加入集合
-			list.add(damAlarmRecordDetail);
-		}
-		// 保存
-		if (list.size()>0) {
-			flag = damAlarmRecordDetailService.saveBatch(list);
-		}else {
-			flag = true;
+		if (null!=detailInfo) {
+			List<DamAlarmRecordDetail> list = new ArrayList<>();
+			for (int i = 0; i < detailInfo.size(); i++) {
+				DamAlarmRecordDetail damAlarmRecordDetail = new DamAlarmRecordDetail();
+				JSONObject jsonObject = detailInfo.getJSONObject(i);
+				damAlarmRecordDetail.setDamAlarmRecordId(damAlarmRecord.getId());
+				damAlarmRecordDetail.setAlgorithmName(jsonObject.getString("algorithmName"));
+				damAlarmRecordDetail.setAlgorithmWarnLevel(jsonObject.getInteger("algorithmWarnLevel"));
+				damAlarmRecordDetail.setAlgorithmWarnInfo(jsonObject.getString("algorithmWarnInfo"));
+				damAlarmRecordDetail.setAlgorithmWarnExplain(jsonObject.getString("algorithmWarnExplain"));
+				damAlarmRecordDetail.setCreateTime(new Date());
+				// 加入集合
+				list.add(damAlarmRecordDetail);
+			}
+			// 保存
+			if (list.size() > 0) {
+				flag = damAlarmRecordDetailService.saveBatch(list);
+			} else {
+				flag = true;
+			}
 		}
 		return flag;
 	}
+
+	/**
+	 * 去除字符串中的空格、回车、换行符、制表符等
+	 * @param str
+	 * @return
+	 */
+	public static String replaceSpecialStr(String str) {
+		String repl = "";
+		if (str!=null) {
+			Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+			Matcher m = p.matcher(str);
+			repl = m.replaceAll("");
+		}
+		return repl;
+	}
 }

--
Gitblit v1.9.3