igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
@@ -31,6 +31,7 @@ TCP_BHZH_GRAIN_V2("TCP_BHZH_GRAIN_V2", "馿µ·æºè½æçº¿çV2"), 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", "è´åç²®æ åæºæå¡ç«¯åè®®"), FZZY_OPENAPI_HTTP("FZZY_OPENAPI_HTTP", "飿£è´è¿API-HTTPåè®®"); igds-protocol-beibo/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ <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-beibo</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> <!-- å¼å ¥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> igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/RemoteGrainServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,61 @@ package com.ld.igds.protocol.beibo.grain; import com.ld.igds.io.RemoteGrainService; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.io.constant.ProtocolEnum; import com.ld.igds.io.request.CheckGrainRequest; import com.ld.igds.io.response.GrainResponse; import com.ld.igds.protocol.beibo.grain.builder.CommandBuild; import com.ld.igds.protocol.beibo.grain.client.BeiboClientEngine; import com.ld.igds.util.BytesUtil; import com.ld.io.api.InvokeResult; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; /** * è´åç²®æ åæºåè®® * * @author czt */ @Slf4j @Component(RemoteGrainServiceImpl.BEAN_ID) public class RemoteGrainServiceImpl implements RemoteGrainService { public static final String BEAN_ID = "beiboGrain.remoteGrainService"; @Override public String getProtocol() { return ProtocolEnum.TCP_BEIBO_GRAIN_V1.getCode(); } @Override public GrainResponse checkGrain(CheckGrainRequest request) { try { log.info("è´åç²®æ åæºå¼å§æ£æµï¼åæº{}çIP={},端å£={}",request.getSerId(),request.getIp(),request.getPort()); BeiboClientEngine beibo = new BeiboClientEngine(request.getIp(),request.getPort()); beibo.start(); Thread.sleep(3000); //çæç²®æ å½ä»¤ String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId(), request.getDepotId()); InvokeResult result = beibo.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 GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), "å端å¼å¸¸ï¼" + e.getMessage()); } } } igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/analysis/AnalysisService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,125 @@ package com.ld.igds.protocol.beibo.grain.analysis; import com.ld.igds.common.CoreCommonService; import com.ld.igds.common.CoreSerService; import com.ld.igds.common.dto.THDto; import com.ld.igds.constant.BizType; import com.ld.igds.grain.GrainUtil; import com.ld.igds.io.notify.NotifyGrainInvoker; import com.ld.igds.models.DepotConf; import com.ld.igds.models.DeviceSer; import com.ld.igds.models.DicSysConf; import com.ld.igds.order.ExeOrderService; import com.ld.igds.order.data.ExeRequest; import com.ld.igds.protocol.beibo.grain.util.BeiboGrainServerUtils; import com.ld.igds.util.ContextUtil; import com.ld.igds.warn.WarnUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; /** * å议解æ * * @author vince */ @Slf4j @Component(AnalysisService.BEAN_ID) public class AnalysisService { /** * é对åå ç²®æ æ¥æè¿è¡å°è£ */ public static Map<String, String> contextMapGrain = new HashMap<>(); /** * ç¨äºåæ¾è¿åç仿¸©ä»æ¹¿ä¿¡æ¯ */ public static Map<String, THDto> contextMapTH = new HashMap<>(); public static final String BEAN_ID = "beiboGrain.analysisService"; @Autowired private CoreSerService coreSerService; @Autowired private CoreCommonService commonService; @Autowired private NotifyGrainInvoker notifyGrainInvoker; @Autowired private GrainUtil grainUtil; @Autowired private WarnUtils warnUtils; @Autowired private ExeOrderService exeOrderService; /** * * @param result */ public void analysis(String result){ log.info("è´ååæº------->>å¹³å°ï¼ä¿¡æ¯æ¥æ={}", result); if(!result.startsWith(BeiboGrainServerUtils.MSG_START)){ log.error("è´ååæº------->>å¹³å°ï¼è§£æç²®æ å¤±è´¥ï¼æ¥æèµ·å§ç¬¦é误ï¼ä¸è§£æ"); } //å»é¤èµ·å§ç¬¦ result = result.substring(9*2-1); analysisGrain(result); } private void analysisGrain(String result) { try { //æªååæºå°å String serId = result.substring(0, 2); //æ ¹æ®åæºå°åè·ååæºä¿¡æ¯ DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(),serId); if (ser == null) { log.error("è´ååæº-------->>å¹³å°ï¼è§£æç²®æ å¤±è´¥ï¼æªè·åå°ç³»ç»ç²®æ 主æºé ç½®ï¼" + serId); return; } // é¦å è·åå°ç³»ç»åæ°ï¼å¤ææ¯å¦éè¦æ¹æ¬¡èªå¨ä¼å DicSysConf sysConf = commonService.getCacheSysConf(ser.getCompanyId()); List<ExeRequest> list = exeOrderService.getInProgressOrderBySerId(BizType.GRAIN.getCode(), ser.getId()); if (null == list || list.isEmpty()) { String info = "ç²®æ è§£æå¤±è´¥:åæº=" + ser.getName() + "没æè·åå°æå±ä»åºä¿¡æ¯ã"; log.error("è´ååæº------>>>å¹³å°ï¼" + info); return; } //è·åé对å½åä»åºçå½ä»¤ ExeRequest exeRequest = list.get(0); if (null == exeRequest) { String info = "ç²®æ è§£æå¤±è´¥:åæº=" + ser.getName() + "没æè·ååå²å½ä»¤ã"; log.error("è´ååæº------>>>å¹³å°ï¼" + info); return; } DepotConf depotConf = commonService.getCacheDepotConf(exeRequest.getCompanyId(), exeRequest.getDepotId()); if (null == depotConf) { String info = "ç²®æ è§£æå¤±è´¥:åæº=" + ser.getName() + "没æè·åå°ç²®æ åæ°é 置信æ¯ã"; log.error("è´ååæº------>>>å¹³å°ï¼" + info); return; } // ç²®æ çæ¹æ¬¡å·éæ°æ ¹æ®é¢çè°æ´ String batchId = ContextUtil.getBatchIdByFireq(depotConf.getGrainFreq()); //TODO æ ¹æ®å®é æ¥æï¼å¾ å®ç° } catch (Exception e) { log.error(e.getMessage(), e); } } } igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/CommandBuild.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,54 @@ package com.ld.igds.protocol.beibo.grain.builder; import com.ld.igds.protocol.beibo.grain.util.BeiboGrainServerUtils; import com.ld.igds.util.BytesUtil; /** * å½ä»¤çæ * * @author czt */ public class CommandBuild { private final static CommandBuild instance = new CommandBuild(); private CommandBuild() { } public static CommandBuild getInstance() { return instance; } /** * ç²®æ ééå½ä»¤ * * @param grainAddr ç²®æ åæºå°å * @param deptId ä»åºç¼å·å°å * @return */ public static String getMsgCheck(String grainAddr, String deptId) { StringBuffer sb = new StringBuffer(); //èµ·å§ç¬¦ sb.append(BeiboGrainServerUtils.MSG_START); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.intToHexStr1(i)); //æ§å¶å½ä»¤ sb.append("82"); //åæºå°å sb.append(BytesUtil.intToHexStr1(i)); //æµæ¸©çµç¼å±æ°ï¼ä¸ç¥éçµç¼éé屿°æ¶ï¼é»è®¤00æè FF sb.append("00"); //ç»å°¾ç¬¦ sb.append(BeiboGrainServerUtils.MSG_END); return sb.toString(); } } igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/BeiboClientEngine.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,117 @@ package com.ld.igds.protocol.beibo.grain.client; import com.ld.igds.util.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; /** * è´åç²®æ åè®®ï¼åæºä¸ºæå¡ç«¯ï¼å¹³å°ä¸ºå®¢æ·ç«¯ä¸»å¨è¿æ¥ * * @author czt */ public class BeiboClientEngine implements Runnable { private String host; private int port; // public ChannelFuture channelFuture; public Channel channel; public BeiboClientEngine(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()); } }); // åèµ·å¼æ¥è¿æ¥è¯·æ±ï¼ç»å®è¿æ¥ç«¯å£å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()) { System.out.println("è¿æ¥æå¡å¨æå"); } else { System.out.println("è¿æ¥æå¡å¨å¤±è´¥"); 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 static void main(String[] args) { try { String msg = "000000000006010600070012"; BeiboClientEngine test = new BeiboClientEngine( "192.168.1.95", 9999); test.start(); msg = "BB BB BB BB"; // Thread.sleep(3000L); test.send(BytesUtil.hexStrToBytes(msg)); } catch (InterruptedException e) { e.printStackTrace(); } } public Channel getChannel() { return channel; } } igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/ClientHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.ld.igds.protocol.beibo.grain.client; import com.ld.igds.protocol.beibo.grain.analysis.AnalysisService; import com.ld.igds.util.BytesUtil; 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.beans.factory.annotation.Autowired; import java.net.InetSocketAddress; /** * Handles a client-side channel. */ public class ClientHandler extends SimpleChannelInboundHandler<Object> { @Autowired 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("è´åç²®æ åæºæå¼è¿æ¥ï¼IP={},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(); //è§£æ analysisService.analysis(result); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { ctx.close(); } } igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/package-info.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,6 @@ /** * è´åç²®æ åè®®-åæºä¸ºæå¡ç«¯ */ package com.ld.igds.protocol.beibo.grain; igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/util/BeiboGrainServerUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.ld.igds.protocol.beibo.grain.util; /** * å·¥å ·ç±» * * @author czt */ public class BeiboGrainServerUtils { public static String MSG_START = "00000000FFEB90FEAA"; //èµ·å§ç¬¦ public static String MSG_END = "00000000000000000000000000"; //ç»å°¾ç¬¦ } igds-web/pom.xml
@@ -168,6 +168,23 @@ </exclusions> </dependency> <!-- ç§æåè®®-è´åç²®æ <dependency> <groupId>com.ld.igds</groupId> <artifactId>igds-protocol-beibo</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> @@ -252,54 +269,54 @@ </plugin> <!-- YUI Compressor Mavenå缩æä»¶ å¼åå ä¸å®ç¨--> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> <version>1.5.1</version> <executions> <execution> <goals> <goal>compress</goal> </goals> </execution> </executions> <configuration> <encoding>UTF-8</encoding> <!--䏿¾ç¤ºjså¯è½çé误 --> <jswarn>false</jswarn> <!--æ¯å¦æ··æ· --> <nomunge>true</nomunge> <!--è¥åå¨å·²å缩çæä»¶ï¼ä¼å å¯¹æ¯æºæä»¶æ¯å¦ææ¹å¨ ææ¹å¨ä¾¿åç¼©ï¼æ æ¹å¨å°±ä¸å缩 --> <force>false</force> <!--卿å®çåå·åæå ¥æ°è¡ --> <linebreakpos>-1</linebreakpos> <!--å缩ä¹åå æ§è¡èåæä»¶æä½ --> <preProcessAggregates>true</preProcessAggregates> <!--å缩åä¿åæä»¶åç¼ æ åç¼ --> <nosuffix>true</nosuffix> <!--æºç®å½ï¼å³éåç¼©çæ ¹ç®å½ --> <sourceDirectory>src/main/resources</sourceDirectory> <!--è¾åºç®å½ï¼å³å缩åçç®å½ --> <outputDirectory>target/classes</outputDirectory> <force>true</force> <!--å缩jsåcssæä»¶ --> <includes> <include>**/*.js</include> <include>**/*.css</include> </includes> <!-- 以ä¸ç®å½åæä»¶ä¸ä¼è¢«å缩 --> <excludes> <exclude>**/*.min.js</exclude> <exclude>**/*.min.css</exclude> <exclude>**/d7/**</exclude> <exclude>**/dorado-home/**</exclude> <exclude>**/bdf2/**</exclude> <exclude>**/css/**</exclude> <exclude>**/js/**</exclude> <exclude>**/plugins/**</exclude> </excludes> </configuration> </plugin> <!-- <plugin>--> <!-- <groupId>net.alchim31.maven</groupId>--> <!-- <artifactId>yuicompressor-maven-plugin</artifactId>--> <!-- <version>1.5.1</version>--> <!-- <executions>--> <!-- <execution>--> <!-- <goals>--> <!-- <goal>compress</goal>--> <!-- </goals>--> <!-- </execution>--> <!-- </executions>--> <!-- <configuration>--> <!-- <encoding>UTF-8</encoding>--> <!-- <!–䏿¾ç¤ºjså¯è½çé误 –>--> <!-- <jswarn>false</jswarn>--> <!-- <!–æ¯å¦æ··æ· –>--> <!-- <nomunge>true</nomunge>--> <!-- <!–è¥åå¨å·²å缩çæä»¶ï¼ä¼å å¯¹æ¯æºæä»¶æ¯å¦ææ¹å¨ ææ¹å¨ä¾¿åç¼©ï¼æ æ¹å¨å°±ä¸å缩 –>--> <!-- <force>false</force>--> <!-- <!–卿å®çåå·åæå ¥æ°è¡ –>--> <!-- <linebreakpos>-1</linebreakpos>--> <!-- <!–å缩ä¹åå æ§è¡èåæä»¶æä½ –>--> <!-- <preProcessAggregates>true</preProcessAggregates>--> <!-- <!–å缩åä¿åæä»¶åç¼ æ åç¼ –>--> <!-- <nosuffix>true</nosuffix>--> <!-- <!–æºç®å½ï¼å³éåç¼©çæ ¹ç®å½ –>--> <!-- <sourceDirectory>src/main/resources</sourceDirectory>--> <!-- <!–è¾åºç®å½ï¼å³å缩åçç®å½ –>--> <!-- <outputDirectory>target/classes</outputDirectory>--> <!-- <force>true</force>--> <!-- <!–å缩jsåcssæä»¶ –>--> <!-- <includes>--> <!-- <include>**/*.js</include>--> <!-- <include>**/*.css</include>--> <!-- </includes>--> <!-- <!– 以ä¸ç®å½åæä»¶ä¸ä¼è¢«å缩 –>--> <!-- <excludes>--> <!-- <exclude>**/*.min.js</exclude>--> <!-- <exclude>**/*.min.css</exclude>--> <!-- <exclude>**/d7/**</exclude>--> <!-- <exclude>**/dorado-home/**</exclude>--> <!-- <exclude>**/bdf2/**</exclude>--> <!-- <exclude>**/css/**</exclude>--> <!-- <exclude>**/js/**</exclude>--> <!-- <exclude>**/plugins/**</exclude>--> <!-- </excludes>--> <!-- </configuration>--> <!-- </plugin>--> </plugins> igds-web/src/main/resources/application-pro5327.yml
@@ -51,7 +51,7 @@ database: 2 host: 127.0.0.1 port: 6379 password: password: Abc123.. # è¿æ¥æ± æå¤§è¿æ¥æ°ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ pool: max-active: 200 igds-web/src/main/resources/application.yml
@@ -1,7 +1,7 @@ ########################## Server ########################## 丹棱åå ³çç²®é£å¨å¤åº spring: profiles: active: linux active: dev application: name: igds main: pom.xml
@@ -39,6 +39,8 @@ <module>igds-protocol-fzzy3</module> <!--馿µ·æºè½--> <module>igds-protocol-bhzn</module> <!--è´åç²®æ åè®®--> <module>igds-protocol-beibo</module> <!--ç©èç½æå±è®¾å¤å --> <module>igds-protocol-iot</module>