Explorar el Código

1、解密机处理设备的指定
2、hash设置值不需要json格式化
3、MsgTypeEnum整理注释

liweimin hace 2 días
padre
commit
b29e2f9353

+ 5 - 2
ruoyi-admin/src/main/resources/application-druid.yml

@@ -98,6 +98,9 @@ emqx:
         - topic: $share/wbjw/cpyypt/up/9102/#
           qos: 2
           listener: deviceMessageListener
+        - topic: $share/wbjw/cpyypt/up/2006/#
+          qos: 2
+          listener: deviceMessageListener
         - topic: $share/wbjw/invent/up/9102/#
           qos: 2
           listener: inventMessageListener
@@ -116,6 +119,6 @@ decrypt:
             defaultSendSize: 20
             timeout: 120000
             decryptDeviceList:
-                - deviceSn: 1
-                  deviceType: '0102'
+                - deviceSn: 103
+                  deviceType: '2006'
             outDecrypt: false

+ 13 - 0
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/enums/MsgTypeEnum.java

@@ -7,6 +7,7 @@ package com.ruoyi.device.mqtt.enums;
  */
 public enum MsgTypeEnum
 {
+    /** 系统类 */
     UPGRADE_DOWN(0x01, 0x1001, "升级下行"),
     UPGRADE_STATUS_UP(0x01, 0x2001, "升级状态上行"),
     UNINSTALL_DEVICE_UPGRADE(0X01, 0X1004, "未安装升级"),
@@ -57,12 +58,17 @@ public enum MsgTypeEnum
     SHANXI_CONFIG_DOWN(0x01, 0x1090, "山西省平台配置下行"),
     BLOCKER_ROUTER_DOWN(0x01, 0x1070, "阻断器路由下行"),
     BLOCKER_STATUS_DOWN(0x01, 0x1072, "阻断器开关下行"),
+    BLOCKER_STATUS_UP(0x01, 0x2072, "阻断器开关上行"),
+
+    /** 状态类 */
     FIRMWARE_INFO_UP(0x02, 0x2001, "固件信息上行"),
     STATUS_INFO_UP(0x02, 0x2002, "设备状态上行"),
     DECRYPT_DEVICE_UP(0x02, 0x2003, "解密板设备状态上行"),
     PROBE_STATUS_INFO_UP(0x02, 0x2004, "探针版设备状态上行"),
     GUN_BLOCKER_STATUS_INFO_UP(0x02, 0x2005, "加油枪阻断器设备状态上行"),
     FIRMWARE_INFO_DOWN(0x02, 0x1001, "固件信息下行"),
+
+    /** 数据类 */
     TAX_DATA_UP(0x03, 0x2001, "报税口数据上行"),
     RAISE_HANG_TAX_DATA_UP(0x03, 0x2003, "报税口数据上行"),
     TAX_ERROR_DATA_UP(0x03, 0x2002, "税控口错误数据上行"),
@@ -87,6 +93,11 @@ public enum MsgTypeEnum
     CIPHERTEXT_DATA_DECRYPT_RETURN_DOWN(0x03, 0x1065, "报税口密文数据返回测试板"),
     PUSH_DATA_DOWN(0x03, 0x1090, "山西省平台数据透传下行"),
     PUSH_DATA_UP(0x03, 0x2090, "山西省平台数据透传上行"),
+
+    CMD_DATA_DOWN(0x03, 0x1004, "操作指令下行"),
+    CMD_DATA_UP(0x03, 0x2004, "操作指令上行"),
+
+    /** 升级类 */
     UNINSTALL_DEVICE_UPGRADE_2(0X04, 0X1004, "未安装升级"),
     UPGRADE_DOWN_2(0x04, 0x1002, "升级下行"),
     UPGRADE_DOWN_3(0x04, 0x1001, "升级下行"),
@@ -99,6 +110,8 @@ public enum MsgTypeEnum
     GET_APK_URL_UP(0x04, 0x2102, "固件URL查询"),
     GET_APK_URL_DOWN(0x04, 0x1102, "固件URL返回"),
     VERSION_SYNC(0x04, 0x1011, "版本同步"),
+
+    /** 日志类 */
     LOG_DOWN(0x10, 0x1001, "日志开关下行"),
     LOG_SOURCE_DOWN(0x10, 0x1002, "日志开关下行(原始数据)"),
     LOG_UP(0x10, 0x2001, "日志明细"),

+ 7 - 8
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/handler/decoder/tax/CiphertextDataDecryptDecoder.java

@@ -1,15 +1,14 @@
 package com.ruoyi.device.mqtt.handler.decoder.tax;
 
-import com.alibaba.fastjson2.JSON;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.device.config.DecryptDeviceConfig;
-import com.ruoyi.device.mqtt.enums.DeviceRedisEnum;
 import com.ruoyi.device.mqtt.annotation.ConsumerHandler;
 import com.ruoyi.device.mqtt.api.constants.ApiPathConstants;
 import com.ruoyi.device.mqtt.domain.decoder.tax.TaxMonthDataMessage;
 import com.ruoyi.device.mqtt.domain.decoder.tax.TaxTransferDataMessage;
 import com.ruoyi.device.mqtt.domain.encoder.tax.CiphertextDataDown;
 import com.ruoyi.device.mqtt.enums.DeviceModelEnum;
+import com.ruoyi.device.mqtt.enums.DeviceRedisEnum;
 import com.ruoyi.device.mqtt.enums.MsgTypeEnum;
 import com.ruoyi.device.mqtt.enums.VersionEnum;
 import com.ruoyi.device.mqtt.handler.HandlerManager;
@@ -21,7 +20,7 @@ import com.ruoyi.device.mqtt.util.TargetTypeConvertUtil;
 import com.ruoyi.device.mqtt.vo.CiphertextData;
 import com.ruoyi.device.mqtt.vo.CommonHeader;
 import com.ruoyi.device.mqtt.vo.CommonTopic;
-import com.ruoyi.device.service.TaxTransferDataService;
+import com.ruoyi.device.service.ITaxTransferDataService;
 import io.netty.buffer.ByteBuf;
 import jakarta.annotation.Resource;
 import org.apache.commons.lang3.StringUtils;
@@ -46,7 +45,7 @@ public class CiphertextDataDecryptDecoder extends AbstractDecoder<Void>
     private RedisCache redisCache;
 
     @Resource
-    private TaxTransferDataService taxTransferDataService;
+    private ITaxTransferDataService taxTransferDataService;
 
     @Override
     protected Void decode(CommonTopic commonTopic, CommonHeader header, ByteBuf body)
@@ -109,7 +108,7 @@ public class CiphertextDataDecryptDecoder extends AbstractDecoder<Void>
                 log.info("外部平台密文透传8c13 数据解密成功,解密透传数据存入缓存:{}", taxTransferDataMessage);
                 redisCache.setCacheObject(
                     String.format(DeviceRedisEnum.TAX_CIPHERTEXT_OUT_RESULT.getKey(), ciphertextData.getPlatform()),
-                        JSON.toJSONString(taxTransferDataMessage), DeviceRedisEnum.TAX_CIPHERTEXT_OUT_RESULT.getExpireTime(), TimeUnit.SECONDS);
+                        taxTransferDataMessage, DeviceRedisEnum.TAX_CIPHERTEXT_OUT_RESULT.getExpireTime(), TimeUnit.SECONDS);
             }
             else
             {
@@ -123,7 +122,7 @@ public class CiphertextDataDecryptDecoder extends AbstractDecoder<Void>
                 log.info("密文透传8c13 数据解密成功,解密透传数据存入缓存:{}", taxMonthDataMessage);
                 redisCache.setCacheObject(
                     String.format(DeviceRedisEnum.PASS_TAX_DATA.getKey(), gatewayNo, collectorNo, taxNo, split[0], split[1]),
-                        JSON.toJSONString(taxMonthDataMessage), DeviceRedisEnum.PASS_TAX_DATA.getExpireTime(), TimeUnit.SECONDS);
+                        taxMonthDataMessage, DeviceRedisEnum.PASS_TAX_DATA.getExpireTime(), TimeUnit.SECONDS);
             }
         }
         else if (result == 1 && env == 0)
