From 768308ab47041062d9e97745099784acf297286b Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期三, 08 十一月 2023 17:45:37 +0800
Subject: [PATCH] 提交粮情测试协议和流程

---
 src/main/java/com/fzzy/gateway/hx2023/data/GrainTemp.java                 |   45 +++
 src/main/java/com/fzzy/gateway/hx2023/service/HxGatewaySyncGrainImpl.java |  110 ++++++++
 src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java                 |   29 ++
 src/main/java/com/fzzy/gateway/hx2023/data/ClientHeaders.java             |   12 +
 src/main/java/com/fzzy/gateway/hx2023/data/SyncReqData.java               |    5 
 src/main/java/com/fzzy/mqtt/MqttConsumerCallBack.java                     |   29 +
 src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java                       |    6 
 src/main/java/com/fzzy/gateway/hx2023/data/GrainOutPut.java               |   42 +++
 src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java          |    3 
 src/main/java/com/fzzy/gateway/api/GatewaySyncGranService.java            |    8 
 src/main/java/com/fzzy/gateway/hx2023/data/CloudSendData.java             |   28 ++
 src/main/java/com/fzzy/gateway/hx2023/ScConstant.java                     |    7 
 src/main/java/com/fzzy/gateway/hx2023/service/OnReceiveMqttService.java   |   82 ++++++
 src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml                |   20 +
 src/main/java/com/fzzy/gateway/data/BaseResp.java                         |   14 +
 src/main/java/com/fzzy/gateway/entity/GatewayDevice.java                  |    9 
 src/main/java/com/fzzy/gateway/hx2023/data/GrainWeather.java              |   31 ++
 src/main/java/com/fzzy/gateway/hx2023/data/CloudHeaders.java              |   11 
 src/main/java/com/fzzy/gateway/data/WeatherWebDto.java                    |   51 ++++
 src/main/java/com/fzzy/gateway/hx2023/data/InputData.java                 |   10 
 src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java                |    2 
 src/main/java/com/fzzy/gateway/GatewayRunner.java                         |    9 
 src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java                 |   50 ++++
 src/main/java/com/fzzy/api/utils/NumberUtil.java                          |   49 ++++
 24 files changed, 649 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
index 3b8b65c..05f205c 100644
--- a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
+++ b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java
@@ -18,7 +18,7 @@
     DEVICE_IDCARD_HTTP("DEVICE_IDCARD_HTTP", "韬唤璇�-HTTP鍗忚"),
     DEVICE_LED_HTTP("DEVICE_LED_HTTP", "LED-HTTP鍗忚"),
     DEVICE_LPR_SDK_HK("DEVICE_LPR_SDK_HK", "杞︾墝璇嗗埆-SDK娴峰悍"),
-    DEVICE_TEST("DEVICE_TEST", "绌哄崗璁�");
+    DEVICE_TEST("DEVICE_TEST", "娴嬭瘯鍗忚");
 
 
     private String code;
