diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java index 4047da9..65a126a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java @@ -1,5 +1,6 @@ package com.casic.missiles.parser.resolver; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.parser.resolver.rule.ByteMergeResolver; import com.casic.missiles.parser.resolver.rule.ByteTypeResolver; import com.casic.missiles.parser.resolver.rule.DecorateResolver; @@ -19,7 +20,7 @@ public class GenericFiledRuleResolver { /** - * 拿到所有的值合并到一个值 + * 拿到所有的值合并到一个值 * 无论是bit位的解析,还是byte的解析,统一都转换成byte进行规则的换算解析 * 1、必须进行byte与值的类型转换 * 2、存在可能,对值进行运算 @@ -28,17 +29,21 @@ * 值运算包括值缩放、格式转换、精度运算 * 这是一般的运算流程 */ - public static Object doResolveFieldByteRule(ByteBuf byteBuf,String ruleIds, Map fieldRuleConfigMap) { + public static Object doResolveFieldByteRule(ByteBuf byteBuf, String ruleIds, Map fieldRuleConfigMap) { Object resolveRuleValue = ByteBufUtil.hexDump(byteBuf); List byteBufList = new ArrayList<>(); + String[] ruleStrs = ruleIds.split(","); //存放到数组里面 - for (int i =0; i < byteBuf.writerIndex(); i++) { - byteBufList.add(byteBuf.readBytes(1)); + if (ruleStrs.length == 1) { + byteBufList.add(byteBuf); + } else { + for (int i = 0; i < byteBuf.writerIndex(); i++) { + byteBufList.add(byteBuf.readBytes(1)); + } } - String[] ruleStrs=ruleIds.split(","); //通过类型可以控制aviator入参出参的数据 for (String ruleId : ruleStrs) { - FieldRuleConfig fieldRuleConfig=fieldRuleConfigMap.get(Long.valueOf(ruleId)); + FieldRuleConfig fieldRuleConfig = fieldRuleConfigMap.get(Long.valueOf(ruleId)); String ruleType = fieldRuleConfig.getRuleType(); //合并规则进行执行字段合并 switch (ruleType) { @@ -50,17 +55,20 @@ for (Object object : byteBufList) { tempByteBufList.add(ByteTypeResolver.resolveRule(object, fieldRuleConfig.getExpression())); } - byteBufList=tempByteBufList; + byteBufList = tempByteBufList; break; case "decorate": List decorateByteBufList = new ArrayList<>(); for (Object object : byteBufList) { - decorateByteBufList.add(DecorateResolver.resolveRule(object,fieldRuleConfig)); + decorateByteBufList.add(DecorateResolver.resolveRule(object, fieldRuleConfig)); } - byteBufList=decorateByteBufList; + byteBufList = decorateByteBufList; break; } } + if (CollectionUtils.isNotEmpty(byteBufList)) { + resolveRuleValue = byteBufList.get(0); + } return resolveRuleValue; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java index 4047da9..65a126a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/GenericFiledRuleResolver.java @@ -1,5 +1,6 @@ package com.casic.missiles.parser.resolver; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.parser.resolver.rule.ByteMergeResolver; import com.casic.missiles.parser.resolver.rule.ByteTypeResolver; import com.casic.missiles.parser.resolver.rule.DecorateResolver; @@ -19,7 +20,7 @@ public class GenericFiledRuleResolver { /** - * 拿到所有的值合并到一个值 + * 拿到所有的值合并到一个值 * 无论是bit位的解析,还是byte的解析,统一都转换成byte进行规则的换算解析 * 1、必须进行byte与值的类型转换 * 2、存在可能,对值进行运算 @@ -28,17 +29,21 @@ * 值运算包括值缩放、格式转换、精度运算 * 这是一般的运算流程 */ - public static Object doResolveFieldByteRule(ByteBuf byteBuf,String ruleIds, Map fieldRuleConfigMap) { + public static Object doResolveFieldByteRule(ByteBuf byteBuf, String ruleIds, Map fieldRuleConfigMap) { Object resolveRuleValue = ByteBufUtil.hexDump(byteBuf); List byteBufList = new ArrayList<>(); + String[] ruleStrs = ruleIds.split(","); //存放到数组里面 - for (int i =0; i < byteBuf.writerIndex(); i++) { - byteBufList.add(byteBuf.readBytes(1)); + if (ruleStrs.length == 1) { + byteBufList.add(byteBuf); + } else { + for (int i = 0; i < byteBuf.writerIndex(); i++) { + byteBufList.add(byteBuf.readBytes(1)); + } } - String[] ruleStrs=ruleIds.split(","); //通过类型可以控制aviator入参出参的数据 for (String ruleId : ruleStrs) { - FieldRuleConfig fieldRuleConfig=fieldRuleConfigMap.get(Long.valueOf(ruleId)); + FieldRuleConfig fieldRuleConfig = fieldRuleConfigMap.get(Long.valueOf(ruleId)); String ruleType = fieldRuleConfig.getRuleType(); //合并规则进行执行字段合并 switch (ruleType) { @@ -50,17 +55,20 @@ for (Object object : byteBufList) { tempByteBufList.add(ByteTypeResolver.resolveRule(object, fieldRuleConfig.getExpression())); } - byteBufList=tempByteBufList; + byteBufList = tempByteBufList; break; case "decorate": List decorateByteBufList = new ArrayList<>(); for (Object object : byteBufList) { - decorateByteBufList.add(DecorateResolver.resolveRule(object,fieldRuleConfig)); + decorateByteBufList.add(DecorateResolver.resolveRule(object, fieldRuleConfig)); } - byteBufList=decorateByteBufList; + byteBufList = decorateByteBufList; break; } } + if (CollectionUtils.isNotEmpty(byteBufList)) { + resolveRuleValue = byteBufList.get(0); + } return resolveRuleValue; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java index 8999afc..c0f277f 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java @@ -1,14 +1,11 @@ package com.casic.missiles.parser.resolver.fields; -import com.alibaba.fastjson.JSONArray; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.casic.missiles.parser.resolver.GenericFiledRuleResolver; import com.casic.missiles.pojo.FieldRuleConfig; import io.netty.buffer.ByteBuf; import lombok.extern.slf4j.Slf4j; -import java.util.List; import java.util.Map; /**