diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); storeObjectMap.remove("间隔时间"); tempTailTime.add(Calendar.MINUTE, interval); } } - } diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java new file mode 100644 index 0000000..1fd58f2 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java @@ -0,0 +1,49 @@ +package com.casic.missiles.parser.processor.reply; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.factory.AbstractProtocolConfigFactory; +import com.casic.missiles.factory.AbstractRuleConfigFactory; +import com.casic.missiles.parser.processor.AbstractReplyCommandPostProcessing; +import com.casic.missiles.pojo.ParseResult; +import com.casic.missiles.util.RedisCommon; +import com.casic.missiles.util.SpringContextUtil; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DevcieConfigConfirm implements AbstractReplyCommandPostProcessing { + + @Override + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + } + //下发确认阶段 + if (parseFixedDataMap.containsKey("PDUType") && 12 == (Integer) parseFixedDataMap.get("PDUType")) { + RedisCommon redisCommon = SpringContextUtil.getBean(RedisCommon.class); + Map configDataMap = bizDataMap.get(0); + //通过设备编号获取查询对应的下发配置 + String devcode = configDataMap.get(DEVCODE).toString(); + Map redisConfigMap = redisCommon.getMsg(devcode); + if (CollectionUtils.isEmpty(redisConfigMap)) { + return result; + } + //遍历redis配置 + Iterator> iterator = redisConfigMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (configDataMap.containsKey(entry.getKey()) && configDataMap.get(entry.getKey()).toString().equals(entry.getValue().toString())) { + continue; + } else { + configDataMap.put("config", "0"); + return result; + } + } + //下发配置成功 +// redisCommon.removeKeyByDevcode(devcode); + configDataMap.put("config", "1"); + } + return result; + } +} \ No newline at end of file diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java new file mode 100644 index 0000000..1fd58f2 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java @@ -0,0 +1,49 @@ +package com.casic.missiles.parser.processor.reply; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.factory.AbstractProtocolConfigFactory; +import com.casic.missiles.factory.AbstractRuleConfigFactory; +import com.casic.missiles.parser.processor.AbstractReplyCommandPostProcessing; +import com.casic.missiles.pojo.ParseResult; +import com.casic.missiles.util.RedisCommon; +import com.casic.missiles.util.SpringContextUtil; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DevcieConfigConfirm implements AbstractReplyCommandPostProcessing { + + @Override + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + } + //下发确认阶段 + if (parseFixedDataMap.containsKey("PDUType") && 12 == (Integer) parseFixedDataMap.get("PDUType")) { + RedisCommon redisCommon = SpringContextUtil.getBean(RedisCommon.class); + Map configDataMap = bizDataMap.get(0); + //通过设备编号获取查询对应的下发配置 + String devcode = configDataMap.get(DEVCODE).toString(); + Map redisConfigMap = redisCommon.getMsg(devcode); + if (CollectionUtils.isEmpty(redisConfigMap)) { + return result; + } + //遍历redis配置 + Iterator> iterator = redisConfigMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (configDataMap.containsKey(entry.getKey()) && configDataMap.get(entry.getKey()).toString().equals(entry.getValue().toString())) { + continue; + } else { + configDataMap.put("config", "0"); + return result; + } + } + //下发配置成功 +// redisCommon.removeKeyByDevcode(devcode); + configDataMap.put("config", "1"); + } + return result; + } +} \ No newline at end of file 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 4df271b..ac2706b 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 @@ -18,7 +18,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java new file mode 100644 index 0000000..1fd58f2 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java @@ -0,0 +1,49 @@ +package com.casic.missiles.parser.processor.reply; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.factory.AbstractProtocolConfigFactory; +import com.casic.missiles.factory.AbstractRuleConfigFactory; +import com.casic.missiles.parser.processor.AbstractReplyCommandPostProcessing; +import com.casic.missiles.pojo.ParseResult; +import com.casic.missiles.util.RedisCommon; +import com.casic.missiles.util.SpringContextUtil; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DevcieConfigConfirm implements AbstractReplyCommandPostProcessing { + + @Override + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + } + //下发确认阶段 + if (parseFixedDataMap.containsKey("PDUType") && 12 == (Integer) parseFixedDataMap.get("PDUType")) { + RedisCommon redisCommon = SpringContextUtil.getBean(RedisCommon.class); + Map configDataMap = bizDataMap.get(0); + //通过设备编号获取查询对应的下发配置 + String devcode = configDataMap.get(DEVCODE).toString(); + Map redisConfigMap = redisCommon.getMsg(devcode); + if (CollectionUtils.isEmpty(redisConfigMap)) { + return result; + } + //遍历redis配置 + Iterator> iterator = redisConfigMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (configDataMap.containsKey(entry.getKey()) && configDataMap.get(entry.getKey()).toString().equals(entry.getValue().toString())) { + continue; + } else { + configDataMap.put("config", "0"); + return result; + } + } + //下发配置成功 +// redisCommon.removeKeyByDevcode(devcode); + configDataMap.put("config", "1"); + } + return result; + } +} \ No newline at end of file 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 4df271b..ac2706b 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 @@ -18,7 +18,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { 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 0fdbb48..4cd61a7 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 @@ -44,13 +44,13 @@ for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 // if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + 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); + setStoreObjectMap(currentIndex-1, combinedFieldParam.getStoreObjectList(), abstractFieldConfig.getFieldName(), fieldValue); } } } @@ -73,6 +73,14 @@ return mergeBitToByte; } + + private void setStoreObjectMap(int currrentIndex, List> storeObjectMap, String name, Object fieldValue) { + for (int i = currrentIndex; i < storeObjectMap.size(); i++) { + storeObjectMap.get(i).put(name, fieldValue); + } + } + + /** * 获取,如果存在则进行数据的读取,如果不存在则进行深拷贝,重新复制 */ diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java new file mode 100644 index 0000000..1fd58f2 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java @@ -0,0 +1,49 @@ +package com.casic.missiles.parser.processor.reply; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.factory.AbstractProtocolConfigFactory; +import com.casic.missiles.factory.AbstractRuleConfigFactory; +import com.casic.missiles.parser.processor.AbstractReplyCommandPostProcessing; +import com.casic.missiles.pojo.ParseResult; +import com.casic.missiles.util.RedisCommon; +import com.casic.missiles.util.SpringContextUtil; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DevcieConfigConfirm implements AbstractReplyCommandPostProcessing { + + @Override + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + } + //下发确认阶段 + if (parseFixedDataMap.containsKey("PDUType") && 12 == (Integer) parseFixedDataMap.get("PDUType")) { + RedisCommon redisCommon = SpringContextUtil.getBean(RedisCommon.class); + Map configDataMap = bizDataMap.get(0); + //通过设备编号获取查询对应的下发配置 + String devcode = configDataMap.get(DEVCODE).toString(); + Map redisConfigMap = redisCommon.getMsg(devcode); + if (CollectionUtils.isEmpty(redisConfigMap)) { + return result; + } + //遍历redis配置 + Iterator> iterator = redisConfigMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (configDataMap.containsKey(entry.getKey()) && configDataMap.get(entry.getKey()).toString().equals(entry.getValue().toString())) { + continue; + } else { + configDataMap.put("config", "0"); + return result; + } + } + //下发配置成功 +// redisCommon.removeKeyByDevcode(devcode); + configDataMap.put("config", "1"); + } + return result; + } +} \ No newline at end of file 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 4df271b..ac2706b 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 @@ -18,7 +18,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { 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 0fdbb48..4cd61a7 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 @@ -44,13 +44,13 @@ for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 // if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + 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); + setStoreObjectMap(currentIndex-1, combinedFieldParam.getStoreObjectList(), abstractFieldConfig.getFieldName(), fieldValue); } } } @@ -73,6 +73,14 @@ return mergeBitToByte; } + + private void setStoreObjectMap(int currrentIndex, List> storeObjectMap, String name, Object fieldValue) { + for (int i = currrentIndex; i < storeObjectMap.size(); i++) { + storeObjectMap.get(i).put(name, fieldValue); + } + } + + /** * 获取,如果存在则进行数据的读取,如果不存在则进行深拷贝,重新复制 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 3ed0792..aed848d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -1,5 +1,6 @@ package com.casic.missiles.parser.sender.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.casic.missiles.autoconfig.KafkaSendResultHandler; import com.casic.missiles.parser.sender.DataSubscribeProvider; @@ -9,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -39,28 +41,45 @@ switch ((Integer) bizDataMap.get("deviceType")) { case 32: contentMap.put("devType", "GasDetector"); + setEventType(bizDataMap, contentMap, mBody, "GasConfigSuccess", "GasConfigFail"); break; case 31: contentMap.put("devType", "Pressure"); - + setEventType(bizDataMap, contentMap, mBody, "PressureConfigSuccess", "PressureConfigFail"); } + if (bizDataMap.containsKey("dataValue")) { contentMap.put("mType", "Data"); if (bizDataMap.containsKey("cell")) { mBody.put("cell", bizDataMap.get("cell")); } mBody.put("datas", bizDataMapList); - sendKafkaMsg(bizDataMap,contentMap,mBody); + sendKafkaMsg(bizDataMap, contentMap, mBody); } if (bizDataMap.containsKey("imei")) { contentMap.put("mType", "StartupRequest"); mBody.put("iccid", bizDataMap.get("iccid")); mBody.put("imei", bizDataMap.get("imei")); - sendKafkaMsg(bizDataMap,contentMap,mBody); + sendKafkaMsg(bizDataMap, contentMap, mBody); } } + private void setEventType(Map bizDataMap, Map contentMap, Map mBody, String bTypeSuccess,String bTypeFail) { + if (bizDataMap.containsKey("config")) { + contentMap.put("mType", "SetResponse"); + contentMap.put("ts", DateUtil.format(new Date(), "yyyyMMddHHmmss")); + if ("1".equals(bizDataMap.get("config"))) { + mBody.put("bType", bTypeSuccess); + }else { + mBody.put("bType", bTypeFail); + } + sendKafkaMsg(bizDataMap, contentMap, mBody); + } + + } + + private void sendKafkaMsg(Map bizDataMap, Map contentMap, Map mBody) { if (bizDataMap.containsKey("devcode")) { contentMap.put("devCode", bizDataMap.get("devcode")); diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java new file mode 100644 index 0000000..1fd58f2 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java @@ -0,0 +1,49 @@ +package com.casic.missiles.parser.processor.reply; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.factory.AbstractProtocolConfigFactory; +import com.casic.missiles.factory.AbstractRuleConfigFactory; +import com.casic.missiles.parser.processor.AbstractReplyCommandPostProcessing; +import com.casic.missiles.pojo.ParseResult; +import com.casic.missiles.util.RedisCommon; +import com.casic.missiles.util.SpringContextUtil; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DevcieConfigConfirm implements AbstractReplyCommandPostProcessing { + + @Override + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + } + //下发确认阶段 + if (parseFixedDataMap.containsKey("PDUType") && 12 == (Integer) parseFixedDataMap.get("PDUType")) { + RedisCommon redisCommon = SpringContextUtil.getBean(RedisCommon.class); + Map configDataMap = bizDataMap.get(0); + //通过设备编号获取查询对应的下发配置 + String devcode = configDataMap.get(DEVCODE).toString(); + Map redisConfigMap = redisCommon.getMsg(devcode); + if (CollectionUtils.isEmpty(redisConfigMap)) { + return result; + } + //遍历redis配置 + Iterator> iterator = redisConfigMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (configDataMap.containsKey(entry.getKey()) && configDataMap.get(entry.getKey()).toString().equals(entry.getValue().toString())) { + continue; + } else { + configDataMap.put("config", "0"); + return result; + } + } + //下发配置成功 +// redisCommon.removeKeyByDevcode(devcode); + configDataMap.put("config", "1"); + } + return result; + } +} \ No newline at end of file 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 4df271b..ac2706b 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 @@ -18,7 +18,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { 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 0fdbb48..4cd61a7 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 @@ -44,13 +44,13 @@ for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 // if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + 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); + setStoreObjectMap(currentIndex-1, combinedFieldParam.getStoreObjectList(), abstractFieldConfig.getFieldName(), fieldValue); } } } @@ -73,6 +73,14 @@ return mergeBitToByte; } + + private void setStoreObjectMap(int currrentIndex, List> storeObjectMap, String name, Object fieldValue) { + for (int i = currrentIndex; i < storeObjectMap.size(); i++) { + storeObjectMap.get(i).put(name, fieldValue); + } + } + + /** * 获取,如果存在则进行数据的读取,如果不存在则进行深拷贝,重新复制 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 3ed0792..aed848d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -1,5 +1,6 @@ package com.casic.missiles.parser.sender.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.casic.missiles.autoconfig.KafkaSendResultHandler; import com.casic.missiles.parser.sender.DataSubscribeProvider; @@ -9,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -39,28 +41,45 @@ switch ((Integer) bizDataMap.get("deviceType")) { case 32: contentMap.put("devType", "GasDetector"); + setEventType(bizDataMap, contentMap, mBody, "GasConfigSuccess", "GasConfigFail"); break; case 31: contentMap.put("devType", "Pressure"); - + setEventType(bizDataMap, contentMap, mBody, "PressureConfigSuccess", "PressureConfigFail"); } + if (bizDataMap.containsKey("dataValue")) { contentMap.put("mType", "Data"); if (bizDataMap.containsKey("cell")) { mBody.put("cell", bizDataMap.get("cell")); } mBody.put("datas", bizDataMapList); - sendKafkaMsg(bizDataMap,contentMap,mBody); + sendKafkaMsg(bizDataMap, contentMap, mBody); } if (bizDataMap.containsKey("imei")) { contentMap.put("mType", "StartupRequest"); mBody.put("iccid", bizDataMap.get("iccid")); mBody.put("imei", bizDataMap.get("imei")); - sendKafkaMsg(bizDataMap,contentMap,mBody); + sendKafkaMsg(bizDataMap, contentMap, mBody); } } + private void setEventType(Map bizDataMap, Map contentMap, Map mBody, String bTypeSuccess,String bTypeFail) { + if (bizDataMap.containsKey("config")) { + contentMap.put("mType", "SetResponse"); + contentMap.put("ts", DateUtil.format(new Date(), "yyyyMMddHHmmss")); + if ("1".equals(bizDataMap.get("config"))) { + mBody.put("bType", bTypeSuccess); + }else { + mBody.put("bType", bTypeFail); + } + sendKafkaMsg(bizDataMap, contentMap, mBody); + } + + } + + private void sendKafkaMsg(Map bizDataMap, Map contentMap, Map mBody) { if (bizDataMap.containsKey("devcode")) { contentMap.put("devCode", bizDataMap.get("devcode")); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java index fcbde85..400bc19 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer; -import com.casic.missiles.util.RedisCommon; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; @@ -20,7 +19,6 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; diff --git a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java index 9887951..ead2d00 100644 --- a/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java +++ b/casic-iot-common/src/main/java/com/casic/missiles/util/RedisCommon.java @@ -34,6 +34,12 @@ } + public Boolean removeKeyByDevcode(String key) { + String timeStampKey = configPrefix + key; + return redisTemplate.delete(timeStampKey); + } + + public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java index 88baf61..b0bf96d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.casic.missiles.model.Device; import com.casic.missiles.model.DeviceData; import com.casic.missiles.pojo.ParseResult; @@ -65,7 +66,7 @@ // processEventTask.setDecryptBeforeData((String) json); // } // break; - //解密后的数据 + //解密后的数据 case 2: //如果为空,则源报文和解密报文为空,作为异常判断依据 if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) { @@ -133,7 +134,7 @@ if (ObjectUtil.isNotEmpty(getTask(devcode))) { synchronized (processEventTask = getTask(devcode)) { IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class); - if (ObjectUtil.isNotEmpty(processEventTask)) { + if (ObjectUtil.isNotEmpty(processEventTask) && CollectionUtils.isNotEmpty(processEventTask.getBizDataList())) { List deviceDataList = new ArrayList<>(); for (Map BizDataMap : processEventTask.getBizDataList()) { DeviceData deviceData = new DeviceData(); 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 ff16348..bb41939 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 @@ -118,7 +118,7 @@ //根据解析内容,判断回复指令,构建解析返回内容 List replyCommandPostProcessings = ClazzUtil.getSubClassList(AbstractReplyCommandPostProcessing.class, false); for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) { - result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory); + result = replyCommandPostProcessing.obtainReplyCommand(parseFixedDataMap,bizDataMap, result, ruleConfigFactory, protocolFactory); } ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3); //存储数据 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java index 63dd7de..960d610 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/AbstractReplyCommandPostProcessing.java @@ -12,7 +12,7 @@ * 可任意构建自己的命令 * * @author cz - * 过滤筛选器抽象类,进行特定内容的指令下发 + * 过滤筛选器抽象类,进行特定内容的指令下发 */ public interface AbstractReplyCommandPostProcessing extends ReplyCommandEnum { @@ -20,14 +20,14 @@ /** * 走一层过滤,没有走默认配置,加自己默认的过滤 *

