From 328eba66ddc6fdf2f324b9cd04cd6acec9f642de Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期六, 18 十一月 2023 13:48:49 +0800
Subject: [PATCH] 增加HTTP地磅协议实现

---
 src/main/java/com/fzzy/gateway/util/GatewayHttpUtil.java                      |   12 +-
 src/main/java/com/fzzy/gateway/hx2023/service/HxGatewayRemoteServiceImpl.java |    2 
 src/main/java/com/fzzy/protocol/ProtocolRunner.java                           |    2 
 src/main/java/com/fzzy/gateway/GatewayUtils.java                              |   21 ++++-
 src/main/java/com/fzzy/protocol/weightyh/GatewaySyncWeightImplHttp.java       |   82 ++++++++++++++++++++
 src/main/java/com/fzzy/protocol/weightyh/MessageConsumer.java                 |    5 +
 src/main/java/com/fzzy/gateway/GatewayRunner.java                             |    5 
 src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java                     |   49 +++++++++++-
 src/main/java/com/fzzy/gateway/api/GatewaySyncWeightService.java              |    3 
 9 files changed, 161 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/fzzy/gateway/GatewayRunner.java b/src/main/java/com/fzzy/gateway/GatewayRunner.java
index 92c537b..a74979c 100644
--- a/src/main/java/com/fzzy/gateway/GatewayRunner.java
+++ b/src/main/java/com/fzzy/gateway/GatewayRunner.java
@@ -20,10 +20,9 @@
 
     @Resource
     private ApiInitService apiInitService;
-    @Autowired
+    @Resource
     private MqttPublishService mqttPublishService;
-
-    @Autowired
+    @Resource
     private  GatewayTimerScheduled scheduled;
 
 
diff --git a/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java b/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
index 379583d..147089f 100644
--- a/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
+++ b/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
@@ -2,13 +2,16 @@
 
 import com.alibaba.fastjson.JSON;
 import com.fzzy.api.data.ApiParam;
+import com.fzzy.api.data.GatewayDeviceProtocol;
 import com.fzzy.api.entity.ApiConfs;
 import com.fzzy.api.service.*;
 import com.fzzy.api.utils.ContextUtil;
 import com.fzzy.api.utils.RedisUtil;
 import com.fzzy.gateway.api.GatewayRemoteManager;
+import com.fzzy.gateway.data.BaseReqData;
 import com.fzzy.gateway.data.WeatherWebDto;
 import com.fzzy.gateway.entity.GatewayConf;
+import com.fzzy.gateway.entity.GatewayDevice;
 import com.fzzy.gateway.service.GatewayConfService;
 import com.fzzy.gateway.util.GatewayHttpUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -19,6 +22,7 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 
@@ -39,7 +43,6 @@
 
     @Resource
     private GatewayConfService confService;
-
     @Resource
     private GatewayRemoteManager gatewayRemoteManager;
 
@@ -48,13 +51,25 @@
      * <p>
      * 鍥哄畾鏃堕棿锛氭瘡闂撮殧10鍒嗛挓鎵ц涓�娆�
      */
-    @Scheduled(cron = "0 0/10 * * * ? ")
+    @Scheduled(cron = "0 0/10 * * * ?")
     public void scheduled() {
 
         //缃戝叧鐨勫績璺虫墽琛�
         doHeartbeat();
 
     }
