| | |
| | | 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", "å°ç£
-èåTCPåè®®"), |
| | | DEVICE_IDCARD_HTTP("DEVICE_IDCARD_HTTP", "身份è¯-HTTPåè®®"), |
| | |
| | | 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())); |
| | |
| | | |
| | | 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; |
| | |
| | | |
| | | private AnalysisService analysisService; |
| | | |
| | | private static String msgStr = ""; |
| | | @Override |
| | | public void channelActive(ChannelHandlerContext ctx) { |
| | | InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel() |
| | |
| | | InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); |
| | | |
| | | log.info("è¿æ¥ç»ç«¯æçº¿ï¼IP={},port={}", socketAddress.getAddress(), socketAddress.getPort()); |
| | | //ClientEngine.defaultChannel = null; |
| | | ClientEngine.defaultChannel = null; |
| | | |
| | | } |
| | | |
| | |
| | | String strMsg = BytesUtil.bytesToString(bytes); |
| | | |
| | | log.info("ç»ç«¯è¿åä¿¡æ¯ï¼IP={},port={}ï¼msg={}", socketAddress.getAddress(), socketAddress.getPort(), strMsg); |
| | | msgStr+= strMsg; |
| | | |
| | | if(msgStr.endsWith("AABBCC")){ |
| | | |
| | | log.info("æ¶æ¯æ¥æ¶å®æ´å¼å§è§£æï¼IP={},port={}ï¼msg={}", 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("æ¶æ¯ä¸å®æ´ï¼çå¾
æ¶æ¯å®æ´ï¼IP={},port={}ï¼msg={}", 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 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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 |
| | | |
| | | |
| | | å½ä»¤ |
| | | ãReceive 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 |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | |
| | | //æ§è¡å°è£
è§£æ |
| | | 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); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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()); |
| | | } |
| | | }); |
| | | |
| | | // åèµ·å¼æ¥è¿æ¥è¯·æ±ï¼ç»å®è¿æ¥ç«¯å£å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; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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("è¿æ¥ç»ç«¯æçº¿ï¼IP={},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("ç»ç«¯è¿åä¿¡æ¯ï¼IP={},port={}ï¼msg={}", 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(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * å´å®¶ç²®åº2023 |
| | | */ |
| | | package com.fzzy.protocol.wujia; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | #æ¬¡æ°æ®æº |
| | | 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 |
| | |
| | | ########################## Server ########################## |
| | | spring: |
| | | profiles: |
| | | active: devGateway |
| | | active: proGateway |
| | | application: |
| | | name: igds-api |
| | | main: |