From 7e6e59aa162776a0ab37cfbc0c6c79d14100eb69 Mon Sep 17 00:00:00 2001
From: CZT <czt18638530771@163.com>
Date: 星期六, 16 九月 2023 18:09:57 +0800
Subject: [PATCH] 增加DL/T645多功能电表协议
---
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java | 88 ++++++++
igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java | 1
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java | 73 +++++++
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java | 63 ++++++
pom.xml | 3
igds-protocol-es/pom.xml | 56 +++++
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java | 57 +++++
igds-es/src/main/java/com/ld/igds/es/service/HEsService.java | 2
igds-es/src/main/java/com/ld/igds/es/view/EsData.view.xml | 21 -
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java | 99 +++++++++
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java | 98 +++++++++
igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java | 7
igds-web/pom.xml | 17 +
13 files changed, 566 insertions(+), 19 deletions(-)
diff --git a/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java b/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
index d22bf75..e89af33 100644
--- a/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
+++ b/igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
@@ -32,6 +32,7 @@
TCP_BHZH_VERB_V2("TCP_BHZH_VERB_V2", "閭︽捣鎺у埗鏌滄櫤鑳芥湁绾跨増V2"),
TCP_BHZH_INOUT_V1("TCP_BHZH_INOUT_V1", "閭︽捣鏅鸿兘鍑哄叆搴撴帶鍒跺櫒鍗忚"),
TCP_BEIBO_GRAIN_V1("TCP_BEIBO_GRAIN_V1", "璐濆崥绮儏鍒嗘満鏈嶅姟绔崗璁�"),
+ TCP_ES_DLT645_V1("TCP_ES_DLT645_V1", "DL/T 645澶氬姛鑳界數琛ㄥ崗璁�"),
FZZY_OPENAPI_HTTP("FZZY_OPENAPI_HTTP", "椋庢鑷磋繙API-HTTP鍗忚"),
TCP_MODBUS("TCP_MODBUS", "Modbus-TCP鍗忚");
diff --git a/igds-es/src/main/java/com/ld/igds/es/service/HEsService.java b/igds-es/src/main/java/com/ld/igds/es/service/HEsService.java
index c96e4fe..90e55c4 100644
--- a/igds-es/src/main/java/com/ld/igds/es/service/HEsService.java
+++ b/igds-es/src/main/java/com/ld/igds/es/service/HEsService.java
@@ -75,7 +75,7 @@
Date end = (Date) param.get("end");
if(null != end){
- start = DateUtil.getNextZero(end);
+ end = DateUtil.getNextZero(end);
hql += " and updateTime <:end ";
args.put("end", end);
}
diff --git a/igds-es/src/main/java/com/ld/igds/es/view/EsData.view.xml b/igds-es/src/main/java/com/ld/igds/es/view/EsData.view.xml
index e5e0152..07c0f92 100644
--- a/igds-es/src/main/java/com/ld/igds/es/view/EsData.view.xml
+++ b/igds-es/src/main/java/com/ld/igds/es/view/EsData.view.xml
@@ -255,11 +255,6 @@
<Property name="property">deviceName</Property>
<Property name="align">center</Property>
</DataColumn>
- <DataColumn name="updateTime">
- <Property name="property">updateTime</Property>
- <Property name="align">center</Property>
- <Property name="width">130</Property>
- </DataColumn>
<ColumnGroup>
<Property name="caption">涓夌浉鐢靛帇</Property>
<DataColumn name="ua">
@@ -296,21 +291,11 @@
<Property name="caption">C鐩�</Property>
</DataColumn>
</ColumnGroup>
- <DataColumn name="f">
- <Property name="property">f</Property>
- <Property name="align">center</Property>
- <Property name="width">60</Property>
- </DataColumn>
<ColumnGroup>
<Property name="caption">鐢佃兘锛堢數琛ㄥ�硷級</Property>
<DataColumn name="ep">
<Property name="property">ep</Property>
<Property name="caption">鏈夊姛</Property>
- <Property name="align">center</Property>
- </DataColumn>
- <DataColumn name="eq">
- <Property name="property">eq</Property>
- <Property name="caption">鏃犲姛</Property>
<Property name="align">center</Property>
</DataColumn>
<DataColumn name="es">
@@ -319,10 +304,10 @@
<Property name="caption">鎬荤數鑳�</Property>
</DataColumn>
</ColumnGroup>
- <DataColumn name="esInc">
- <Property name="property">esInc</Property>
+ <DataColumn name="updateTime">
+ <Property name="property">updateTime</Property>
<Property name="align">center</Property>
- <Property name="caption">灏忔椂鐢ㄨ兘</Property>
+ <Property name="width">150</Property>
</DataColumn>
</DataGrid>
</Container>
diff --git a/igds-protocol-es/pom.xml b/igds-protocol-es/pom.xml
new file mode 100644
index 0000000..849b1f4
--- /dev/null
+++ b/igds-protocol-es/pom.xml
@@ -0,0 +1,56 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.ld.igds</groupId>
+ <artifactId>igds-protocol-es</artifactId>
+ <version>4.0.0-RELEASE</version>
+ <packaging>jar</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <java.version>1.8</java.version>
+ <igds.version>4.0.0-RELEASE</igds.version>
+ </properties>
+
+ <dependencies>
+
+ <!-- 寮曞叆涔夊姟鏍稿績鍖� -->
+ <dependency>
+ <groupId>com.ld.igds</groupId>
+ <artifactId>igds-core</artifactId>
+ <version>${igds.version}</version>
+ </dependency>
+
+ <!-- 寮曞叆鑳借�楀寘 -->
+ <dependency>
+ <groupId>com.ld.igds</groupId>
+ <artifactId>igds-es</artifactId>
+ <version>${igds.version}</version>
+ </dependency>
+
+ <!-- 寮曞叆IO鍖� -->
+ <dependency>
+ <groupId>com.ld.base.io</groupId>
+ <artifactId>base-io-netty</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ <compilerArguments>
+ <extdirs>src\main\webapp\WEB-INF\lib</extdirs>
+ </compilerArguments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java
new file mode 100644
index 0000000..99754d1
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/RemoteEsServiceImpl.java
@@ -0,0 +1,73 @@
+package com.ld.igds.protocol.es.dlt645;
+
+import com.ld.igds.constant.RedisConst;
+import com.ld.igds.io.RemoteEsService;
+import com.ld.igds.io.constant.OrderRespEnum;
+import com.ld.igds.io.constant.ProtocolEnum;
+import com.ld.igds.io.request.BaseRequest;
+import com.ld.igds.io.response.BaseResponse;
+import com.ld.igds.io.response.GrainResponse;
+import com.ld.igds.protocol.es.dlt645.builder.CommandBuild;
+import com.ld.igds.protocol.es.dlt645.client.Dlt645ClientEngine;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.RedisUtil;
+import com.ld.io.api.InvokeResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 褰撳墠鍗忚瀹炵幇锛岃兘鑰楀崗璁�
+ *
+ * @author czt
+ */
+@Slf4j
+@Component(RemoteEsServiceImpl.BEAN_ID)
+public class RemoteEsServiceImpl implements RemoteEsService {
+
+ public static final String BEAN_ID = "dlt645.remoteEsServiceImpl";
+
+ @Autowired
+ private RedisUtil redisUtil;
+ @Override
+ public String getProtocol() {
+ return ProtocolEnum.TCP_ES_DLT645_V1.getCode();
+ }
+
+ @Override
+ public BaseResponse checkEs(BaseRequest request) {
+
+ try {
+ log.info("DL/T645澶氬姛鑳界數琛ㄥ垎鏈哄紑濮嬫娴嬶紝鍒嗘満{}鐨処P={},绔彛={}",request.getSerId(),request.getIp(),request.getPort());
+
+ Dlt645ClientEngine clientEngine = new Dlt645ClientEngine(request.getIp(), request.getPort());
+ clientEngine.start();
+ Thread.sleep(1000);
+
+ //閲囬泦鍛戒护瀛樺叆缂撳瓨锛岃В鏋愭椂鍒嗚鲸鏄摢涓粨鐨勮兘鑰楋紝鏃舵晥5鍒嗛挓
+ String key = RedisConst.buildKey(request.getCompanyId(), "ES-DLT645", request.getSerId());
+ redisUtil.set(key, request.getDepotId(), 60*5);
+
+ //鐢熸垚鍛戒护-鏌ヨ鎬荤數鑳界殑鍛戒护
+ String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId());
+
+ InvokeResult result = clientEngine.send(BytesUtil.hexStrToBytes(hexStr));
+
+ log.info("result=" +result.getMessage());
+
+ // 灏佽杩斿洖淇℃伅
+ if (InvokeResult.SUCCESS == result) {
+ return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(),
+ "鑳借�楀懡浠ゅ彂閫佹垚鍔燂紒");
+ } else {
+ log.error("骞冲彴------>>>>鑳借�楀垎鏈猴細鑳借�楁娴�-澶辫触{}", result.getMessage());
+ return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(),
+ "鍛戒护鍙戦�佸紓甯革細" + result.getMessage());
+ }
+
+ } catch (Exception e) {
+ log.error("鑳借�楁娴嬪紓甯革細{}", e);
+ return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庣寮傚父锛�" + e.getMessage());
+ }
+ }
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java
new file mode 100644
index 0000000..be01020
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/analysis/AnalysisService.java
@@ -0,0 +1,99 @@
+package com.ld.igds.protocol.es.dlt645.analysis;
+
+import com.ld.igds.common.CoreSerService;
+import com.ld.igds.constant.RedisConst;
+import com.ld.igds.es.dto.EsData;
+import com.ld.igds.es.service.CoreEsService;
+import com.ld.igds.models.DeviceSer;
+import com.ld.igds.protocol.es.dlt645.util.Dlt645Utils;
+import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.Date;
+
+/**
+ * DLT645鐢佃〃鍗忚瑙f瀽
+ *
+ * @author czt
+ */
+@Slf4j
+@Component(AnalysisService.BEAN_ID)
+public class AnalysisService {
+
+
+ public static final String BEAN_ID = "dlt645.analysisService";
+
+ @Autowired
+ private RedisUtil redisUtil;
+ @Autowired
+ private CoreSerService coreSerService;
+ @Autowired
+ private CoreEsService esService;
+
+ /**
+ *
+ * @param result
+ */
+ public void analysis(String result){
+ log.info("鑳借�楀垎鏈�------->>骞冲彴锛氫俊鎭姤鏂�={}", result);
+ if(!result.startsWith(Dlt645Utils.MSG_START)){
+ log.error("鑳借�楀垎鏈�------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ細鎶ユ枃璧峰绗﹂敊璇紝涓嶈В鏋�");
+ return;
+ }
+ //鍘婚櫎璧峰绗�
+ result = result.substring(8);
+ //鑾峰彇鏍¢獙浣�
+ String oldCheck = result.substring(result.length() - 4, result.length() - 2);
+ String check = Dlt645Utils.makeCheck(result.substring(0, result.length() - 4));
+
+ if(!check.equals(oldCheck)){
+ log.error("鑳借�楀垎鏈�------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ細鏍¢獙浣嶄笉瀵癸紝涓嶈В鏋�");
+ return;
+ }
+ analysisGrain(result);
+ }
+
+
+ private void analysisGrain(String result) {
+ try {
+
+ //鑾峰彇鑳借�楀垎鏈哄湴鍧�
+ String serId = Dlt645Utils.addrToString(result.substring(2, 14));
+
+ //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅
+ DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), serId);
+ if (ser == null) {
+ log.error("鑳借�楀垎鏈�-------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ紝鏈幏鍙栧埌绯荤粺鑳借�椾富鏈洪厤缃細" + serId);
+ return;
+ }
+
+ String key = RedisConst.buildKey(ser.getCompanyId(), "ES-DLT645", ser.getId());
+ String depotId = (String) redisUtil.get(key);
+ if(null == depotId){
+ log.error("鑳借�楀垎鏈�-------->>骞冲彴锛岃В鏋愯兘鑰楀け璐ワ紝鏈幏鍙栧埌浠撳簱淇℃伅锛�" + depotId);
+ return;
+ }
+
+ //瑙f瀽鎬昏兘鑰楁暟鎹�
+ String dataStr = result.substring(28, 36);
+
+ Double esNum = Dlt645Utils.parseData(dataStr);
+ EsData esData = new EsData();
+ esData.setDeviceName("鐢佃〃");
+ esData.setCompanyId(ser.getCompanyId());
+ esData.setDepotId(depotId);
+ esData.setUpdateTime(new Date());
+
+ esData.setEp(esNum);
+ esData.setEs(esNum);
+
+ log.info("DLT645鐢佃〃----->>>骞冲彴锛氳兘鑰楁暟鎹В鏋愬畬鎴�-浠撳簱={}", esData.getDepotId());
+ esService.saveAndUpdateInc(esData);
+
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java
new file mode 100644
index 0000000..de915b6
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/builder/CommandBuild.java
@@ -0,0 +1,57 @@
+package com.ld.igds.protocol.es.dlt645.builder;
+
+import com.ld.igds.protocol.es.dlt645.util.Dlt645Utils;
+
+/**
+ * 鐢佃〃鍛戒护鐢熸垚
+ *
+ * @author czt
+ */
+public class CommandBuild {
+
+ private final static CommandBuild instance = new CommandBuild();
+
+ private CommandBuild() {
+ }
+
+ public static CommandBuild getInstance() {
+ return instance;
+ }
+
+ /**
+ * 鑳借�楅噰闆嗗懡浠�
+ *
+ * @param esAddr 鐢佃〃鍦板潃
+ * @return
+ */
+ public static String getMsgCheck(String esAddr) {
+
+ //鑾峰彇鍛戒护
+ StringBuffer sb = new StringBuffer();
+
+ //甯ц捣濮嬬
+ sb.append("68");
+ //鍦板煙鍩燂紝鍙嶅悜鎷兼帴
+ sb.append(Dlt645Utils.addrToString(esAddr));
+ //甯ц捣濮嬬
+ sb.append("68");
+ //鎺у埗鐮佸強
+ sb.append("11");
+ //鏁版嵁鍩熼暱搴�
+ sb.append("04");
+ //鏁版嵁鍩�
+ sb.append("33333433");
+ //鏍¢獙鐮�
+ String checkNum = Dlt645Utils.makeCheck(sb.toString());
+ sb.append(checkNum);
+
+ StringBuffer sb0 = new StringBuffer();
+ //璧峰绗�
+ sb0.append(Dlt645Utils.MSG_START);
+ sb0.append(sb);
+ //缁撳熬绗�
+ sb0.append(Dlt645Utils.MSG_END);
+
+ return sb0.toString();
+ }
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java
new file mode 100644
index 0000000..c1895ea
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/ClientHandler.java
@@ -0,0 +1,63 @@
+package com.ld.igds.protocol.es.dlt645.client;
+
+import com.ld.igds.protocol.es.dlt645.analysis.AnalysisService;
+import com.ld.igds.util.BytesUtil;
+import com.ld.igds.util.SpringUtil;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.util.internal.logging.InternalLogger;
+import io.netty.util.internal.logging.InternalLoggerFactory;
+import org.springframework.stereotype.Component;
+import java.net.InetSocketAddress;
+
+
+/**
+ * Handles a client-side channel.
+ */
+public class ClientHandler extends SimpleChannelInboundHandler<Object> {
+
+
+ private AnalysisService analysisService;
+
+ private final InternalLogger log = InternalLoggerFactory.getInstance(this.getClass());
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) {
+ InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
+ .remoteAddress();
+ log.info("鐢佃〃鏈嶅姟鍣ㄦ垚鍔熻繛鎺ワ紝IP={},port={}", insocket.getAddress()
+ .getHostAddress(), insocket.getPort());
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ super.channelInactive(ctx);
+
+ InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
+ .remoteAddress();
+
+ log.info("鐢佃〃鏈嶅姟鍣ㄦ柇寮�杩炴帴锛孖P={},port={}", insocket.getAddress(),insocket.getPort());
+ }
+
+ @Override
+ public void channelRead0(ChannelHandlerContext ctx, Object msg)
+ throws Exception {
+ byte[] bytes = (byte[]) msg;
+ String result = BytesUtil.bytesToString(bytes);
+ log.info("鐢佃〃鏈嶅姟鍣ㄥ垎鏈鸿繑鍥炰俊鎭�=" + result);
+
+// InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();
+
+ //瑙f瀽
+ //璋冪敤瑙f瀽鎺ュ彛寮�濮嬭В鏋�
+ if (null == analysisService) {
+ analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID);
+ }
+ analysisService.analysis(result);
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+ ctx.close();
+ }
+
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java
new file mode 100644
index 0000000..ae11036
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/client/Dlt645ClientEngine.java
@@ -0,0 +1,98 @@
+package com.ld.igds.protocol.es.dlt645.client;
+
+import com.ld.io.api.InvokeResult;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.*;
+import io.netty.channel.oio.OioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.oio.OioSocketChannel;
+import io.netty.handler.codec.bytes.ByteArrayDecoder;
+import io.netty.handler.codec.bytes.ByteArrayEncoder;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * DL/T 645-2007澶氬姛鑳界數琛�
+ *
+ * @author czt
+ */
+@Slf4j
+public class Dlt645ClientEngine implements Runnable {
+
+ private String host;
+ private int port;
+
+ public Channel channel;
+
+ public Dlt645ClientEngine(String host, int port) {
+ this.host = host;
+ this.port = port;
+ }
+ public void start() {
+ Thread thread = new Thread(this);
+ thread.start();
+ }
+
+ @Override
+ public void run() {
+ try {
+ startRun();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void startRun() throws Exception {
+ EventLoopGroup group = new OioEventLoopGroup();
+ Bootstrap b = new Bootstrap();
+ // b.option(ChannelOption.SO_KEEPALIVE, true);
+ b.group(group).channel(OioSocketChannel.class)
+ .handler(new ChannelInitializer<SocketChannel>() {
+ @Override
+ protected void initChannel(SocketChannel ch)
+ throws Exception {
+ ChannelPipeline p = ch.pipeline();
+ // 瀛楃涓茶В鐮� 鍜� 缂栫爜
+ p.addLast("decoder", new ByteArrayDecoder());
+ p.addLast("encoder", new ByteArrayEncoder());
+ // 鑷繁鐨勯�昏緫Handler
+ p.addLast("handler", new ClientHandler());
+ }
+ });
+
+ // 鍙戣捣寮傛杩炴帴璇锋眰锛岀粦瀹氳繛鎺ョ鍙e拰host淇℃伅
+ ChannelFuture channelFuture = b.connect(host, port);
+ this.channel = channelFuture.channel();
+ // channelFuture.channel().closeFuture().sync();
+
+ channelFuture.addListener(new ChannelFutureListener() {
+ @Override
+ public void operationComplete(ChannelFuture arg0) throws Exception {
+ if (channelFuture.isSuccess()) {
+ log.info("-----杩炴帴鐢佃〃鏈嶅姟鍣ㄦ垚鍔燂紝IP={}锛孭ORT={}", host, port);
+ } else {
+ log.info("-----杩炴帴鐢佃〃鏈嶅姟鍣ㄥけ璐ワ紝IP={}锛孭ORT={}", host, port);
+ channelFuture.cause().printStackTrace();
+ group.shutdownGracefully(); // 鍏抽棴绾跨▼缁�
+ }
+ }
+ });
+ }
+
+ public InvokeResult send(byte[] array) throws InterruptedException {
+ if (null == channel) {
+ return InvokeResult.SOCKET_NOT_CREATE;
+ }
+ if (!channel.isActive()) {
+ return InvokeResult.CHANNEL_CLOSED;
+ }
+ channel.writeAndFlush(Unpooled.copiedBuffer(array)).sync();
+
+ return InvokeResult.SUCCESS;
+ }
+
+ public Channel getChannel() {
+ return channel;
+ }
+
+}
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java
new file mode 100644
index 0000000..9fc7e9a
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/package-info.java
@@ -0,0 +1,7 @@
+
+
+/**
+ * @Desc: DL/T 645澶氬姛鑳界數琛�
+ * @author: czt
+ */
+package com.ld.igds.protocol.bhzn;
\ No newline at end of file
diff --git a/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java
new file mode 100644
index 0000000..fa404a8
--- /dev/null
+++ b/igds-protocol-es/src/main/java/com/ld/igds/protocol/es/dlt645/util/Dlt645Utils.java
@@ -0,0 +1,88 @@
+package com.ld.igds.protocol.es.dlt645.util;
+
+/**
+ * 宸ュ叿绫�
+ *
+ * @author czt
+ */
+public class Dlt645Utils {
+
+
+ public static String MSG_START = "FEFEFEFE"; //璧峰绗�
+ public static String MSG_END = "16"; //缁撳熬绗�
+
+ public static void main(String[] args) {
+ String s = makeCheck("6857141222000068110433333433");
+ System.out.println(s);
+ }
+
+ /**
+ * 灏�6涓瓧鑺傜殑鍦板潃鍩燂紝姣忓瓧鑺�2浣� BCD鐮�,杞崲涓�12浣�10杩涘埗鏁�
+ */
+ public static String addrToString(String str) {
+ byte[] bytes = stringToBytes(str);
+ return String.format("%02x%02x%02x%02x%02x%02x", bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0]);
+ }
+
+ /**
+ * DLT645鏍¢獙鐮�
+ */
+ public static String makeCheck(String data) {
+
+ if (data == null || data.equals("")) {
+ return "";
+ }
+ int total = 0;
+ int len = data.length();
+ int num = 0;
+ while (num < len) {
+ String s = data.substring(num, num + 2);
+ total += Integer.parseInt(s, 16);
+ num = num + 2;
+ }
+ /**
+ * 鐢�256姹備綑鏈�澶ф槸255锛屽嵆16杩涘埗鐨凢F
+ */
+ int mod = total % 256;
+ String hex = Integer.toHexString(mod);
+ len = hex.length();
+ // 濡傛灉涓嶅鏍¢獙浣嶇殑闀垮害锛岃ˉ0,杩欓噷鐢ㄧ殑鏄袱浣嶆牎楠�
+ if (len < 2) {
+ hex = "0" + hex;
+ }
+ return hex.toUpperCase();
+ }
+
+ /**
+ * 灏哠tring绫诲瀷杞崲鎴恇yte鏁扮粍
+ */
+ public static byte[] stringToBytes(String str) {
+ if (str == null || str.equals("")) {
+ return null;
+ }
+ byte[] bytes = new byte[str.length() / 2];
+ for (int i = 0; i < bytes.length; i++) {
+ String subStr = str.substring(i * 2, i * 2 + 2);
+ bytes[i] = (byte) Integer.parseInt(subStr, 16);
+ }
+ return bytes;
+ }
+
+ /**
+ * 瑙f瀽杩斿洖鐨勫叿浣撴暟鎹�
+ */
+ public static Double parseData(String dataStr) {
+ byte[] data = stringToBytes(dataStr);
+ // 姣忎釜瀛楄妭-33H澶勭悊
+ for (int i = 0; i < data.length; i++) {
+ data[i] = (byte) (data[i] - 0x33);
+ }
+ StringBuilder str = new StringBuilder();
+ // BCD鐮佽浆鎹㈡垚10杩涘埗
+ for (byte b : data) {
+ str.insert(0, String.format("%02x", b));
+ }
+ return Double.parseDouble(str.toString()) * 0.01;
+ }
+
+}
diff --git a/igds-web/pom.xml b/igds-web/pom.xml
index 52d0223..0ba6140 100644
--- a/igds-web/pom.xml
+++ b/igds-web/pom.xml
@@ -222,6 +222,23 @@
</exclusions>
</dependency>-->
+ <!-- 绉佹湁鍗忚-DLT645鐢佃〃鍗忚-->
+ <dependency>
+ <groupId>com.ld.igds</groupId>
+ <artifactId>igds-protocol-es</artifactId>
+ <version>${igds.version}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>slf4j-log4j12</artifactId>
+ <groupId>org.slf4j</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>log4j</artifactId>
+ <groupId>log4j</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
<!-- 绉佹湁鍗忚-閭︽捣鏅鸿兘
<dependency>
<groupId>com.ld.igds</groupId>
diff --git a/pom.xml b/pom.xml
index f500421..f8b6cd3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,8 @@
<module>igds-protocol-zldz</module>
<!--璐濆崥绮儏鍗忚-->
<module>igds-protocol-beibo</module>
+ <!--鐢佃〃-->
+ <module>igds-protocol-es</module>
<!--鐗╄仈缃戞嫇灞曡澶囧寘-->
<module>igds-protocol-iot</module>
@@ -52,6 +54,7 @@
<!--modbus-tcp-->
<module>igds-protocol-modbus</module>
+
<!-- 鎵嬫満鍖� -->
<module>igds-api-phone</module>
<!-- 鎺ュ彛鍖咃紝鍖呮嫭涓夌淮鎺ュ彛 -->
--
Gitblit v1.9.3