- * 回复命令构建 + * 回复命令构建 * * @param bizDataMap * @param ruleConfigFactory * @param protocolFactory * @return */ - ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory); 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 d06c766..e1e3a3f 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 @@ -19,7 +19,7 @@ public void invoke(List> storeFieldList) { if (storeFieldList.size() > 0) { Map storeObjectMap = storeFieldList.get(0); - if (storeObjectMap.containsKey("月") && storeObjectMap.containsKey("年") && storeObjectMap.containsKey("日") + if (storeObjectMap.containsKey("month") && storeObjectMap.containsKey("year") && storeObjectMap.containsKey("day") && storeObjectMap.containsKey("uptime") && storeObjectMap.containsKey("间隔时间")) { Calendar tailMergeTime = mergeTimeFormat(storeObjectMap); mergeAllTimeFormat(storeFieldList, tailMergeTime, (Integer) storeObjectMap.get("间隔时间")); @@ -32,8 +32,8 @@ Calendar mergeTime = Calendar.getInstance(); int hourOfDay = (Integer) storeObjectMap.get("uptime") / 60; int minute = (Integer) storeObjectMap.get("uptime") % 60; - mergeTime.set((Integer) storeObjectMap.get("年") + 2000, (Integer) storeObjectMap.get("月") - 1, - (Integer) storeObjectMap.get("日"), hourOfDay, minute); + mergeTime.set((Integer) storeObjectMap.get("year") + 2000, (Integer) storeObjectMap.get("month") - 1, + (Integer) storeObjectMap.get("day"), hourOfDay, minute); return mergeTime; } @@ -43,13 +43,12 @@ for (int i = storeFieldList.size() - 1; i >= 0; i--) { Map storeObjectMap = storeFieldList.get(i); storeObjectMap.put("uptime", sdf.format(tailMergeTime.getTime())); - storeObjectMap.remove("月"); - storeObjectMap.remove("年"); - storeObjectMap.remove("日"); + storeObjectMap.remove("month"); + storeObjectMap.remove("year"); + storeObjectMap.remove("day"); 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 d3551fc..2ebf1eb 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 @@ -16,11 +16,11 @@ public class BeforeUpgradesReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); } - //便宜量 + //偏移量 if (bizDataMap.get(0).containsKey(BEFORE_UPGRADE)) { result = ParseResult.builder().replyCommand(REQUEST_UPGRADE) .devcode(bizDataMap.get(0).get(DEVCODE).toString()) 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 ff5a418..60c89c5 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 @@ -16,7 +16,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); 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 76cd422..9599314 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 @@ -19,7 +19,7 @@ public class DefaultReplyCommandPostProcessing implements AbstractReplyCommandPostProcessing { @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (ObjectUtils.isEmpty(result)) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java new file mode 100644 index 0000000..1fd58f2 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/processor/reply/DevcieConfigConfirm.java @@ -0,0 +1,49 @@ +package com.casic.missiles.parser.processor.reply; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.casic.missiles.factory.AbstractProtocolConfigFactory; +import com.casic.missiles.factory.AbstractRuleConfigFactory; +import com.casic.missiles.parser.processor.AbstractReplyCommandPostProcessing; +import com.casic.missiles.pojo.ParseResult; +import com.casic.missiles.util.RedisCommon; +import com.casic.missiles.util.SpringContextUtil; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class DevcieConfigConfirm implements AbstractReplyCommandPostProcessing { + + @Override + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { + if (CollectionUtils.isEmpty(bizDataMap)) { + throw new RuntimeException("业务内容解析为空,解析配置存在问题,请分析查看"); + } + //下发确认阶段 + if (parseFixedDataMap.containsKey("PDUType") && 12 == (Integer) parseFixedDataMap.get("PDUType")) { + RedisCommon redisCommon = SpringContextUtil.getBean(RedisCommon.class); + Map configDataMap = bizDataMap.get(0); + //通过设备编号获取查询对应的下发配置 + String devcode = configDataMap.get(DEVCODE).toString(); + Map redisConfigMap = redisCommon.getMsg(devcode); + if (CollectionUtils.isEmpty(redisConfigMap)) { + return result; + } + //遍历redis配置 + Iterator> iterator = redisConfigMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (configDataMap.containsKey(entry.getKey()) && configDataMap.get(entry.getKey()).toString().equals(entry.getValue().toString())) { + continue; + } else { + configDataMap.put("config", "0"); + return result; + } + } + //下发配置成功 +// redisCommon.removeKeyByDevcode(devcode); + configDataMap.put("config", "1"); + } + return result; + } +} \ No newline at end of file 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 4df271b..ac2706b 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 @@ -18,7 +18,7 @@ @Override - public ParseResult obtainReplyCommand(List> bizDataMap, ParseResult result, + public ParseResult obtainReplyCommand(Map parseFixedDataMap, List> bizDataMap, ParseResult result, AbstractRuleConfigFactory ruleConfigFactory, AbstractProtocolConfigFactory protocolFactory) { if (CollectionUtils.isEmpty(bizDataMap)) { 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 0fdbb48..4cd61a7 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 @@ -44,13 +44,13 @@ for (AbstractFieldConfig abstractFieldConfig : protocolFieldConfigs) { //燃气叠数上数的情况 // if (abstractFieldConfig.getOriginPositionByte() == 0 && fieldCurrent != 0) { - Integer originPositionByte=abstractFieldConfig.getOriginPositionByte(); + 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); + setStoreObjectMap(currentIndex-1, combinedFieldParam.getStoreObjectList(), abstractFieldConfig.getFieldName(), fieldValue); } } } @@ -73,6 +73,14 @@ return mergeBitToByte; } + + private void setStoreObjectMap(int currrentIndex, List> storeObjectMap, String name, Object fieldValue) { + for (int i = currrentIndex; i < storeObjectMap.size(); i++) { + storeObjectMap.get(i).put(name, fieldValue); + } + } + + /** * 获取,如果存在则进行数据的读取,如果不存在则进行深拷贝,重新复制 */ diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java index 3ed0792..aed848d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/sender/impl/KafkaSubscribe.java @@ -1,5 +1,6 @@ package com.casic.missiles.parser.sender.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.casic.missiles.autoconfig.KafkaSendResultHandler; import com.casic.missiles.parser.sender.DataSubscribeProvider; @@ -9,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -39,28 +41,45 @@ switch ((Integer) bizDataMap.get("deviceType")) { case 32: contentMap.put("devType", "GasDetector"); + setEventType(bizDataMap, contentMap, mBody, "GasConfigSuccess", "GasConfigFail"); break; case 31: contentMap.put("devType", "Pressure"); - + setEventType(bizDataMap, contentMap, mBody, "PressureConfigSuccess", "PressureConfigFail"); } + if (bizDataMap.containsKey("dataValue")) { contentMap.put("mType", "Data"); if (bizDataMap.containsKey("cell")) { mBody.put("cell", bizDataMap.get("cell")); } mBody.put("datas", bizDataMapList); - sendKafkaMsg(bizDataMap,contentMap,mBody); + sendKafkaMsg(bizDataMap, contentMap, mBody); } if (bizDataMap.containsKey("imei")) { contentMap.put("mType", "StartupRequest"); mBody.put("iccid", bizDataMap.get("iccid")); mBody.put("imei", bizDataMap.get("imei")); - sendKafkaMsg(bizDataMap,contentMap,mBody); + sendKafkaMsg(bizDataMap, contentMap, mBody); } } + private void setEventType(Map bizDataMap, Map contentMap, Map mBody, String bTypeSuccess,String bTypeFail) { + if (bizDataMap.containsKey("config")) { + contentMap.put("mType", "SetResponse"); + contentMap.put("ts", DateUtil.format(new Date(), "yyyyMMddHHmmss")); + if ("1".equals(bizDataMap.get("config"))) { + mBody.put("bType", bTypeSuccess); + }else { + mBody.put("bType", bTypeFail); + } + sendKafkaMsg(bizDataMap, contentMap, mBody); + } + + } + + private void sendKafkaMsg(Map bizDataMap, Map contentMap, Map mBody) { if (bizDataMap.containsKey("devcode")) { contentMap.put("devCode", bizDataMap.get("devcode")); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java index fcbde85..400bc19 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/config/RedisConfig.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer; -import com.casic.missiles.util.RedisCommon; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; @@ -20,7 +19,6 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; diff --git a/sensorhub-support/src/main/java/com/casic/missiles/util/RedisCommon.java b/sensorhub-support/src/main/java/com/casic/missiles/util/RedisCommon.java deleted file mode 100644 index aca711f..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/util/RedisCommon.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.missiles.util; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -/** - * Created by test203 on 2019/5/30. - */ -@Component -public class RedisCommon { - - @Autowired - protected RedisTemplate redisTemplate; - - @Value("${casic.device.redis.invalid-time}") - private String invalidTime; - @Value("${casic.device.redis.config-prefix}") - private String configPrefix; - - - public Map getMsg(String key) { - // 判断上次保存时间,如果到期(key失效),再保存新的 - String timeStampKey = configPrefix + key; - Object dataJson = redisTemplate.opsForValue().get(timeStampKey); - return JSON.parseObject((String) dataJson); - } - - - public void setRedisConcentrator(String concentratorcode, String devcode, String attemptsMax) { - redisTemplate.opsForList().leftPush(configPrefix + concentratorcode, - devcode + ":" + (StringUtils.isNotBlank(attemptsMax) && (!("--".equals(attemptsMax))) ? attemptsMax : "1")); - } - - public void setRedisConfig(String key, Map bizDataMap) { - redisTemplate.opsForValue().set(configPrefix + key, - bizDataMap != null ? JSONObject.toJSONString(bizDataMap) : "", - Integer.valueOf(invalidTime), - TimeUnit.SECONDS); - - } - -}