igds-core/src/main/java/com/ld/igds/io/constant/ProtocolEnum.java
@@ -27,7 +27,8 @@ TCP_FZZY_N2_V3("TCP_FZZY_N2_V3", "FZZY-å¶æ°®æºåè®®"), TCP_LT_SAMPLE_V3("TCP_LT_SAMPLE_V3", "æ¦æ ·æºåè®®"), TCP_FZZY_QUANTITY_V35("TCP_FZZY_QUANTITY_V35", "æ°éæ£æµV35"), TCP_BHZH_GRAIN_FM_V1("TCP_BHZH_GRAIN_FM_V1", "馿µ·æºè½æ 线主æºçV1"); TCP_BHZH_GRAIN_FM_V1("TCP_BHZH_GRAIN_FM_V1", "馿µ·æºè½æ 线主æºçV1"), TCP_BHZH_GRAIN_V2("TCP_BHZH_GRAIN_V2", "馿µ·æºè½æçº¿çV2"); private String code; private String msg; igds-core/src/main/java/com/ld/igds/view/Depot.view.xml
@@ -480,7 +480,7 @@ <Property name="minWidth">500</Property> <Container layout="regionPadding:5"> <DataSet id="dsFoodOrigin"> <Property name="dataProvider">dicTriggerPR#pagFoodLocationData</Property> <Property name="dataProvider"></Property> <Property name="dataType">[dtFoodOrigin]</Property> <Property name="parameter"></Property> <Property name="pageSize">30</Property> igds-protocol-bhzn/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ <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-bhzn</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-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/RemoteGrainV1ServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package com.ld.igds.protocol.bhzn.grainv1; import com.ld.igds.common.CoreSerService; 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.bhzn.grainv1.msg.builder.CommandBuild; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerEngine; import com.ld.io.api.InvokeResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @Desc: ç²®æ ä¸å¡æ¥å£ * @author: Andy * @update-time: 2023/5/11 */ @Slf4j @Component(RemoteGrainV1ServiceImpl.BEAN_ID) public class RemoteGrainV1ServiceImpl implements RemoteGrainService { public static final String BEAN_ID = "bhznGrain.remoteGrainService"; @Autowired private CoreSerService coreSerService; @Autowired private BhznGrainV1ServerEngine bhznGrainServerEngine; @Override public String getProtocol() { return ProtocolEnum.TCP_BHZH_GRAIN_FM_V1.getCode(); } @Override public GrainResponse checkGrain(CheckGrainRequest request) { try { // çæç²®æ ä¿¡æ¯ String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId(), request.getDepotId()); // //é讯使ç¨çæ¯ä¸»æºé讯 // DeviceSer mainSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); // request.setIp(mainSer.getIp()); // request.setPort(mainSer.getPort()); // åéå½ä»¤ InvokeResult result = bhznGrainServerEngine.pushByMin(hexStr); log.error("å¹³å°------>>>>æ§å¶æï¼ç²®æ æ£æµ-{}", hexStr); // å°è£ è¿åä¿¡æ¯ 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-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/ServerRunner.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ld.igds.protocol.bhzn.grainv1; import com.ld.igds.data.ConfigData; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerEngine; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * é ç½®éç³»ç»èªå¨å¯å¨æå¡ -- æ§è¡é¡ºåº20-29 */ @Component(ServerRunner.BEAN_ID) @Order(value = 24) public class ServerRunner implements CommandLineRunner { public static final String BEAN_ID = "bhzn.serverRunnerV1"; @Autowired private ConfigData configData; @Autowired private BhznGrainV1ServerEngine bhznGrainServerEngine; @Override public void run(String... strings) throws Exception { if (configData.getActive().indexOf("pro") >= 0) { //bhznGrainServerEngine.start(BhznGrainServerEngine.PORT); } if (configData.getActive().indexOf("dev") >= 0) { //bhznGrainServerEngine.start(BhznGrainServerEngine.PORT); } } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/msg/AnalysisService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,474 @@ package com.ld.igds.protocol.bhzn.grainv1.msg; 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.constant.Constant; import com.ld.igds.grain.GrainUtil; import com.ld.igds.grain.dto.GrainItemInfo; 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.models.Grain; import com.ld.igds.order.ExeOrderService; import com.ld.igds.order.data.ExeRequest; import com.ld.igds.protocol.bhzn.grainv1.msg.builder.CommandBuild; import com.ld.igds.protocol.bhzn.grainv1.msg.builder.ReMessageBuilder; import com.ld.igds.protocol.bhzn.grainv1.msg.message.IoMessage; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerEngine; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerUtils; import com.ld.igds.util.BytesUtil; 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 = "bhznGrainv1.analysisService"; @Autowired private CoreSerService coreSerService; @Autowired private BhznGrainV1ServerEngine serverEngine; @Autowired private CoreCommonService commonService; @Autowired private NotifyGrainInvoker notifyGrainInvoker; @Autowired private GrainUtil grainUtil; @Autowired private WarnUtils warnUtils; @Autowired private ExeOrderService exeOrderService; /** * @param sessionKey ip:port */ public void analysis(String sessionKey, IoMessage message) throws Exception { //注å if (BhznGrainV1ServerUtils.FUNCTION_ID_F1.equals(message.getFunctionId())) { //DO NOTHING log.info("主æº------->>å¹³å°ï¼æ³¨åä¿¡æ¯æ¥æ={}", message); DeviceSer ser = coreSerService.getCacheSerBySn(ContextUtil.getDefaultCompanyId(),message.getAddr()); if(ser!= null ){ ser.setIp(message.getIp()); ser.setPort(message.getPort()); ser.setStatus(Constant.YN_Y); coreSerService.updateByData(ser); } return; } //å¿è·³ if (BhznGrainV1ServerUtils.FUNCTION_ID_F2.equals(message.getFunctionId())) { String hexStr = CommandBuild.getMsgHeartReply(message.getAddr()); log.info("å¹³å°--------->>>主æºï¼è¿åå¿è·³æ¶å°ä¿¡æ¯ï¼æ¥æ={}", hexStr); serverEngine.pushByMin(hexStr); return; } // 93 è§£æä»æ¸©ä»æ¹¿ï¼å¹¶è¿åæ¶å°æ¥æ if (BhznGrainV1ServerUtils.FUNCTION_ID_93.equals(message.getFunctionId())) { log.info("主æº------->>å¹³å°ï¼æ¸©æ¹¿åº¦ä¿¡æ¯æ¥æ={}", message); analysisTh(message); return; } // 92 è§£æç²®æ¸©ï¼å¹¶è¿åæ¶å°æ¥æ if (BhznGrainV1ServerUtils.FUNCTION_ID_92.equals(message.getFunctionId())) { log.info("主æº------->>å¹³å°ï¼ç²®æ ä¿¡æ¯æ¥æ={}", message); analysisGrain(message); } } private void analysisGrain(IoMessage message) { try { //æ ¹æ®åæºå°åè·ååæºä¿¡æ¯ DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), message.getAddr()); if (ser == null) { replayGrain(message); log.error("主æº-------->>å¹³å°ï¼è§£æç²®æ å¤±è´¥ï¼æªè·åå°ç³»ç»ç²®æ 主æºé ç½®ï¼" + message.getAddr()); 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()); // å¤ææ°æ®ææ²¡ææ¶å宿´ String[] attCable = depotConf.getCableRule().split("-"); int cableZ = Integer.valueOf(attCable[0]); int cableY = Integer.valueOf(attCable[1]); int cableX = Integer.valueOf(attCable[2]); int sumPoint = cableZ * cableY * cableX; //è·åå½åç²®æ æ¸©åº¦æ¥æ String grainHex = message.getContent().substring(16); //å½åæ¥ææ¸©åº¦ç¹æ° int curPoint = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(4, 8))); //妿å½åå çæ°æ®ä¸ªæ°å¤§äºçäºå½åä»åºçé ç½®ç¹ä½å表示åå è¿å if (curPoint >= sumPoint) { //è¿åç²®æ æ¥æ¶ä¿¡æ¯ replayGrain(message); analysisGrain2(ser, message, exeRequest, depotConf, sysConf, batchId, grainHex); return; } //表示åå ä¼ é String key = "GRAIN_" + message.getAddr(); String oldGrainHex = contextMapGrain.get(key) == null ? "" : contextMapGrain.get(key); //è·åå½åå èµ·å§ç¹çå±è¡å int hang = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(8, 10))); int lie = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(10, 12))); int ceng = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(12, 14))); if (hang > 0 || lie > 0 || ceng > 0) { //说æé第ä¸å æ°æ® grainHex = oldGrainHex + grainHex; } if (grainHex.length() >= sumPoint * 4) { //è¿åç²®æ æ¥æ¶ä¿¡æ¯ replayGrain(message); analysisGrain2(ser, message, exeRequest, depotConf, sysConf, batchId, grainHex); return; } else { contextMapGrain.put(key, grainHex); replayGrain(message); } } catch (Exception e) { log.error(e.getMessage(), e); } } /** * è¿åç²®æ æ¶å°æ¥æä¿¡æ¯ï¼éè¦æ³¨æï¼å¦æåå¨åå æ åµä¸ï¼éè¦çææå æ¶å°åè¿å * * @param message */ private void replayGrain(IoMessage message) { String hexStr = CommandBuild.getMsgGrainReply(message.getAddr()); log.info("å¹³å°--------->>>主æºï¼è¿åç²®æ æ¥ææ¶å°ä¿¡æ¯ï¼æ¥æ={}", hexStr); serverEngine.pushByMin(hexStr); } private void analysisGrain2(DeviceSer ser, IoMessage message, ExeRequest exeRequest, DepotConf depotConf, DicSysConf sysConf, String batchId, String grainStr) { // è·å宿´çç²®æ å ä¿¡æ¯ String[] attCable = depotConf.getCableRule().split("-"); int cableZ = Integer.valueOf(attCable[0]); int cableY = Integer.valueOf(attCable[1]); int cableX = Integer.valueOf(attCable[2]); // æ ¹æ®å±è¡åè·åæå®é¿åº¦ int start = 4 * (depotConf.getCableStart() - ser.getCableStart()) * cableZ * cableY; int len = 4 * cableZ * cableY * cableX; log.info("åæº------>>>å¹³å°ï¼è¿åç²®æ 宿´ä¿¡æ¯ï¼æå±ç»ç»={}ï¼åæº={}", ser.getCompanyId(), ser.getName()); String strPoints = grainStr.substring(start, start + len); // å°ç²®æ è§£æææ°ç» List<Double> temps = new ArrayList<>(); double tempValue; String temp; for (int i = 0; i < strPoints.length() / 4; i++) { temp = strPoints.substring(i * 4, i * 4 + 4); if (temp == null) { temp = "0000"; } if (ReMessageBuilder.ERROR_TAG.equals(temp)) { tempValue = Constant.ERROR_TEMP; } else { tempValue = BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) / 10.0; } // æ éå¼å¤ç if (tempValue >= ReMessageBuilder.FAULT_CHECK_TAG) { tempValue = Constant.FAULT_TEMP; } temps.add(tempValue); } log.debug("-------CheckGrainRequest--={}", exeRequest.toString()); THDto thDto = this.getTH(message); if (null != thDto) { log.debug("-------THDto--={}", thDto.toString()); } //æ¸ ç©º String key = "GRAIN_" + message.getAddr(); contextMapGrain.put(key, null); // å°éåè§£ææåæ æ°æ® addPoint1(temps, depotConf, ser, exeRequest, thDto, sysConf, batchId); } /** * å¹³æ¿ä»ï¼è§£æç¬¬äºæ¥ï¼è§£æå°åæ æ°æ® * * @param temps * @throws Exception */ private void addPoint1(List<Double> temps, DepotConf depotConf, DeviceSer ser, ExeRequest exeRequest, THDto thDto, DicSysConf sysConf, String batchId) { //æ ¹æ®çµç¼èµ·å§æ¹ä½åå¸çº¿æ¹åï¼å¯¹ç²®æ æ°æ®è¿è¡è°æ´ if (null != depotConf.getStartOrientation()) { temps = reversalGrainPoint(temps, depotConf); } //è¥èµ·ç¹ç¹ä½ä¸ºåºé¨ï¼åå°ç²®æ æ°æ®è¿è¡ç¿»è½¬ if (null != depotConf.getStartPoint() && Constant.GRAIN_START_POINT_BELOW.equals(depotConf.getStartPoint())) { temps = grainUtil.reversalUpAndDown(temps, depotConf.getCableRule()); } String[] attCable = depotConf.getCableRule().split("-"); int cableZ = Integer.valueOf(attCable[0]); int cableY = Integer.valueOf(attCable[1]); int cableX = Integer.valueOf(attCable[2]); Grain grain = new Grain(); grain.setDepotId(depotConf.getDepotId()); grain.setCompanyId(depotConf.getCompanyId()); grain.setCable(depotConf.getCableRule()); grain.setBatchId(batchId); grain.setTempIn(Constant.ERROR_TEMP); grain.setHumidityIn(Constant.ERROR_TEMP); if (null != thDto) { log.debug("ç²®æ è§£æä¸è·åå°ç温湿度信æ¯={}", thDto.toString()); grain.setHumidityIn(thDto.getHumidityIn()); grain.setTempIn(thDto.getTempIn()); } grain.setReceiveDate(new Date()); grain.setRemark("粮温æ£å¸¸"); // è·åç¼åä¸çå½ä»¤ä¿¡æ¯ grain.setCheckUser(exeRequest.getExeUser()); double max = ReMessageBuilder.MAX_TEMP, min = ReMessageBuilder.MIN_TEMP, sumT = 0.0, sumNum = cableX * cableY * cableZ; // æ ¡éªåå®ç°ç»è®¡ï¼çæééç¹ä¿¡æ¯ List<GrainItemInfo> listGrainItems = new ArrayList<>(); int i = 1; for (Double temp : temps) { if (temp == Constant.ERROR_TEMP || temp == Constant.FAULT_TEMP || temp == Constant.ADD_TEMP) { sumNum--; } else { sumT += temp; if (temp > max) { max = temp; } if (temp < min) { min = temp; } } listGrainItems.add(new GrainItemInfo(i, temp)); i++; } if (sumNum == 0) { sumNum = 1; grain.setRemark("å½åç²®æ ééå¼å¸¸"); } //è¿æ»¤æ¯è¾ç¨çæå¤§æå°å¼ if (max == ReMessageBuilder.MAX_TEMP) { max = 0.0; } if (min == ReMessageBuilder.MIN_TEMP) { min = 0.0; } if (null != depotConf.getTempMax() && max > depotConf.getTempMax()) { grain.setRemark("ä»åºé ç½®é«æ¸©è¦åå¼ï¼" + depotConf.getTempMax() + "ï¼å½åæ£æµé«æ¸©å¼ï¼" + max); warnUtils.addGrainWarn(depotConf, grain); } grain.setTempAve(sumT / sumNum); grain.setTempMax(max); grain.setTempMin(min); grain.setPoints(org.apache.commons.lang3.StringUtils.join(temps, ",")); String depotIds = exeRequest.getDepotIds(); boolean notifyWeb = true; if (null != depotIds && depotIds.indexOf(depotConf.getDepotId()) == -1) { notifyWeb = false; } // ç¨æ·å°è£ å¥½æ°æ®å³å¯ notifyGrainInvoker.analysisSuccess(grain, listGrainItems, depotConf, sysConf, notifyWeb, exeRequest); } private List<Double> reversalGrainPoint(List<Double> temps, DepotConf conf) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartOrientation())) { //è¥èµ·å§æ¹ä½ä¸ºç©ºï¼åé»è®¤èµ·å§æ¹ä½åæ¹åï¼ç´æ¥è¿å return temps; } //èµ·å§æ¹ä½ä¸ºå³è¾¹æ¶ if (Constant.GRAIN_START_ORIENTATION_RIGHT.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //å³è¾¹èµ·å§ï¼é»è®¤çºµåå¸çº¿ï¼ç´æ¥è¿å return temps; } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //å³è¾¹èµ·å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalRight1(temps, conf.getCableRule()); } //å³è¾¹èµ·å§ï¼é»è®¤çºµåå¸çº¿ï¼ç´æ¥è¿å return temps; } //èµ·å§æ¹ä½ä¸ºå³ä¸æ¶ if (Constant.GRAIN_START_ORIENTATION_RIGHT_UP.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //å³ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalRightUp2(temps, conf.getCableRule()); } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //å³ä¸èµ·å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalRightUp1(temps, conf.getCableRule()); } //å³ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalRightUp2(temps, conf.getCableRule()); } //èµ·å§æ¹ä½ä¸ºå·¦è¾¹æ¶ if (Constant.GRAIN_START_ORIENTATION_LEFT.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //左边起å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeft2(temps, conf.getCableRule()); } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //左边起å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalLeft1(temps, conf.getCableRule()); } //左边起å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeft2(temps, conf.getCableRule()); } //èµ·å§æ¹ä½ä¸ºå·¦ä¸æ¶ if (Constant.GRAIN_START_ORIENTATION_LEFT_UP.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //å·¦ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeftUp2(temps, conf.getCableRule()); } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //å·¦ä¸èµ·å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalLeftUp1(temps, conf.getCableRule()); } //å·¦ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeftUp2(temps, conf.getCableRule()); } return temps; } private void analysisTh(IoMessage message) { try { THDto th = new THDto(); th.setCompanyId(ContextUtil.getDefaultCompanyId()); String data = message.getContent(); String houseNo = data.substring(0, 2); String t = data.substring(4, 8); String h = data.substring(8, 12); double temp, humy; if (ReMessageBuilder.ERROR_TAG.equals(t)) { temp = 0.0; } else { temp = (double) BytesUtil.hexToBigInt(BytesUtil.tran_LH(t)) / 10; } if (ReMessageBuilder.ERROR_TAG.equals(h)) { humy = 0.0; } else { humy = (double) BytesUtil.hexToBigInt(BytesUtil.tran_LH(h)) / 10; } th.setTempIn(temp); th.setHumidityIn(humy); log.info("主æº--------->>>å¹³å°ï¼è§£æä»æ¸©ä»æ¹¿ä¿¡æ¯ï¼ä»åº={},ç»æ={}", houseNo, th.toString()); String key = "TH_" + houseNo; contextMapTH.put(key, th); } catch (Exception e) { log.error(e.getMessage(), e); } finally { String hexStr = CommandBuild.getMsgTHReply(message.getAddr()); log.info("å¹³å°--------->>>主æºï¼è¿å仿¸©ä»æ¹¿æ¶å°ä¿¡æ¯ï¼æ¥æ={}", hexStr); serverEngine.pushByMin(hexStr); } } private THDto getTH(IoMessage message) { String data = message.getContent(); String houseNo = data.substring(0, 2); String key = "TH_" + houseNo; return contextMapTH.get(key); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/msg/builder/CommandBuild.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,178 @@ package com.ld.igds.protocol.bhzn.grainv1.msg.builder; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerUtils; import com.ld.igds.util.BytesUtil; /** * å½ä»¤çæ * * @author vince */ public class CommandBuild { private final static CommandBuild instance = new CommandBuild(); private CommandBuild() { } public static CommandBuild getInstance() { return instance; } /** * PCåå¤ å¿è·³å æ¶å°ä¿¡æ¯ * * @param grainAddr * @return */ public static String getMsgHeartReply(String grainAddr) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_F2); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--ä»»æå¼ sb.append("01"); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } /** * ç²®æ ééå½ä»¤ * * @param grainAddr ç²®æ åæºå°å * @param deptId ä»åºç¼å·å°å * @return */ public static String getMsgCheck(String grainAddr, String deptId) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_83); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--主æºéé¢é ç½®çä»åºç¼ç i = Integer.parseInt(deptId); sb.append(BytesUtil.intToHexStr1(i)); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } /** * PCåå¤ ä»æ¸©ä»æ¹¿ æ¶å°ä¿¡æ¯ * * @param grainAddr * @return */ public static String getMsgTHReply(String grainAddr) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_93); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--ä»»æå¼ sb.append("01"); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } /** * PCåå¤ç²®æ¸©æ¶å°ä¿¡æ¯ * * @param grainAddr * @return */ public static String getMsgGrainReply(String grainAddr) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_92); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--ä»»æå¼ sb.append("01"); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/msg/builder/ReMessageBuilder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.ld.igds.protocol.bhzn.grainv1.msg.builder; import com.ld.igds.protocol.bhzn.grainv1.msg.message.IoMessage; import com.ld.igds.util.BytesUtil; /** * æ ¹æ®æ¥æ¶å°çä¿¡æ¯è¿è¡å°è£ * * @author vince */ public class ReMessageBuilder { public final static String ERROR_TAG = "3CF6"; public static double FAULT_CHECK_TAG = 85.0; public static double MAX_TEMP = -50.0; public static double MIN_TEMP = 50.0; private final static ReMessageBuilder instance = new ReMessageBuilder(); private ReMessageBuilder() { } public static ReMessageBuilder getInstance() { return instance; } /** * @param message * @return */ public IoMessage buildMessage(String message) throws Exception { IoMessage ioMessage = new IoMessage(); //转æ¢ä¸ºæ°åï¼é«ä½ä½è½¬æ¢(4ä½) int i = BytesUtil.hexToBigInt(BytesUtil.tran_LH(message.substring(2, 6))); ioMessage.setPcAddr(i + ""); i = BytesUtil.hexToBigInt(BytesUtil.tran_LH(message.substring(6, 10)));//é«ä½ä½è½¬æ¢(4ä½) ioMessage.setAddr(i + ""); ioMessage.setFunctionId(message.substring(10, 12));//åè½ç (2ä½)ï¼ä¸ç¨é«ä½ä½è½¬æ¢ i = BytesUtil.hexToBigInt(message.substring(12, 14));//é¿åº¦(1ä½) ioMessage.setLength(i); //è·åæ¶æ¯ä½ ioMessage.setContent(message.substring(14, 14 + (i * 2))); ioMessage.setCheck(message.substring(message.length() - 2)); return ioMessage; } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/msg/message/Content.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ld.igds.protocol.bhzn.grainv1.msg.message; import lombok.Data; /** * @author vince.xu * @Title: Content * @ProjectName igds-35 * @Description: TODO * @date 2022-12-715:48 */ @Data public class Content { /** * ç¶æåå */ public String result; /** * 纯度 */ public String purity; /** * æµé */ public String flow; /** * åå */ public String pressure; /** * 温度 */ public String temperature; /** * æµé累计 */ public String flowAll; /** * è¿è¡ç¶æ */ public String isRun; } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/msg/message/IoMessage.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ld.igds.protocol.bhzn.grainv1.msg.message; import lombok.Data; @Data public class IoMessage { private String ip; private int port; private String pcAddr; private String addr; private String functionId; private int length; private String content; private String check; } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/package-info.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,4 @@ /** * 馿µ·æ 线纯粮æ åè®® */ package com.ld.igds.protocol.bhzn.grainv1; igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/server/BhznGrainV1HeartbeatImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.ld.igds.protocol.bhzn.grainv1.server; import com.ld.io.api.HeartbeatProvider; import com.ld.io.api.IoSession; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** * æä¾å¿è·³ä¿¡æ¯ * * @author Andy */ @Slf4j @Service public class BhznGrainV1HeartbeatImpl implements HeartbeatProvider { @Override public byte[] provide(IoSession session) { //ç´æ¥æ ¹æ®ä¸»æºSESSIOn夿 IoSession session1 = BhznGrainV1ServerUtils.getSession(); Long lastBeatTime = BhznGrainV1ServerUtils.getHearBeat(session1); if (null == lastBeatTime) { return null; } //妿æå䏿¬¡ç»ç«¯å¿è·³æ¶é´è·ç¦»å½åæ¶é´å¤§äº ç»ç«¯å¿è·³æ¶é´ç3次ï¼åå¤æä¸ºç¦»çº¿ long deTime = System.currentTimeMillis() - lastBeatTime; if (deTime > (BhznGrainV1ServerUtils.HEART_BEAT_TIME * 3 * 1000)) { log.info("-----------è¶ è¿{}ç§æªè·åå°å¿è·³ä¿¡æ¯ï¼å¤å®ç»ç«¯ç¦»çº¿ï¼è¸¢åºè¿æ¥------------{}-{}", deTime, session.getAddress(), session.getPort()); session.destroy(); } return null; } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/server/BhznGrainV1MessageConsumer.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package com.ld.igds.protocol.bhzn.grainv1.server; import com.ld.igds.protocol.bhzn.grainv1.msg.AnalysisService; import com.ld.igds.protocol.bhzn.grainv1.msg.builder.ReMessageBuilder; import com.ld.igds.protocol.bhzn.grainv1.msg.message.IoMessage; import com.ld.igds.util.BytesUtil; import com.ld.io.api.IoMsgConsumer; import com.ld.io.api.IoSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * */ @Slf4j @Service public class BhznGrainV1MessageConsumer implements IoMsgConsumer { @Autowired private AnalysisService analysisService; /** * å¤çæ¶æ¯ * * @param ioSession * @param bytes */ @Override public void consume(IoSession ioSession, byte[] bytes) { if (null == bytes) { log.error("Reply bytes is null"); return; } //æ·»å ä¿¡æ¯å¿è·³æ è®° BhznGrainV1ServerUtils.addHeartBeat(ioSession); //é»è®¤è®¾ç½®ä¸»é讯æå¡ BhznGrainV1ServerUtils.addSession(ioSession); try { String hexStr = BytesUtil.bytesToString(bytes); log.info("主æºè¿åæ¥æ------->>å¹³å°ï¼" + hexStr); hexStr = hexStr.substring(BhznGrainV1ServerUtils.MSG_START.length()); IoMessage ioMessage = ReMessageBuilder.getInstance().buildMessage(hexStr); ioMessage.setIp(ioSession.getAddress()); ioMessage.setPort(ioSession.getPort()); analysisService.analysis(ioSession.getBusinessKey(), ioMessage); } catch (Exception e) { log.error(e.getMessage(), e); } } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/server/BhznGrainV1ServerEngine.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,131 @@ package com.ld.igds.protocol.bhzn.grainv1.server; import com.ld.igds.util.BytesUtil; import com.ld.io.api.*; import com.ld.io.netty.NettyServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @Desc: 馿µ·æºè½çº¯ç²®æ åè®® * @author: Andy * @update-time: 2023/5/11 */ @Slf4j @Service public class BhznGrainV1ServerEngine { public static final Integer PORT = 9309; @Autowired private BhznGrainV1MessageConsumer defaultMessageConsumer; @Autowired private BhznGrainV1SessionListener defaultSessionListener; // å¿è·³æä¾ private static HeartbeatProvider heartbeatProvider = new BhznGrainV1HeartbeatImpl(); private IoSessionQuery sessionQuery; public void start(Integer port) { IoServerOption ioServerOption = new IoServerOption(); if (null != port) { ioServerOption.setPort(port); } else { ioServerOption.setPort(PORT); } //确认ç»å°¾æ å¿ ioServerOption.setDelimiter(BhznGrainV1ServerUtils.MSG_END.getBytes()); // é 置系ç»å¿è·³é´é ioServerOption.setReaderIdleTime(5 * 60); NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener, heartbeatProvider); ioServer.startup(); sessionQuery = ioServer.getSessionQuery(); log.info("* "); log.info("* ========================"); log.info("* "); log.info("* [GRAIN-SERVERï¼BHZN_GRAIN,PORT={}]", PORT); log.info("* "); log.info("* ========================"); log.info("* "); System.out.println("* ========================"); System.out.println("* "); System.out.println("* [GRAIN-SERVERï¼BHZN_GRAIN,PORT={}]" + port); System.out.println("* "); System.out.println("* ========================"); } public IoSessionQuery getSessionQuery() { return sessionQuery; } /** * åéä¿¡æ¯ * * @param ip * @param port * @param msg * @return */ public InvokeResult push(String ip, int port, byte[] msg) { IoSessionQuery sessionFactory = getSessionQuery(); List<IoSession> sessions = sessionFactory.getAllSession(); IoSession session = null; for (IoSession ioSession : sessions) { if (BhznGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { session = ioSession; break; } } if (null == session) { return InvokeResult.CHANNEL_CLOSED; } return session.invoke(msg); } // public InvokeResult push(String ip, int port, String hexStr) { // // byte[] msg = BytesUtil.hexStrToBytes(hexStr); // // IoSessionQuery sessionFactory = getSessionQuery(); // List<IoSession> sessions = sessionFactory.getAllSession(); // IoSession session = null; // for (IoSession ioSession : sessions) { // if (BhznGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { // session = ioSession; // break; // } // } // // if (null == session) { // return InvokeResult.CHANNEL_CLOSED; // } // return session.invoke(msg); // } /** * ç´æ¥ä½¿ç¨å åçSessionæ§è¡ */ public InvokeResult pushByMin(String hexStr) { IoSession session = BhznGrainV1ServerUtils.getSession(); if (null == session) { return InvokeResult.CHANNEL_CLOSED; } byte[] msg = BytesUtil.hexStrToBytes(hexStr); return session.invoke(msg); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/server/BhznGrainV1ServerUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package com.ld.igds.protocol.bhzn.grainv1.server; import com.ld.igds.util.BytesUtil; import com.ld.io.api.IoSession; import java.util.HashMap; import java.util.Map; /** * å·¥å ·ç±» * * @author vince */ public class BhznGrainV1ServerUtils { /** * è®°å½æ¯ä¸ªè¿æ¥çæå䏿¬¡ä¿¡æ¯æ¶é´ key = è¿æ¥çKYEï¼data =å½åæ¶é´æ³ */ public static Map<String, Long> contextMapHeart = new HashMap<>(); public static Map<String, IoSession> contextIoSession = new HashMap<>(); public static int HEART_BEAT_TIME = 30;//å¿è·³é´éæ¶é´ public static String MSG_START = "3C42485A4E3E";//<BHZN> public static String MSG_START2 = "AA"; public static String MSG_END = "<END>";//<END> public static String MSG_END_16 = "3C454E443E";//<END> public static final String CHARSET = "UTF-8"; /** * é对æ 线粮æ 主æºçé»è®¤IDé ç½® */ public static String DEFAULT_MAC_ID = "53681"; public static String FUNCTION_ID_00 = "00"; public static String FUNCTION_ID_F1 = "F1"; public static String FUNCTION_ID_F2 = "F2"; public static String FUNCTION_ID_83 = "83"; public static String FUNCTION_ID_93 = "93"; public static String FUNCTION_ID_92 = "92"; /** * çæTCPè¿æ¥çKEY * * @param ip * @param port * @return */ public static String getServerKey(String ip, Integer port) { return ip + ":" + port; } /** * æ·»å ææ°å¿è·³æ¶é´æ³ * * @param session */ public static void addHeartBeat(IoSession session) { contextMapHeart.put(getServerKey(session.getAddress(), session.getPort()), System.currentTimeMillis()); } public static Long getHearBeat(IoSession session) { return contextMapHeart.get(getServerKey(session.getAddress(), session.getPort())); } /** * è®¡ç®æ ¡éª * * @param content * @return */ public static String getCheck(String content) { int start = BhznGrainV1ServerUtils.MSG_START.length() + BhznGrainV1ServerUtils.MSG_START2.length(); content = content.substring(start); int sum = 0; String hex; for (int i = 0; i < content.length() / 2; i++) { hex = content.substring(i * 2, i * 2 + 2); sum += BytesUtil.hexToInt(hex); } String hexSum = BytesUtil.intToHexStr(sum); int check = BytesUtil.hexToInt(hexSum.substring(hexSum.length() - 2)); return BytesUtil.intToHexStr(256 - check).substring(2); } public static void addSession(IoSession session) { contextIoSession.put(DEFAULT_MAC_ID, session); } public static IoSession getSession() { return contextIoSession.get(DEFAULT_MAC_ID); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv1/server/BhznGrainV1SessionListener.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.ld.igds.protocol.bhzn.grainv1.server; import com.ld.igds.common.CoreSerService; import com.ld.igds.constant.Constant; import com.ld.igds.models.DeviceSer; import com.ld.igds.util.ContextUtil; import com.ld.io.api.IoSession; import com.ld.io.api.IoSessionListener; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * */ @Slf4j @Service public class BhznGrainV1SessionListener implements IoSessionListener { @Autowired private CoreSerService coreSerService; /** * 设å¤å建å¨çº¿ï¼éè¦æ³¨æå½å使ç¨ä¸»æºæ¨¡å¼ï¼ä¸»æºä¸çº¿é»è®¤ææç¸åSNé ç½®çåæºå ¨é¨ä¸çº¿ * * @param session */ @Override public void onCreate(IoSession session) { //æ·»å å°å å BhznGrainV1ServerUtils.addSession(session); log.info("++++æ°å»ºè¿æ¥++++-IP={}ï¼PORT={}", session.getAddress(), session.getPort()); // æ·»å èªå®ä¹ä¸å¡ID session.setBusinessKey(BhznGrainV1ServerUtils.getServerKey(session.getAddress(), session.getPort())); //项ç®éç¨æ çº¿ä¸»æºæ¨¡å¼ï¼ç´æ¥è·åé»è®¤è®¾å¤ DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); if (null == deviceSer) return; coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_Y); //æ´æ°ç¼å coreSerService.refreshCache(deviceSer.getCompanyId()); } /** * 注æï¼å½åéç¨ä¸»æºæ¨¡å¼ï¼ä¸»æºç¦»çº¿ææç¸åSNé ç½®çåæºå ¨é¨ç¦»çº¿ * * @param session */ @Override public void onDestroy(IoSession session) { log.info("----è¿æ¥æå¼-----IP={}ï¼PORT={}", session.getAddress(), session.getPort()); //项ç®éç¨æ çº¿ä¸»æºæ¨¡å¼ï¼ç´æ¥è·åé»è®¤è®¾å¤ DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); if (null == deviceSer) return; //ç±äºè®¾å¤æçº¿åèªå¨è°æ´ // coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_N); // //æ´æ°ç¼å // coreSerService.refreshCache(deviceSer.getCompanyId()); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/RemoteGrainV2ServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package com.ld.igds.protocol.bhzn.grainv2; import com.ld.igds.common.CoreSerService; 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.bhzn.grainv2.msg.builder.CommandBuild; import com.ld.igds.protocol.bhzn.grainv2.server.BhznGrainV2ServerEngine; import com.ld.io.api.InvokeResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @Desc: ç²®æ ä¸å¡æ¥å£ * @author: Andy * @update-time: 2023/5/11 */ @Slf4j @Component(RemoteGrainV2ServiceImpl.BEAN_ID) public class RemoteGrainV2ServiceImpl implements RemoteGrainService { public static final String BEAN_ID = "bhznGrainv2.remoteGrainService"; @Autowired private CoreSerService coreSerService; @Autowired private BhznGrainV2ServerEngine bhznGrainServerEngine; @Override public String getProtocol() { return ProtocolEnum.TCP_BHZH_GRAIN_V2.getCode(); } @Override public GrainResponse checkGrain(CheckGrainRequest request) { try { // çæç²®æ ä¿¡æ¯ String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId(), request.getDepotId()); // //é讯使ç¨çæ¯ä¸»æºé讯 // DeviceSer mainSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); // request.setIp(mainSer.getIp()); // request.setPort(mainSer.getPort()); // åéå½ä»¤ InvokeResult result = bhznGrainServerEngine.pushByMin(hexStr); log.error("å¹³å°------>>>>æ§å¶æï¼ç²®æ æ£æµ-{}", hexStr); // å°è£ è¿åä¿¡æ¯ 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-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/ServerRunner.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ld.igds.protocol.bhzn.grainv2; import com.ld.igds.data.ConfigData; import com.ld.igds.protocol.bhzn.grainv2.server.BhznGrainV2ServerEngine; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * é ç½®éç³»ç»èªå¨å¯å¨æå¡ -- æ§è¡é¡ºåº20-29 */ @Component(ServerRunner.BEAN_ID) @Order(value = 24) public class ServerRunner implements CommandLineRunner { public static final String BEAN_ID = "bhzn.serverRunnerV2"; @Autowired private ConfigData configData; @Autowired private BhznGrainV2ServerEngine bhznGrainServerEngine; @Override public void run(String... strings) throws Exception { if (configData.getActive().indexOf("pro") >= 0) { bhznGrainServerEngine.start(BhznGrainV2ServerEngine.PORT); } if (configData.getActive().indexOf("dev") >= 0) { bhznGrainServerEngine.start(BhznGrainV2ServerEngine.PORT); } } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/msg/AnalysisService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,474 @@ package com.ld.igds.protocol.bhzn.grainv2.msg; 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.constant.Constant; import com.ld.igds.grain.GrainUtil; import com.ld.igds.grain.dto.GrainItemInfo; 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.models.Grain; import com.ld.igds.order.ExeOrderService; import com.ld.igds.order.data.ExeRequest; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerUtils; import com.ld.igds.protocol.bhzn.grainv2.msg.builder.CommandBuild; import com.ld.igds.protocol.bhzn.grainv2.msg.builder.ReMessageBuilder; import com.ld.igds.protocol.bhzn.grainv2.msg.message.IoMessage; import com.ld.igds.protocol.bhzn.grainv2.server.BhznGrainV2ServerEngine; import com.ld.igds.util.BytesUtil; 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 = "bhznGrainv2.analysisService"; @Autowired private CoreSerService coreSerService; @Autowired private BhznGrainV2ServerEngine serverEngine; @Autowired private CoreCommonService commonService; @Autowired private NotifyGrainInvoker notifyGrainInvoker; @Autowired private GrainUtil grainUtil; @Autowired private WarnUtils warnUtils; @Autowired private ExeOrderService exeOrderService; /** * @param sessionKey ip:port */ public void analysis(String sessionKey, IoMessage message) throws Exception { //注å if (BhznGrainV1ServerUtils.FUNCTION_ID_F1.equals(message.getFunctionId())) { //DO NOTHING log.info("主æº------->>å¹³å°ï¼æ³¨åä¿¡æ¯æ¥æ={}", message); DeviceSer ser = coreSerService.getCacheSerBySn(ContextUtil.getDefaultCompanyId(),message.getAddr()); if(ser!= null ){ ser.setIp(message.getIp()); ser.setPort(message.getPort()); ser.setStatus(Constant.YN_Y); coreSerService.updateByData(ser); } return; } //å¿è·³ if (BhznGrainV1ServerUtils.FUNCTION_ID_F2.equals(message.getFunctionId())) { //String hexStr = CommandBuild.getMsgHeartReply(message.getAddr()); //log.info("å¹³å°--------->>>主æºï¼è¿åå¿è·³æ¶å°ä¿¡æ¯ï¼æ¥æ={}", hexStr); // serverEngine.pushByMin(hexStr); return; } // 93 è§£æä»æ¸©ä»æ¹¿ï¼å¹¶è¿åæ¶å°æ¥æ if (BhznGrainV1ServerUtils.FUNCTION_ID_93.equals(message.getFunctionId())) { log.info("主æº------->>å¹³å°ï¼æ¸©æ¹¿åº¦ä¿¡æ¯æ¥æ={}", message); analysisTh(message); return; } // 92 è§£æç²®æ¸©ï¼å¹¶è¿åæ¶å°æ¥æ if (BhznGrainV1ServerUtils.FUNCTION_ID_92.equals(message.getFunctionId())) { log.info("主æº------->>å¹³å°ï¼ç²®æ ä¿¡æ¯æ¥æ={}", message); analysisGrain(message); } } private void analysisGrain(IoMessage message) { try { //æ ¹æ®åæºå°åè·ååæºä¿¡æ¯ DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), message.getAddr()); if (ser == null) { replayGrain(message); log.error("主æº-------->>å¹³å°ï¼è§£æç²®æ å¤±è´¥ï¼æªè·åå°ç³»ç»ç²®æ 主æºé ç½®ï¼" + message.getAddr()); 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()); // å¤ææ°æ®ææ²¡ææ¶å宿´ String[] attCable = depotConf.getCableRule().split("-"); int cableZ = Integer.valueOf(attCable[0]); int cableY = Integer.valueOf(attCable[1]); int cableX = Integer.valueOf(attCable[2]); int sumPoint = cableZ * cableY * cableX; //è·åå½åç²®æ æ¸©åº¦æ¥æ String grainHex = message.getContent().substring(16); //å½åæ¥ææ¸©åº¦ç¹æ° int curPoint = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(4, 8))); //妿å½åå çæ°æ®ä¸ªæ°å¤§äºçäºå½åä»åºçé ç½®ç¹ä½å表示åå è¿å if (curPoint >= sumPoint) { //è¿åç²®æ æ¥æ¶ä¿¡æ¯ replayGrain(message); analysisGrain2(ser, message, exeRequest, depotConf, sysConf, batchId, grainHex); return; } //表示åå ä¼ é String key = "GRAIN_" + message.getAddr(); String oldGrainHex = contextMapGrain.get(key) == null ? "" : contextMapGrain.get(key); //è·åå½åå èµ·å§ç¹çå±è¡å int hang = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(8, 10))); int lie = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(10, 12))); int ceng = BytesUtil.hexToInt(BytesUtil.tran_LH(message.getContent().substring(12, 14))); if (hang > 0 || lie > 0 || ceng > 0) { //说æé第ä¸å æ°æ® grainHex = oldGrainHex + grainHex; } if (grainHex.length() >= sumPoint * 4) { //è¿åç²®æ æ¥æ¶ä¿¡æ¯ replayGrain(message); analysisGrain2(ser, message, exeRequest, depotConf, sysConf, batchId, grainHex); return; } else { contextMapGrain.put(key, grainHex); replayGrain(message); } } catch (Exception e) { log.error(e.getMessage(), e); } } /** * è¿åç²®æ æ¶å°æ¥æä¿¡æ¯ï¼éè¦æ³¨æï¼å¦æåå¨åå æ åµä¸ï¼éè¦çææå æ¶å°åè¿å * * @param message */ private void replayGrain(IoMessage message) { String hexStr = CommandBuild.getMsgGrainReply(message.getAddr()); log.info("å¹³å°--------->>>主æºï¼è¿åç²®æ æ¥ææ¶å°ä¿¡æ¯ï¼æ¥æ={}", hexStr); serverEngine.pushByMin(hexStr); } private void analysisGrain2(DeviceSer ser, IoMessage message, ExeRequest exeRequest, DepotConf depotConf, DicSysConf sysConf, String batchId, String grainStr) { // è·å宿´çç²®æ å ä¿¡æ¯ String[] attCable = depotConf.getCableRule().split("-"); int cableZ = Integer.valueOf(attCable[0]); int cableY = Integer.valueOf(attCable[1]); int cableX = Integer.valueOf(attCable[2]); // æ ¹æ®å±è¡åè·åæå®é¿åº¦ int start = 4 * (depotConf.getCableStart() - ser.getCableStart()) * cableZ * cableY; int len = 4 * cableZ * cableY * cableX; log.info("åæº------>>>å¹³å°ï¼è¿åç²®æ 宿´ä¿¡æ¯ï¼æå±ç»ç»={}ï¼åæº={}", ser.getCompanyId(), ser.getName()); String strPoints = grainStr.substring(start, start + len); // å°ç²®æ è§£æææ°ç» List<Double> temps = new ArrayList<>(); double tempValue; String temp; for (int i = 0; i < strPoints.length() / 4; i++) { temp = strPoints.substring(i * 4, i * 4 + 4); if (temp == null) { temp = "0000"; } if (ReMessageBuilder.ERROR_TAG.equals(temp)) { tempValue = Constant.ERROR_TEMP; } else { tempValue = BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) / 10.0; } // æ éå¼å¤ç if (tempValue >= ReMessageBuilder.FAULT_CHECK_TAG) { tempValue = Constant.FAULT_TEMP; } temps.add(tempValue); } log.debug("-------CheckGrainRequest--={}", exeRequest.toString()); THDto thDto = this.getTH(message); if (null != thDto) { log.debug("-------THDto--={}", thDto.toString()); } //æ¸ ç©º String key = "GRAIN_" + message.getAddr(); contextMapGrain.put(key, null); // å°éåè§£ææåæ æ°æ® addPoint1(temps, depotConf, ser, exeRequest, thDto, sysConf, batchId); } /** * å¹³æ¿ä»ï¼è§£æç¬¬äºæ¥ï¼è§£æå°åæ æ°æ® * * @param temps * @throws Exception */ private void addPoint1(List<Double> temps, DepotConf depotConf, DeviceSer ser, ExeRequest exeRequest, THDto thDto, DicSysConf sysConf, String batchId) { //æ ¹æ®çµç¼èµ·å§æ¹ä½åå¸çº¿æ¹åï¼å¯¹ç²®æ æ°æ®è¿è¡è°æ´ if (null != depotConf.getStartOrientation()) { temps = reversalGrainPoint(temps, depotConf); } //è¥èµ·ç¹ç¹ä½ä¸ºåºé¨ï¼åå°ç²®æ æ°æ®è¿è¡ç¿»è½¬ if (null != depotConf.getStartPoint() && Constant.GRAIN_START_POINT_BELOW.equals(depotConf.getStartPoint())) { temps = grainUtil.reversalUpAndDown(temps, depotConf.getCableRule()); } String[] attCable = depotConf.getCableRule().split("-"); int cableZ = Integer.valueOf(attCable[0]); int cableY = Integer.valueOf(attCable[1]); int cableX = Integer.valueOf(attCable[2]); Grain grain = new Grain(); grain.setDepotId(depotConf.getDepotId()); grain.setCompanyId(depotConf.getCompanyId()); grain.setCable(depotConf.getCableRule()); grain.setBatchId(batchId); grain.setTempIn(Constant.ERROR_TEMP); grain.setHumidityIn(Constant.ERROR_TEMP); if (null != thDto) { log.debug("ç²®æ è§£æä¸è·åå°ç温湿度信æ¯={}", thDto.toString()); grain.setHumidityIn(thDto.getHumidityIn()); grain.setTempIn(thDto.getTempIn()); } grain.setReceiveDate(new Date()); grain.setRemark("粮温æ£å¸¸"); // è·åç¼åä¸çå½ä»¤ä¿¡æ¯ grain.setCheckUser(exeRequest.getExeUser()); double max = ReMessageBuilder.MAX_TEMP, min = ReMessageBuilder.MIN_TEMP, sumT = 0.0, sumNum = cableX * cableY * cableZ; // æ ¡éªåå®ç°ç»è®¡ï¼çæééç¹ä¿¡æ¯ List<GrainItemInfo> listGrainItems = new ArrayList<>(); int i = 1; for (Double temp : temps) { if (temp == Constant.ERROR_TEMP || temp == Constant.FAULT_TEMP || temp == Constant.ADD_TEMP) { sumNum--; } else { sumT += temp; if (temp > max) { max = temp; } if (temp < min) { min = temp; } } listGrainItems.add(new GrainItemInfo(i, temp)); i++; } if (sumNum == 0) { sumNum = 1; grain.setRemark("å½åç²®æ ééå¼å¸¸"); } //è¿æ»¤æ¯è¾ç¨çæå¤§æå°å¼ if (max == ReMessageBuilder.MAX_TEMP) { max = 0.0; } if (min == ReMessageBuilder.MIN_TEMP) { min = 0.0; } if (null != depotConf.getTempMax() && max > depotConf.getTempMax()) { grain.setRemark("ä»åºé ç½®é«æ¸©è¦åå¼ï¼" + depotConf.getTempMax() + "ï¼å½åæ£æµé«æ¸©å¼ï¼" + max); warnUtils.addGrainWarn(depotConf, grain); } grain.setTempAve(sumT / sumNum); grain.setTempMax(max); grain.setTempMin(min); grain.setPoints(org.apache.commons.lang3.StringUtils.join(temps, ",")); String depotIds = exeRequest.getDepotIds(); boolean notifyWeb = true; if (null != depotIds && depotIds.indexOf(depotConf.getDepotId()) == -1) { notifyWeb = false; } // ç¨æ·å°è£ å¥½æ°æ®å³å¯ notifyGrainInvoker.analysisSuccess(grain, listGrainItems, depotConf, sysConf, notifyWeb, exeRequest); } private List<Double> reversalGrainPoint(List<Double> temps, DepotConf conf) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartOrientation())) { //è¥èµ·å§æ¹ä½ä¸ºç©ºï¼åé»è®¤èµ·å§æ¹ä½åæ¹åï¼ç´æ¥è¿å return temps; } //èµ·å§æ¹ä½ä¸ºå³è¾¹æ¶ if (Constant.GRAIN_START_ORIENTATION_RIGHT.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //å³è¾¹èµ·å§ï¼é»è®¤çºµåå¸çº¿ï¼ç´æ¥è¿å return temps; } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //å³è¾¹èµ·å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalRight1(temps, conf.getCableRule()); } //å³è¾¹èµ·å§ï¼é»è®¤çºµåå¸çº¿ï¼ç´æ¥è¿å return temps; } //èµ·å§æ¹ä½ä¸ºå³ä¸æ¶ if (Constant.GRAIN_START_ORIENTATION_RIGHT_UP.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //å³ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalRightUp2(temps, conf.getCableRule()); } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //å³ä¸èµ·å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalRightUp1(temps, conf.getCableRule()); } //å³ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalRightUp2(temps, conf.getCableRule()); } //èµ·å§æ¹ä½ä¸ºå·¦è¾¹æ¶ if (Constant.GRAIN_START_ORIENTATION_LEFT.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //左边起å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeft2(temps, conf.getCableRule()); } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //左边起å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalLeft1(temps, conf.getCableRule()); } //左边起å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeft2(temps, conf.getCableRule()); } //èµ·å§æ¹ä½ä¸ºå·¦ä¸æ¶ if (Constant.GRAIN_START_ORIENTATION_LEFT_UP.equals(conf.getStartOrientation())) { if (org.apache.commons.lang3.StringUtils.isEmpty(conf.getStartDirection())) { //å·¦ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeftUp2(temps, conf.getCableRule()); } if (Constant.GRAIN_START_DIRECTION_TRANSVERSE.equals(conf.getStartDirection())) { //å·¦ä¸èµ·å§ï¼æ¨ªåå¸çº¿ return grainUtil.reversalLeftUp1(temps, conf.getCableRule()); } //å·¦ä¸èµ·å§ï¼é»è®¤çºµåå¸çº¿ return grainUtil.reversalLeftUp2(temps, conf.getCableRule()); } return temps; } private void analysisTh(IoMessage message) { try { THDto th = new THDto(); th.setCompanyId(ContextUtil.getDefaultCompanyId()); String data = message.getContent(); String houseNo = data.substring(0, 2); String t = data.substring(4, 8); String h = data.substring(8, 12); double temp, humy; if (ReMessageBuilder.ERROR_TAG.equals(t)) { temp = 0.0; } else { temp = (double) BytesUtil.hexToBigInt(BytesUtil.tran_LH(t)) / 10; } if (ReMessageBuilder.ERROR_TAG.equals(h)) { humy = 0.0; } else { humy = (double) BytesUtil.hexToBigInt(BytesUtil.tran_LH(h)) / 10; } th.setTempIn(temp); th.setHumidityIn(humy); log.info("主æº--------->>>å¹³å°ï¼è§£æä»æ¸©ä»æ¹¿ä¿¡æ¯ï¼ä»åº={},ç»æ={}", houseNo, th.toString()); String key = "TH_" + houseNo; contextMapTH.put(key, th); } catch (Exception e) { log.error(e.getMessage(), e); } finally { String hexStr = CommandBuild.getMsgTHReply(message.getAddr()); log.info("å¹³å°--------->>>主æºï¼è¿å仿¸©ä»æ¹¿æ¶å°ä¿¡æ¯ï¼æ¥æ={}", hexStr); serverEngine.pushByMin(hexStr); } } private THDto getTH(IoMessage message) { String data = message.getContent(); String houseNo = data.substring(0, 2); String key = "TH_" + houseNo; return contextMapTH.get(key); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/msg/builder/CommandBuild.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,178 @@ package com.ld.igds.protocol.bhzn.grainv2.msg.builder; import com.ld.igds.protocol.bhzn.grainv1.server.BhznGrainV1ServerUtils; import com.ld.igds.util.BytesUtil; /** * å½ä»¤çæ * * @author vince */ public class CommandBuild { private final static CommandBuild instance = new CommandBuild(); private CommandBuild() { } public static CommandBuild getInstance() { return instance; } /** * PCåå¤ å¿è·³å æ¶å°ä¿¡æ¯ * * @param grainAddr * @return */ public static String getMsgHeartReply(String grainAddr) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_F2); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--ä»»æå¼ sb.append("01"); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } /** * ç²®æ ééå½ä»¤ * * @param grainAddr ç²®æ åæºå°å * @param deptId ä»åºç¼å·å°å * @return */ public static String getMsgCheck(String grainAddr, String deptId) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_83); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--主æºéé¢é ç½®çä»åºç¼ç i = Integer.parseInt(deptId); sb.append(BytesUtil.intToHexStr1(i)); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } /** * PCåå¤ ä»æ¸©ä»æ¹¿ æ¶å°ä¿¡æ¯ * * @param grainAddr * @return */ public static String getMsgTHReply(String grainAddr) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_93); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--ä»»æå¼ sb.append("01"); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } /** * PCåå¤ç²®æ¸©æ¶å°ä¿¡æ¯ * * @param grainAddr * @return */ public static String getMsgGrainReply(String grainAddr) { StringBuffer sb = new StringBuffer(); //å¼å§ç¬¦å· sb.append(BhznGrainV1ServerUtils.MSG_START); sb.append(BhznGrainV1ServerUtils.MSG_START2); //åæºå°å int i = Integer.parseInt(grainAddr); sb.append(BytesUtil.tran_LH(BytesUtil.intToHexStr(i))); //åéæ¹å°å sb.append("0000"); //å½ä»¤ID sb.append(BhznGrainV1ServerUtils.FUNCTION_ID_92); //æ°æ®é¿åº¦-01 sb.append("01"); //æ°æ®åº--ä»»æå¼ sb.append("01"); //è·åæ ¡éªç sb.append(BhznGrainV1ServerUtils.getCheck(sb.toString())); //ç»å°¾ç¬¦ sb.append(BhznGrainV1ServerUtils.MSG_END_16); return sb.toString(); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/msg/builder/ReMessageBuilder.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,51 @@ package com.ld.igds.protocol.bhzn.grainv2.msg.builder; import com.ld.igds.protocol.bhzn.grainv2.msg.message.IoMessage; import com.ld.igds.util.BytesUtil; /** * æ ¹æ®æ¥æ¶å°çä¿¡æ¯è¿è¡å°è£ * * @author vince */ public class ReMessageBuilder { public final static String ERROR_TAG = "3CF6"; public static double FAULT_CHECK_TAG = 85.0; public static double MAX_TEMP = -50.0; public static double MIN_TEMP = 50.0; private final static ReMessageBuilder instance = new ReMessageBuilder(); private ReMessageBuilder() { } public static ReMessageBuilder getInstance() { return instance; } /** * @param message * @return */ public IoMessage buildMessage(String message) throws Exception { IoMessage ioMessage = new IoMessage(); //转æ¢ä¸ºæ°åï¼é«ä½ä½è½¬æ¢(4ä½) int i = BytesUtil.hexToBigInt(BytesUtil.tran_LH(message.substring(2, 6))); ioMessage.setPcAddr(i + ""); i = BytesUtil.hexToBigInt(BytesUtil.tran_LH(message.substring(6, 10)));//é«ä½ä½è½¬æ¢(4ä½) ioMessage.setAddr(i + ""); ioMessage.setFunctionId(message.substring(10, 12));//åè½ç (2ä½)ï¼ä¸ç¨é«ä½ä½è½¬æ¢ i = BytesUtil.hexToBigInt(message.substring(12, 14));//é¿åº¦(1ä½) ioMessage.setLength(i); //è·åæ¶æ¯ä½ ioMessage.setContent(message.substring(14, 14 + (i * 2))); ioMessage.setCheck(message.substring(message.length() - 2)); return ioMessage; } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/msg/message/Content.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ld.igds.protocol.bhzn.grainv2.msg.message; import lombok.Data; /** * @author vince.xu * @Title: Content * @ProjectName igds-35 * @Description: TODO * @date 2022-12-715:48 */ @Data public class Content { /** * ç¶æåå */ public String result; /** * 纯度 */ public String purity; /** * æµé */ public String flow; /** * åå */ public String pressure; /** * 温度 */ public String temperature; /** * æµé累计 */ public String flowAll; /** * è¿è¡ç¶æ */ public String isRun; } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/msg/message/IoMessage.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ld.igds.protocol.bhzn.grainv2.msg.message; import lombok.Data; @Data public class IoMessage { private String ip; private int port; private String pcAddr; private String addr; private String functionId; private int length; private String content; private String check; } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/package-info.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,4 @@ /** * 馿µ·æçº¿çº¯ç²®æ åè®® */ package com.ld.igds.protocol.bhzn.grainv2; igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/server/BhznGrainV2HeartbeatImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.ld.igds.protocol.bhzn.grainv2.server; import com.ld.io.api.HeartbeatProvider; import com.ld.io.api.IoSession; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; /** * æä¾å¿è·³ä¿¡æ¯ * * @author Andy */ @Slf4j @Service public class BhznGrainV2HeartbeatImpl implements HeartbeatProvider { @Override public byte[] provide(IoSession session) { //ç´æ¥æ ¹æ®ä¸»æºSESSIOn夿 IoSession session1 = BhznGrainV2ServerUtils.getSession(); Long lastBeatTime = BhznGrainV2ServerUtils.getHearBeat(session1); if (null == lastBeatTime) { return null; } //妿æå䏿¬¡ç»ç«¯å¿è·³æ¶é´è·ç¦»å½åæ¶é´å¤§äº ç»ç«¯å¿è·³æ¶é´ç3次ï¼åå¤æä¸ºç¦»çº¿ long deTime = System.currentTimeMillis() - lastBeatTime; if (deTime > (BhznGrainV2ServerUtils.HEART_BEAT_TIME * 3 * 1000)) { log.info("-----------è¶ è¿{}ç§æªè·åå°å¿è·³ä¿¡æ¯ï¼å¤å®ç»ç«¯ç¦»çº¿ï¼è¸¢åºè¿æ¥------------{}-{}", deTime, session.getAddress(), session.getPort()); session.destroy(); } return null; } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/server/BhznGrainV2MessageConsumer.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package com.ld.igds.protocol.bhzn.grainv2.server; import com.ld.igds.protocol.bhzn.grainv2.msg.AnalysisService; import com.ld.igds.protocol.bhzn.grainv2.msg.builder.ReMessageBuilder; import com.ld.igds.protocol.bhzn.grainv2.msg.message.IoMessage; import com.ld.igds.util.BytesUtil; import com.ld.io.api.IoMsgConsumer; import com.ld.io.api.IoSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * */ @Slf4j @Service public class BhznGrainV2MessageConsumer implements IoMsgConsumer { @Autowired private AnalysisService analysisService; /** * å¤çæ¶æ¯ * * @param ioSession * @param bytes */ @Override public void consume(IoSession ioSession, byte[] bytes) { if (null == bytes) { log.error("Reply bytes is null"); return; } //æ·»å ä¿¡æ¯å¿è·³æ è®° BhznGrainV2ServerUtils.addHeartBeat(ioSession); //é»è®¤è®¾ç½®ä¸»é讯æå¡ BhznGrainV2ServerUtils.addSession(ioSession); try { String hexStr = BytesUtil.bytesToString(bytes); log.info("ã"+ioSession.getAddress()+"ã主æºè¿åæ¥æ------->>å¹³å°ï¼" + hexStr); hexStr = hexStr.substring(BhznGrainV2ServerUtils.MSG_START.length()); IoMessage ioMessage = ReMessageBuilder.getInstance().buildMessage(hexStr); ioMessage.setIp(ioSession.getAddress()); ioMessage.setPort(ioSession.getPort()); analysisService.analysis(ioSession.getBusinessKey(), ioMessage); } catch (Exception e) { log.error(e.getMessage(), e); } } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/server/BhznGrainV2ServerEngine.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,131 @@ package com.ld.igds.protocol.bhzn.grainv2.server; import com.ld.igds.util.BytesUtil; import com.ld.io.api.*; import com.ld.io.netty.NettyServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @Desc: 馿µ·æºè½çº¯ç²®æ åè®® * @author: Andy * @update-time: 2023/5/11 */ @Slf4j @Service public class BhznGrainV2ServerEngine { public static final Integer PORT = 9309; @Autowired private BhznGrainV2MessageConsumer defaultMessageConsumer; @Autowired private BhznGrainV2SessionListener defaultSessionListener; // å¿è·³æä¾ private static HeartbeatProvider heartbeatProvider = new BhznGrainV2HeartbeatImpl(); private IoSessionQuery sessionQuery; public void start(Integer port) { IoServerOption ioServerOption = new IoServerOption(); if (null != port) { ioServerOption.setPort(port); } else { ioServerOption.setPort(PORT); } //确认ç»å°¾æ å¿ ioServerOption.setDelimiter(BhznGrainV2ServerUtils.MSG_END.getBytes()); // é 置系ç»å¿è·³é´é ioServerOption.setReaderIdleTime(5 * 60); NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener, heartbeatProvider); ioServer.startup(); sessionQuery = ioServer.getSessionQuery(); log.info("* "); log.info("* ========================"); log.info("* "); log.info("* [GRAIN-SERVERï¼BHZN_GRAIN,PORT={}]", PORT); log.info("* "); log.info("* ========================"); log.info("* "); System.out.println("* ========================"); System.out.println("* "); System.out.println("* [GRAIN-SERVERï¼BHZN_GRAIN,PORT={}]" + port); System.out.println("* "); System.out.println("* ========================"); } public IoSessionQuery getSessionQuery() { return sessionQuery; } /** * åéä¿¡æ¯ * * @param ip * @param port * @param msg * @return */ public InvokeResult push(String ip, int port, byte[] msg) { IoSessionQuery sessionFactory = getSessionQuery(); List<IoSession> sessions = sessionFactory.getAllSession(); IoSession session = null; for (IoSession ioSession : sessions) { if (BhznGrainV2ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { session = ioSession; break; } } if (null == session) { return InvokeResult.CHANNEL_CLOSED; } return session.invoke(msg); } // public InvokeResult push(String ip, int port, String hexStr) { // // byte[] msg = BytesUtil.hexStrToBytes(hexStr); // // IoSessionQuery sessionFactory = getSessionQuery(); // List<IoSession> sessions = sessionFactory.getAllSession(); // IoSession session = null; // for (IoSession ioSession : sessions) { // if (BhznGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { // session = ioSession; // break; // } // } // // if (null == session) { // return InvokeResult.CHANNEL_CLOSED; // } // return session.invoke(msg); // } /** * ç´æ¥ä½¿ç¨å åçSessionæ§è¡ */ public InvokeResult pushByMin(String hexStr) { IoSession session = BhznGrainV2ServerUtils.getSession(); if (null == session) { return InvokeResult.CHANNEL_CLOSED; } byte[] msg = BytesUtil.hexStrToBytes(hexStr); return session.invoke(msg); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/server/BhznGrainV2ServerUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package com.ld.igds.protocol.bhzn.grainv2.server; import com.ld.igds.util.BytesUtil; import com.ld.io.api.IoSession; import java.util.HashMap; import java.util.Map; /** * å·¥å ·ç±» * * @author vince */ public class BhznGrainV2ServerUtils { /** * è®°å½æ¯ä¸ªè¿æ¥çæå䏿¬¡ä¿¡æ¯æ¶é´ key = è¿æ¥çKYEï¼data =å½åæ¶é´æ³ */ public static Map<String, Long> contextMapHeart = new HashMap<>(); public static Map<String, IoSession> contextIoSession = new HashMap<>(); public static int HEART_BEAT_TIME = 30;//å¿è·³é´éæ¶é´ public static String MSG_START = "3C42485A4E3E";//<BHZN> public static String MSG_START2 = "AA"; public static String MSG_END = "<END>";//<END> public static String MSG_END_16 = "3C454E443E";//<END> public static final String CHARSET = "UTF-8"; /** * é对æ 线粮æ 主æºçé»è®¤IDé ç½® */ public static String DEFAULT_MAC_ID = "53681"; public static String FUNCTION_ID_00 = "00"; public static String FUNCTION_ID_F1 = "F1"; public static String FUNCTION_ID_F2 = "F2"; public static String FUNCTION_ID_83 = "83"; public static String FUNCTION_ID_93 = "93"; public static String FUNCTION_ID_92 = "92"; /** * çæTCPè¿æ¥çKEY * * @param ip * @param port * @return */ public static String getServerKey(String ip, Integer port) { return ip + ":" + port; } /** * æ·»å ææ°å¿è·³æ¶é´æ³ * * @param session */ public static void addHeartBeat(IoSession session) { contextMapHeart.put(getServerKey(session.getAddress(), session.getPort()), System.currentTimeMillis()); } public static Long getHearBeat(IoSession session) { return contextMapHeart.get(getServerKey(session.getAddress(), session.getPort())); } /** * è®¡ç®æ ¡éª * * @param content * @return */ public static String getCheck(String content) { int start = BhznGrainV2ServerUtils.MSG_START.length() + BhznGrainV2ServerUtils.MSG_START2.length(); content = content.substring(start); int sum = 0; String hex; for (int i = 0; i < content.length() / 2; i++) { hex = content.substring(i * 2, i * 2 + 2); sum += BytesUtil.hexToInt(hex); } String hexSum = BytesUtil.intToHexStr(sum); int check = BytesUtil.hexToInt(hexSum.substring(hexSum.length() - 2)); return BytesUtil.intToHexStr(256 - check).substring(2); } public static void addSession(IoSession session) { contextIoSession.put(DEFAULT_MAC_ID, session); } public static IoSession getSession() { return contextIoSession.get(DEFAULT_MAC_ID); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/grainv2/server/BhznGrainV2SessionListener.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.ld.igds.protocol.bhzn.grainv2.server; import com.ld.igds.common.CoreSerService; import com.ld.io.api.IoSession; import com.ld.io.api.IoSessionListener; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * */ @Slf4j @Service public class BhznGrainV2SessionListener implements IoSessionListener { @Autowired private CoreSerService coreSerService; /** * 设å¤å建å¨çº¿ï¼éè¦æ³¨æå½å使ç¨ä¸»æºæ¨¡å¼ï¼ä¸»æºä¸çº¿é»è®¤ææç¸åSNé ç½®çåæºå ¨é¨ä¸çº¿ * * @param session */ @Override public void onCreate(IoSession session) { //æ·»å å°å å BhznGrainV2ServerUtils.addSession(session); log.info("++++æ°å»ºè¿æ¥++++-IP={}ï¼PORT={}", session.getAddress(), session.getPort()); // æ·»å èªå®ä¹ä¸å¡ID session.setBusinessKey(BhznGrainV2ServerUtils.getServerKey(session.getAddress(), session.getPort())); //项ç®éç¨æ çº¿ä¸»æºæ¨¡å¼ï¼ç´æ¥è·åé»è®¤è®¾å¤ // DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); //if (null == deviceSer) return; //coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_Y); //æ´æ°ç¼å // coreSerService.refreshCache(deviceSer.getCompanyId()); } /** * 注æï¼å½åéç¨ä¸»æºæ¨¡å¼ï¼ä¸»æºç¦»çº¿ææç¸åSNé ç½®çåæºå ¨é¨ç¦»çº¿ * * @param session */ @Override public void onDestroy(IoSession session) { log.info("----è¿æ¥æå¼-----IP={}ï¼PORT={}", session.getAddress(), session.getPort()); // //项ç®éç¨æ çº¿ä¸»æºæ¨¡å¼ï¼ç´æ¥è·åé»è®¤è®¾å¤ // DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BhznGrainV1ServerUtils.DEFAULT_MAC_ID); // // if (null == deviceSer) return; //ç±äºè®¾å¤æçº¿åèªå¨è°æ´ // coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_N); // //æ´æ°ç¼å // coreSerService.refreshCache(deviceSer.getCompanyId()); } } igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/package-info.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ /** * @Desc: 馿µ·æºè½å ¬å¸ç¸å ³åè®® * @author: Andy * @update-time: 2023/5/11 */ package com.ld.igds.protocol.bhzn; igds-web/pom.xml
@@ -167,7 +167,21 @@ </exclusion> </exclusions> </dependency>--> <dependency> <groupId>com.ld.igds</groupId> <artifactId>igds-protocol-bhzn</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> </dependencies> igds-web/src/main/resources/application-dev.yml
@@ -46,7 +46,7 @@ database: 1 host: 127.0.0.1 port: 6379 password: Abc123.. password: pool: max-active: 200 max-wait: -1 igds-web/src/main/resources/application-pro5324.yml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ ########################## 广ä¸é«å·-馿µ·æºè½ ########################## server: port: 8888 context-path: / connection-timeout: 5000 tomcat: uri-encoding: UTF-8 ########################## datasourcec ########################## spring: datasource: db-base: name: db-base type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://127.0.0.1:3306/igds_master?useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.jdbc.Driver username: root password: ukJp12Qf+elyBvGHkJ5MQMa95pfVm0oFBHefdEgDFKoFSjbgYa9PYfv5vlem5nvoXjQsP9tIIo53DvSbsl160Q== public-key: config-decrypt: true initial-size: 5 min-idle: 5 max-active: 50 max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: select 1 from dual test-whileIdle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 filters: stat connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 use-global-data-source-stat: true removeAbandoned: true removeAbandonedTimeout: 90 logAbandoned: true poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 db-sqlite: name: db-sqlite url: jdbc:sqlite:D:/app/igds/db/iot_cfg.db driver-class-name: org.sqlite.JDBC type: com.alibaba.druid.pool.DruidDataSource username: password: # Redisç¸å ³é ç½® redis: database: 0 host: 127.0.0.1 port: 6379 password: Abc123.. # è¿æ¥æ± æå¤§è¿æ¥æ°ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ pool: max-active: 200 max-wait: -1 max-idle: 10 min-idle: 0 timeout: 6000 license: subject: ld_license publicAlias: publicCert storePass: PUBLICFZZYXXJSGFYXGS888888 licensePath: D:/IGDS/license/license.lic publicKeysStorePath: D:/IGDS/license/publicCerts.keystore ########################## IGDS ########################## ## ç³»ç»æ¥å£è·¯ç±é ç½® æ³¨ææ°å妿以0å¼å¤´çè¯ï¼åå°ä¼åºç°è½¬ä¹ï¼è¯·æ·»å "" igds: default: companyId: 5324 sys-name: æºæ §ç²®åºç®¡çç³»ç» logo: logo-default.png logo-title: logo-title-default.png support: æºæ §ç²®åºç»¼å管çå¹³å° grian-add-point: N file-path: D:/IGDS/FILE/ igds-web/src/main/resources/application.yml
@@ -1,7 +1,7 @@ ########################## Server ########################## spring: profiles: active: dev active: pro5324 application: name: igds main: igds-web/src/main/resources/logback-spring.xml
@@ -74,7 +74,7 @@ </springProfile> <!-- ç产ç¯å¢ --> <springProfile name="pro"> <springProfile name="pro5324"> <!-- æ¯å¤©äº§çä¸ä¸ªæä»¶ --> <appender name="PRO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- æä»¶è·¯å¾ --> pom.xml
@@ -37,6 +37,8 @@ <module>igds-warn</module> <module>igds-protocol-block</module> <module>igds-protocol-fzzy3</module> <!--馿µ·æºè½--> <module>igds-protocol-bhzn</module> <!--ç©èç½æå±è®¾å¤å --> <module>igds-protocol-iot</module> <!-- ææºå -->