diff --git a/src/main/java/com/fzzy/api/utils/NumberUtil.java b/src/main/java/com/fzzy/api/utils/NumberUtil.java
new file mode 100644
index 0000000..4582084
--- /dev/null
+++ b/src/main/java/com/fzzy/api/utils/NumberUtil.java
@@ -0,0 +1,49 @@
+package com.fzzy.api.utils;
+ 
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+/**
+ * 鏁板瓧鏍煎紡鍖栧伐鍏风被
+ */
+public class NumberUtil {
+
+	/**
+	 * 瀵筪ouble绫诲瀷鐨勬暟鍊间繚鐣欐寚瀹氫綅鏁扮殑灏忔暟銆�<br>
+	 * 璇ユ柟娉曡垗鍏ユā寮忥細鍚戔�滄渶鎺ヨ繎鐨勨�濇暟瀛楄垗鍏ワ紝濡傛灉涓庝袱涓浉閭绘暟瀛楃殑璺濈鐩哥瓑锛屽垯涓哄悜涓婅垗鍏ョ殑鑸嶅叆妯″紡銆�<br>
+	 * <b>娉ㄦ剰锛�</b>濡傛灉绮惧害瑕佹眰姣旇緝绮剧‘璇蜂娇鐢� keepPrecision(String number, int precision)鏂规硶
+	 * @param number  瑕佷繚鐣欏皬鏁扮殑鏁板瓧
+	 * @param precision 灏忔暟浣嶆暟
+	 * @return double 濡傛灉鏁板�艰緝澶э紝鍒欎娇鐢ㄧ瀛﹁鏁版硶琛ㄧず
+	 */
+	public static double keepPrecision(Double number, int precision) {
+		if(null == number || 0.0 == number ) return 0.0;
+		BigDecimal bg = new BigDecimal(number);
+		return bg.setScale(precision, BigDecimal.ROUND_HALF_UP).doubleValue();
+	}
+ 
+	/**
+	 * 瀵筬loat绫诲瀷鐨勬暟鍊间繚鐣欐寚瀹氫綅鏁扮殑灏忔暟銆�<br>
+	 * 璇ユ柟娉曡垗鍏ユā寮忥細鍚戔�滄渶鎺ヨ繎鐨勨�濇暟瀛楄垗鍏ワ紝濡傛灉涓庝袱涓浉閭绘暟瀛楃殑璺濈鐩哥瓑锛屽垯涓哄悜涓婅垗鍏ョ殑鑸嶅叆妯″紡銆�<br>
+	 * <b>娉ㄦ剰锛�</b>濡傛灉绮惧害瑕佹眰姣旇緝绮剧‘璇蜂娇鐢� keepPrecision(String number, int precision)鏂规硶
+	 * @param number  瑕佷繚鐣欏皬鏁扮殑鏁板瓧
+	 * @param precision 灏忔暟浣嶆暟
+	 * @return float 濡傛灉鏁板�艰緝澶э紝鍒欎娇鐢ㄧ瀛﹁鏁版硶琛ㄧず
+	 */
+	public static float keepPrecision(Float number, int precision) {
+		if(null == number) return 0f;
+		BigDecimal bg = new BigDecimal(number);
+		return bg.setScale(precision, BigDecimal.ROUND_HALF_UP).floatValue();
+	}
+	/**
+	 * double杞瓧绗︿覆锛岄伩鍏嶅嚭鐜扮瀛﹁鏁版硶
+	 * @param d
+	 * @return
+	 */
+	public static String doubleToStr(Double d) {
+		if(null == d) return "";
+		DecimalFormat df = new DecimalFormat("0.0");
+		return df.format(d);
+	}
+ 
+}
diff --git a/src/main/java/com/fzzy/gateway/GatewayRunner.java b/src/main/java/com/fzzy/gateway/GatewayRunner.java
index 9dbdcd8..9b85744 100644
--- a/src/main/java/com/fzzy/gateway/GatewayRunner.java
+++ b/src/main/java/com/fzzy/gateway/GatewayRunner.java
@@ -22,11 +22,20 @@
     private ApiInitService apiInitService;
     @Autowired
     private MqttPublishService mqttPublishService;
+
+    @Autowired
+    private  GatewayTimerScheduled scheduled;
+
     @Override
     public void run(String... args) throws Exception {
         mqttPublishService.init();
         //鎵ц鍒濆鍖栨柟妗�
         apiInitService.init();
+
+
+        //鑾峰彇姘旇薄淇℃伅
+        scheduled.doWeatherExe();
+
     }
 
 }
diff --git a/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java b/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
index b26ff83..4bb2a3e 100644
--- a/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
+++ b/src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
@@ -1,14 +1,18 @@
 package com.fzzy.gateway;
 
+import com.alibaba.fastjson.JSON;
 import com.fzzy.api.data.ApiParam;
 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.WeatherWebDto;
 import com.fzzy.gateway.entity.GatewayConf;
 import com.fzzy.gateway.service.GatewayConfService;
+import com.fzzy.gateway.util.GatewayHttpUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -24,6 +28,12 @@
 @Slf4j
 @Component(GatewayTimerScheduled.BEAN_ID)
 public class GatewayTimerScheduled {
+
+    public static String DEFAULT_URL = "https://v0.yiketianqi.com/api?unescape=1&version=v61&appid={appId}&appsecret={appsecret}&cityid={cityid}";
+    public static String DEFAULT_APP_ID = "49421971";
+    public static String DEFAULT_APP_SECRET = "JmJE48Fv";
+    public static String DEFAULT_CITYID = "101270101";//鎴愰兘
+
 
     public static final String BEAN_ID = "gateway.timerScheduled";
 
@@ -46,6 +56,44 @@
 
     }
 