+
+    /**
+     * <p>
+     * 姣忛棿闅�3绉掓墽琛屼竴娆′簨浠�
+     */
+    @Scheduled(cron = "0/3 * * * * ?")
+    public void scheduled3() {
+
+        //鎵цHTTP鍦扮璇锋眰
+        exeHttpWeightReq();
+    }
+
 
     /**
      * 姣忛棿闅�30鍒嗛挓鎵ц涓�娆�
@@ -73,7 +88,7 @@
             url = url.replace("{appId}", DEFAULT_APP_ID).replace("{appsecret}", DEFAULT_APP_SECRET).replace("{cityid}", DEFAULT_CITYID);
 
 
-            log.debug("------姘旇薄URL---{}",url);
+            log.debug("------姘旇薄URL---{}", url);
             String result = GatewayHttpUtil.doGet(url, null);
 
             if (null == result) {
@@ -89,7 +104,7 @@
             WeatherWebDto.contextMap.put("default", dto);
 
 
-            log.info("===========================绯荤粺瀹氭椂鑾疯幏鍙栨皵璞′俊鎭�===={}==================",dto);
+            log.info("===========================绯荤粺瀹氭椂鑾疯幏鍙栨皵璞′俊鎭�===={}==================", dto);
 
         } catch (Exception e) {
 
@@ -114,4 +129,30 @@
         }
     }
 
+
+    /**
+     * 鎵ц鍦扮HTTP璇锋眰鍗忚
+     */
+    private void exeHttpWeightReq() {
+        //鑾峰彇璁惧
+        Collection<GatewayDevice> list = GatewayUtils.listDeviceWeight();
+
+        if (null == list || list.isEmpty()) return;
+
+        BaseReqData reqData;
+        for (GatewayDevice device : list) {
+
+            if (!GatewayDeviceProtocol.DEVICE_WEIGHT_HTTP.getCode().equals(device.getSyncProtocol())) {
+                continue;
+            }
+
+            reqData = new BaseReqData();
+            reqData.setDevice(device);
+            reqData.setDeviceName(device.getDeviceName());
+            reqData.setProductId(device.getProductId());
+            reqData.setDeviceId(device.getDeviceId());
+
+            gatewayRemoteManager.getSyncWeightService(device.getSyncProtocol()).syncWeightInfo(reqData);
+        }
+    }
 }
diff --git a/src/main/java/com/fzzy/gateway/GatewayUtils.java b/src/main/java/com/fzzy/gateway/GatewayUtils.java
index 7704a2f..0de33a5 100644
--- a/src/main/java/com/fzzy/gateway/GatewayUtils.java
+++ b/src/main/java/com/fzzy/gateway/GatewayUtils.java
@@ -1,12 +1,10 @@
 package com.fzzy.gateway;
 
+import com.fzzy.api.data.GatewayDeviceType;
 import com.fzzy.gateway.entity.GatewayDevice;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 甯搁噺
@@ -31,10 +29,20 @@
      */
     public static Map<String, GatewayDevice> cacheMapDeviceSn = new HashMap<>();
 
+    /**
+     * 璁惧缂撳瓨-鍙拡瀵�
+     */
+    public static Map<String, GatewayDevice> cacheMapDeviceWeight = new HashMap<>();
+
 
     public static void add2Cache(GatewayDevice device) {
         cacheMapDeviceId.put(device.getDeviceId(), device);
         cacheMapDeviceSn.put(device.getDeviceSn(), device);
+
+        //淇濆瓨鍦扮
+        if (GatewayDeviceType.TYPE_01.getCode().equals(device.getType())) {
+            cacheMapDeviceWeight.put(device.getDeviceId(), device);
+        }
     }
 
     public static GatewayDevice getCacheByDeviceId(String deviceId) {
@@ -79,4 +87,9 @@
         if (null == value || "N".equals(value)) return false;
         return true;
     }
+
+
+    public static Collection<GatewayDevice> listDeviceWeight(){
+        return cacheMapDeviceWeight.values();
+    }
 }
diff --git a/src/main/java/com/fzzy/gateway/api/GatewaySyncWeightService.java b/src/main/java/com/fzzy/gateway/api/GatewaySyncWeightService.java
index f1ad3ba..1925279 100644
--- a/src/main/java/com/fzzy/gateway/api/GatewaySyncWeightService.java
+++ b/src/main/java/com/fzzy/gateway/api/GatewaySyncWeightService.java
@@ -2,6 +2,7 @@
 
 
 import com.fzzy.gateway.data.BaseReqData;
+import com.fzzy.gateway.data.BaseResp;
 import com.fzzy.gateway.hx2023.data.*;
 
 /**
@@ -22,5 +23,5 @@
      *
      * @return
      */
