From 1959bd7304335969851e7b05e88d879ab623d134 Mon Sep 17 00:00:00 2001
From: vince <757871790@qq.com>
Date: 星期五, 31 五月 2024 09:45:17 +0800
Subject: [PATCH] 定时测温
---
src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java | 231 ++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 184 insertions(+), 47 deletions(-)
diff --git a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
index ba4473e..50ff78b 100644
--- a/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
+++ b/src/main/java/com/fzzy/protocol/youxian0/service/Youxian0GatewayGrainService.java
@@ -38,7 +38,72 @@
* @return
*/
@Override
- public BaseResp syncGrain(BaseReqData reqData) {
+ public synchronized BaseResp syncGrain(BaseReqData reqData) {
+
+ BaseResp resp = new BaseResp();
+
+ GatewayDevice device = reqData.getDevice();
+
+ if (null == device) {
+ resp.setCode(500);
+ resp.setMsg("绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅锛屾棤娉曟墽琛�");
+ log.error("----------------绯荤粺鏈幏鍙栧埌涓嬭杩炴帴璁惧淇℃伅,鏃犳硶鎵ц---------");
+ return resp;
+ }
+ try {
+ this.syncGrainTh(reqData);
+ //Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨
+ ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData);
+
+ // 鍒ゆ柇鏁版嵁鏈夋病鏈夋敹鍙栧畬鏁�
+ String[] attCable = device.getCableRule().split("-");
+ int cableY = Integer.valueOf(attCable[1]);
+ int cableX = Integer.valueOf(attCable[2]);
+
+ int start = 0, length = cableY;
+ // 鐢熸垚绮儏淇℃伅
+ String hexStr = "";
+ InvokeResult message;
+ Channel channel = ClientEngine.getChannel();
+ if (null == channel) {
+ ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
+ clientEngine.start();
+ Thread.sleep(1000);
+ channel = clientEngine.getChannel();
+ }
+ for (int i = 1; i <= cableX; i++) {
+ if (1 == i) {
+ start = 255;
+ } else {
+ start = (i - 1) * cableY + 1;
+ }
+ hexStr = buildGrainCmd(device, i, start, length);
+ // 鍙戦�佸懡浠� TODO----->>>鏆傛椂璋冩暣涓烘瘡娆″垱寤轰竴涓柊杩炴帴
+ //Channel channel = ClientEngine.getChannel(device.getIp());
+
+ message = ClientEngine.send2(hexStr, channel);
+ //log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr);
+ log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr);
+
+ // 灏佽杩斿洖淇℃伅
+ if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) {
+ log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触{}", message.getMessage());
+ resp.setCode(500);
+ resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage());
+ }
+ Thread.sleep(3000);
+ }
+ } catch (Exception e) {
+ log.error("绮儏妫�娴嬪紓甯革細{}", e);
+ resp.setCode(500);
+ resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠わ細" + e.getMessage());
+ return resp;
+ }
+ return resp;
+ }
+
+ @Override
+ public BaseResp syncGrainTh(BaseReqData reqData) {
BaseResp resp = new BaseResp();
@@ -54,57 +119,31 @@
try {
//Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨
ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData);
-
- // 鍒ゆ柇鏁版嵁鏈夋病鏈夋敹鍙栧畬鏁�
- String[] attCable = device.getCableRule().split("-");
- int cableY = Integer.valueOf(attCable[1]);
- int cableX = Integer.valueOf(attCable[2]);
-
- int start = 0, length = cableY;
- // 鐢熸垚绮儏淇℃伅
- String hexStr = "";
InvokeResult message;
- for (int i = 1; i <= cableX; i++) {
- if (1 == i) {
- start = 255;
- } else {
- start = (i - 1) * cableY + 1;
- }
-
- hexStr = this.buildGrainCmd(device, i, start, length);
-
- // 鍙戦�佸懡浠� TODO----->>>鏆傛椂璋冩暣涓烘瘡娆″垱寤轰竴涓柊杩炴帴
- //Channel channel = ClientEngine.getChannel(device.getIp());
- Channel channel = null;
- if (null == channel) {
- ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
- clientEngine.start();
- Thread.sleep(300);
- channel = clientEngine.getChannel();
- }
- message = ClientEngine.send2(hexStr, channel);
-
- log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message,hexStr);
-
+ Channel channel = null;
+ if (null == channel) {
+ ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort());
+ clientEngine.start();
+ Thread.sleep(300);
+ channel = clientEngine.getChannel();
+ }
+ String hexStr = this.buildTHCmd(device);
+ message = ClientEngine.send2(hexStr, channel);
+ log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-{}---{}", message,hexStr);
// 灏佽杩斿洖淇℃伅
if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) {
- log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触{}", message.getMessage());
+ log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-澶辫触{}", message.getMessage());
resp.setCode(500);
- resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage());
+ resp.setMsg("骞冲彴------>>>>涓绘帶锛氬彂閫佹俯婀垮害妫�娴嬪懡浠�-澶辫触锛�" + message.getMessage());
}
- }
+ Thread.sleep(500);
} catch (Exception e) {
- log.error("绮儏妫�娴嬪紓甯革細{}", e);
+ log.error("娓╂箍搴︽娴嬪紓甯革細{}", e);
resp.setCode(500);
- resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠わ細" + e.getMessage());
+ resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佹俯婀垮害妫�娴嬪懡浠わ細" + e.getMessage());
return resp;
}
return resp;
- }
-
- @Override
- public BaseResp syncGrainTh(BaseReqData reqData) {
- return new BaseResp();
}
/**
@@ -117,13 +156,35 @@
String start = "7e";
//娴嬫俯鍛戒护--7e 01 00 00 01 00 00 02 00 01 a0 ff ff 66 ff 05 3a 59 7e
- String content = "{id}0000{id}{msgId}000200{id}a0ffff{funId}{start}{length}";
+ //7e 0f 00 00 10 5f 00 03 00 0f 10 a0 ff ff 66 ff 05 9e 43 7e
+ //7e 06 00 00 06 29 00 02 00 06 a0 ff ff 66 1a 05 58 0f 7e
+ String content = "{depotId}0000{id1}{msgId}00{type}00{id2}a0ffff{funId}{start}{length}";
+
+ String type = "02";
//寮�濮嬪皝瑁呮秷鎭綋-涓绘満ID
String deviceSn = device.getDeviceSn();
+ String depotId = device.getDepotIdSys();
deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn));
- content = content.replace("{id}", deviceSn);
- content = content.replace("{id}", deviceSn);
+ depotId = BytesUtil.intToHexStr1(Integer.valueOf(depotId));
+ if(!depotId.equals(deviceSn)){
+ type = "03";
+
+ content = content.replace("{depotId}", depotId);
+ content = content.replace("{id1}", deviceSn);
+ if(deviceSn.toLowerCase().equals("0e".toLowerCase())){
+ content = content.replace("{id2}", depotId +"13"+ deviceSn);
+ type = "04";
+ }else{
+ content = content.replace("{id2}", depotId + deviceSn);
+ }
+ content = content.replace("{type}", type);
+ }else{
+ content = content.replace("{type}", type);
+ content = content.replace("{depotId}", depotId);
+ content = content.replace("{id1}", deviceSn);
+ content = content.replace("{id2}", deviceSn);
+ }
//鍛戒护ID
String msgIdHex = BytesUtil.intToHexStr1(cur);
@@ -147,7 +208,60 @@
return start + content + crcCode + end;
}
+ private String buildTHCmd(GatewayDevice device) {
+ String start = "7e";
+ //娴嬫俯鍛戒护--7e 01 00 00 01 06 00 02 00 01 a0 ff ff 68 1a 05 88 5c 7e
+ // {depotId}0000{id1}{msgId}00{type}00{id2}
+ String content = "{depotId}0000{id1}{msgId}00{type}00{id2}a0ffff{funId}{start}{length}";
+
+ String type = "02";
+ //寮�濮嬪皝瑁呮秷鎭綋-涓绘満ID
+ String deviceSn = device.getDeviceSn();
+ String depotId = device.getDepotIdSys();
+ deviceSn = BytesUtil.intToHexStr1(Integer.valueOf(deviceSn));
+ depotId = BytesUtil.intToHexStr1(Integer.valueOf(depotId));
+ if(!depotId.equals(deviceSn)){
+ type = "03";
+
+ content = content.replace("{depotId}", depotId);
+ content = content.replace("{id1}", deviceSn);
+ if(deviceSn.toLowerCase().equals("0e".toLowerCase())){
+ content = content.replace("{id2}", depotId +"13"+ deviceSn);
+ type = "04";
+ }else{
+ content = content.replace("{id2}", depotId + deviceSn);
+ }
+ content = content.replace("{type}", type);
+ }else{
+ content = content.replace("{type}", type);
+ content = content.replace("{depotId}", depotId);
+ content = content.replace("{id1}", deviceSn);
+ content = content.replace("{id2}", deviceSn);
+ }
+
+ //鍛戒护ID
+ String msgIdHex = BytesUtil.intToHexStr1(20);
+ content = content.replace("{msgId}", msgIdHex);
+
+ //鍛戒护绫诲瀷
+ content = content.replace("{funId}", ServiceUtils.FUNCTION_68);
+
+ //寮�濮嬫牴鍙�
+ String startCurHex = BytesUtil.intToHexStr1(0);
+ content = content.replace("{start}", startCurHex);
+
+ //鎴彇闀垮害
+ String lenHex = BytesUtil.intToHexStr1(0);
+ content = content.replace("{length}", lenHex);
+
+ //鏍¢獙鐮�
+ String crcCode = this.getCRC(content);
+
+ String end = "7e";
+
+ return start + content + crcCode + end;
+ }
/**
* 鍙傝�冪粨鏋滐細http://www.ip33.com/crc.html
* <p>
@@ -159,17 +273,40 @@
* @param content
* @return
*/
- private String getCRC(String content) {
+ private static String getCRC(String content) {
byte[] bytes = HexStringToBytes(content);//16杩涘埗瀛楃涓茶浆鎴�16杩涘埗瀛楃涓叉暟缁�
int i = CRC16_XMODEM(bytes);//杩涜CRC鈥擷MODEM鏍¢獙寰楀埌鍗佽繘鍒舵牎楠屾暟
String CRC = Integer.toHexString(i);//10杩涘埗杞�16杩涘埗
-
+ if(CRC.length() < 4){
+ CRC = "0"+CRC;
+ }
+ if(CRC.length() < 4){
+ CRC = "0"+CRC;
+ }
//璋冩暣楂樹綅鍦ㄥ彸锛屽湴浣嶅湪宸︿晶
CRC = tran_LH(CRC);
return CRC;
}
+ public static void main(String[] args) {
+ //System.out.println(getCRC("010000010400020001a0ffff661005"));
+ //System.out.println(getCRC("010000010500020001a0ffff661505"));
+ String strMsg = "7E00010100010000A0FFFF66FF05BE01635B696FCE02A38ABAB5CE03E3003131CE044383B7B6CE0583497276D9FA";
+ int start = 15 * 2;
+ strMsg = strMsg.substring(start);
+ System.out.println(strMsg);
+ String kyeNumBin = BytesUtil.toBinary8String(BytesUtil.hexToInt("A3"));
+ System.out.println(kyeNumBin);
+ String key = "00000" + kyeNumBin.substring(0, 3);
+ int keyValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
+ key = "0000" + kyeNumBin.substring(4);
+ int numValue = BytesUtil.hexToInt(BytesUtil.bin2Hex(key));
+ System.out.println((keyValue + ""));
+ System.out.println((numValue + ""));
+
+ }
+
public static String tran_LH(String info) {
return info.substring(2) + info.substring(0, 2);
}
--
Gitblit v1.9.3