@@ -167,7 +166,7 @@ public class CiphertextDataDecryptDecoder extends AbstractDecoder<Void>
                 // 如果说是外部平台的话 加入到一个新的缓存
                 redisCache.setCacheObject(
                     String.format(DeviceRedisEnum.TAX_CIPHERTEXT_OUT_RESULT.getKey(), ciphertextData.getPlatform()),
-                        JSON.toJSONString(taxTransferDataMessage), DeviceRedisEnum.TAX_CIPHERTEXT_OUT_RESULT.getExpireTime(), TimeUnit.SECONDS);
+                        taxTransferDataMessage, DeviceRedisEnum.TAX_CIPHERTEXT_OUT_RESULT.getExpireTime(), TimeUnit.SECONDS);
             }
             else
             {
@@ -204,7 +203,7 @@ public class CiphertextDataDecryptDecoder extends AbstractDecoder<Void>
             {
                 // 插入失败队列
                 ciphertextData.setKey1(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_FAIL.getKey());
-                redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_FAIL.getKey(), key2, JSON.toJSONString(ciphertextData));
+                redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_FAIL.getKey(), key2, ciphertextData);
                 log.info("解密设备返回数据解密超时,加入到失败队列等待下次发送,数据标志:{}", key2);
             }
             else

+ 5 - 5
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/handler/decoder/tax/CiphertextDataService.java