+    /**
+     * 姣忛棿闅�30鍒嗛挓鎵ц涓�娆�
+     */
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void scheduled30() {
+
+        //瀹氭椂鑾峰彇姘旇薄淇℃伅
+        doWeatherExe();
+    }
+
+    public void doWeatherExe() {
+
+        try {
+            String url = DEFAULT_URL;
+            url = url.replace("{appId}", DEFAULT_APP_ID).replace("{appsecret}", DEFAULT_APP_SECRET).replace("{cityid}", DEFAULT_CITYID);
+
+            String result = GatewayHttpUtil.doGet(url, null);
+
+            if (null == result) {
+                log.error("褰撳墠澶栫綉鑾峰彇姘旇薄淇℃伅澶辫触鈥︹��");
+                return;
+            }
+            WeatherWebDto dto = JSON.parseObject(result, WeatherWebDto.class);
+            if (StringUtils.isNotEmpty(dto.getErrcode())) {
+                log.error("褰撳墠澶栫綉鑾峰彇姘旇薄淇℃伅寮傚父:{}", dto.getErrmsg());
+                return;
+            }
+
+            WeatherWebDto.contextMap.put("default", dto);
+
+
+            log.info("===========================绯荤粺瀹氭椂鑾疯幏鍙栨皵璞′俊鎭�===={}==================",dto);
+
+        } catch (Exception e) {
+
+        }
+    }
+
 
     /**
      * 鎵ц缃戝叧蹇冭烦
@@ -63,5 +111,5 @@
             gatewayRemoteManager.getRemoteService(conf.getPushProtocol()).heartbeat(conf);
         }
     }
-    
+
 }
diff --git a/src/main/java/com/fzzy/gateway/api/GatewaySyncGranService.java b/src/main/java/com/fzzy/gateway/api/GatewaySyncGranService.java
index 343555f..d1ba9d3 100644
--- a/src/main/java/com/fzzy/gateway/api/GatewaySyncGranService.java
+++ b/src/main/java/com/fzzy/gateway/api/GatewaySyncGranService.java
@@ -1,6 +1,7 @@
 package com.fzzy.gateway.api;
 
 
+import com.fzzy.gateway.data.BaseResp;
 import com.fzzy.gateway.hx2023.data.KafaGrainData;
 import com.fzzy.gateway.hx2023.data.*;
 
@@ -25,4 +26,11 @@
     public KafaGrainData syncGrain(SyncReqData reqData);
 
 
+    /**
+     * 鍚屾绮儏淇℃伅杩斿洖JSON鎶ユ枃
+     *
+     * @param reqData
+     * @return
+     */
+    public BaseResp syncGrain2(SyncReqData reqData);
 }
diff --git a/src/main/java/com/fzzy/gateway/data/BaseResp.java b/src/main/java/com/fzzy/gateway/data/BaseResp.java
new file mode 100644
index 0000000..b6e7ec2
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/data/BaseResp.java
@@ -0,0 +1,14 @@
+package com.fzzy.gateway.data;
+
+import lombok.Data;
+
+@Data
+public class BaseResp {
+
+    private int code = 200;
+
+    private String msg = "鎴愬姛";
+
+
+    private String data;
+}
diff --git a/src/main/java/com/fzzy/gateway/data/WeatherWebDto.java b/src/main/java/com/fzzy/gateway/data/WeatherWebDto.java
new file mode 100644
index 0000000..ead022a
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/data/WeatherWebDto.java
@@ -0,0 +1,51 @@
+package com.fzzy.gateway.data;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 
+ * @author: andy.jia
+ * @description: 澶栫綉姘旇薄瑙f瀽浣跨敤DTO
+ * @version:
+ * @data:2019骞�12鏈�7鏃�
+ *
+ */
+@Data
+public class WeatherWebDto implements Serializable {
+
+
+	public static Map<String,WeatherWebDto> contextMap = new HashMap<>();
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	
+	private String errcode;//閿欒缂栫爜
+	private String errmsg;//閿欒淇℃伅
+	
+	private String cityid;// 褰撳墠鍩庡競ID
+	private String city;//鍩庡競鍚嶇О
+	private String update_time;// 姘旇薄鍙版洿鏂版椂闂�
+	private String date;// 鏃ユ湡
+	private String week;// 鏄熸湡
+	private String wea;// 澶╂皵鎯呭喌
+	private String wea_img;// 澶╂皵瀵瑰簲鍥炬爣(xue, lei, shachen, wu, bingbao, yun, yu,yin, qing)
+	private String tem;// 褰撳墠娓╁害
+	private String air;// 绌烘皵璐ㄩ噺
+	private String air_pm25;// PM2.5
+	private String air_level;// 绌烘皵璐ㄩ噺绛夌骇
+	private String air_tips;// 绌烘皵璐ㄩ噺鎻忚堪
+	private String humidity;// 婀垮害
+	private String visibility;// 鑳借搴�
+	private String pressure;// 姘斿帇hPa
+	private String win;// 椋庡悜
+	private String win_speed;// 椋庨�熺瓑绾�
+	private String win_meter;// 椋庨�� 濡�: 12km/h
+	private String alarm;// 棰勮淇℃伅
+}
diff --git a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
index c5fc2e3..50a19c0 100644
--- a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
+++ b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
@@ -105,4 +105,13 @@
     @PropertyDef(label = "澶囨敞", description = "澶囨敞淇℃伅")
     private String remark;
 
