diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f07e3c0..0fdbb48 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,11 +43,12 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 - if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); - } +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { + Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); Object fieldValue = combinedFieldParam.getResolveFieldFunction().apply(abstractFieldConfig); + abstractFieldConfig.setOriginPositionByte(originPositionByte); if (ObjectUtils.isNotEmpty(abstractFieldConfig.getIsStorage()) && abstractFieldConfig.getIsStorage() == 1) { storeObjectMap.put(abstractFieldConfig.getFieldName(), fieldValue); } @@ -61,9 +62,9 @@ * 计算处理后的偏移位置 */ private Integer calculateAfterProcessPosition(AbstractFieldConfig newProtocolFieldConfig, CombinedFieldProcessorParam combinedFieldParam) { - Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); +// Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); Integer mergeBitToByte = 0; - mergeBitToByte += originPositionIndex; +// mergeBitToByte += originPositionIndex; if (newProtocolFieldConfig.getOffsetUnit().equals("bit")) { mergeBitToByte += (newProtocolFieldConfig.getOriginPositionBit() + newProtocolFieldConfig.getOffsetLength()) / 8; } else { diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f07e3c0..0fdbb48 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,11 +43,12 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 - if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); - } +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { + Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); Object fieldValue = combinedFieldParam.getResolveFieldFunction().apply(abstractFieldConfig); + abstractFieldConfig.setOriginPositionByte(originPositionByte); if (ObjectUtils.isNotEmpty(abstractFieldConfig.getIsStorage()) && abstractFieldConfig.getIsStorage() == 1) { storeObjectMap.put(abstractFieldConfig.getFieldName(), fieldValue); } @@ -61,9 +62,9 @@ * 计算处理后的偏移位置 */ private Integer calculateAfterProcessPosition(AbstractFieldConfig newProtocolFieldConfig, CombinedFieldProcessorParam combinedFieldParam) { - Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); +// Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); Integer mergeBitToByte = 0; - mergeBitToByte += originPositionIndex; +// mergeBitToByte += originPositionIndex; if (newProtocolFieldConfig.getOffsetUnit().equals("bit")) { mergeBitToByte += (newProtocolFieldConfig.getOriginPositionBit() + newProtocolFieldConfig.getOffsetLength()) / 8; } else { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java index 5feeaaf..5d00b13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java @@ -28,6 +28,9 @@ */ private Integer replyCommand; + + private Boolean isDeliveryConfig; + /** * 设备编号 */ diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f07e3c0..0fdbb48 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,11 +43,12 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 - if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); - } +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { + Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); Object fieldValue = combinedFieldParam.getResolveFieldFunction().apply(abstractFieldConfig); + abstractFieldConfig.setOriginPositionByte(originPositionByte); if (ObjectUtils.isNotEmpty(abstractFieldConfig.getIsStorage()) && abstractFieldConfig.getIsStorage() == 1) { storeObjectMap.put(abstractFieldConfig.getFieldName(), fieldValue); } @@ -61,9 +62,9 @@ * 计算处理后的偏移位置 */ private Integer calculateAfterProcessPosition(AbstractFieldConfig newProtocolFieldConfig, CombinedFieldProcessorParam combinedFieldParam) { - Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); +// Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); Integer mergeBitToByte = 0; - mergeBitToByte += originPositionIndex; +// mergeBitToByte += originPositionIndex; if (newProtocolFieldConfig.getOffsetUnit().equals("bit")) { mergeBitToByte += (newProtocolFieldConfig.getOriginPositionBit() + newProtocolFieldConfig.getOffsetLength()) / 8; } else { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java index 5feeaaf..5d00b13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java @@ -28,6 +28,9 @@ */ private Integer replyCommand; + + private Boolean isDeliveryConfig; + /** * 设备编号 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java index 81644ea..f9c6466 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java @@ -106,7 +106,6 @@ if (protocolFieldValue != null) { //加入缓存 if (ObjectUtils.isNotEmpty(protocolFieldValue)) { - this.singleObjects.put(catchKey, protocolFieldValue); return protocolFieldValue; } } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f07e3c0..0fdbb48 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,11 +43,12 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 - if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); - } +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { + Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); Object fieldValue = combinedFieldParam.getResolveFieldFunction().apply(abstractFieldConfig); + abstractFieldConfig.setOriginPositionByte(originPositionByte); if (ObjectUtils.isNotEmpty(abstractFieldConfig.getIsStorage()) && abstractFieldConfig.getIsStorage() == 1) { storeObjectMap.put(abstractFieldConfig.getFieldName(), fieldValue); } @@ -61,9 +62,9 @@ * 计算处理后的偏移位置 */ private Integer calculateAfterProcessPosition(AbstractFieldConfig newProtocolFieldConfig, CombinedFieldProcessorParam combinedFieldParam) { - Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); +// Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); Integer mergeBitToByte = 0; - mergeBitToByte += originPositionIndex; +// mergeBitToByte += originPositionIndex; if (newProtocolFieldConfig.getOffsetUnit().equals("bit")) { mergeBitToByte += (newProtocolFieldConfig.getOriginPositionBit() + newProtocolFieldConfig.getOffsetLength()) / 8; } else { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java index 5feeaaf..5d00b13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java @@ -28,6 +28,9 @@ */ private Integer replyCommand; + + private Boolean isDeliveryConfig; + /** * 设备编号 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java index 81644ea..f9c6466 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java @@ -106,7 +106,6 @@ if (protocolFieldValue != null) { //加入缓存 if (ObjectUtils.isNotEmpty(protocolFieldValue)) { - this.singleObjects.put(catchKey, protocolFieldValue); return protocolFieldValue; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java index 9dc64f1..17e9064 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java @@ -90,7 +90,13 @@ private static UpgradeFileStore.deviceTypeVersionFileBytes getCurrentFileBytes(String deviceType, String version) { UpgradeFileStore.deviceTypeVersionFileBytes typeVersionFileBytes = null; String findFileName = FileNameEnums.FILE_NAMES.getFileNameMap().get(deviceType); + //路径暂定 + String filePathName = "D:\\casic\\file\\" + findFileName; + File file = new File(filePathName); System.out.println("--------------------------" + findFileName); + if(!file.exists()){ + return null; + } if (StringUtils.isNotEmpty(version) && compareVersion(version, findFileName)) { return null; } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f07e3c0..0fdbb48 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,11 +43,12 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 - if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); - } +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { + Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); Object fieldValue = combinedFieldParam.getResolveFieldFunction().apply(abstractFieldConfig); + abstractFieldConfig.setOriginPositionByte(originPositionByte); if (ObjectUtils.isNotEmpty(abstractFieldConfig.getIsStorage()) && abstractFieldConfig.getIsStorage() == 1) { storeObjectMap.put(abstractFieldConfig.getFieldName(), fieldValue); } @@ -61,9 +62,9 @@ * 计算处理后的偏移位置 */ private Integer calculateAfterProcessPosition(AbstractFieldConfig newProtocolFieldConfig, CombinedFieldProcessorParam combinedFieldParam) { - Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); +// Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); Integer mergeBitToByte = 0; - mergeBitToByte += originPositionIndex; +// mergeBitToByte += originPositionIndex; if (newProtocolFieldConfig.getOffsetUnit().equals("bit")) { mergeBitToByte += (newProtocolFieldConfig.getOriginPositionBit() + newProtocolFieldConfig.getOffsetLength()) / 8; } else { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java index 5feeaaf..5d00b13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java @@ -28,6 +28,9 @@ */ private Integer replyCommand; + + private Boolean isDeliveryConfig; + /** * 设备编号 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java index 81644ea..f9c6466 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java @@ -106,7 +106,6 @@ if (protocolFieldValue != null) { //加入缓存 if (ObjectUtils.isNotEmpty(protocolFieldValue)) { - this.singleObjects.put(catchKey, protocolFieldValue); return protocolFieldValue; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java index 9dc64f1..17e9064 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java @@ -90,7 +90,13 @@ private static UpgradeFileStore.deviceTypeVersionFileBytes getCurrentFileBytes(String deviceType, String version) { UpgradeFileStore.deviceTypeVersionFileBytes typeVersionFileBytes = null; String findFileName = FileNameEnums.FILE_NAMES.getFileNameMap().get(deviceType); + //路径暂定 + String filePathName = "D:\\casic\\file\\" + findFileName; + File file = new File(filePathName); System.out.println("--------------------------" + findFileName); + if(!file.exists()){ + return null; + } if (StringUtils.isNotEmpty(version) && compareVersion(version, findFileName)) { return null; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java index f0aaaf1..297734e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java @@ -126,7 +126,7 @@ */ protected Integer buildBizConfigFieldFrame(ByteBuf replyBytes, Map fieldConfigsMap, ParseResult parseResult, Map fieldRuleConfigMap) { //如果不是默认的回复机制,则直接返回当前构建内容的长度 - if (parseResult.getReplyCommand() != SUCCESS_DATA) { + if (parseResult.getReplyCommand() != SUCCESS_DATA || !parseResult.getIsDeliveryConfig()) { return ByteBufUtil.hexDump(replyBytes).length() / 2; } String devcode = parseResult.getDevcode(); @@ -149,6 +149,7 @@ replyBytes.writeBytes(FieldReverseDecorator.combinedField(fieldConfigsMap, combinedFieldConfig, bizDataMap, fieldRuleConfigMap)); } System.out.println(ByteBufUtil.hexDump(replyBytes)); + FieldReverseDecorator.simpleField(fieldConfigs, bizDataMap, replyBytes, fieldRuleConfigMap, null); return ByteBufUtil.hexDump(replyBytes).length() / 2; } diff --git a/casic-iot-web/src/main/resources/config/application-dev.yml b/casic-iot-web/src/main/resources/config/application-dev.yml index 0e32987..bea40b6 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 7096 + port: 7093 ################### spring配置 ################### spring: datasource: diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 01b20f5..ff16348 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -57,10 +57,10 @@ ParseResult result = null; String devcode = null; + //暂时先取第一个, 减少类的创建销毁与构建 + AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); + Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); try { - //暂时先取第一个, 减少类的创建销毁与构建 - AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); - Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf); devcode = (String) parseFixedDataMap.get("devcode"); // 通过协议工厂匹配,匹配规则,获取规则配置 RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap); @@ -87,7 +87,7 @@ //通过匹配帧结构获取完整的数据包,验证是否是一个完整的帧结构 for (FrameStructMatcher frameStructMatcher : frameStructDispenserList) { //帧结构该协议,经过帧结构判断选定帧协议完整的数据报文 - if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory, datagramEventProvider)) != null) { + if ((intactMessageByte = frameStructMatcher.getIntactMessageByte(byteBuf, protocolFactory,datagramEventProvider, parseFixedDataMap)) != null) { break; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java index 0584110..a7a3e28 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/FrameStructMatcher.java @@ -5,6 +5,8 @@ import com.casic.missiles.provider.ProcessorInstanceProvider; import io.netty.buffer.ByteBuf; +import java.util.Map; + /** * 通过帧结构,进行帧粘包,截取包、数据完整性等问题的处理 * 分析匹配情况 @@ -21,7 +23,7 @@ * * @return */ - ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide); + ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java index 40726ac..2bca65d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameLengthMatcher.java @@ -12,6 +12,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * @author cz *