@@ -24,7 +24,7 @@ import com.ruoyi.device.mqtt.util.TargetTypeConvertUtil;
 import com.ruoyi.device.mqtt.vo.CiphertextData;
 import com.ruoyi.device.mqtt.vo.CommonHeader;
 import com.ruoyi.device.mqtt.vo.CommonTopic;
-import com.ruoyi.device.service.TaxTransferDataService;
+import com.ruoyi.device.service.ITaxTransferDataService;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import jakarta.annotation.Resource;
@@ -62,7 +62,7 @@ public class CiphertextDataService
     private RedisCache redisCache;
 
     @Resource
-    private TaxTransferDataService taxTransferDataService;
+    private ITaxTransferDataService taxTransferDataService;
 
     /**
      * 组装数据 然后调用外部解密服务 或者 下发解密机
@@ -140,7 +140,7 @@ public class CiphertextDataService
         // hash 存储
         String key2 = String.format(ApiPathConstants.FOUR_UNDER_LINE, gatewayNo, collectorNo, taxNo, gunNo, serialNo);
 
-        ciphertextData.setDeviceSn(gatewayNo);
+        ciphertextData.setDeviceSn(topic.getDeviceSn());
         ciphertextData.setDeviceType(topic.getDeviceType());
         ciphertextData.setSendTimes(0);
         ciphertextData.setData(DatatypeConverter.printHexBinary(dataBytes));
@@ -170,7 +170,7 @@ public class CiphertextDataService
             if (!send(ciphertextData))
             {
                 ciphertextData.setKey1(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_ORIGNAL.getKey());
-                redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_ORIGNAL.getKey(), key2, JSON.toJSONString(ciphertextData));
+                redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_ORIGNAL.getKey(), key2, ciphertextData);
                 log.info("收到设备:{} 发送的待解密数据,已存入原始队列,等待任务执行!", key2);
             }
         }
@@ -233,6 +233,6 @@ public class CiphertextDataService
         ciphertextData.setSendTimes(ciphertextData.getSendTimes() + 1);
         ciphertextData.setSendTime(System.currentTimeMillis());
         ciphertextData.setKey1(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_ORIGNAL.getKey());
-        redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_SEND.getKey(), ciphertextData.getKey2(), JSON.toJSONString(ciphertextData));
+        redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_SEND.getKey(), ciphertextData.getKey2(), ciphertextData);
     }
 }

+ 1 - 1
ruoyi-device/src/main/java/com/ruoyi/device/service/TaxTransferDataService.java → ruoyi-device/src/main/java/com/ruoyi/device/service/ITaxTransferDataService.java

@@ -5,7 +5,7 @@ import com.ruoyi.device.mqtt.domain.decoder.tax.TaxTransferDataMessage;
 /**
  * 报税口密文解密结果处理(替代 Kafka 推送,直接方法调用)
  */
-public interface TaxTransferDataService
+public interface ITaxTransferDataService
 {
     /**
      * 处理解密成功的报税口交易数据

+ 2 - 2
ruoyi-device/src/main/java/com/ruoyi/device/service/impl/TaxTransferDataServiceImpl.java

@@ -2,7 +2,7 @@ package com.ruoyi.device.service.impl;
 
 import com.alibaba.fastjson2.JSON;
 import com.ruoyi.device.mqtt.domain.decoder.tax.TaxTransferDataMessage;
-import com.ruoyi.device.service.TaxTransferDataService;
+import com.ruoyi.device.service.ITaxTransferDataService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
  * 报税口密文解密结果默认处理
  */
 @Service
-public class TaxTransferDataServiceImpl implements TaxTransferDataService
+public class TaxTransferDataServiceImpl implements ITaxTransferDataService
 {
     private static final Logger log = LoggerFactory.getLogger(TaxTransferDataServiceImpl.class);
 

+ 1 - 1
ruoyi-device/src/main/java/com/ruoyi/device/task/CiphertextDataHandler.java

@@ -65,7 +65,7 @@ public class CiphertextDataHandler
                     {
                         // 插入失败队列
                         ciphertextData.setKey1(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_FAIL.getKey());
-                        redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_FAIL.getKey(), ciphertextData.getKey2(), JSON.toJSONString(ciphertextData));
+                        redisCache.setCacheMapValue(DeviceRedisEnum.TAX_CIPHERTEXT_DATA_FAIL.getKey(), ciphertextData.getKey2(), ciphertextData);
                         log.info("已发送数据解密超时,加入到失败队列等待下次发送");
                     }
                     else