-    public WeightInfo syncWeightInfo(BaseReqData reqData);
+    public BaseResp syncWeightInfo(BaseReqData reqData);
 }
diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewayRemoteServiceImpl.java b/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewayRemoteServiceImpl.java
index e486592..13c0715 100644
--- a/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewayRemoteServiceImpl.java
+++ b/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewayRemoteServiceImpl.java
@@ -120,7 +120,7 @@
             String url = gatewayConf.getApiUrl() + "reserver/api/iot/equipment/heartbeat";
 
             String jsonStr = GatewayHttpUtil.doGet(url, params);
-            log.info("---缃戝叧蹇冭烦鎺ュ彛-杩斿洖---{}", jsonStr);
+           // log.info("---缃戝叧蹇冭烦鎺ュ彛-杩斿洖---{}", jsonStr);
 
         } catch (Exception e) {
             log.error("------缃戝叧蹇冭烦鎺ュ彛--鎵ц澶辫触-----{}", e);
diff --git a/src/main/java/com/fzzy/gateway/util/GatewayHttpUtil.java b/src/main/java/com/fzzy/gateway/util/GatewayHttpUtil.java
index 8a3b796..3426d39 100644
--- a/src/main/java/com/fzzy/gateway/util/GatewayHttpUtil.java
+++ b/src/main/java/com/fzzy/gateway/util/GatewayHttpUtil.java
@@ -20,12 +20,13 @@
 
     /**
      * 鎵цGET璇锋眰
+     *
      * @param url
      * @param paramsMap
      * @return
      * @throws Exception
      */
-    public static String doGet(String url,Map<String, String> paramsMap) throws Exception{
+    public static String doGet(String url, Map<String, String> paramsMap) throws Exception {
         CloseableHttpClient client = HttpClients.createDefault();
         String responseText = "";
         CloseableHttpResponse response = null;
@@ -33,7 +34,7 @@
             String getUrl = url + "?";
             if (paramsMap != null) {
                 for (Map.Entry<String, String> param : paramsMap.entrySet()) {
-                  //  getUrl += param.getKey() + "=" + URLEncoder.encode(param.getValue(), "UTF-8") + "&";
+                    //  getUrl += param.getKey() + "=" + URLEncoder.encode(param.getValue(), "UTF-8") + "&";
                     getUrl += param.getKey() + "=" + URLEncoder.encode(param.getValue(), "UTF-8") + "&";
                 }
             }
@@ -47,18 +48,17 @@
 
             HttpEntity entity = response.getEntity();
             if (entity != null) {
-                responseText = EntityUtils.toString(entity,"UTF-8");
+                responseText = EntityUtils.toString(entity, "UTF-8");
             }
         } catch (Exception e) {
-            log.error("http request failed", e);
+            log.error("http request failed--{}", e.getMessage());
         } finally {
             try {
-                response.close();
+                if (null != response) response.close();
             } catch (Exception e) {
                 log.error("", e);
             }
         }
-
         return responseText;
     }
 
diff --git a/src/main/java/com/fzzy/protocol/ProtocolRunner.java b/src/main/java/com/fzzy/protocol/ProtocolRunner.java
index c64169f..7ec0b23 100644
--- a/src/main/java/com/fzzy/protocol/ProtocolRunner.java
+++ b/src/main/java/com/fzzy/protocol/ProtocolRunner.java
@@ -17,6 +17,8 @@
     public void run(String... args) throws Exception {
 
         YhScaleServerEngine.start();
+
+
     }
 
 }