+
+    @Column(name = "CABLE_RULE_", length = 20)
+    @PropertyDef(label = "甯冪嚎瑙勫垯", description = "骞虫柟浠撹〃绀哄眰琛屽垪锛岀瓛浠撹〃绀烘瘡鍦堢殑鍒楁暟")
+    private String cableRule;
+
+    @Column(name = "CABLE_CIR_", length = 20)
+    @PropertyDef(label = "绛掍粨灞傝鍒�", description = "閽堝绛掍粨")
+    private String cableCir;
+
 }
diff --git a/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java b/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java
index 2786342..badcdf6 100644
--- a/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java
+++ b/src/main/java/com/fzzy/gateway/hx2023/ScConstant.java
@@ -12,6 +12,13 @@
 
     public static String MESSAGE_TYPE_REPORT_PROPERTY = "REPORT_PROPERTY";
 
+    public static String MESSAGE_TYPE_INVOKE_FUNCTION = "INVOKE_FUNCTION";
+
+    /**
+     * 绮儏閲囨寚浠�
+     */
+    public static String FUNCTION_getTAndRHInfo = "getTAndRHInfo";
+
 
     public static String getMessageId() {
         return System.currentTimeMillis() + RandomUtils.nextInt(1000) + "";
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/ClientHeaders.java b/src/main/java/com/fzzy/gateway/hx2023/data/ClientHeaders.java
new file mode 100644
index 0000000..ffcf80f
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/ClientHeaders.java
@@ -0,0 +1,12 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+@Data
+public class ClientHeaders {
+
+    private String productId;
+    private String deviceName;
+    private String orgId;
+    private String msgId;
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/CloudHeaders.java b/src/main/java/com/fzzy/gateway/hx2023/data/CloudHeaders.java
new file mode 100644
index 0000000..bac0c20
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/CloudHeaders.java
@@ -0,0 +1,11 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+@Data
+public class CloudHeaders {
+
+    private String productId;
+    private String deviceName;
+    private String orgId;
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/CloudSendData.java b/src/main/java/com/fzzy/gateway/hx2023/data/CloudSendData.java
new file mode 100644
index 0000000..efca0cb
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/CloudSendData.java
@@ -0,0 +1,28 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 浜戠鍙戝姩鐨勬姤鏂�
+ */
+@Data
+public class CloudSendData {
+
+    private CloudHeaders headers;
+
+    private String functionId;
+
+    private String messageType;
+
+    private String messageId;
+
+    private String deviceId;
+
+    private String timestamp;
+
+    private boolean success;
+
+    private List<InputData> inputs;
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java b/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java
new file mode 100644
index 0000000..90a1c85
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/GrainData.java
@@ -0,0 +1,29 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+
+/**
+ * 绮儏淇℃伅
+ */
+@Data
+public class GrainData {
+
+    //璁惧缂栫爜
+    private String deviceId;
+    private ClientHeaders headers;
+
+    //娑堟伅 ID
+    private String messageId;
+
+    private String messageType = "INVOKE_FUNCTION_REPLY";
+
+    private boolean success = true;
+
+    private String timestamp;
+
+    private GrainOutPut outPut;
+
+    private GrainWeather weatherStation;
+
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/GrainOutPut.java b/src/main/java/com/fzzy/gateway/hx2023/data/GrainOutPut.java
new file mode 100644
index 0000000..565fef1
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/GrainOutPut.java
@@ -0,0 +1,42 @@
+package com.fzzy.gateway.hx2023.data;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * 绮儏淇℃伅
+ */
+@Data
+public class GrainOutPut {
+
+    //妯″潡璇嗗埆鐮�-甯搁噺锛屽浐瀹氫紶 apiTemperature
+    private String apISource = "apiTemperature";
+
+    //鏁翠粨骞冲潎娓╁害
+    private String avgTemperature;
+
+    //鏁翠粨鏈�楂樻俯搴�
+    private String maxTemperature;
+
+    //鏁翠粨鏈�浣庢俯搴�
+    private String minTemperature;
+
+    private String minX = "0";
+
+    private String minY = "0";
+
+    private String minZ = "0";
+
+    private String maxX = "0";
+
+    private String maxY = "0";
+
+    private String maxZ = "0";
+
+
+    private List<GrainTemp> temperature;
+
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/GrainTemp.java b/src/main/java/com/fzzy/gateway/hx2023/data/GrainTemp.java
new file mode 100644
index 0000000..61def1a
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/GrainTemp.java
@@ -0,0 +1,45 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+/**
+ * 绮儏淇℃伅璇︾粏
+ */
+@Data
+public class GrainTemp {
+
+    //鏍瑰彿
+    private String cableNum;
+
+    //灞傚彿
+    private String layerNumber;
+
+    //娓╁害鍊�
+    private String temperature;
+
+    //绱㈠紩锛屼粠0寮�濮�
+    private String position;
+
+//    //璇ユ俯搴︾偣鎵�鍦ㄧ殑鍒�,骞虫柟浠撱�佸湴涓嬩粨蹇呭~
+//    private String linex;
+//
+//    //璇ユ俯搴︾偣鎵�鍦ㄧ殑琛�,骞虫柟浠撱�佸湴涓嬩粨蹇呭~
+//    private String rowy;
+
+    //娴呭渾浠撱�佺瓛浠撳繀濉紝绀轰緥锛歿\"totalCircle\":3,\"smallCircle\":\"4,10,16\"}锛宼otalCircle锛氭�诲湀鏁帮紝smallCircle锛氭瘡鍦堟湁鍑犳牴缂�
+    private String total_circle;
+
+
+    //鍏蜂綋鍦堟暟--娴呭渾浠撱�佺瓛浠撳繀濉�
+    private String circle;
+
+    public GrainTemp() {
+    }
+
+    public GrainTemp(String cableNum, String layerNumber, String temperature, String position) {
+        this.cableNum = cableNum;
+        this.layerNumber = layerNumber;
+        this.temperature = temperature;
+        this.position = position;
+    }
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/GrainWeather.java b/src/main/java/com/fzzy/gateway/hx2023/data/GrainWeather.java
new file mode 100644
index 0000000..a9c7e68
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/GrainWeather.java
@@ -0,0 +1,31 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+@Data
+public class GrainWeather {
+
+    private String airPressure;
+
+    private String humidity;
+
+    private String id;
+
+    private String messageId;
+
+    private String pm;
+
+    private String radiation;
+
+    private String rainfallAmount;
+
+    private String temperature;
+
+    private String windAngle;
+
+    private String windDirection;
+
+    private String windPower;
+
+    private String windSpeed;
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/InputData.java b/src/main/java/com/fzzy/gateway/hx2023/data/InputData.java
new file mode 100644
index 0000000..d6d89ff
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/InputData.java
@@ -0,0 +1,10 @@
+package com.fzzy.gateway.hx2023.data;
+
+import lombok.Data;
+
+@Data
+public class InputData {
+
+    private String name;
+    private String value;
+}
diff --git a/src/main/java/com/fzzy/gateway/hx2023/data/SyncReqData.java b/src/main/java/com/fzzy/gateway/hx2023/data/SyncReqData.java
index 31a2512..a260ba3 100644
--- a/src/main/java/com/fzzy/gateway/hx2023/data/SyncReqData.java
+++ b/src/main/java/com/fzzy/gateway/hx2023/data/SyncReqData.java
@@ -1,5 +1,6 @@
 package com.fzzy.gateway.hx2023.data;
 
+import com.fzzy.gateway.entity.GatewayDevice;
 import lombok.Data;
 
 @Data
@@ -16,4 +17,8 @@
     private String functionId;
 
     private String jsonData;
+
+    private GatewayDevice device;
+
+    private boolean autoReplay;
 }
diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewaySyncGrainImpl.java b/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewaySyncGrainImpl.java
index 424ff4b..729570c 100644
--- a/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewaySyncGrainImpl.java
+++ b/src/main/java/com/fzzy/gateway/hx2023/service/HxGatewaySyncGrainImpl.java
@@ -1,11 +1,21 @@
 package com.fzzy.gateway.hx2023.service;
 
+import com.alibaba.fastjson2.JSONObject;
+import com.fzzy.api.data.GatewayDeviceProtocol;
+import com.fzzy.api.utils.NumberUtil;
 import com.fzzy.gateway.api.GatewaySyncGranService;
-import com.fzzy.gateway.hx2023.data.KafaGrainData;
-import com.fzzy.gateway.hx2023.data.SyncReqData;
+import com.fzzy.gateway.data.BaseResp;
+import com.fzzy.gateway.data.WeatherWebDto;
+import com.fzzy.gateway.entity.GatewayDevice;
+import com.fzzy.gateway.hx2023.ScConstant;
+import com.fzzy.gateway.hx2023.data.*;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 缃戝叧涓庣伯鎯呭垎鏈洪�氳鍜岃В鏋�
@@ -18,11 +28,105 @@
 
     @Override
     public String getGrainProtocol() {
-        return null;
+        return GatewayDeviceProtocol.DEVICE_TEST.getCode();
     }
 
     @Override
     public KafaGrainData syncGrain(SyncReqData reqData) {
+
+
         return null;
     }
+
+
+    @Override
+    public BaseResp syncGrain2(SyncReqData reqData) {
+
+        GatewayDevice device = reqData.getDevice();
+
+
+        if (StringUtils.isEmpty(device.getCableCir())) {
+            return getGrainTest1(reqData, device);
+        }
+
+
+        BaseResp resp = new BaseResp();
+        resp.setCode(500);
+        resp.setMsg("娌℃湁鍖归厤鍒拌鍒�");
+        return resp;
+    }
+
+    private BaseResp getGrainTest1(SyncReqData reqData, GatewayDevice device) {
+
+        String[] cableRule = device.getCableRule().split("-");
+
+        int cableZ = Integer.valueOf(cableRule[0]);
+        int cableY = Integer.valueOf(cableRule[1]);
+        int cableX = Integer.valueOf(cableRule[2]);
+        int sumNum = cableZ * cableY * cableX;
+
+
+        WeatherWebDto weather = WeatherWebDto.contextMap.get("default");
+        double tMIn = 20, tMax = 25;
+        if (null != weather) {
+            double tOut = Double.valueOf(weather.getTem());
+            tMIn = tOut - 2;
+            tMax = tOut + 3;
+        }
+
+
+        //鏁版嵁灏佽
+        GrainData grain = new GrainData();
+        grain.setMessageId(ScConstant.getMessageId());
+        grain.setDeviceId(device.getDeviceId());
+        grain.setTimestamp(System.currentTimeMillis() + "");
+
+        ClientHeaders headers = new ClientHeaders();
+        headers.setDeviceName(device.getDeviceName());
+        headers.setProductId(device.getProductId());
+        headers.setOrgId(device.getOrgId());
+        headers.setMsgId(ScConstant.getMessageId());
+        grain.setHeaders(headers);
+
+        GrainOutPut outPut = new GrainOutPut();
+
+        outPut.setAvgTemperature(NumberUtil.keepPrecision((tMax + tMIn) / 2, 1) + "");
+        outPut.setMinTemperature(tMax + "");
+        outPut.setMaxTemperature(tMIn + "");
+
+
+        List<GrainTemp> temperature = new ArrayList<>();
+        //鏍瑰彿
+        int cableNum = 1, position = 0;
+
+        double curTemp = tMIn;
+        double randomNumber = tMIn;
+        int x = 0, y = 0, z = 0;
+        for (int i = 0; i < sumNum; i++) {
+            randomNumber = Math.random() * (tMax - tMIn + 1) + tMIn;
+            curTemp = NumberUtil.keepPrecision(randomNumber, 1);
+            position = i;
+            z = i % cableZ + 1;
+            x = i / (cableZ * cableY);
+            y = x * (cableZ * cableY);
+            y = (i - y) / cableZ;
+
+            //鏍瑰彿
+            cableNum = (i / cableZ) + 1;
+
+
+            temperature.add(new GrainTemp(cableNum + "", z + "", curTemp + "", position + ""));
+        }
+
+        outPut.setTemperature(temperature);
+
+        grain.setOutPut(outPut);
+
+
+        BaseResp resp = new BaseResp();
+        resp.setData(JSONObject.toJSONString(grain));
+
+        return resp;
+    }
 }
+
diff --git a/src/main/java/com/fzzy/gateway/hx2023/service/OnReceiveMqttService.java b/src/main/java/com/fzzy/gateway/hx2023/service/OnReceiveMqttService.java
new file mode 100644
index 0000000..742bbf0
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/hx2023/service/OnReceiveMqttService.java
@@ -0,0 +1,82 @@
+package com.fzzy.gateway.hx2023.service;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.fzzy.gateway.GatewayUtils;
+import com.fzzy.gateway.api.GatewayRemoteManager;
+import com.fzzy.gateway.hx2023.data.CloudSendData;
+import com.fzzy.gateway.entity.GatewayDevice;
+import com.fzzy.gateway.hx2023.ScConstant;
+import com.fzzy.gateway.data.BaseResp;
+import com.fzzy.gateway.hx2023.data.SyncReqData;
+import com.fzzy.mqtt.MqttProviderConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 鏍规嵁鎺ュ彈鍒扮殑MQTT淇℃伅鎵ц
+ */
+@Slf4j
+@Component
+public class OnReceiveMqttService {
+
+    @Resource
+    private GatewayRemoteManager gatewayRemoteManager;
+    @Resource
+    private MqttProviderConfig providerClient;
+
+
+    /**
+     * 褰撳墠鎺ユ敹鍒颁簯绔彂閫佷俊鎭�
+     *
+     * @param message
+     */
+    public void onReceiveMessage(String message) {
+
+        try {
+            CloudSendData cloudSendData = JSONObject.parseObject(message, CloudSendData.class);
+
+
+            String functionId = cloudSendData.getFunctionId();
+
+            //绮儏閲囬泦
+            if (ScConstant.FUNCTION_getTAndRHInfo.equals(functionId)) {
+                getTAndRHInfo(cloudSendData);
+            }
+
+        } catch (Exception e) {
+
+        }
+
+    }
+
+    private void getTAndRHInfo(CloudSendData cloudSendData) {
+
+        String deviceId = cloudSendData.getDeviceId();
+
+        GatewayDevice device = GatewayUtils.getCacheByDeviceId(deviceId);
+
+        SyncReqData syncReqData = new SyncReqData();
+        syncReqData.setDeviceId(deviceId);
+        syncReqData.setMessageId(cloudSendData.getMessageId());
+        syncReqData.setMessageType(cloudSendData.getMessageType());
+        syncReqData.setFunctionId(cloudSendData.getFunctionId());
+        syncReqData.setAutoReplay(true);
+        syncReqData.setDevice(device);
+
+        BaseResp resp = gatewayRemoteManager.getSyncGrainService(device.getSyncProtocol()).syncGrain2(syncReqData);
+
+        //鑷姩鎺ㄩ��
+        if (200 == resp.getCode() && syncReqData.isAutoReplay()) {
+            String topic = "/${productId}/${deviceId}/properties/report";
+
+            topic = topic.replace("${productId}", device.getProductId()).replace("${deviceId}", device.getDeviceId());
+
+            providerClient.publish(topic, resp.getData());
+
+            log.info("=======绮儏鎺ㄩ��==========={}", resp.getData());
+        }
+    }
+}
diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
index 2fc86ac..1de5c2e 100644
--- a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
+++ b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
@@ -113,6 +113,9 @@
 
 
 
+
+
+
     /**
      * gatewayDeviceService#ajaxTestWeight
      * 鍦扮鎺ㄩ�佹祴璇�
diff --git a/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml b/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml
index cccd044..9db29e6 100644
--- a/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml
+++ b/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml
@@ -111,8 +111,16 @@
         <Property name="label">鑷畾涔変粨搴撶紪鐮�</Property>
       </PropertyDef>
       <PropertyDef name="productId">
-        <Property/>
+        <Property></Property>
         <Property name="label">璁惧绫诲瀷KEY</Property>
+      </PropertyDef>
+      <PropertyDef name="cableRule">
+        <Property/>
+        <Property name="label">甯冪嚎瑙勫垯</Property>
+      </PropertyDef>
+      <PropertyDef name="cableCir">
+        <Property/>
+        <Property name="label">绛掍粨灞傝鍒�</Property>
       </PropertyDef>
     </DataType>
   </Model>
@@ -332,6 +340,16 @@
               <Property name="editorType">TextArea</Property>
               <Editor/>
             </AutoFormElement>
+            <AutoFormElement>
+              <Property name="name">cableRule</Property>
+              <Property name="property">cableRule</Property>
+              <Editor/>
+            </AutoFormElement>
+            <AutoFormElement>
+              <Property name="name">cableCir</Property>
+              <Property name="property">cableCir</Property>
+              <Editor/>
+            </AutoFormElement>
           </AutoForm>
         </Container>
       </Children>
diff --git a/src/main/java/com/fzzy/mqtt/MqttConsumerCallBack.java b/src/main/java/com/fzzy/mqtt/MqttConsumerCallBack.java
index cbf2aca..127cfe8 100644
--- a/src/main/java/com/fzzy/mqtt/MqttConsumerCallBack.java
+++ b/src/main/java/com/fzzy/mqtt/MqttConsumerCallBack.java
@@ -1,17 +1,27 @@
 package com.fzzy.mqtt;
 
+import com.fzzy.gateway.hx2023.service.OnReceiveMqttService;
+import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
+@Slf4j
+@Component
 public class MqttConsumerCallBack implements MqttCallback {
+
+
+    @Autowired
+    private OnReceiveMqttService onReceiveMqttService;
 
     /**
      * 瀹㈡埛绔柇寮�杩炴帴鐨勫洖璋�
      */
     @Override
     public void connectionLost(Throwable throwable) {
-        System.out.println("涓庢湇鍔″櫒鏂紑杩炴帴锛屽彲閲嶈繛");
+        log.info("涓庢湇鍔″櫒鏂紑杩炴帴锛屽彲閲嶈繛");
     }
 
     /**
@@ -20,10 +30,17 @@
     @Override
     public void messageArrived(String topic, MqttMessage message) throws Exception {
 
-        System.out.println(String.format("鎺ユ敹娑堟伅涓婚 : %s", topic));
-        System.out.println(String.format("鎺ユ敹娑堟伅Qos : %d", message.getQos()));
-        System.out.println(String.format("鎺ユ敹娑堟伅鍐呭 : %s", new String(message.getPayload())));
-        System.out.println(String.format("鎺ユ敹娑堟伅retained : %b", message.isRetained()));
+
+        String messageStr = new String(message.getPayload());
+
+
+        log.info(String.format("鎺ユ敹娑堟伅涓婚 : %s", topic));
+        log.info(String.format("鎺ユ敹娑堟伅Qos : %d", message.getQos()));
+        log.info(String.format("鎺ユ敹娑堟伅鍐呭 : %s", messageStr));
+
+        log.info(String.format("鎺ユ敹娑堟伅retained : %b", message.isRetained()));
+
+        onReceiveMqttService.onReceiveMessage(messageStr);
     }
 
     /**
@@ -31,6 +48,6 @@
      */
     @Override
     public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
-        System.out.println(String.format("鎺ユ敹娑堟伅鎴愬姛"));
+        log.info(String.format("鎺ユ敹娑堟伅鎴愬姛"));
     }
 }
diff --git a/src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java b/src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java
index b4c6f6c..ca83cb1 100644
--- a/src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java
+++ b/src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java
@@ -14,6 +14,9 @@
 
     @Autowired
     private MqttProperties mqttProperties;
+    @Autowired
+    private MqttConsumerCallBack mqttConsumerCallBack;
+
     /**
      * 瀹㈡埛绔璞�
      */
@@ -50,7 +53,8 @@
             //璁剧疆閬楀槺娑堟伅鐨勮瘽棰橈紝鑻ュ鎴风鍜屾湇鍔″櫒涔嬮棿鐨勮繛鎺ユ剰澶栨柇寮�锛屾湇鍔″櫒灏嗗彂甯冨鎴风鐨勯仐鍢变俊鎭�
             options.setWill("willTopic", (mqttProperties.getClientInId() + "涓庢湇鍔″櫒鏂紑杩炴帴").getBytes(), 0, false);
             //璁剧疆鍥炶皟
-            client.setCallback(new MqttConsumerCallBack());
+            // client.setCallback(new MqttConsumerCallBack());
+            client.setCallback(mqttConsumerCallBack);
             client.connect(options);
             //璁㈤槄涓婚
             //娑堟伅绛夌骇锛屽拰涓婚鏁扮粍涓�涓�瀵瑰簲锛屾湇鍔$灏嗘寜鐓ф寚瀹氱瓑绾х粰璁㈤槄浜嗕富棰樼殑瀹㈡埛绔帹閫佹秷鎭�

--
Gitblit v1.9.3