From 231cdeb9b7a55ba08fb8cffda35f5535b9292873 Mon Sep 17 00:00:00 2001 From: jiazx0107@163.com <jiazx0107@163.com> Date: 星期四, 14 十二月 2023 19:33:41 +0800 Subject: [PATCH] 提交正来电子协议解析-2 --- src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java | 31 ++++++++-- src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java | 4 src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java | 7 - src/main/java/com/fzzy/api/data/ApiCommonDevice.java | 2 src/main/java/com/fzzy/protocol/ProtocolRunner.java | 10 +++ src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java | 3 src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java | 6 - src/main/java/com/fzzy/gateway/entity/GatewayDevice.java | 14 ++-- src/main/java/com/fzzy/protocol/zldz/cmd/OnLineCommandBuilder.java | 40 +++++++++++++ src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java | 46 +++++++------- src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java | 2 11 files changed, 115 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/fzzy/api/data/ApiCommonDevice.java b/src/main/java/com/fzzy/api/data/ApiCommonDevice.java index 9cde079..91f736d 100644 --- a/src/main/java/com/fzzy/api/data/ApiCommonDevice.java +++ b/src/main/java/com/fzzy/api/data/ApiCommonDevice.java @@ -33,4 +33,6 @@ private Date onlineTime = new Date(); + private String cable;//灞�-琛�-鍒� + } diff --git a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java index b69ac87..d2dd7be 100644 --- a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java +++ b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java @@ -121,23 +121,23 @@ @PropertyDef(label = "鍦ㄧ嚎鐘舵��") private String status = Constant.YN_Y; - @Column(name = "CABLE_START_") + @Column(name = "CABLE_START_", length = 4) @PropertyDef(label = "鐢电紗寮�濮�") - private int cableStart; + private String cableStart; - @Column(name = "CABLE_END_") + @Column(name = "CABLE_END_", length = 4) @PropertyDef(label = "鐢电紗鎴嚦") - private int cableEnd; + private String cableEnd; - @Column(name = "TH_ADDR_") + @Column(name = "TH_ADDR_",length = 4) @PropertyDef(label = "娓╂箍搴﹀湴鍧�") private String thAddr; - @Column(name = "CABLE_FORMAT", length = 4) + @Column(name = "CABLE_FORMAT_", length = 4) @PropertyDef(label = "鐢电紗鍒跺紡") private String cableFormat; - @Column(name = "CABLE_TYPE", length = 4) + @Column(name = "CABLE_TYPE_", length = 4) @PropertyDef(label = "鐢电紗绫诲瀷") private String cableType; diff --git a/src/main/java/com/fzzy/protocol/ProtocolRunner.java b/src/main/java/com/fzzy/protocol/ProtocolRunner.java index 5287ebb..c883fcc 100644 --- a/src/main/java/com/fzzy/protocol/ProtocolRunner.java +++ b/src/main/java/com/fzzy/protocol/ProtocolRunner.java @@ -1,7 +1,9 @@ package com.fzzy.protocol; +import com.fzzy.protocol.bhzn.server.BhznGrainV2ServerEngine; import com.fzzy.protocol.fzzy.server.FzzyServerEngine; import com.fzzy.protocol.weightyh.YhScaleServerEngine; +import com.fzzy.protocol.zldz.server.ZldzServerEngine; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; @@ -25,6 +27,14 @@ //椋庢鑷磋繙鎺у埗鏌滃崗璁惎鍔� FzzyServerEngine.start(null); + + //姝f潵鐢靛瓙绮儏鍚姩 + ZldzServerEngine.start(); + + + //閭︽捣鏅鸿兘绾綉鍙h澶囧崗璁� + BhznGrainV2ServerEngine.start(null); + } } diff --git a/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java b/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java index 2a6ee94..3f827bf 100644 --- a/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java +++ b/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java @@ -36,7 +36,8 @@ if (null != port) { ioServerOption.setPort(port); } else { - ioServerOption.setPort(PORT); + port = PORT; + ioServerOption.setPort(port); } //纭缁撳熬鏍囧織 diff --git a/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java b/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java index 3211e6b..dbfdd8b 100644 --- a/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java +++ b/src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java @@ -32,10 +32,8 @@ session.setBusinessKey(BhznGrainV2ServerUtils.getServerKey(session.getAddress(), session.getPort())); //鎵ц鍒嗘満涓婄嚎 - ApiCommonDevice commonDevice = Constant.updateCacheOnline(session.getAddress(), session.getPort()); - if (null == commonDevice.getSn()) { - log.error("------璁惧涓婄嚎锛岀郴缁熶腑鏈彂鐜板綋鍓嶉厤缃�-------"); - } + Constant.updateCacheOnline(session.getAddress(), session.getPort()); + } /** diff --git a/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java b/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java index ed5d024..18c2fc8 100644 --- a/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java +++ b/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java @@ -1,5 +1,7 @@ package com.fzzy.protocol.zldz.analysis; +import com.fzzy.api.Constant; +import com.fzzy.api.data.ApiCommonDevice; import com.fzzy.api.utils.BytesUtil; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.service.GatewayDeviceService; @@ -25,11 +27,11 @@ * 瑙f瀽鍒嗘満閰嶇疆淇℃伅 * * @param message - * @param ser + * @param device */ - public void analysis8816(ReMessage message, GatewayDevice ser) { + public void analysis8816(ReMessage message, GatewayDevice device, ApiCommonDevice commonDevice) { - log.debug("鍒嗘満---->>>骞冲彴锛氭秷鎭被鍨�=8816-----{}", ser.getDeviceName()); + log.debug("鍒嗘満---->>>骞冲彴锛氭秷鎭被鍨�=8816-----{}", device.getDeviceName()); String content = message.getBody().getContent(); @@ -58,8 +60,9 @@ len = 1; temp = content.substring(start * 2, start * 2 + len * 2); - // 灞傛暟 + //灞� -琛� -鍒� String cable = ""; + // 灞傛暟 start = 6; len = 1; temp = content.substring(start * 2, start * 2 + len * 2); @@ -77,20 +80,18 @@ temp = content.substring(start * 2, start * 2 + len * 2); cable += "-" + BytesUtil.hexToInt(temp); - //灞� - 琛� - 鍒� 閰嶇疆 - ser.setCableRule(cable); // 鐢电紗鍒跺紡 start = 9; len = 1; temp = content.substring(start * 2, start * 2 + len * 2); - ser.setCableFormat("0" + BytesUtil.hexToInt(temp)); + device.setCableFormat("0" + BytesUtil.hexToInt(temp)); // 鐢电紗绫诲瀷 start = 10; len = 1; temp = content.substring(start * 2, start * 2 + len * 2); - ser.setCableType("0" + BytesUtil.hexToInt(temp)); + device.setCableType("0" + BytesUtil.hexToInt(temp)); // 渚涚數妯″紡 start = 11; @@ -98,34 +99,33 @@ temp = content.substring(start * 2, start * 2 + len * 2); //ser.setPowerModel("0" + BytesUtil.hexToInt(temp)); - String msg = ser.getDeviceName() + " 杩滅▼鑾峰彇閰嶇疆鎴愬姛锛岃鍒锋柊鏁版嵁鏌ョ湅锛�"; // 缁勭粐缂栫爜 start = 12; temp = content.substring(start * 2); - if (readTag == 1) {// 琛ㄧず鍐欑殑鎴愬姛杩斿洖 - ser.setOrgId(ser.getOrgId()); - msg = ser.getDeviceName() + " 杩滅▼鍐欏叆鎴愬姛锛岃鍒锋柊鏁版嵁鏌ョ湅锛�"; - } else { - ser.setOrgId(BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) + ""); + if (readTag != 1) {// 琛ㄧず鍐欑殑鎴愬姛杩斿洖 + device.setOrgId(BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) + ""); } - if (null == ser.getDeviceSn()) { - ser.setDeviceSn(ser.getId()); - } - ser.setIp(message.getIp()); - ser.setPort(message.getPort()); + device.setIp(message.getIp()); + device.setPort(message.getPort()); // 寮�濮嬪垪榛樿=1 - if (ser.getCableStart() == 0) { - ser.setCableStart(1); + if (null == device.getCableStart()) { + device.setCableStart("1"); } log.info("鍒嗘満---->>>骞冲彴锛氬垎鏈洪厤缃В鏋愬畬鎴�---{}锛屾洿鏂板埌鏈嶆湇鍔″櫒", - ser.getDeviceName()); + device.getDeviceName()); //鏇存柊璁惧淇℃伅 - gatewayDeviceService.updateData(ser); + gatewayDeviceService.updateData(device); + + //鏇存柊杩炴帴璁惧淇℃伅 + commonDevice.setSn(device.getDeviceSn()); + commonDevice.setCable(cable); + commonDevice.setOrgId(device.getOrgId()); + Constant.updateCache(commonDevice); } /** diff --git a/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java b/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java index 99ffdd7..d2b07b1 100644 --- a/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java +++ b/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java @@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.persistence.criteria.CriteriaBuilder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -294,10 +295,6 @@ /** * 骞虫柟浠撶殑瑙f瀽锛岃В鏋愰渶瑕佽�冭檻褰撳墠鏄惁鍚敤鐨勪竴鍒嗘満澶氫粨 * - * @param depotConf - * @param msg - * @param ser - * @param exeRequest * @param packetMap * @param sumPackets */ @@ -316,7 +313,7 @@ int cableX = Integer.valueOf(attCable[2]); // 鏍规嵁灞傝鍒楄幏鍙栨寚瀹氶暱搴� - int start = 4 * (device.getCableStart() - 1) * cableZ * cableY; + int start = 4 * (Integer.valueOf(device.getCableStart()) - 1) * cableZ * cableY; int len = 4 * cableZ * cableY * cableX; log.info("鍒嗘満------>>>骞冲彴锛氳繑鍥炵伯鎯呭畬鏁翠俊鎭紝鍒嗘満={}", device.getDeviceName()); diff --git a/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java index 12878e3..5454488 100644 --- a/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java +++ b/src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java @@ -78,7 +78,7 @@ analysisConf.analysis1129(reMessage, device); break; case ZldzServerUtil.MSG_TYPE_8816:// 瑙f瀽閰嶇疆 - analysisConf.analysis8816(reMessage, device); + analysisConf.analysis8816(reMessage, device,commonDevice); break; case ZldzServerUtil.MSG_TYPE_8822:// 鐢电紗鍒濆鍖栨垚鍔� analysisConf.analysis8822(reMessage, device); diff --git a/src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java b/src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java index 7f58fb5..04fa321 100644 --- a/src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java +++ b/src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java @@ -76,8 +76,8 @@ MessageBody body = new MessageBody(); body.setLength(2); - int start = device.getCableStart(); - int end = device.getCableEnd(); + int start = Integer.valueOf(device.getCableStart()); + int end = Integer.valueOf(device.getCableEnd()); body.setContent(BytesUtil.toHexString(start) + BytesUtil.toHexString(end)); message.setBody(body); } diff --git a/src/main/java/com/fzzy/protocol/zldz/cmd/OnLineCommandBuilder.java b/src/main/java/com/fzzy/protocol/zldz/cmd/OnLineCommandBuilder.java new file mode 100644 index 0000000..02627d0 --- /dev/null +++ b/src/main/java/com/fzzy/protocol/zldz/cmd/OnLineCommandBuilder.java @@ -0,0 +1,40 @@ +package com.fzzy.protocol.zldz.cmd; + + +import com.fzzy.api.utils.BytesUtil; +import com.fzzy.io.request.BaseRequest; +import com.fzzy.protocol.zldz.data.Message; +import com.fzzy.protocol.zldz.data.MessageBody; +import com.fzzy.protocol.zldz.server.ZldzServerUtil; + +/** + * @author Andy + */ +public class OnLineCommandBuilder extends CommandBuilder { + + private final static OnLineCommandBuilder instance = new OnLineCommandBuilder(); + + private OnLineCommandBuilder() { + + } + + public static OnLineCommandBuilder getInstance() { + return instance; + } + + public void buildHeader(Message message, BaseRequest request) { + message.setSourceId("0000"); + message.setSendId("0000"); + message.setCompanyId("0000"); + message.setTargetId("FFFF"); + message.setMessageType(BytesUtil.tran_LH(ZldzServerUtil.MSG_TYPE_1116)); + } + + public void buildBody(Message message, BaseRequest request) { + MessageBody body = new MessageBody(); + body.setContent("0000000000000000000000000000"); + body.setLength(14); + message.setBody(body); + } + +} diff --git a/src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java b/src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java index ccf6678..edb2881 100644 --- a/src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java +++ b/src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java @@ -4,7 +4,10 @@ import com.fzzy.api.data.ApiCommonDevice; import com.fzzy.api.utils.SpringUtil; import com.fzzy.gateway.service.GatewayDeviceService; -import com.fzzy.protocol.bhzn.server.BhznGrainV2ServerUtils; +import com.fzzy.io.request.BaseRequest; +import com.fzzy.protocol.zldz.cmd.OnLineCommandBuilder; +import com.fzzy.protocol.zldz.data.Message; +import com.ld.io.api.InvokeResult; import com.ld.io.api.IoSession; import com.ld.io.api.IoSessionListener; import lombok.extern.slf4j.Slf4j; @@ -26,13 +29,27 @@ log.info("++++鏂板缓杩炴帴++++-IP={}锛孭ORT={}", session.getAddress(), session.getPort()); // 娣诲姞鑷畾涔変笟鍔D - session.setBusinessKey(BhznGrainV2ServerUtils.getServerKey(session.getAddress(), session.getPort())); + session.setBusinessKey(ZldzServerUtil.getServerKey(session.getAddress(), session.getPort())); //鎵ц鍒嗘満涓婄嚎 - ApiCommonDevice commonDevice = Constant.updateCacheOnline(session.getAddress(), session.getPort()); - if (null == commonDevice.getSn()) { - log.error("------璁惧涓婄嚎锛岀郴缁熶腑鏈彂鐜板綋鍓嶉厤缃�-------"); + Constant.updateCacheOnline(session.getAddress(), session.getPort()); + + + /***********************璁惧涓婄嚎鍚庝富鍔ㄨ幏鍙栭厤缃俊鎭�******************/ + + BaseRequest request = new BaseRequest(); + request.setIp(session.getAddress()); + request.setPort(session.getPort()); + request.setCompanyId(ZldzServerUtil.DEFAULT_COMPANY); + // Step1 鐢熸垚鍦ㄧ嚎娴嬭瘯鍛戒护 + Message message = OnLineCommandBuilder.getInstance().buildMessage(request); + // 鍙戦�佸懡浠� + InvokeResult result = session.invoke(message.getByteMsg()); + //濡傛灉鍛戒护鍙戦�佸け璐ワ紝鐩存帴韪㈡帀杩炴帴 + if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { + session.destroy(); } + log.info("骞冲彴------->>鍒嗘満---璁惧涓婄嚎锛岃嚜鍔ㄥ彂閫佽澶囬厤缃俊鎭姹傚懡浠�--{}",message); } /** @@ -51,9 +68,9 @@ if (null == gatewayDeviceService) { gatewayDeviceService = SpringUtil.getBean(GatewayDeviceService.class); - - gatewayDeviceService.OfflineByCommonDevice(commonDevice); } + gatewayDeviceService.OfflineByCommonDevice(commonDevice); + } } -- Gitblit v1.9.3