|
@@ -0,0 +1,313 @@
|
|
|
|
+package com.jiayue.client.service;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
|
+import cn.hutool.http.HttpUtil;
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
|
+import com.jiayue.client.util.MD5Util;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Repository;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+@Repository
|
|
|
|
+@Slf4j
|
|
|
|
+public class SendDataService {
|
|
|
|
+ @Autowired
|
|
|
|
+ public QueryDataService queryDataService;
|
|
|
|
+ //青海回传数据通用签名key
|
|
|
|
+ private final static String qinghaiKey = "Syjy*3377";
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 向数据中心
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param flag
|
|
|
|
+ */
|
|
|
|
+ public void send(String startTime, String endTime, String flag) {
|
|
|
|
+ try {
|
|
|
|
+ List<Map<String, Object>> stations = queryDataService.getStations();
|
|
|
|
+ for (Map<String, Object> station : stations) {
|
|
|
|
+ String stationCode = Convert.toStr(station.get("C_STATION_CODE"));
|
|
|
|
+
|
|
|
|
+ if ("".equals(flag) || "all".equals(flag)) {
|
|
|
|
+ sendAll(startTime, endTime, stationCode);
|
|
|
|
+ } else if ("rp".equals(flag)) {
|
|
|
|
+ //1.回传实际功率数据
|
|
|
|
+ sendRp(startTime, endTime, stationCode);
|
|
|
|
+ } else if ("dq".equals(flag)) {
|
|
|
|
+ //2.回传短期数据
|
|
|
|
+ sendDq(startTime, endTime, stationCode);
|
|
|
|
+ } else if ("cdq".equals(flag)) {
|
|
|
|
+ //3.回传超短期数据
|
|
|
|
+ sendCdq(startTime, endTime, stationCode);
|
|
|
|
+ } else if ("qxz".equals(flag)) {
|
|
|
|
+ //4.回传环境检测仪数据
|
|
|
|
+ sendHj(startTime, endTime, stationCode);
|
|
|
|
+ } else if ("cft".equals(flag)) {
|
|
|
|
+ //5.回传测风塔数据
|
|
|
|
+ sendCft(startTime, endTime, stationCode);
|
|
|
|
+ } else if ("fj".equals(flag)) {
|
|
|
|
+ //6.回传风机数据
|
|
|
|
+ sendFj(startTime, endTime, stationCode);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("回传青海集中功率预测数据给数据中心失败:{}", e);
|
|
|
|
+ //TODO 添加微信警告提醒
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private void sendAll(String startTime, String endTime, String stationCode) {
|
|
|
|
+ //1.回传实际功率数据
|
|
|
|
+ sendRp(startTime, endTime, stationCode);
|
|
|
|
+
|
|
|
|
+ //2.回传短期数据
|
|
|
|
+ sendDq(startTime, endTime, stationCode);
|
|
|
|
+
|
|
|
|
+ //3.回传超短期数据
|
|
|
|
+ sendCdq(startTime, endTime, stationCode);
|
|
|
|
+
|
|
|
|
+ //4.回传环境检测仪数据
|
|
|
|
+ sendHj(startTime, endTime, stationCode);
|
|
|
|
+
|
|
|
|
+ //5.回传测风塔数据
|
|
|
|
+ sendCft(startTime, endTime, stationCode);
|
|
|
|
+
|
|
|
|
+ //6.回传风机数据
|
|
|
|
+ sendFj(startTime, endTime, stationCode);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 回传实际功率数据
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param stationCode
|
|
|
|
+ */
|
|
|
|
+ private void sendRp(String startTime, String endTime, String stationCode) {
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ List<Map<String, Object>> rps = queryDataService.getRps(startTime, endTime, stationCode);
|
|
|
|
+
|
|
|
|
+ List<Map<String, Object>> valueList = new ArrayList<>();
|
|
|
|
+ for (Map<String, Object> powerStationStatusData : rps) {
|
|
|
|
+ Map<String, Object> valueMap = new HashMap<>();
|
|
|
|
+ valueMap.put("time", powerStationStatusData.get("C_TIME"));
|
|
|
|
+ valueMap.put("stationCode", powerStationStatusData.get("C_STATION_CODE"));
|
|
|
|
+ valueMap.put("value", powerStationStatusData.get("C_REAL_VALUE"));
|
|
|
|
+ valueList.add(valueMap);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (valueList.size() > 0) {
|
|
|
|
+ createReqAndSend("rp", JSONUtil.toJsonStr(valueList));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("向数据中心发送短期数据出现错误:{}", e);
|
|
|
|
+ //TODO 微信警告
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 向数据中心发送短期数据
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param stationCode
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private void sendDq(String startTime, String endTime, String stationCode) {
|
|
|
|
+ try {
|
|
|
|
+ List<Map<String, Object>> dqs = queryDataService.getDqs(startTime, endTime, stationCode);
|
|
|
|
+ List<Map<String, Object>> valueList = new ArrayList<>();
|
|
|
|
+ for (Map<String, Object> forecastPowerUltraShortTermHis : dqs) {
|
|
|
|
+ Map<String, Object> valueMap = new HashMap<>();
|
|
|
|
+ valueMap.put("time", forecastPowerUltraShortTermHis.get("C_FORECAST_TIME"));
|
|
|
|
+ valueMap.put("value", forecastPowerUltraShortTermHis.get("C_ABLE_VALUE"));
|
|
|
|
+ valueMap.put("stationCode", forecastPowerUltraShortTermHis.get("C_STATION_CODE"));
|
|
|
|
+ valueList.add(valueMap);
|
|
|
|
+ }
|
|
|
|
+ if (valueList.size() > 0) {
|
|
|
|
+ createReqAndSend("dq", JSONUtil.toJsonStr(valueList));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("向数据中心发送短期数据出现错误:{}", e);
|
|
|
|
+ //TODO 微信警告
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 超短期上报数据回传
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param stationCode
|
|
|
|
+ */
|
|
|
|
+ private void sendCdq(String startTime, String endTime, String stationCode) {
|
|
|
|
+ try {
|
|
|
|
+ List<Map<String, Object>> cdqs = queryDataService.getCdqs(startTime, endTime, stationCode);
|
|
|
|
+ List<Map<String, Object>> valueList = new ArrayList<>();
|
|
|
|
+ for (Map<String, Object> forecastPowerShortTermHis : cdqs) {
|
|
|
|
+ Map<String, Object> valueMap = new HashMap<>();
|
|
|
|
+ valueMap.put("time", forecastPowerShortTermHis.get("C_FORECAST_TIME"));
|
|
|
|
+ valueMap.put("valueK", forecastPowerShortTermHis.get("C_ABLE_VALUE"));
|
|
|
|
+ valueMap.put("valueX", forecastPowerShortTermHis.get("C_ABLE_VALUE"));
|
|
|
|
+ valueMap.put("stationCode", forecastPowerShortTermHis.get("C_STATION_CODE"));
|
|
|
|
+ valueList.add(valueMap);
|
|
|
|
+ }
|
|
|
|
+ if (valueList.size() > 0) {
|
|
|
|
+ createReqAndSend("cdq", JSONUtil.toJsonStr(valueList));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("向数据中心发送短期数据出现错误:{}", e);
|
|
|
|
+ //TODO 微信警告
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 回传环境检测仪数据
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param stationCode
|
|
|
|
+ */
|
|
|
|
+ private void sendHj(String startTime, String endTime, String stationCode) {
|
|
|
|
+
|
|
|
|
+ List<Map<String, Object>> weatherStationInfos = queryDataService.getWeatherStations(stationCode);
|
|
|
|
+ List<Map<String, Object>> valueList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ //遍历设备列表
|
|
|
|
+ for (Map<String, Object> weatherStationInfo : weatherStationInfos) {
|
|
|
|
+ //判断是否为检测仪设备
|
|
|
|
+ if (Convert.toStr(weatherStationInfo.get("C_EQUIPMENT_TYPE")).equals("1")) {
|
|
|
|
+ String equipmentNo = Convert.toStr(weatherStationInfo.get("C_EQUIPMENT_NO"));
|
|
|
|
+ //根据时间和设备号查询环境检测仪数据
|
|
|
|
+ List<Map<String, Object>> cdqs = queryDataService.getWeatherds(startTime, endTime, equipmentNo);
|
|
|
|
+ for (Map<String, Object> weatherStationStatusData : cdqs) {
|
|
|
|
+ Map<String, Object> valueMap = new HashMap<>();
|
|
|
|
+ valueMap.put("time", weatherStationStatusData.get("C_TIME"));
|
|
|
|
+ valueMap.put("wsNo", equipmentNo);
|
|
|
|
+ valueMap.put("stationCode", stationCode);
|
|
|
|
+ valueMap.put("globalr", weatherStationStatusData.get("C_GLOBALR"));
|
|
|
|
+ valueMap.put("airt", weatherStationStatusData.get("C_AIRT"));
|
|
|
|
+ valueList.add(valueMap);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (valueList.size() > 0) {
|
|
|
|
+ createReqAndSend("qxz", JSONUtil.toJsonStr(valueList));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 回传测风塔数据
|
|
|
|
+ * 轮毂风速,风向
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param stationCode
|
|
|
|
+ */
|
|
|
|
+ private void sendCft(String startTime, String endTime, String stationCode) {
|
|
|
|
+
|
|
|
|
+ List<Map<String, Object>> windTowerInfos = queryDataService.getWindTower(stationCode);
|
|
|
|
+ List<Map<String, Object>> valueList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ //遍历设备列表
|
|
|
|
+ for (Map<String, Object> windTowerInfo : windTowerInfos) {
|
|
|
|
+ //判断是否为测风塔设备
|
|
|
|
+ if (Convert.toStr(windTowerInfo.get("C_EQUIPMENT_TYPE")).equals("3")) {
|
|
|
|
+ String equipmentNo = Convert.toStr(windTowerInfo.get("C_EQUIPMENT_NO"));
|
|
|
|
+ //根据时间和设备号查询风速数据
|
|
|
|
+ List<Map<String, Object>> windTowerStatusDatas = queryDataService.getCfts(startTime, endTime, equipmentNo);
|
|
|
|
+ for (Map<String, Object> windTowerStatusData : windTowerStatusDatas) {
|
|
|
|
+ Map<String, Object> valueMap = new HashMap<>();
|
|
|
|
+ valueMap.put("time", windTowerStatusData.get("C_TIME"));
|
|
|
|
+ valueMap.put("atNo", equipmentNo);
|
|
|
|
+ valueMap.put("stationCode", stationCode);
|
|
|
|
+ valueMap.put("speed", windTowerStatusData.get("C_WS_INST_HUB_HEIGHT"));
|
|
|
|
+ valueMap.put("direction", windTowerStatusData.get("C_WD_INST_HUB_HEIGHT"));
|
|
|
|
+ valueList.add(valueMap);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (valueList.size() > 0) {
|
|
|
|
+ createReqAndSend("cft", JSONUtil.toJsonStr(valueList));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 回传风机数据
|
|
|
|
+ * 轮毂风速,风向
|
|
|
|
+ *
|
|
|
|
+ * @param startTime
|
|
|
|
+ * @param endTime
|
|
|
|
+ * @param stationCode
|
|
|
|
+ */
|
|
|
|
+ private void sendFj(String startTime, String endTime, String stationCode) {
|
|
|
|
+
|
|
|
|
+ List<Map<String, Object>> windTurbineInfos = queryDataService.getWindTurbine(stationCode);
|
|
|
|
+ List<Map<String, Object>> valueList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ //遍历设备列表
|
|
|
|
+ for (Map<String, Object> windTurbineInfo : windTurbineInfos) {
|
|
|
|
+ //判断是否为测风塔设备
|
|
|
|
+ if (Convert.toStr(windTurbineInfo.get("C_EQUIPMENT_TYPE")).equals("4")) {
|
|
|
|
+ String equipmentNo = Convert.toStr(windTurbineInfo.get("C_EQUIPMENT_NO"));
|
|
|
|
+ //根据时间和设备号查询风速数据
|
|
|
|
+ List<Map<String, Object>> windTurbineDatas = queryDataService.getFjs(startTime, endTime, equipmentNo);
|
|
|
|
+ for (Map<String, Object> windTurbineData : windTurbineDatas) {
|
|
|
|
+ Map<String, Object> valueMap = new HashMap<>();
|
|
|
|
+ valueMap.put("time", windTurbineData.get("C_TIME"));
|
|
|
|
+ valueMap.put("atNo", equipmentNo);
|
|
|
|
+ valueMap.put("stationCode", stationCode);
|
|
|
|
+ valueMap.put("speed", windTurbineData.get("C_WS"));
|
|
|
|
+ valueMap.put("direction", windTurbineData.get("C_WD"));
|
|
|
|
+ valueList.add(valueMap);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (valueList.size() > 0) {
|
|
|
|
+ createReqAndSend("fj", JSONUtil.toJsonStr(valueList));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 创建报文并发送请求给数据中心
|
|
|
|
+ *
|
|
|
|
+ * @param dataType
|
|
|
|
+ * @param valueList
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private void createReqAndSend(String dataType, String valueList) {
|
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
+ resultMap.put("type", dataType);
|
|
|
|
+ resultMap.put("body", valueList);
|
|
|
|
+ String sign = MD5Util.encode(valueList + qinghaiKey, "MD5");
|
|
|
|
+ resultMap.put("sign", sign);
|
|
|
|
+
|
|
|
|
+ String reqStr = JSONUtil.toJsonStr(resultMap);
|
|
|
|
+ log.info("回传数据给数据中心,请求报文:{}", reqStr);
|
|
|
|
+ String resp = HttpUtil.post("http://localhost:9001/qinghaiComeBackApi/datas", reqStr);
|
|
|
|
+ if (resp.length() > 0) {
|
|
|
|
+ if (!"0".equals(JSONUtil.parseObj(resp).get("code"))) {
|
|
|
|
+ new Exception("回传数据给数据中心错误:" + resp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ log.info("回传数据给数据中心,获得响应报文:{}", resp);
|
|
|
|
+ }
|
|
|
|
+}
|