@@ -21,12 +23,12 @@ public class FrameLengthMatcher extends FrameStructMatchSupport implements FrameStructMatcher { /** - * 通过长度获取完整的协议数据报文 + * 通过长度获取完整的协议数据报文 * 1、如果没有配置结尾标志和拆包长度,可以直接使用长度进行匹配 * 2、长度相等的16进制串,执行CRC校验成功,获取完整的协议数据报文 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java index f8a0f1a..1dfbdc9 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameMarkMatcher.java @@ -42,7 +42,7 @@ * 获取实例完整的数据包 */ @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || protocolFieldConfigProvider == null) { @@ -60,7 +60,7 @@ //后续标志位结束 if (unpackFlag == 1) { //表示可以截取 - intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide); + intactMessageByte = mergeMarkFrame(matchByteBuf, protocolFactory, datagramEventProvide,parseFixedDataMap); return intactMessageByte; } else { storeHalfPackBuf(protocolFactory, matchByteBuf); @@ -78,7 +78,7 @@ * 1、当前帧为结尾标志帧,进行尾结点添加 * 2、根据帧结构位置信息,合并相关的帧信息 */ - private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider) { + private ByteBuf mergeMarkFrame(ByteBuf byteBufContent, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvider, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); Map currentFrameFixedProperty = protocolFactory.getProtocolFieldConfigProvider().getFixedProperty(byteBufContent, protocolConfig); //重置 @@ -93,7 +93,7 @@ .byteBuf(byteBufContent) .tailPosition(currentFrameFixedProperty.get(TAIL_POSITION)) .fixPosition(currentFrameFixedProperty.get(FIXED_POSITION)) - .fixedStoreMap(protocolFactory.getProtocolFieldConfigProvider().getStoreObjectMap()) + .fixedStoreMap(parseFixedDataMap) .build()); //会存在多个帧拼接在一起的的情况,进行合并处理 for (MatchDataStore.ExpiringByteBuf expiringByteBuf : sortList) { @@ -116,7 +116,7 @@ bizFrameStr += plainText; } } - ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr,headFrame,tail); + ByteBuf bizFrameByte = protocolFactory.getProtocolFieldConfigProvider().setDataContentBuf(bizFrameStr, headFrame, tail); //增加头 mergeWholeFrameByte.writeBytes(Hex.decode(headFrame)); //增加业务内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java index b4499c5..1833728 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/impl/FrameTailMatcher.java @@ -15,6 +15,8 @@ import org.springframework.core.annotation.Order; import org.springframework.util.ObjectUtils; +import java.util.Map; + /** * 结尾标志获取完整的数据报文 * 这里对尾部标志位经验较少,可以进行后续扩展增加 @@ -24,7 +26,7 @@ //结尾标志位后面还有数据怎么办 @Override - public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide) { + public ByteBuf getIntactMessageByte(ByteBuf byteBuf, AbstractProtocolConfigFactory protocolFactory, ProcessorInstanceProvider datagramEventProvide, Map parseFixedDataMap) { ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig(); ProtocolFieldConfigProvider fieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider(); if (protocolConfig == null || fieldConfigProvider == null) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java index c377678..d06c766 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/field/TimeFormatFieldProcessor.java @@ -20,9 +20,9 @@ if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") - && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("interval")) { + && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); - mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("interval")); + mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); } } return; @@ -46,7 +46,7 @@ storeObjectMap.remove("月"); storeObjectMap.remove("年"); storeObjectMap.remove("日"); - storeObjectMap.remove("interval"); + storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java index 51bd984..d3551fc 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/BeforeUpgradesReplyCommandPostProcessing.java @@ -25,6 +25,7 @@ result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java index 94e9877..ff5a418 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/ConfirmConfigIssue.java @@ -21,10 +21,11 @@ if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) || bizDataMap.get(0).containsKey(IMEI)) { + if (bizDataMap.get(0).containsKey(SYSYETM_TIMES) && bizDataMap.get(0).containsKey(PERIOD)) { result = ParseResult.builder().replyCommand(CONFIRM_CONFIG_ISSUE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java index f01b61a..76cd422 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DefaultReplyCommandPostProcessing.java @@ -12,7 +12,6 @@ import java.util.Map; /** - * * 定制化的命令 * * @author cz @@ -24,14 +23,18 @@ AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { - if(CollectionUtils.isEmpty(bizDataMap)){ - throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } result = ParseResult.builder().replyCommand(SUCCESS_DATA) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .ruleConfigFactory(ruleConfigFactory) + .isDeliveryConfig(true) .protocolFactory(protocolFactory) .build(); + if (bizDataMap.get(0).containsKey(ICCID)) { + result.setIsDeliveryConfig(false); + } } return result; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java index 92a9b24..4df271b 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/UpgradesReplyCommandPostProcessing.java @@ -28,6 +28,7 @@ result = ParseResult.builder().replyCommand(UPGRADE_CONTENT) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) .bizDataMap(bizDataMap.get(0)) + .isDeliveryConfig(true) .ruleConfigFactory(ruleConfigFactory) .protocolFactory(protocolFactory) .build(); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java index f07e3c0..0fdbb48 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/BizFieldParseProcessor.java @@ -43,11 +43,12 @@ Map storeObjectMap = getStoreObjectMap(currentIndex++, combinedFieldParam.getStoreObjectList()); for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 - if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); - } +// if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { + Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + abstractFieldConfig.setOriginPositionByte(abstractFieldConfig.getOriginPositionByte() + fieldCurrent); fieldCurrent += calculateAfterProcessPosition(abstractFieldConfig, combinedFieldParam); Object fieldValue = combinedFieldParam.getResolveFieldFunction().apply(abstractFieldConfig); + abstractFieldConfig.setOriginPositionByte(originPositionByte); if (ObjectUtils.isNotEmpty(abstractFieldConfig.getIsStorage()) && abstractFieldConfig.getIsStorage() == 1) { storeObjectMap.put(abstractFieldConfig.getFieldName(), fieldValue); } @@ -61,9 +62,9 @@ * 计算处理后的偏移位置 */ private Integer calculateAfterProcessPosition(AbstractFieldConfig newProtocolFieldConfig, CombinedFieldProcessorParam combinedFieldParam) { - Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); +// Integer originPositionIndex = newProtocolFieldConfig.getOriginPositionByte() - combinedFieldParam.getByteBuf().readerIndex(); Integer mergeBitToByte = 0; - mergeBitToByte += originPositionIndex; +// mergeBitToByte += originPositionIndex; if (newProtocolFieldConfig.getOffsetUnit().equals("bit")) { mergeBitToByte += (newProtocolFieldConfig.getOriginPositionBit() + newProtocolFieldConfig.getOffsetLength()) / 8; } else { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java index 5feeaaf..5d00b13 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/pojo/ParseResult.java @@ -28,6 +28,9 @@ */ private Integer replyCommand; + + private Boolean isDeliveryConfig; + /** * 设备编号 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java index 81644ea..f9c6466 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java @@ -106,7 +106,6 @@ if (protocolFieldValue != null) { //加入缓存 if (ObjectUtils.isNotEmpty(protocolFieldValue)) { - this.singleObjects.put(catchKey, protocolFieldValue); return protocolFieldValue; } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java index 9dc64f1..17e9064 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java @@ -90,7 +90,13 @@ private static UpgradeFileStore.deviceTypeVersionFileBytes getCurrentFileBytes(String deviceType, String version) { UpgradeFileStore.deviceTypeVersionFileBytes typeVersionFileBytes = null; String findFileName = FileNameEnums.FILE_NAMES.getFileNameMap().get(deviceType); + //路径暂定 + String filePathName = "D:\\casic\\file\\" + findFileName; + File file = new File(filePathName); System.out.println("--------------------------" + findFileName); + if(!file.exists()){ + return null; + } if (StringUtils.isNotEmpty(version) && compareVersion(version, findFileName)) { return null; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java index f0aaaf1..297734e 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/replier/command/ReplyCommandSupport.java @@ -126,7 +126,7 @@ */ protected Integer buildBizConfigFieldFrame(ByteBuf replyBytes, Map fieldConfigsMap, ParseResult parseResult, Map fieldRuleConfigMap) { //如果不是默认的回复机制,则直接返回当前构建内容的长度 - if (parseResult.getReplyCommand() != SUCCESS_DATA) { + if (parseResult.getReplyCommand() != SUCCESS_DATA || !parseResult.getIsDeliveryConfig()) { return ByteBufUtil.hexDump(replyBytes).length() / 2; } String devcode = parseResult.getDevcode(); @@ -149,6 +149,7 @@ replyBytes.writeBytes(FieldReverseDecorator.combinedField(fieldConfigsMap, combinedFieldConfig, bizDataMap, fieldRuleConfigMap)); } System.out.println(ByteBufUtil.hexDump(replyBytes)); + FieldReverseDecorator.simpleField(fieldConfigs, bizDataMap, replyBytes, fieldRuleConfigMap, null); return ByteBufUtil.hexDump(replyBytes).length() / 2; } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/enums/ReplyCommandEnum.java b/sensorhub-support/src/main/java/com/casic/missiles/enums/ReplyCommandEnum.java index 93e390f..c1e683f 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/enums/ReplyCommandEnum.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/enums/ReplyCommandEnum.java @@ -20,7 +20,7 @@ /** * 下发配置确认的业务代码 */ - String IMEI = "imei"; + String PERIOD = "period"; /** * 解析失败,无需响应 @@ -30,6 +30,11 @@ /** * 解析成功,数据应答 */ + int ICCID_DATA = 4; + + /** + * 解析成功,数据应答 + */ int SUCCESS_DATA = 1; /** @@ -68,6 +73,8 @@ String UPGRADE_TEXT_LENGTH = "upgradePackLength"; + String ICCID = "iccid"; + /** * 操作类型呈对应的关系 */