From 070b1e9cc8fccd36e7b65720a778ac46e118c792 Mon Sep 17 00:00:00 2001 From: vince <757871790@qq.com> Date: 星期一, 04 三月 2024 09:13:04 +0800 Subject: [PATCH] 增加西山油罐协议 --- src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java | 31 - src/main/resources/application-devGateway.yml | 1 src/main/java/com/fzzy/protocol/xsyg/package-info.java | 4 src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java | 152 ++++++++++++ src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java | 214 +++++++++++++++++ src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java | 66 +++++ src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java | 3 src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java | 190 +++++++++++++++ src/main/java/com/fzzy/protocol/xsyg/1.txt | 56 ++++ src/main/resources/application.yml | 2 10 files changed, 697 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java index 8b4c3a3..4aba277 100644 --- a/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java +++ b/src/main/java/com/fzzy/api/data/GatewayDeviceProtocol.java @@ -19,6 +19,7 @@ GRAIN_YOUXIAN0_2023("GRAIN_YOUXIAN0_2023", "绮儏-娓镐粰涓诲簱鍗忚"), GRAIN_YOUXIAN1_2023("GRAIN_YOUXIAN1_2023", "绮儏-娓镐粰鍒嗗簱鍗忚"), GRAIN_WUJIA_2023("GRAIN_WUJIA_2023", "绮儏-鍚村绮簱鍗忚"), + GRAIN_XSYK_2023("GRAIN_WUJIA_2023", "娌规儏-瑗垮北娌瑰簱鍗忚"), DEVICE_WEIGHT_HTTP("DEVICE_WEIGHT_HTTP", "鍦扮-HTTP鍗忚"), DEVICE_WEIGHT_TCP_YH("DEVICE_WEIGHT_TCP_YH", "鍦扮-鑰�鍗嶵CP鍗忚"), DEVICE_IDCARD_HTTP("DEVICE_IDCARD_HTTP", "韬唤璇�-HTTP鍗忚"), @@ -40,7 +41,7 @@ list.add(new ApiTrigger(GRAIN_YOUXIAN0_2023.getCode(), GRAIN_YOUXIAN0_2023.getName())); list.add(new ApiTrigger(GRAIN_YOUXIAN1_2023.getCode(), GRAIN_YOUXIAN1_2023.getName())); list.add(new ApiTrigger(GRAIN_WUJIA_2023.getCode(), GRAIN_WUJIA_2023.getName())); - + list.add(new ApiTrigger(GRAIN_XSYK_2023.getCode(), GRAIN_XSYK_2023.getName())); list.add(new ApiTrigger(DEVICE_WEIGHT_HTTP.getCode(), DEVICE_WEIGHT_HTTP.getName())); list.add(new ApiTrigger(DEVICE_WEIGHT_TCP_YH.getCode(), DEVICE_WEIGHT_TCP_YH.getName())); list.add(new ApiTrigger(DEVICE_IDCARD_HTTP.getCode(), DEVICE_IDCARD_HTTP.getName())); diff --git a/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java b/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java index 830878b..3fc685b 100644 --- a/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java +++ b/src/main/java/com/fzzy/protocol/wujia/client/ClientHandler.java @@ -2,7 +2,8 @@ import com.fzzy.api.utils.BytesUtil; import com.fzzy.api.utils.SpringUtil; -import com.fzzy.protocol.wujia.analysis.AnalysisService; +import com.fzzy.protocol.youxian0.analysis.AnalysisService; +import com.fzzy.protocol.youxian0.client.ClientEngine; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; @@ -15,7 +16,6 @@ private AnalysisService analysisService; - private static String msgStr = ""; @Override public void channelActive(ChannelHandlerContext ctx) { InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel() @@ -32,7 +32,7 @@ InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort()); - //ClientEngine.defaultChannel = null; + ClientEngine.defaultChannel = null; } @@ -45,26 +45,17 @@ String strMsg = BytesUtil.bytesToString(bytes); log.info("缁堢杩斿洖淇℃伅锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg); - msgStr+= strMsg; - if(msgStr.endsWith("AABBCC")){ - - log.info("娑堟伅鎺ユ敹瀹屾暣寮�濮嬭В鏋愶紝IP={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), msgStr); - - if (null == analysisService) { - analysisService = SpringUtil.getBean(AnalysisService.class); - } - try{ - analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), msgStr); - }catch (Exception e){ - log.error(e.getMessage(),e); - } - msgStr = ""; - }else{ - log.info("娑堟伅涓嶅畬鏁达紝绛夊緟娑堟伅瀹屾暣锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg); - + if (null == analysisService) { + analysisService = SpringUtil.getBean(AnalysisService.class); } + try{ + analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg); + }catch (Exception e){ + log.error(e.getMessage(),e); + } + } @Override diff --git a/src/main/java/com/fzzy/protocol/xsyg/1.txt b/src/main/java/com/fzzy/protocol/xsyg/1.txt new file mode 100644 index 0000000..059e067 --- /dev/null +++ b/src/main/java/com/fzzy/protocol/xsyg/1.txt @@ -0,0 +1,56 @@ +01 01 3C 01 1E 01 11 01 07 00 9E 00 9C 00 9B 00 95 FF FF 15 E9 AA BB CC +02 01 4F 01 2C 01 1C 01 0E 01 03 00 FB 00 F2 00 8E FF FF 25 70 AA BB CC +03 01 57 01 37 00 A8 00 A2 00 A3 00 9F 00 9C 00 97 FF FF 0B 39 AA BB CC +04 01 2F 01 22 01 13 01 07 00 FB 00 F2 00 89 00 8D FF FF 21 B8 AA BB CC +05 01 46 01 2B 01 19 00 9E 00 9F 00 9C 00 99 00 96 FF FF 0E 82 AA BB CC +06 01 53 01 35 01 23 00 A0 00 9F 00 9F 00 9B 00 96 FF FF 0E BF AA BB CC +07 01 47 01 23 01 0E 01 01 00 F6 00 EE 00 E5 00 87 FF FF 26 27 AA BB CC +08 01 46 01 29 01 17 01 0A 01 01 00 97 00 97 00 90 FF FF 17 AD AA BB CC +09 01 5A 00 FD 00 A2 00 A1 00 9C 00 9A 00 97 00 92 FF FF 06 86 AA BB CC +0A 01 41 01 28 01 1A 00 CF 01 05 00 A6 00 A2 00 A1 FF FF 0E AD AA BB CC +0B 01 5D 00 C2 00 A2 00 A2 00 9E 00 9B 00 9A 00 92 FF FF 05 F5 AA BB CC +0C 01 2E 01 17 00 A5 00 A5 00 A0 00 9C 00 99 00 93 FF FF 07 A9 AA BB CC +0E 01 5D 01 38 00 A5 00 A5 00 A1 00 9F 00 9B 00 97 FF FF 07 8A AA BB CC +0F 01 46 01 22 01 10 01 02 00 99 00 9A 00 95 00 92 FF FF 12 3E AA BB CC +10 01 52 01 2B 00 AF 00 A0 00 A1 00 9E 00 9B 00 96 FF FF 0B 2D AA BB CC +11 01 0A 00 97 00 8D 00 87 FF FF FF FF FF FF FF FF FF FF 06 80 AA BB CC +12 01 42 01 2A 01 1A 01 0E 00 97 00 9B 00 99 00 95 00 90 15 1D AA BB CC +13 01 1E 01 0E 00 F9 00 E8 00 93 00 92 00 93 FF FF FF FF 14 0F AA BB CC +14 01 48 01 2B 01 1A 00 A0 00 A0 00 9C 00 9A 00 96 00 94 0D 8E AA BB CC +15 01 22 01 14 01 00 00 9D 00 9C 00 98 00 92 FF FF FF FF 10 43 AA BB CC +16 01 4B 01 2D 01 1E 00 A2 00 A0 00 9F 00 9B 00 99 00 96 0D 26 AA BB CC +17 00 EC 00 8B 00 84 00 85 FF FF FF FF FF FF FF FF FF FF 07 9D AA BB CC +18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA BB CC +19 00 FA 00 EB 00 92 00 8B FF FF FF FF FF FF FF FF FF FF 0D FD AA BB CC +1A 01 0A 00 BB 00 AF 00 91 FF FF FF FF FF FF FF FF FF FF 07 E7 AA BB CC + + +鍛戒护 +銆怰eceive from 10.0.0.17 : 49853銆戯細 +FC 64 01 01 00 09 01 1A 10 BD DB +FC 64 02 02 00 09 01 1A 10 BD DB +FC 64 03 03 00 09 01 1A 10 BD DB +FC 64 04 04 00 09 01 1A 10 BD DB +FC 64 05 05 00 09 01 1A 10 BD DB +FC 64 06 06 00 09 01 1A 10 BD DB +FC 64 07 07 00 09 01 1A 10 BD DB +FC 64 08 08 00 09 01 1A 10 BD DB +FC 64 09 09 00 09 01 1A 10 BD DB +FC 64 0A 0A 00 09 01 1A 10 BD DB +FC 64 0B 0B 00 09 01 1A 10 BD DB +FC 64 0C 0C 00 09 01 1A 10 BD DB +FC 64 0D 0D 00 09 01 1A 10 BD DB +FC 64 0E 0E 00 09 01 1A 10 BD DB +FC 64 0F 0F 00 09 01 1A 10 BD DB +FC 64 10 10 00 09 01 1A 10 BD DB +FC 64 11 11 00 09 01 1A 10 BD DB +FC 64 12 12 00 09 01 1A 10 BD DB +FC 64 13 13 00 09 01 1A 10 BD DB +FC 64 14 14 00 09 01 1A 10 BD DB +FC 64 15 15 00 09 01 1A 10 BD DB +FC 64 16 16 00 09 01 1A 10 BD DB +FC 64 17 17 00 09 01 1A 10 BD DB +FC 64 18 18 00 09 01 1A 10 BD DB +FC 64 19 19 00 09 01 1A 10 BD DB +FC 64 1A 1A 00 09 01 1A 10 BD DB + diff --git a/src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java b/src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java new file mode 100644 index 0000000..e4b44fb --- /dev/null +++ b/src/main/java/com/fzzy/protocol/xsyg/analysis/AnalysisService.java @@ -0,0 +1,214 @@ +package com.fzzy.protocol.xsyg.analysis; + +import com.alibaba.fastjson.JSONObject; +import com.fzzy.api.data.GatewayDeviceType; +import com.fzzy.api.utils.BytesUtil; +import com.fzzy.api.utils.NumberUtil; +import com.fzzy.gateway.GatewayUtils; +import com.fzzy.gateway.api.GatewayDeviceReportService; +import com.fzzy.gateway.api.GatewayRemoteManager; +import com.fzzy.gateway.data.BaseReqData; +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 com.fzzy.protocol.ProtocolUtils; +import com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Component(AnalysisService.BEAN_ID) +public class AnalysisService { + + public static final String BEAN_ID = "xsyg.analysisService"; + + + @Resource + private GatewayRemoteManager gatewayRemoteManager; + + + /** + * 绮儏鎺ョ嚎 + * + * @param address + * @param port + * @param strMsg + */ + public void analysis(InetAddress address, int port, String strMsg) { + + if (strMsg.startsWith("FE")) { + + //DO NOTHING + } else { + this.analysisGrainStep1(address, strMsg); + } + } + + /** + *byte(i) 01 7C 01 67 01 66 01 81 銆傘�傘�� 02 89 AA BB CC + * byte(i)--------鍖呭ご + * AA BB CC-----鍖呭熬 + * 钃濊壊鏁版嵁姣忎袱涓瓧鑺傝〃绀轰竴涓祴娓╃偣鐨勫�硷紙杞崲涓哄崄杩涘埗鍚�*0.0625锛�.鍏辨湁cwcs[1]*2涓瓧鑺傘�� + * 02 89 涓や釜瀛楄妭琛ㄧず璇ユ补缃愮殑绌洪珮鍊硷紙楂樹綅鍦ㄥ墠锛夊崟浣嶆绫炽�傦紙FF FF鎴�00 00琛ㄧず鏁呴殰锛岃鍦ㄨ蒋浠朵笂鍋氬嚭澶勭悊锛屾妸璇ョ┖楂樺�艰祴鍊兼垚浼犳劅鍣ㄥ畨瑁呴珮搴︼紝琛ㄧず璇ョ綈鏄┖缃愶級銆傜敤H鍊煎噺鍘昏鏁版嵁锛屽緱鍒版补浣嶉珮搴︺�� + * + * @param strMsg + */ + private void analysisGrainStep1(InetAddress address, String strMsg) { + strMsg = strMsg.substring(0,strMsg.length()-6); + log.info("瀹屾暣鐨勬暟鎹綋锛�"+strMsg); + int start = 0; + int len = 1 * 2; + String tag = strMsg.substring(start, start + 2); + int depotIdSys = BytesUtil.hexToInt(tag); + + BaseReqData reqData = ProtocolUtils.getSyncReq(depotIdSys + ""); + + if (null == reqData) { + log.error("---------娌℃湁鑾峰彇鍒拌姹備俊鎭紝涓嶆墽琛岃В鏋�------{}", address); + return; + } + + //浠撳唴婀垮害 + + + GatewayDevice device = reqData.getDevice(); + + String[] attCable = device.getCableRule().split("-"); + int cableZ = Integer.valueOf(attCable[0]); + int cableY = Integer.valueOf(attCable[1]); + int cableX = Integer.valueOf(attCable[2]); + log.info("z={},x={},y={}", cableZ, cableX, cableY); + + int sumNum = cableZ * cableY * cableX; + //绮俯淇℃伅 + start = 2; + len = 2 * 2; + List<Double> points = new ArrayList<>(); + double temp = 0.0; + for (int i = 0; i < sumNum; i++) { + start = i * 2 * 2 +2; + tag = strMsg.substring(start, start + len); + if("FFFF".equals(tag)){ + points.add(-100.00); + continue; + } + temp = BytesUtil.hexToInt(BytesUtil.tran_LH(tag)) * 0.0625; + temp = NumberUtil.keepPrecision(temp, 1); + points.add(temp); + } + double height = 0.0; + tag = strMsg.substring(strMsg.length()-4); + height = NumberUtil.keepPrecision((double) (BytesUtil.hexToInt(tag) /1000), 2); + + //鎵ц灏佽瑙f瀽 + analysisGrainStep2(reqData, cableZ, cableY, cableX, points, -100, -100,height); + } + + private void analysisGrainStep2(BaseReqData reqData, int cableZ, int cableY, int cableX, List<Double> points, double hIn, double tIn,double height) { + GatewayDevice device = reqData.getDevice(); + int sumNum = points.size(); + + //鏁版嵁灏佽 + 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(reqData.getMessageId()); + grain.setHeaders(headers); + + + GrainOutPut outPut = new GrainOutPut(); + + + double max = com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MAX_TEMP, min = com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MIN_TEMP, sumT = 0.0; + + List<GrainTemp> temperature = new ArrayList<>(); + //鏍瑰彿 + int cableNum = 1, position = 0; + + double curTemp; + int x = 0, y = 0, z = 0; + for (int i = 0; i < sumNum; i++) { + curTemp = points.get(i); + 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 + "")); + + //姹傛渶澶ф渶灏忓�� + if (curTemp < -900) { + sumNum--; + } else { + sumT += curTemp; + if (curTemp > max) { + max = curTemp; + } + if (curTemp < min) { + min = curTemp; + } + } + } + + if (sumNum == 0) { + sumNum = 1; + log.warn("---褰撳墠绮儏閲囬泦寮傚父--"); + } + //杩囨护姣旇緝鐢ㄧ殑鏈�澶ф渶灏忓�� + if (max == com.fzzy.protocol.bhzn.v0.cmd.ReMessageBuilder.MAX_TEMP) { + max = 0.0; + } + if (min == ReMessageBuilder.MIN_TEMP) { + min = 0.0; + } + + outPut.setTemperature(temperature); + outPut.setAvgTemperature(NumberUtil.keepPrecision((sumT / sumNum), 1) + ""); + outPut.setMinTemperature(min + ""); + outPut.setMaxTemperature(min + ""); + + + JSONObject properties = new JSONObject(); + properties.put("data", outPut); + properties.put("timestamp", grain.getTimestamp()); + + properties.put("liquidHeight", height); + + grain.setProperties(properties); + + //灏佽濂界殑鏁版嵁 + log.info("---娴呭渾浠撳皝瑁呭畬鎴�----寮�濮嬫墽琛屾帹閫�"); + + reqData.setData(JSONObject.toJSONString(grain)); + + doPushGrain(reqData); + } + + private void doPushGrain(BaseReqData reqData) { + + GatewayDeviceReportService reportService = gatewayRemoteManager.getDeviceReportService(reqData.getDevice().getPushProtocol()); + if (null == reportService) { + log.error("------------绮儏鎺ㄩ�佸け璐ワ紝绯荤粺涓嶅瓨鍦ㄥ綋鍓嶅崗璁墽琛岀被----{}", reqData.getDevice().getDeviceName()); + return; + } + + reportService.reportGrainData(reqData); + } +} diff --git a/src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java b/src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java new file mode 100644 index 0000000..561abf7 --- /dev/null +++ b/src/main/java/com/fzzy/protocol/xsyg/client/ClientEngine.java @@ -0,0 +1,152 @@ +package com.fzzy.protocol.xsyg.client; + +import com.fzzy.api.utils.BytesUtil; +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; + +import java.util.HashMap; +import java.util.Map; + +/** + * 娓镐粰涓诲簱锛岄�氳鍗忚 + */ +@Slf4j +public class ClientEngine implements Runnable { + + /** + * 瀹㈡埛绔ā寮忓垱寤虹殑杩炴帴閫氶亾 + */ + public static Map<String, Channel> clientChannelMap = new HashMap<>(); + + + private String host; + private int port; + public static Channel defaultChannel; + + + public ClientEngine(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 { + + startClient(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void startClient() throws Exception { + if(defaultChannel != null){ + log.info("-----IP={},杩炴帴瀛樺湪锛岀洿鎺ヤ娇鐢�",host); + return; + } + 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.defaultChannel = channelFuture.channel(); + // channelFuture.channel().closeFuture().sync(); + + this.add2ChannelMap(host, defaultChannel); + + channelFuture.addListener(new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture arg0) throws Exception { + if (channelFuture.isSuccess()) { + log.info("-----IP={},杩炴帴鎴愬姛",host); + } else { + log.info("-----IP={},杩炴帴澶辫触锛岃嚜鍔ㄥ叧闂嚎绋�",host); + channelFuture.cause().printStackTrace(); + group.shutdownGracefully(); // 鍏抽棴绾跨▼缁� + } + } + }); + } + + public InvokeResult send(byte[] array) throws InterruptedException { + + if (null == defaultChannel) { + return InvokeResult.SOCKET_NOT_CREATE; + } + if (!defaultChannel.isActive()) { + return InvokeResult.CHANNEL_CLOSED; + } + + defaultChannel.writeAndFlush(Unpooled.copiedBuffer(array)).sync(); + + return InvokeResult.SUCCESS; + } + + + public static Channel getChannel() { + return defaultChannel; + } + + public void add2ChannelMap(String key, Channel channel) { + clientChannelMap.put(key, channel); + } + + /** + * 濡傛灉 + * + * @param key + * @return + */ + public static Channel getChannel(String key) { + Channel channel = clientChannelMap.get(key); + if (null == channel) return null; + if (channel.isActive()) { + return channel; + } else { + channel.close(); + defaultChannel = null; + } + return null; + } + + public static InvokeResult send2(String hex,Channel channel) throws InterruptedException { + if (null == channel) { + return InvokeResult.SOCKET_NOT_CREATE; + } + if (!channel.isActive()) { + return InvokeResult.CHANNEL_CLOSED; + } + channel.writeAndFlush(Unpooled.copiedBuffer(BytesUtil.hexStrToBytes(hex))).sync(); + return InvokeResult.SUCCESS; + } + + +} diff --git a/src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java b/src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java new file mode 100644 index 0000000..339b0e6 --- /dev/null +++ b/src/main/java/com/fzzy/protocol/xsyg/client/ClientHandler.java @@ -0,0 +1,66 @@ +package com.fzzy.protocol.xsyg.client; + +import com.fzzy.api.utils.BytesUtil; +import com.fzzy.api.utils.SpringUtil; +import com.fzzy.protocol.youxian0.analysis.AnalysisService; +import com.fzzy.protocol.youxian0.client.ClientEngine; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; + +import java.net.InetSocketAddress; + + +@Slf4j +public class ClientHandler extends SimpleChannelInboundHandler<Object> { + + private AnalysisService analysisService; + + @Override + public void channelActive(ChannelHandlerContext ctx) { + InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel() + .remoteAddress(); + + log.info("杩炴帴缁堟垚鍔燂紝IP={},port={}", socketAddress.getAddress() + .getHostAddress(), socketAddress.getPort()); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + + InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); + + log.info("杩炴帴缁堢鎺夌嚎锛孖P={},port={}", socketAddress.getAddress(), socketAddress.getPort()); + ClientEngine.defaultChannel = null; + + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception { + byte[] bytes = (byte[]) msg; + + InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); + + String strMsg = BytesUtil.bytesToString(bytes); + + log.info("缁堢杩斿洖淇℃伅锛孖P={},port={}锛宮sg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg); + + if (null == analysisService) { + analysisService = SpringUtil.getBean(AnalysisService.class); + } + + try{ + analysisService.analysis(socketAddress.getAddress(), socketAddress.getPort(), strMsg); + }catch (Exception e){ + log.error(e.getMessage(),e); + } + + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + ctx.close(); + } + +} diff --git a/src/main/java/com/fzzy/protocol/xsyg/package-info.java b/src/main/java/com/fzzy/protocol/xsyg/package-info.java new file mode 100644 index 0000000..0d44dd6 --- /dev/null +++ b/src/main/java/com/fzzy/protocol/xsyg/package-info.java @@ -0,0 +1,4 @@ +/** + * 鍚村绮簱2023 + */ +package com.fzzy.protocol.wujia; \ No newline at end of file diff --git a/src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java b/src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java new file mode 100644 index 0000000..cf1dd38 --- /dev/null +++ b/src/main/java/com/fzzy/protocol/xsyg/service/XsygGatewayGrainService.java @@ -0,0 +1,190 @@ +package com.fzzy.protocol.xsyg.service; + +import com.fzzy.api.data.GatewayDeviceProtocol; +import com.fzzy.gateway.api.GatewaySyncGranService; +import com.fzzy.gateway.data.BaseReqData; +import com.fzzy.gateway.data.BaseResp; +import com.fzzy.gateway.entity.GatewayDevice; +import com.fzzy.protocol.ProtocolUtils; +import com.fzzy.protocol.wujia.client.ClientEngine; +import com.ld.io.api.InvokeResult; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * 绮儏閲囬泦鍏ュ彛 + */ +@Slf4j +@Component +public class XsygGatewayGrainService implements GatewaySyncGranService { + + + @Override + public String getGrainProtocol() { + return GatewayDeviceProtocol.GRAIN_XSYK_2023.getCode(); + } + + + /** + * 浠撳簱鍛戒护 + */ + public static Map<String, String> depotGrainCmdMap = new HashMap<>(); + + + static { + depotGrainCmdMap.put("KEY_1", "FC6401010009011A10BDDB"); + depotGrainCmdMap.put("KEY_2", "FC6402020009011A10BDDB"); + depotGrainCmdMap.put("KEY_3", "FC6403030009011A10BDDB"); + depotGrainCmdMap.put("KEY_4", "FC6404040009011A10BDDB"); + depotGrainCmdMap.put("KEY_5", "FC6405050009011A10BDDB"); + depotGrainCmdMap.put("KEY_6", "FC6406060009011A10BDDB"); + depotGrainCmdMap.put("KEY_7", "FC6407070009011A10BDDB"); + depotGrainCmdMap.put("KEY_8", "FC6408080009011A10BDDB"); + depotGrainCmdMap.put("KEY_9", "FC6409090009011A10BDDB"); + depotGrainCmdMap.put("KEY_10", "FC640A0A0009011A10BDDB"); + depotGrainCmdMap.put("KEY_11", "FC640B0B0009011A10BDDB"); + depotGrainCmdMap.put("KEY_12", "FC640C0C0009011A10BDDB"); + depotGrainCmdMap.put("KEY_13", "FC640D0D0009011A10BDDB"); + depotGrainCmdMap.put("KEY_14", "FC640E0E0009011A10BDDB"); + depotGrainCmdMap.put("KEY_15", "FC640F0F0009011A10BDDB"); + depotGrainCmdMap.put("KEY_16", "FC6410100009011A10BDDB"); + depotGrainCmdMap.put("KEY_17", "FC6411110009011A10BDDB"); + depotGrainCmdMap.put("KEY_18", "FC6412120009011A10BDDB"); + depotGrainCmdMap.put("KEY_19", "FC6413130009011A10BDDB"); + depotGrainCmdMap.put("KEY_20", "FC6414140009011A10BDDB"); + depotGrainCmdMap.put("KEY_21", "FC6415150009011A10BDDB"); + depotGrainCmdMap.put("KEY_22", "FC6416160009011A10BDDB"); + depotGrainCmdMap.put("KEY_23", "FC6417170009011A10BDDB"); + depotGrainCmdMap.put("KEY_24", "FC6418180009011A10BDDB"); + depotGrainCmdMap.put("KEY_25", "FC6419190009011A10BDDB"); + depotGrainCmdMap.put("KEY_26", "FC641A1A0009011A10BDDB"); + } + + /** + * FC 64 01 01 00 09 01 1A 10 BD DB + * FC 64 02 02 00 09 01 1A 10 BD DB + * FC 64 03 03 00 09 01 1A 10 BD DB + * FC 64 04 04 00 09 01 1A 10 BD DB + * FC 64 05 05 00 09 01 1A 10 BD DB + * FC 64 06 06 00 09 01 1A 10 BD DB + * FC 64 07 07 00 09 01 1A 10 BD DB + * FC 64 08 08 00 09 01 1A 10 BD DB + * FC 64 09 09 00 09 01 1A 10 BD DB + * FC 64 0A 0A 00 09 01 1A 10 BD DB + * FC 64 0B 0B 00 09 01 1A 10 BD DB + * FC 64 0C 0C 00 09 01 1A 10 BD DB + * FC 64 0D 0D 00 09 01 1A 10 BD DB + * FC 64 0E 0E 00 09 01 1A 10 BD DB + * FC 64 0F 0F 00 09 01 1A 10 BD DB + * FC 64 10 10 00 09 01 1A 10 BD DB + * FC 64 11 11 00 09 01 1A 10 BD DB + * FC 64 12 12 00 09 01 1A 10 BD DB + * FC 64 13 13 00 09 01 1A 10 BD DB + * FC 64 14 14 00 09 01 1A 10 BD DB + * FC 64 15 15 00 09 01 1A 10 BD DB + * FC 64 16 16 00 09 01 1A 10 BD DB + * FC 64 17 17 00 09 01 1A 10 BD DB + * FC 64 18 18 00 09 01 1A 10 BD DB + * FC 64 19 19 00 09 01 1A 10 BD DB + * FC 64 1A 1A 00 09 01 1A 10 BD DB + * + * @param reqData + * @return + */ + @Override + 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 { + //Step 璇锋眰淇℃伅鏀惧叆鍐呭瓨 + ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData); + + String hexStr = buildGrainCmd(device); + + Channel channel = ClientEngine.getChannel(); + if (null == channel) { + ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort()); + clientEngine.start(); + Thread.sleep(1000); + channel = clientEngine.getChannel(); + } + + InvokeResult message = ClientEngine.send2(hexStr, channel); + + log.error("骞冲彴------>>>>涓绘帶锛氬彂閫佺伯鎯呮娴嬪懡浠�-{}---{}", message, hexStr); + + // 灏佽杩斿洖淇℃伅 + if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) { + log.error("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触{}", message.getMessage()); + resp.setCode(500); + resp.setMsg("骞冲彴------>>>>鎺у埗鏌滐細鍙戦�佺伯鎯呮娴嬪懡浠�-澶辫触锛�" + message.getMessage()); + } + } 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(); + return resp; + } + + /** + * 鐢熸垚绮儏閲囬泦鍛戒护 + * + * @param device + * @return + */ + private String buildGrainCmd(GatewayDevice device) { + + String key = "KEY_" + device.getDepotIdSys(); + + return depotGrainCmdMap.get(key); + + } + + @Override + public BaseResp syncConf(BaseReqData reqData) { + return new BaseResp(); + } + + @Override + public BaseResp writeConf(BaseReqData reqData) { + return new BaseResp(); + } + + @Override + public BaseResp initCable(BaseReqData reqData) { + return new BaseResp(); + } + + @Override + public BaseResp disconnect(BaseReqData reqData) { + return new BaseResp(); + } + + @Override + public BaseResp transparent(BaseReqData reqData) { + return new BaseResp(); + } +} diff --git a/src/main/resources/application-devGateway.yml b/src/main/resources/application-devGateway.yml index d13cc61..7e4b1e3 100644 --- a/src/main/resources/application-devGateway.yml +++ b/src/main/resources/application-devGateway.yml @@ -12,6 +12,7 @@ #娆℃暟鎹簮 secondary: url: jdbc:mysql://127.0.0.1:3306/igds_5012?useUnicode=true&useSSL=false&characterEncoding=utf-8 + username: root password: Abc123.. driver-class-name: com.mysql.jdbc.Driver diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 03f1270..c91a75f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,7 +1,7 @@ ########################## Server ########################## spring: profiles: - active: devGateway + active: proGateway application: name: igds-api main: -- Gitblit v1.9.3