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