diff --git a/src/main/java/com/fzzy/protocol/weightyh/GatewaySyncWeightImplHttp.java b/src/main/java/com/fzzy/protocol/weightyh/GatewaySyncWeightImplHttp.java
new file mode 100644
index 0000000..de1317f
--- /dev/null
+++ b/src/main/java/com/fzzy/protocol/weightyh/GatewaySyncWeightImplHttp.java
@@ -0,0 +1,82 @@
+package com.fzzy.protocol.weightyh;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.fzzy.api.data.GatewayDeviceProtocol;
+import com.fzzy.gateway.api.GatewayRemoteManager;
+import com.fzzy.gateway.api.GatewaySyncWeightService;
+import com.fzzy.gateway.data.BaseReqData;
+import com.fzzy.gateway.data.BaseResp;
+import com.fzzy.gateway.entity.GatewayDevice;
+import com.fzzy.gateway.util.GatewayHttpUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * HTTP鏂瑰紡鑾峰彇鍦扮淇℃伅
+ * <p>
+ * 娉細褰撳墠鍗忚鍖呭惈JSON鍜孞SONP涓ょ鏀寔锛岃嚜鍔ㄨ瘑鍒�
+ */
+@Slf4j
+@Component
+public class GatewaySyncWeightImplHttp implements GatewaySyncWeightService {
+
+
+    @Resource
+    private GatewayRemoteManager gatewayRemoteManager;
+
+    @Override
+    public String getWeightProtocol() {
+        return GatewayDeviceProtocol.DEVICE_WEIGHT_HTTP.getCode();
+    }
+
+    @Override
+    public BaseResp syncWeightInfo(BaseReqData reqData) {
+        GatewayDevice device = reqData.getDevice();
+
+        if (null == device) return new BaseResp(500, "娌℃湁鑾峰彇鍒拌澶囦俊鎭�");
+
+        if (StringUtils.isEmpty(device.getHttpUrl())) new BaseResp(500, "娌℃湁閰嶇疆HTTP璇锋眰鍦板潃");
+        try {
+
+            Map<String, String> paramsMap = new HashMap<>();
+            paramsMap.put("time_", System.currentTimeMillis() + "");
+
+            String responseText = GatewayHttpUtil.doGet(device.getHttpUrl(), paramsMap);
+
+            log.debug("--HTTP-WEIGHT-璇锋眰杩斿洖--{}", responseText);
+
+            String respJson;
+            JSONObject resp;
+            //璇存槑鏄疛SONP鏍煎紡-jsonpCallback({"content":""})
+            if (responseText.indexOf("jsonpCallback") >= 0) {
+                respJson = responseText.substring(responseText.indexOf("(") + 1, responseText.length() - 1);
+                resp = JSONObject.parseObject(respJson);
+                resp.put("code", 200);
+            } else {
+                respJson = responseText;
+                resp = JSONObject.parseObject(respJson);
+            }
+
+            if (200 == (Integer) resp.get("code")) {
+                if (null == resp.get("content") || "".equals(resp.get("content"))) {
+                    reqData.setWeight(0.0);
+                } else {
+                    reqData.setWeight((Double) resp.get("content"));
+                }
+            }
+
+            //鎵ц鎺ㄩ��
+            if (reqData.getWeight() > 0) {
+                gatewayRemoteManager.getDeviceReportService(device.getPushProtocol()).reportWeightData(reqData);
+            }
+        } catch (Exception e) {
+            log.error("--------------鍦扮-HTTP鍗忚鎵ц寮傚父----{}", e.getMessage());
+        }
+        return new BaseResp(500, "鍚庡彴鎵ц澶辫触");
+    }
+}
diff --git a/src/main/java/com/fzzy/protocol/weightyh/MessageConsumer.java b/src/main/java/com/fzzy/protocol/weightyh/MessageConsumer.java
index b41d6c9..a0253fc 100644
--- a/src/main/java/com/fzzy/protocol/weightyh/MessageConsumer.java
+++ b/src/main/java/com/fzzy/protocol/weightyh/MessageConsumer.java
@@ -82,7 +82,10 @@
         reqData.setProductId(device.getProductId());
         reqData.setDeviceName(device.getDeviceName());
         reqData.setWeight(weigh);
-        gatewayRemoteManager.getDeviceReportService(device.getPushProtocol()).reportWeightData(reqData);
+
+        if (weigh > 0) {
+            gatewayRemoteManager.getDeviceReportService(device.getPushProtocol()).reportWeightData(reqData);
+        }
     }
 
     /**

--
Gitblit v1.9.3