Эх сурвалжийг харах

feate: 重构温湿度数据处理

jackzhou 11 сар өмнө
parent
commit
f93571adfd
100 өөрчлөгдсөн 2715 нэмэгдсэн , 753 устгасан
  1. BIN
      param.dat
  2. 8 0
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/AuthService.java
  3. 39 30
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java
  4. 2 2
      snowy-plugin/snowy-plugin-coldchain/pom.xml
  5. 41 14
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/bean/influxdb/SensorData.java
  6. 91 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/MonitorDeviceCache.java
  7. 89 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/MonitorDeviceCacheInitializer.java
  8. 32 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/MonitorDeviceCacheService.java
  9. 32 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/factory/MonitorDeviceCacheServiceFactory.java
  10. 61 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/impl/LocalMonitorDeviceCacheService.java
  11. 72 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/impl/RedisMonitorDeviceCacheService.java
  12. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/config/ColdChainAsyncConfig.java
  13. 27 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/config/JfcloudColdChainConstants.java
  14. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorDataEvent.java
  15. 3 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorDataEventListener.java
  16. 36 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/RenKeService.java
  17. 15 11
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/config/JfcloudColdChainServerAutoConfiguration.java
  18. 14 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/config/JfcloudColdChainServerProperties.java
  19. 21 23
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java
  20. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/util/IPUtil.java
  21. 76 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/util/ParamFileUtil.java
  22. 4 4
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/beanprocessor/ColdChainDataHandlerBeanPostProcessor.java
  23. 11 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/bean/MonitorDeviceProperties.java
  24. 24 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/bean/RenKeMonitorDeviceProperties.java
  25. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/MonitorDataProcessor.java
  26. 168 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/AbsRenkeMonitorDataProcessor.java
  27. 53 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiCO2TempHumidityProcessor.java
  28. 50 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor1.java
  29. 57 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor2.java
  30. 60 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor4.java
  31. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/AbstractColdChainDataHandler.java
  32. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/ColdChainDataHandler.java
  33. 3 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/ColdChainHandlerRegistry.java
  34. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/DataHandlerFactory.java
  35. 3 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/impl/HaierColdChainDataHandler.java
  36. 29 15
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/impl/RenKeColdChainDataHandler.java
  37. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/ColdChainMessageData.java
  38. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/HaierColdChainMessageData.java
  39. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/RenKeColdChainMessageData.java
  40. 164 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/controller/AppController.java
  41. 54 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDevice.java
  42. 44 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDeviceAddParam.java
  43. 28 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDeviceData.java
  44. 32 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDeviceQueryParams.java
  45. 30 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/Message.java
  46. 13 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/MessageType.java
  47. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/Metric.java
  48. 95 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/AppDeviceService.java
  49. 66 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/MessageService.java
  50. 0 30
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RKService.java
  51. 0 96
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RenKeTest.java
  52. 0 15
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainConstants.java
  53. 28 28
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java
  54. 83 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/ListTypeHandler.java
  55. 73 20
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java
  56. 60 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/DeviceModelEnum.java
  57. 5 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/MonitorDeviceEnum.java
  58. 33 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/MonitorDeviceStatusEnum.java
  59. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/MonitorDeviceMapper.java
  60. 8 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/mapping/MonitorDeviceMapper.xml
  61. 27 22
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java
  62. 30 21
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java
  63. 6 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceIdParam.java
  64. 23 11
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDevicePageParam.java
  65. 21 14
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java
  66. 73 13
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java
  67. 13 13
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/controller/MonitorDeviceParametersController.java
  68. 41 16
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/entity/MonitorDeviceParameters.java
  69. 4 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/enums/MonitorDeviceParametersEnum.java
  70. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/MonitorDeviceParametersMapper.java
  71. 0 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/mapping/MonitorDeviceParametersMapper.xml
  72. 29 16
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersAddParam.java
  73. 33 17
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersEditParam.java
  74. 5 4
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersIdParam.java
  75. 22 10
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersPageParam.java
  76. 7 7
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/MonitorDeviceParametersService.java
  77. 8 8
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/impl/MonitorDeviceParametersServiceImpl.java
  78. 28 28
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/controller/MonitorMonitorTargetController.java
  79. 35 16
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/entity/MonitorMonitorTarget.java
  80. 5 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/enums/MonitorMonitorTargetEnum.java
  81. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/mapper/MonitorMonitorTargetMapper.java
  82. 0 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/mapper/mapping/MonitorMonitorTargetMapper.xml
  83. 29 16
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetAddParam.java
  84. 33 17
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetEditParam.java
  85. 6 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetIdParam.java
  86. 17 9
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetPageParam.java
  87. 14 14
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/service/MonitorMonitorTargetService.java
  88. 8 8
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/service/impl/MonitorMonitorTargetServiceImpl.java
  89. 28 28
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java
  90. 32 15
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java
  91. 5 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorTargetEnum.java
  92. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/MonitorTargetMapper.java
  93. 0 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/mapping/MonitorTargetMapper.xml
  94. 27 16
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java
  95. 31 17
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java
  96. 6 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetIdParam.java
  97. 20 10
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java
  98. 14 14
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java
  99. 9 9
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  100. 13 13
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/controller/MonitorTargetRegionController.java

BIN
param.dat


+ 8 - 0
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/AuthService.java

@@ -59,6 +59,14 @@ public interface AuthService {
      **/
      **/
     String doLoginByPhone(AuthPhoneValidCodeLoginParam authPhoneValidCodeLoginParam, String type);
     String doLoginByPhone(AuthPhoneValidCodeLoginParam authPhoneValidCodeLoginParam, String type);
 
 
+    /**
+     * 小程序登录
+     * @param openId
+     * @param user
+     * @return
+     */
+    String doLoginByOpenId(String openId, SaBaseLoginUser user);
+
     /**
     /**
      * 获取B端登录用户信息
      * 获取B端登录用户信息
      *
      *

+ 39 - 30
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java

@@ -140,17 +140,17 @@ public class AuthServiceImpl implements AuthService {
     private void validValidCode(String phoneOrEmail, String validCode, String validCodeReqNo) {
     private void validValidCode(String phoneOrEmail, String validCode, String validCodeReqNo) {
         // 依据请求号,取出缓存中的验证码进行校验
         // 依据请求号,取出缓存中的验证码进行校验
         Object existValidCode;
         Object existValidCode;
-        if(ObjectUtil.isEmpty(phoneOrEmail)) {
+        if (ObjectUtil.isEmpty(phoneOrEmail)) {
             existValidCode = commonCacheOperator.get(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo);
             existValidCode = commonCacheOperator.get(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo);
         } else {
         } else {
             existValidCode = commonCacheOperator.get(AUTH_VALID_CODE_CACHE_KEY + phoneOrEmail + StrUtil.UNDERLINE + validCodeReqNo);
             existValidCode = commonCacheOperator.get(AUTH_VALID_CODE_CACHE_KEY + phoneOrEmail + StrUtil.UNDERLINE + validCodeReqNo);
         }
         }
         // 为空则直接验证码错误
         // 为空则直接验证码错误
-        if(ObjectUtil.isEmpty(existValidCode)) {
+        if (ObjectUtil.isEmpty(existValidCode)) {
             throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue());
             throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue());
         }
         }
         // 移除该验证码
         // 移除该验证码
-        if(ObjectUtil.isEmpty(phoneOrEmail)) {
+        if (ObjectUtil.isEmpty(phoneOrEmail)) {
             commonCacheOperator.remove(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo);
             commonCacheOperator.remove(AUTH_VALID_CODE_CACHE_KEY + validCodeReqNo);
         } else {
         } else {
             commonCacheOperator.remove(AUTH_VALID_CODE_CACHE_KEY + phoneOrEmail + StrUtil.UNDERLINE + validCodeReqNo);
             commonCacheOperator.remove(AUTH_VALID_CODE_CACHE_KEY + phoneOrEmail + StrUtil.UNDERLINE + validCodeReqNo);
@@ -169,23 +169,23 @@ public class AuthServiceImpl implements AuthService {
      **/
      **/
     private void validPhoneValidCodeParam(String phoneOrEmail, String validCode, String validCodeReqNo, String type) {
     private void validPhoneValidCodeParam(String phoneOrEmail, String validCode, String validCodeReqNo, String type) {
         // 验证码正确则校验手机号格式
         // 验证码正确则校验手机号格式
-        if(ObjectUtil.isEmpty(phoneOrEmail)) {
+        if (ObjectUtil.isEmpty(phoneOrEmail)) {
             // 执行校验验证码
             // 执行校验验证码
             validValidCode(null, validCode, validCodeReqNo);
             validValidCode(null, validCode, validCodeReqNo);
         } else {
         } else {
-            if(!PhoneUtil.isMobile(phoneOrEmail) && !CommonEmailUtil.isEmail(phoneOrEmail)) {
+            if (!PhoneUtil.isMobile(phoneOrEmail) && !CommonEmailUtil.isEmail(phoneOrEmail)) {
                 throw new CommonException(AuthExceptionEnum.PHONE_FORMAT_ERROR.getValue());
                 throw new CommonException(AuthExceptionEnum.PHONE_FORMAT_ERROR.getValue());
             }
             }
             // 执行校验验证码
             // 执行校验验证码
             validValidCode(phoneOrEmail, validCode, validCodeReqNo);
             validValidCode(phoneOrEmail, validCode, validCodeReqNo);
 
 
             // 根据手机号获取用户信息,判断用户是否存在,根据B端或C端判断
             // 根据手机号获取用户信息,判断用户是否存在,根据B端或C端判断
-            if(SaClientTypeEnum.B.getValue().equals(type)) {
-                if(ObjectUtil.isEmpty(loginUserApi.getUserByPhone(phoneOrEmail))) {
+            if (SaClientTypeEnum.B.getValue().equals(type)) {
+                if (ObjectUtil.isEmpty(loginUserApi.getUserByPhone(phoneOrEmail))) {
                     throw new CommonException(AuthExceptionEnum.PHONE_ERROR.getValue());
                     throw new CommonException(AuthExceptionEnum.PHONE_ERROR.getValue());
                 }
                 }
             } else {
             } else {
-                if(ObjectUtil.isEmpty(clientLoginUserApi.getClientUserByPhone(phoneOrEmail))) {
+                if (ObjectUtil.isEmpty(clientLoginUserApi.getClientUserByPhone(phoneOrEmail))) {
                     throw new CommonException(AuthExceptionEnum.PHONE_ERROR.getValue());
                     throw new CommonException(AuthExceptionEnum.PHONE_ERROR.getValue());
                 }
                 }
             }
             }
@@ -203,25 +203,25 @@ public class AuthServiceImpl implements AuthService {
         // 获取设备
         // 获取设备
         String device = authAccountPasswordLoginParam.getDevice();
         String device = authAccountPasswordLoginParam.getDevice();
         // 默认指定为PC,如在小程序跟移动端的情况下,自行指定即可
         // 默认指定为PC,如在小程序跟移动端的情况下,自行指定即可
-        if(ObjectUtil.isEmpty(device)) {
+        if (ObjectUtil.isEmpty(device)) {
             device = AuthDeviceTypeEnum.PC.getValue();
             device = AuthDeviceTypeEnum.PC.getValue();
         } else {
         } else {
             AuthDeviceTypeEnum.validate(device);
             AuthDeviceTypeEnum.validate(device);
         }
         }
         // 校验验证码
         // 校验验证码
         String defaultCaptchaOpen = devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_CAPTCHA_OPEN_KEY);
         String defaultCaptchaOpen = devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_CAPTCHA_OPEN_KEY);
-        if(ObjectUtil.isNotEmpty(defaultCaptchaOpen)) {
-            if(Convert.toBool(defaultCaptchaOpen)) {
+        if (ObjectUtil.isNotEmpty(defaultCaptchaOpen)) {
+            if (Convert.toBool(defaultCaptchaOpen)) {
                 // 获取验证码
                 // 获取验证码
                 String validCode = authAccountPasswordLoginParam.getValidCode();
                 String validCode = authAccountPasswordLoginParam.getValidCode();
                 // 获取验证码请求号
                 // 获取验证码请求号
                 String validCodeReqNo = authAccountPasswordLoginParam.getValidCodeReqNo();
                 String validCodeReqNo = authAccountPasswordLoginParam.getValidCodeReqNo();
                 // 开启验证码则必须传入验证码
                 // 开启验证码则必须传入验证码
-                if(ObjectUtil.isEmpty(validCode)) {
+                if (ObjectUtil.isEmpty(validCode)) {
                     throw new CommonException(AuthExceptionEnum.VALID_CODE_EMPTY.getValue());
                     throw new CommonException(AuthExceptionEnum.VALID_CODE_EMPTY.getValue());
                 }
                 }
                 // 开启验证码则必须传入验证码请求号
                 // 开启验证码则必须传入验证码请求号
-                if(ObjectUtil.isEmpty(validCodeReqNo)) {
+                if (ObjectUtil.isEmpty(validCodeReqNo)) {
                     throw new CommonException(AuthExceptionEnum.VALID_CODE_REQ_NO_EMPTY.getValue());
                     throw new CommonException(AuthExceptionEnum.VALID_CODE_REQ_NO_EMPTY.getValue());
                 }
                 }
                 // 执行校验验证码
                 // 执行校验验证码
@@ -237,9 +237,9 @@ public class AuthServiceImpl implements AuthService {
             throw new CommonException(AuthExceptionEnum.PWD_DECRYPT_ERROR.getValue());
             throw new CommonException(AuthExceptionEnum.PWD_DECRYPT_ERROR.getValue());
         }
         }
         // 根据账号获取用户信息,根据B端或C端判断
         // 根据账号获取用户信息,根据B端或C端判断
-        if(SaClientTypeEnum.B.getValue().equals(type)) {
+        if (SaClientTypeEnum.B.getValue().equals(type)) {
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByAccount(account);
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByAccount(account);
-            if(ObjectUtil.isEmpty(saBaseLoginUser)) {
+            if (ObjectUtil.isEmpty(saBaseLoginUser)) {
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
             }
             }
             if (!saBaseLoginUser.getPassword().equals(passwordHash)) {
             if (!saBaseLoginUser.getPassword().equals(passwordHash)) {
@@ -253,7 +253,7 @@ public class AuthServiceImpl implements AuthService {
             return execLoginB(saBaseLoginUser, device);
             return execLoginB(saBaseLoginUser, device);
         } else {
         } else {
             SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserByAccount(account);
             SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserByAccount(account);
-            if(ObjectUtil.isEmpty(saBaseClientLoginUser)) {
+            if (ObjectUtil.isEmpty(saBaseClientLoginUser)) {
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
             }
             }
             if (!saBaseClientLoginUser.getPassword().equals(passwordHash)) {
             if (!saBaseClientLoginUser.getPassword().equals(passwordHash)) {
@@ -273,22 +273,22 @@ public class AuthServiceImpl implements AuthService {
         // 设备
         // 设备
         String device = authPhoneValidCodeLoginParam.getDevice();
         String device = authPhoneValidCodeLoginParam.getDevice();
         // 默认指定为PC,如在小程序跟移动端的情况下,自行指定即可
         // 默认指定为PC,如在小程序跟移动端的情况下,自行指定即可
-        if(ObjectUtil.isEmpty(device)) {
+        if (ObjectUtil.isEmpty(device)) {
             device = AuthDeviceTypeEnum.PC.getValue();
             device = AuthDeviceTypeEnum.PC.getValue();
         } else {
         } else {
             AuthDeviceTypeEnum.validate(device);
             AuthDeviceTypeEnum.validate(device);
         }
         }
         // 根据手机号获取用户信息,根据B端或C端判断
         // 根据手机号获取用户信息,根据B端或C端判断
-        if(SaClientTypeEnum.B.getValue().equals(type)) {
+        if (SaClientTypeEnum.B.getValue().equals(type)) {
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByPhone(phone);
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByPhone(phone);
-            if(ObjectUtil.isEmpty(saBaseLoginUser)) {
+            if (ObjectUtil.isEmpty(saBaseLoginUser)) {
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
             }
             }
             // 执行B端登录
             // 执行B端登录
             return execLoginB(saBaseLoginUser, device);
             return execLoginB(saBaseLoginUser, device);
         } else {
         } else {
             SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserByPhone(phone);
             SaBaseClientLoginUser saBaseClientLoginUser = clientLoginUserApi.getClientUserByPhone(phone);
-            if(ObjectUtil.isEmpty(saBaseClientLoginUser)) {
+            if (ObjectUtil.isEmpty(saBaseClientLoginUser)) {
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
             }
             }
             // 执行C端登录
             // 执行C端登录
@@ -296,6 +296,14 @@ public class AuthServiceImpl implements AuthService {
         }
         }
     }
     }
 
 
+    @Override
+    public String doLoginByOpenId(String openId, SaBaseLoginUser user) {
+        // 设备
+        String device = AuthDeviceTypeEnum.MINI.getValue();
+        // 执行B端登录
+        return execLoginB(user, device);
+    }
+
     /**
     /**
      * 是否封禁状态
      * 是否封禁状态
      * 如果被封禁了,执行以下逻辑,返回前端还需等待的时间
      * 如果被封禁了,执行以下逻辑,返回前端还需等待的时间
@@ -305,25 +313,25 @@ public class AuthServiceImpl implements AuthService {
         long disableTime = StpUtil.getDisableTime(userAccount);
         long disableTime = StpUtil.getDisableTime(userAccount);
         if (disableTime > 0) {
         if (disableTime > 0) {
             if (disableTime > 60) {
             if (disableTime > 60) {
-                throw new CommonException(userAccount + "账号已被封禁, 请再"+ disableTime/60+ "分钟后重新尝试登录!!");
+                throw new CommonException(userAccount + "账号已被封禁, 请再" + disableTime / 60 + "分钟后重新尝试登录!!");
             }
             }
-            throw new CommonException(userAccount + "账号已被封禁, 请再"+ disableTime+ "秒后重新尝试登录!!");
+            throw new CommonException(userAccount + "账号已被封禁, 请再" + disableTime + "秒后重新尝试登录!!");
         }
         }
     }
     }
 
 
     // redis中保存登录错误次数
     // redis中保存登录错误次数
-    private void saveLoginTimes(String userAccount){
+    private void saveLoginTimes(String userAccount) {
         String loginErrorKey = LOGIN_ERROR_TIMES_KEY_PREFIX + userAccount;
         String loginErrorKey = LOGIN_ERROR_TIMES_KEY_PREFIX + userAccount;
         Integer number = (Integer) commonCacheOperator.get(loginErrorKey);
         Integer number = (Integer) commonCacheOperator.get(loginErrorKey);
         if (number == null) {
         if (number == null) {
             // 如果redis中没有保存,代表失败第一次
             // 如果redis中没有保存,代表失败第一次
             number = 2;
             number = 2;
-            commonCacheOperator.put(loginErrorKey, number,5 * 60);
+            commonCacheOperator.put(loginErrorKey, number, 5 * 60);
             return;
             return;
         }
         }
         if (number < 5) {
         if (number < 5) {
             number++;
             number++;
-            commonCacheOperator.put(loginErrorKey, number,5 * 60);
+            commonCacheOperator.put(loginErrorKey, number, 5 * 60);
             return;
             return;
         }
         }
         // 第五次封禁账号,第六次进入isDisableTime方法,返回用户还需等待时间
         // 第五次封禁账号,第六次进入isDisableTime方法,返回用户还需等待时间
@@ -335,6 +343,7 @@ public class AuthServiceImpl implements AuthService {
 
 
     /**
     /**
      * 登录成功、清空登录次数
      * 登录成功、清空登录次数
+     *
      * @param userAccount 账号
      * @param userAccount 账号
      */
      */
     private void clearLoginErrorTimes(String userAccount) {
     private void clearLoginErrorTimes(String userAccount) {
@@ -351,7 +360,7 @@ public class AuthServiceImpl implements AuthService {
      **/
      **/
     private String execLoginB(SaBaseLoginUser saBaseLoginUser, String device) {
     private String execLoginB(SaBaseLoginUser saBaseLoginUser, String device) {
         // 校验状态
         // 校验状态
-        if(!saBaseLoginUser.getEnabled()) {
+        if (!saBaseLoginUser.getEnabled()) {
             throw new CommonException(AuthExceptionEnum.ACCOUNT_DISABLED.getValue());
             throw new CommonException(AuthExceptionEnum.ACCOUNT_DISABLED.getValue());
         }
         }
         // 执行登录
         // 执行登录
@@ -390,7 +399,7 @@ public class AuthServiceImpl implements AuthService {
         // 设置权限码
         // 设置权限码
         saBaseLoginUser.setPermissionCodeList(permissionCodeList);
         saBaseLoginUser.setPermissionCodeList(permissionCodeList);
         // 权限码列表存入缓存
         // 权限码列表存入缓存
-        commonCacheOperator.put(CacheConstant.AUTH_B_PERMISSION_LIST_CACHE_KEY + saBaseLoginUser.getId(),permissionCodeList);
+        commonCacheOperator.put(CacheConstant.AUTH_B_PERMISSION_LIST_CACHE_KEY + saBaseLoginUser.getId(), permissionCodeList);
         // 获取角色码
         // 获取角色码
         saBaseLoginUser.setRoleCodeList(roleCodeList);
         saBaseLoginUser.setRoleCodeList(roleCodeList);
         // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
         // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
@@ -405,7 +414,7 @@ public class AuthServiceImpl implements AuthService {
      **/
      **/
     private String execLoginC(SaBaseClientLoginUser saBaseClientLoginUser, String device) {
     private String execLoginC(SaBaseClientLoginUser saBaseClientLoginUser, String device) {
         // 校验状态
         // 校验状态
-        if(!saBaseClientLoginUser.getEnabled()) {
+        if (!saBaseClientLoginUser.getEnabled()) {
             throw new CommonException(AuthExceptionEnum.ACCOUNT_DISABLED.getValue());
             throw new CommonException(AuthExceptionEnum.ACCOUNT_DISABLED.getValue());
         }
         }
         // 执行登录
         // 执行登录
@@ -444,7 +453,7 @@ public class AuthServiceImpl implements AuthService {
         // 设置权限码
         // 设置权限码
         saBaseClientLoginUser.setPermissionCodeList(permissionCodeList);
         saBaseClientLoginUser.setPermissionCodeList(permissionCodeList);
         // 权限码列表存入缓存
         // 权限码列表存入缓存
-        commonCacheOperator.put(CacheConstant.AUTH_C_PERMISSION_LIST_CACHE_KEY + saBaseClientLoginUser.getId(),permissionCodeList);
+        commonCacheOperator.put(CacheConstant.AUTH_C_PERMISSION_LIST_CACHE_KEY + saBaseClientLoginUser.getId(), permissionCodeList);
         // 获取角色码
         // 获取角色码
         saBaseClientLoginUser.setRoleCodeList(roleCodeList);
         saBaseClientLoginUser.setRoleCodeList(roleCodeList);
         // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
         // 缓存用户信息,此处使用TokenSession为了指定时间内无操作则自动下线
@@ -502,7 +511,7 @@ public class AuthServiceImpl implements AuthService {
     @Override
     @Override
     public String doLoginById(String userId, String device, String type) {
     public String doLoginById(String userId, String device, String type) {
         // 根据id获取用户信息,根据B端或C端判断
         // 根据id获取用户信息,根据B端或C端判断
-        if(SaClientTypeEnum.B.getValue().equals(type)) {
+        if (SaClientTypeEnum.B.getValue().equals(type)) {
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserById(userId);
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserById(userId);
             if (ObjectUtil.isEmpty(saBaseLoginUser)) {
             if (ObjectUtil.isEmpty(saBaseLoginUser)) {
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/pom.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
     <parent>
     <parent>

+ 41 - 14
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/bean/influxdb/SensorData.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/bean/influxdb/SensorData.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.bean.influxdb;
+package vip.xiaonuo.coldchain.core.bean.influxdb;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -20,16 +20,6 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 @NoArgsConstructor
 @Measurement(name = "sensor_data")
 @Measurement(name = "sensor_data")
 public class SensorData extends JfcloudInFluxEntity {
 public class SensorData extends JfcloudInFluxEntity {
-    /**
-     * 设备ID标签
-     */
-    @Column(name = "device_id",tag = true)
-    private String deviceId;
-    /**
-     * 位置标签
-     */
-    @Column(name = "location")
-    private String location;
     /**
     /**
      * 温度字段
      * 温度字段
      */
      */
@@ -45,18 +35,55 @@ public class SensorData extends JfcloudInFluxEntity {
      * 二氧化碳浓度字段
      * 二氧化碳浓度字段
      */
      */
     @Column(name = "co2")
     @Column(name = "co2")
-    private double co2;
+    private double co2 = 0;
+
+    /**
+     * 路数,默认路数1
+     */
+    @Column(name = "roads")
+    private Integer roads = 1;
+
+    /**
+     * 电池剩余电量
+     */
+    @Column(name = "battery", tag = true)
+    private double battery = 0;
+
+
+    /**
+     * 插电状态0:插电  1: 不插电
+     */
+    @Column(name = "plugInStatus", tag = true)
+    private String plugInStatus;
+
+
+    /**
+     * 位置标签
+     */
+    @Column(name = "location", tag = true)
+    private String location;
     /**
     /**
      * 经度字段
      * 经度字段
      */
      */
-    @Column(name = "longitude")
+    @Column(name = "longitude", tag = true)
     private double lng;
     private double lng;
 
 
     /**
     /**
      * 纬度字段
      * 纬度字段
      */
      */
-    @Column(name = "latitude")
+    @Column(name = "latitude", tag = true)
     private double lat;
     private double lat;
 
 
+    /**
+     * 设备ID标签
+     */
+    @Column(name = "device_id", tag = true)
+    private String deviceId;
+
+    /**
+     * 采集设备型号
+     */
+    @Column(name = "model_name", tag = true)
+    private String modelName;
 
 
 }
 }

+ 91 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/MonitorDeviceCache.java

@@ -0,0 +1,91 @@
+package vip.xiaonuo.coldchain.core.cache.monitordevice;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 17:39:49
+ */
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 设备缓存工具类,基于配置动态选择 Redis 缓存或本地缓存
+ */
+@Component
+@RequiredArgsConstructor
+public class MonitorDeviceCache {
+    private final MonitorDeviceCacheService cacheService;  // 通过缓存接口进行操作
+
+    /**
+     * 将设备编号与设备型号缓存到缓存存储中(Redis 或本地)
+     *
+     * @param deviceCode  设备编号
+     * @param deviceModel 设备型号
+     */
+    public void cacheDevice(String deviceCode, String deviceModel) {
+        cacheService.cacheDevice(deviceCode, deviceModel);
+    }
+
+    /**
+     * 从缓存中获取设备型号
+     *
+     * @param deviceCode 设备编号
+     * @return 设备型号
+     */
+    public String getDeviceModel(String deviceCode) {
+        return cacheService.getDeviceModel(deviceCode);
+    }
+
+    /**
+     * 判断设备编号是否已经存在于缓存中
+     *
+     * @param deviceCode 设备编号
+     * @return true:存在;false:不存在
+     */
+    public boolean exists(String deviceCode) {
+        return cacheService.exists(deviceCode);
+    }
+
+    /**
+     * 从缓存中移除设备
+     *
+     * @param deviceCode 设备编号
+     */
+    public void removeDevice(String deviceCode) {
+        cacheService.removeDevice(deviceCode);
+    }
+
+    /**
+     * 批量删除符合模式的设备缓存
+     *
+     * @param pattern 模糊匹配的模式
+     */
+    public void removeBatch(String pattern) {
+        cacheService.removeBatch(pattern);
+    }
+
+    /**
+     * 获取所有设备缓存的设备编号
+     *
+     * @return 所有设备编号集合
+     */
+    public Set<String> getAllDeviceCodes() {
+        return cacheService.getAllDeviceCodes();
+    }
+
+    /**
+     * 获取所有设备缓存的设备型号
+     *
+     * @return 所有设备型号集合
+     */
+    public List<String> getAllDeviceModels() {
+        return cacheService.getAllDeviceModels();
+    }
+}
+

+ 89 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/MonitorDeviceCacheInitializer.java

@@ -0,0 +1,89 @@
+package vip.xiaonuo.coldchain.core.cache.monitordevice;
+
+import cn.hutool.core.lang.TypeReference;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.core.renke.RenKeService;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+@Slf4j
+public class MonitorDeviceCacheInitializer implements CommandLineRunner {
+    private final MonitorDeviceService monitorDeviceService;
+    private final MonitorDeviceCache monitorDeviceCache;
+    private final RenKeService renKeService;
+
+    /**
+     * Spring Boot 应用启动时执行的方法
+     */
+    @Override
+    public void run(String... args) {
+        updateDeviceCache();
+    }
+
+
+    private void updateDeviceCache() {
+        try {
+            // 获取设备列表
+            List<MonitorDevice> deviceList = monitorDeviceService.list();
+            if (deviceList.isEmpty()) {
+                log.warn("采集设备列表为空,未进行缓存更新");
+                return;  // 设备列表为空,跳过缓存更新
+            }
+            // 将设备数据加载到缓存中
+            for (MonitorDevice monitorDevice : deviceList) {
+                String deviceCode = monitorDevice.getDeviceCode();
+                String deviceModel = monitorDevice.getModelName();
+                Integer parsedDeviceCode = Integer.parseInt(deviceCode);  // Avoid parsing multiple times
+                // 调用设备编号配置上报参数接口
+//                List<Integer> paramIds = monitorDevice.getParamIds();
+                String paramIds = monitorDevice.getParamIds();
+                if (paramIds == null || StrUtil.isBlank(paramIds)) {  // Explicitly check for null and empty list
+                    log.info("触发设备【编号】配置上报参数接口:采集设备编号 = {}, 采集设备型号 = {}", deviceCode, deviceModel);
+                    renKeService.callParamIds(parsedDeviceCode);
+                }
+                // 调用设备参数配置上报参数接口
+//                List<ParamItem> parameters = monitorDevice.getParameters();
+                String parameters = monitorDevice.getParameters();
+                if (StrUtil.isNotBlank(paramIds) && StrUtil.isBlank(parameters)) {  // Check for null and empty list
+                    log.info("触发设备【完整参数】配置上报参数接口:采集设备编号 = {}, 采集设备型号 = {}", deviceCode, deviceModel);
+//                    Type listType = new TypeToken<List<Integer>>(){}.getType();
+//                    List<Integer> paramIds = gson.fromJson(json, listType);
+                    TypeReference<List<Integer>> typeReference = new TypeReference<>() {
+                    };
+                    List<Integer> paramId2s = JSONUtil.toBean(paramIds, typeReference, true);
+                    renKeService.callParameters(parsedDeviceCode, paramId2s);
+                }
+
+                // 判断设备是否已经缓存
+                if (!monitorDeviceCache.exists(deviceCode)) {
+                    monitorDeviceCache.cacheDevice(deviceCode, deviceModel);
+                    log.debug("采集设备缓存添加成功:采集设备编号 = {}, 采集设备型号 = {}", deviceCode, deviceModel);
+                }
+            }
+            log.info("采集设备缓存完成,共更新了 {} 个采集设备", deviceList.size());
+        } catch (NumberFormatException e) {
+            log.error("设备编号格式错误,无法转换为整数", e);
+        } catch (Exception e) {
+            log.error("采集设备缓存更新失败,发生异常:", e);
+        }
+    }
+
+    /**
+     * 每 5 分钟定期执行设备缓存更新
+     */
+    @Scheduled(fixedRate = 300000)
+//    @Scheduled(fixedRateString = "${coldchain.cache-update-interval:300000}")
+    public void updateDeviceCachePeriodically() {
+        updateDeviceCache();  // 定期调用缓存更新方法
+    }
+}

+ 32 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/MonitorDeviceCacheService.java

@@ -0,0 +1,32 @@
+package vip.xiaonuo.coldchain.core.cache.monitordevice;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 17:34:58
+ */
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 缓存服务接口,定义缓存操作的基本方法
+ */
+public interface MonitorDeviceCacheService {
+
+    void cacheDevice(String deviceCode, String deviceModel);
+
+    String getDeviceModel(String deviceCode);
+
+    boolean exists(String deviceCode);
+
+    void removeDevice(String deviceCode);
+
+    void removeBatch(String pattern);
+
+    Set<String> getAllDeviceCodes();
+
+    List<String> getAllDeviceModels();
+}

+ 32 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/factory/MonitorDeviceCacheServiceFactory.java

@@ -0,0 +1,32 @@
+package vip.xiaonuo.coldchain.core.cache.monitordevice.factory;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCacheService;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.impl.LocalMonitorDeviceCacheService;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.impl.RedisMonitorDeviceCacheService;
+import vip.xiaonuo.coldchain.core.renke.config.JfcloudColdChainServerProperties;
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 17:37:02
+ */
+
+
+/**
+ * 缓存选择器,根据配置决定使用 Redis 缓存还是本地缓存
+ */
+@Configuration
+public class MonitorDeviceCacheServiceFactory {
+
+    @Bean
+    public MonitorDeviceCacheService cacheService(JfcloudColdChainServerProperties jfcloudColdChainServerProperties, RedisMonitorDeviceCacheService redisCacheService, LocalMonitorDeviceCacheService localCacheService) {
+        if ("redis".equalsIgnoreCase(jfcloudColdChainServerProperties.getCacheType())) {
+            return redisCacheService;  // 使用 Redis 缓存
+        } else {
+            return localCacheService;  // 使用本地缓存
+        }
+    }
+}

+ 61 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/impl/LocalMonitorDeviceCacheService.java

@@ -0,0 +1,61 @@
+package vip.xiaonuo.coldchain.core.cache.monitordevice.impl;
+
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCacheService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 17:36:25
+ */
+
+/**
+ * 本地缓存实现类
+ */
+@Component
+public class LocalMonitorDeviceCacheService implements MonitorDeviceCacheService {
+    private final Map<String, String> localCacheMap = new ConcurrentHashMap<>();
+
+    @Override
+    public void cacheDevice(String deviceCode, String deviceModel) {
+        localCacheMap.put(deviceCode, deviceModel);
+    }
+
+    @Override
+    public String getDeviceModel(String deviceCode) {
+        return localCacheMap.get(deviceCode);
+    }
+
+    @Override
+    public boolean exists(String deviceCode) {
+        return localCacheMap.containsKey(deviceCode);
+    }
+
+    @Override
+    public void removeDevice(String deviceCode) {
+        localCacheMap.remove(deviceCode);
+    }
+
+    @Override
+    public void removeBatch(String pattern) {
+        localCacheMap.entrySet().removeIf(entry -> entry.getKey().startsWith(pattern));
+    }
+
+    @Override
+    public Set<String> getAllDeviceCodes() {
+        return localCacheMap.keySet();
+    }
+
+    @Override
+    public List<String> getAllDeviceModels() {
+        return new ArrayList<>(localCacheMap.values());
+    }
+}

+ 72 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/cache/monitordevice/impl/RedisMonitorDeviceCacheService.java

@@ -0,0 +1,72 @@
+package vip.xiaonuo.coldchain.core.cache.monitordevice.impl;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 17:35:44
+ */
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCacheService;
+import vip.xiaonuo.common.cache.CommonCacheOperator;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Redis 缓存实现类
+ */
+@Component
+@RequiredArgsConstructor
+public class RedisMonitorDeviceCacheService implements MonitorDeviceCacheService {
+
+    private static final String CACHE_KEY_PREFIX = "Cache:MonitorDevice:";
+    private final CommonCacheOperator commonCacheOperator;
+
+    @Override
+    public void cacheDevice(String deviceCode, String deviceModel) {
+        commonCacheOperator.put(CACHE_KEY_PREFIX + deviceCode, deviceModel);
+    }
+
+    @Override
+    public String getDeviceModel(String deviceCode) {
+        if (exists(deviceCode)) {
+            return (String) commonCacheOperator.get(CACHE_KEY_PREFIX + deviceCode);
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public boolean exists(String deviceCode) {
+        return commonCacheOperator.get(CACHE_KEY_PREFIX + deviceCode) != null;
+    }
+
+    @Override
+    public void removeDevice(String deviceCode) {
+        commonCacheOperator.remove(CACHE_KEY_PREFIX + deviceCode);
+    }
+
+    @Override
+    public void removeBatch(String pattern) {
+        commonCacheOperator.removeBatch(CACHE_KEY_PREFIX + pattern);
+    }
+
+    @Override
+    public Set<String> getAllDeviceCodes() {
+        return commonCacheOperator.getAllKeys().stream()
+                .map(key -> key.replace(CACHE_KEY_PREFIX, ""))
+                .collect(Collectors.toSet());
+    }
+
+    @Override
+    public List<String> getAllDeviceModels() {
+        return commonCacheOperator.getAllKeys().stream()
+                .map(key -> (String) commonCacheOperator.get(key))
+                .collect(Collectors.toList());
+    }
+}

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/config/ColdChainAsyncConfig.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/config/ColdChainAsyncConfig.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.config;
+package vip.xiaonuo.coldchain.core.config;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -14,7 +14,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
 
 @Configuration
 @Configuration
-@EnableAsync //(proxyTargetClass = true)
+@EnableAsync
 public class ColdChainAsyncConfig {
 public class ColdChainAsyncConfig {
     /**
     /**
      * 创建自定义的线程池配置
      * 创建自定义的线程池配置

+ 27 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/config/JfcloudColdChainConstants.java

@@ -0,0 +1,27 @@
+package vip.xiaonuo.coldchain.core.config;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/1 15:02:07
+ */
+public interface JfcloudColdChainConstants {
+    /**
+     * TCP 服务端口
+     */
+    Integer SERVER_PORT = 40404;
+
+
+    /**
+     * 默认缓存方式
+     */
+    String DEFAULT_CACHE_TYPE = "redis";
+
+
+    /**
+     * 每 1 分钟定期执行设备缓存更新
+     */
+    Long CACHE_UPDATE_INTERVAL = 5 * 60 * 1000L;
+}

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/event/SensorDataEvent.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorDataEvent.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.event;
+package vip.xiaonuo.coldchain.core.event;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -10,7 +10,7 @@ package vip.xiaonuo.coldchain.modular.core.event;
 
 
 import lombok.Getter;
 import lombok.Getter;
 import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ApplicationEvent;
-import vip.xiaonuo.coldchain.modular.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 
 
 @Getter
 @Getter
 public class SensorDataEvent extends ApplicationEvent {
 public class SensorDataEvent extends ApplicationEvent {

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/event/SensorDataEventListener.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorDataEventListener.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.event;
+package vip.xiaonuo.coldchain.core.event;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -8,13 +8,13 @@ package vip.xiaonuo.coldchain.modular.core.event;
  * @date 2024/11/12 15:31:43
  * @date 2024/11/12 15:31:43
  */
  */
 
 
+import com.github.jfcloud.influxdb.service.JfcloudInfluxDBService;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.event.EventListener;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
-import vip.xiaonuo.coldchain.modular.core.bean.influxdb.SensorData;
-import com.github.jfcloud.influxdb.service.JfcloudInfluxDBService;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 
 
 @Slf4j
 @Slf4j
 @RequiredArgsConstructor
 @RequiredArgsConstructor

+ 36 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/RenKeService.java

@@ -0,0 +1,36 @@
+package vip.xiaonuo.coldchain.core.renke;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+import rk.netDevice.sdk.p2.RSServer;
+
+import java.util.List;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/1 16:23:41
+ */
+@Component
+@RequiredArgsConstructor
+public class RenKeService {
+    private final RSServer rsServer;
+
+    /**
+     * 召唤设备参数信息
+     *
+     * @param deviceId
+     * @return
+     */
+    public boolean callParamIds(Integer deviceId) {
+        return rsServer.callParamList(deviceId);
+    }
+
+    public boolean callParameters(Integer deviceId, List<Integer> paramIds) {
+        return rsServer.callParam(deviceId, paramIds);
+    }
+
+
+}

+ 15 - 11
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainServerAutoConfiguration.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/config/JfcloudColdChainServerAutoConfiguration.java

@@ -1,18 +1,22 @@
-package vip.xiaonuo.coldchain.modular.core.renke.config;
+package vip.xiaonuo.coldchain.core.renke.config;
 
 
 import lombok.SneakyThrows;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableAsync;
 import rk.netDevice.sdk.p2.IDataListener;
 import rk.netDevice.sdk.p2.IDataListener;
 import rk.netDevice.sdk.p2.RSServer;
 import rk.netDevice.sdk.p2.RSServer;
-import vip.xiaonuo.coldchain.modular.core.renke.util.IPUtils;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl.RenKeColdChainDataHandler;
-import vip.xiaonuo.coldchain.modular.core.renke.listener.JfcloudColdChainRenKeDefaultDataListener;
+import vip.xiaonuo.coldchain.core.renke.listener.JfcloudColdChainRenKeDefaultDataListener;
+import vip.xiaonuo.coldchain.core.renke.util.IPUtil;
+import vip.xiaonuo.coldchain.core.renke.util.ParamFileUtil;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.impl.RenKeColdChainDataHandler;
+import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 
 
 import javax.annotation.PreDestroy;
 import javax.annotation.PreDestroy;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ExecutorService;
@@ -35,11 +39,12 @@ public class JfcloudColdChainServerAutoConfiguration {
      */
      */
     @Bean
     @Bean
     @ConditionalOnMissingBean
     @ConditionalOnMissingBean
-    public IDataListener defaultRkDataListener(RenKeColdChainDataHandler renKeColdChainDataHandler) {
-        // 使用默认实现 DefaultRKDataListener,便于处理数据
-        return new JfcloudColdChainRenKeDefaultDataListener(renKeColdChainDataHandler);
+    public IDataListener defaultRkDataListener(RenKeColdChainDataHandler renKeColdChainDataHandler,
+                                               @Autowired @Lazy MonitorDeviceService monitorDeviceService) {
+        return new JfcloudColdChainRenKeDefaultDataListener(renKeColdChainDataHandler, monitorDeviceService);
     }
     }
 
 
+
     /**
     /**
      * RSServer Bean 配置,使用异步方式启动,以避免阻塞应用启动。
      * RSServer Bean 配置,使用异步方式启动,以避免阻塞应用启动。
      *
      *
@@ -52,16 +57,15 @@ public class JfcloudColdChainServerAutoConfiguration {
     @SneakyThrows
     @SneakyThrows
     public RSServer jfcloudColdChainServer(JfcloudColdChainServerProperties properties, IDataListener dataListener) {
     public RSServer jfcloudColdChainServer(JfcloudColdChainServerProperties properties, IDataListener dataListener) {
         // 初始化 RSServer,并注入数据监听器
         // 初始化 RSServer,并注入数据监听器
-        String paramFilePath="C:\\code\\product\\jfcloud-coldchain\\snowy-plugin\\snowy-plugin-coldchain\\src\\main\\resources\\lib\\param.dat";
-        rsServer = RSServer.Initiate(properties.getPort(),paramFilePath);
+        String paramFilePath = ParamFileUtil.copyParamDatFileFromJarToCurrentDirectory();
+        rsServer = RSServer.Initiate(properties.getPort(), paramFilePath);
         rsServer.addDataListener(dataListener);
         rsServer.addDataListener(dataListener);
         log.info("""
         log.info("""
                 ----------------------------------------------------------
                 ----------------------------------------------------------
                 冷链通信服务(JfcloudColdChainServer)正在启动, Access URLs:
                 冷链通信服务(JfcloudColdChainServer)正在启动, Access URLs:
                 访问地址:    tcp://{}:{}
                 访问地址:    tcp://{}:{}
                 ----------------------------------------------------------
                 ----------------------------------------------------------
-                """, IPUtils.getIp(), properties.getPort()
-        );
+                """, IPUtil.getIp(), properties.getPort());
         // 异步启动 RSServer,避免阻塞主线程
         // 异步启动 RSServer,避免阻塞主线程
         startJfcloudColdChainServerAsync(rsServer);
         startJfcloudColdChainServerAsync(rsServer);
         return rsServer;
         return rsServer;

+ 14 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainServerProperties.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/config/JfcloudColdChainServerProperties.java

@@ -1,7 +1,8 @@
-package vip.xiaonuo.coldchain.modular.core.renke.config;
+package vip.xiaonuo.coldchain.core.renke.config;
 
 
 import lombok.Data;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.ConfigurationProperties;
+import vip.xiaonuo.coldchain.core.config.JfcloudColdChainConstants;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -17,4 +18,16 @@ public class JfcloudColdChainServerProperties {
      * 配置 RSServer 的端口号,默认为 2404
      * 配置 RSServer 的端口号,默认为 2404
      */
      */
     private int port = JfcloudColdChainConstants.SERVER_PORT;
     private int port = JfcloudColdChainConstants.SERVER_PORT;
+
+    /**
+     * 缓存方式redis/local
+     */
+    private String cacheType = JfcloudColdChainConstants.DEFAULT_CACHE_TYPE;
+
+    /**
+     * 每 5 分钟定期执行设备缓存更新
+     */
+    private Long cacheUpdateInterval = JfcloudColdChainConstants.CACHE_UPDATE_INTERVAL;
+
+
 }
 }

+ 21 - 23
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java

@@ -1,10 +1,11 @@
-package vip.xiaonuo.coldchain.modular.core.renke.listener;
+package vip.xiaonuo.coldchain.core.renke.listener;
 
 
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import rk.netDevice.sdk.p2.*;
 import rk.netDevice.sdk.p2.*;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl.RenKeColdChainDataHandler;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.RenKeColdChainMessageData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.impl.RenKeColdChainDataHandler;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.RenKeColdChainMessageData;
+import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 
 
 /**
 /**
  * 默认的 RK 数据监听器,用于处理设备通信中的各种事件。
  * 默认的 RK 数据监听器,用于处理设备通信中的各种事件。
@@ -18,11 +19,12 @@ import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.RenKeColdCha
  */
  */
 @Slf4j
 @Slf4j
 public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
 public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
-    public static ParamIdsData paramIdsData;
     private final RenKeColdChainDataHandler renKeColdChainDataHandler;
     private final RenKeColdChainDataHandler renKeColdChainDataHandler;
+    private final MonitorDeviceService monitorDeviceService;
 
 
-    public JfcloudColdChainRenKeDefaultDataListener(RenKeColdChainDataHandler renKeColdChainDataHandler) {
+    public JfcloudColdChainRenKeDefaultDataListener(RenKeColdChainDataHandler renKeColdChainDataHandler, MonitorDeviceService monitorDeviceService) {
         this.renKeColdChainDataHandler = renKeColdChainDataHandler;
         this.renKeColdChainDataHandler = renKeColdChainDataHandler;
+        this.monitorDeviceService = monitorDeviceService;
     }
     }
 
 
     @Override
     @Override
@@ -38,19 +40,15 @@ public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
     @Override
     @Override
     public void receiveStoreData(StoreData data) {
     public void receiveStoreData(StoreData data) {
         log.info("接收到存储数据: 设备ID = {}", data.getDeviceId());
         log.info("接收到存储数据: 设备ID = {}", data.getDeviceId());
-        data.getNodeList().forEach(nodeData ->
-                log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}",
-                        nodeData.getNodeId(),nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum())
-        );
+        data.getNodeList().forEach(nodeData -> log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum()));
+        log.info("================================================================");
     }
     }
 
 
     @Override
     @Override
     public void receiveRealtimeData(RealTimeData data) {
     public void receiveRealtimeData(RealTimeData data) {
-//        log.info("接收到实时数据: 设备ID = {}", data.getDeviceId());
-//        data.getNodeList().forEach(nodeData ->
-//                log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}",
-//                        nodeData.getNodeId(),nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum())
-//        );
+        log.info("接收到实时数据: 设备ID = {}", data.getDeviceId());
+        data.getNodeList().forEach(nodeData -> log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum()));
+        log.info("================================================================");
         RenKeColdChainMessageData renKeColdChainMessageData = new RenKeColdChainMessageData();
         RenKeColdChainMessageData renKeColdChainMessageData = new RenKeColdChainMessageData();
         renKeColdChainMessageData.setRealTimeData(data);
         renKeColdChainMessageData.setRealTimeData(data);
         renKeColdChainDataHandler.handleRealTimeData(renKeColdChainMessageData);
         renKeColdChainDataHandler.handleRealTimeData(renKeColdChainMessageData);
@@ -58,31 +56,31 @@ public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
 
 
     @Override
     @Override
     public void receiveLoginData(LoginData data) {
     public void receiveLoginData(LoginData data) {
-        //添加设备,或者更新设备,添加设备登录日志表
-        log.info("接收到设备登录信息: 设备ID = {}\n{}", data.getDeviceId(),JSONUtil.toJsonStr(data));
+        log.info("接收到设备登录信息: 设备ID = {}\n{}", data.getDeviceId(), JSONUtil.toJsonStr(data));
     }
     }
 
 
     @Override
     @Override
     public void receiveParamIds(ParamIdsData data) {
     public void receiveParamIds(ParamIdsData data) {
-        log.info("接收到设备参数编号信息\n{}",JSONUtil.toJsonStr(data));
-        paramIdsData=data;
+        log.info("接收到设备参数【编号】信息{}", JSONUtil.toJsonStr(data));
+        // 更新设备编号参数
+        monitorDeviceService.updateParamIds(data);
     }
     }
 
 
     @Override
     @Override
     public void receiveParam(ParamData data) {
     public void receiveParam(ParamData data) {
-        //判断设备是否存在
-        //插入或者更新设备参数
-        log.info("接收到设备参数信息: \n{}",JSONUtil.toJsonStr(data));
+        log.info("接收到设备参数【配置项目】信息: {}", JSONUtil.toJsonStr(data));
+        // 更新设备参数
+        monitorDeviceService.updateParameters(data);
     }
     }
 
 
     @Override
     @Override
     public void receiveWriteParamAck(WriteParamAck data) {
     public void receiveWriteParamAck(WriteParamAck data) {
-        log.info("接收到参数下载应答:{}",data);
+        log.info("接收到参数下载应答:{}", data);
     }
     }
 
 
     @Override
     @Override
     public void receiveTransDataAck(TransDataAck data) {
     public void receiveTransDataAck(TransDataAck data) {
-        log.info("接收到透传数据应答:{}",data);
+        log.info("接收到透传数据应答:{}", data);
     }
     }
 
 
     @Override
     @Override

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/util/IPUtils.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/util/IPUtil.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.renke.util;
+package vip.xiaonuo.coldchain.core.renke.util;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -17,7 +17,7 @@ import java.util.Enumeration;
 
 
 @Slf4j
 @Slf4j
 @UtilityClass
 @UtilityClass
-public class IPUtils {
+public class IPUtil {
     public static String getIp() {
     public static String getIp() {
         String ip = getLocalIp();
         String ip = getLocalIp();
         if (ip == null || "".equals(ip)) {
         if (ip == null || "".equals(ip)) {

+ 76 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/util/ParamFileUtil.java

@@ -0,0 +1,76 @@
+package vip.xiaonuo.coldchain.core.renke.util;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.*;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description 工具类:从 JAR 中拷贝 param.dat 文件到 JAR 所在目录
+ * @date 2024/11/17 08:47:50
+ */
+@Slf4j
+public class ParamFileUtil {
+    static final String DEFAULT_NAME = "param.dat";
+    final static String resourcePath = "lib/param.dat";
+
+    private ParamFileUtil() {
+        // 私有构造函数,防止外部实例化
+    }
+
+    public static String copyParamDatFileFromJarToCurrentDirectory() {
+        try {
+            return copyParamDatFileFromJarToCurrentDirectory(DEFAULT_NAME);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 从 JAR 文件中的指定资源路径拷贝文件到当前工作目录。
+     * 如果目标文件已存在,则不进行拷贝,并返回目标文件的绝对路径。
+     *
+     * @param targetFileName 目标文件名(将拷贝到当前工作目录)
+     * @return 新文件的绝对路径,如果文件已存在则返回该文件的路径
+     * @throws IOException 如果文件操作出错
+     */
+    public static String copyParamDatFileFromJarToCurrentDirectory(String targetFileName) throws IOException {
+        // 获取资源的输入流
+        InputStream inputStream = ParamFileUtil.class.getClassLoader().getResourceAsStream(resourcePath);
+        if (inputStream == null) {
+            throw new FileNotFoundException("资源文件 " + resourcePath + " 未找到!");
+        }
+
+        // 获取当前工作目录 (用户启动 JAR 文件的目录)
+        String currentDirectory = System.getProperty("user.dir"); // 获取当前工作目录
+
+        // 目标文件的路径
+        File targetFile = new File(currentDirectory, targetFileName);
+
+        // 如果目标文件已存在,则不拷贝,直接返回文件的绝对路径
+        if (targetFile.exists()) {
+            log.info("param.dat 文件已存在,跳过拷贝操作: {}", targetFile.getAbsolutePath());
+            inputStream.close();  // 关闭输入流
+            return targetFile.getAbsolutePath();  // 返回目标文件的绝对路径
+        }
+
+        // 创建目标文件的输出流
+        try (OutputStream outputStream = new FileOutputStream(targetFile)) {
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+
+            // 从 JAR 文件中的输入流读取并写入到目标文件
+            while ((bytesRead = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
+            log.info("param.dat 文件已成功拷贝到工作目录: {}", targetFile.getAbsolutePath());
+            return targetFile.getAbsolutePath();  // 返回新文件的绝对路径
+        } finally {
+            // 关闭输入流
+            inputStream.close();
+        }
+    }
+
+}

+ 4 - 4
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/beanprocessor/ColdChainDataHandlerBeanPostProcessor.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/beanprocessor/ColdChainDataHandlerBeanPostProcessor.java

@@ -1,11 +1,11 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.beanprocessor;
+package vip.xiaonuo.coldchain.core.service.beanprocessor;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.ColdChainHandlerRegistry;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.AbstractColdChainDataHandler;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.ColdChainDataHandler;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.AbstractColdChainDataHandler;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.ColdChainDataHandler;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.ColdChainHandlerRegistry;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou

+ 11 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/bean/MonitorDeviceProperties.java

@@ -0,0 +1,11 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.bean;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 15:47:01
+ */
+public interface MonitorDeviceProperties extends java.io.Serializable {
+}

+ 24 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/bean/RenKeMonitorDeviceProperties.java

@@ -0,0 +1,24 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.bean;
+
+import rk.netDevice.sdk.p2.ParamData;
+import rk.netDevice.sdk.p2.ParamIdsData;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 15:46:02
+ */
+public class RenKeMonitorDeviceProperties implements MonitorDeviceProperties {
+    /**
+     * 设备编号参数
+     */
+    private ParamIdsData paramIds;
+
+    /**
+     * 配置明细数据
+     */
+    private ParamData parameters;
+
+}

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/MonitorDataProcessor.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 23:17:28
+ */
+public interface MonitorDataProcessor<T> {
+    String RS_CO2WS_WIFI_2_5000P = "RS-CO2WS-WIFI-2-5000P";
+    String RS_WD_WIFI_6_5WL = "RS-WD-WIFI-6-5WL";
+    String RS_WS_WIFI5_C3_Y2 = "RS-WS-WIFI5-C3-Y2";
+    String RS_WS_WIFI5_C3_Y4 = "RS-WS-WIFI5-C3-Y4";
+
+    Boolean processData(T data);
+}

+ 168 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/AbsRenkeMonitorDataProcessor.java

@@ -0,0 +1,168 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationEventPublisher;
+import rk.netDevice.sdk.p2.RealTimeData;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.core.event.SensorDataEvent;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
+
+import java.time.Instant;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Renke设备监控数据处理器
+ * 该类用于处理来自Renke设备的实时数据,将其转换为标准的传感器数据并进行后续处理(如发布事件)。
+ *
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @date 2024/11/19
+ */
+@Slf4j  // 引入日志功能
+public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcessor<RealTimeData> {
+    // 设备型号
+    protected String modelName;
+    // 事件发布器
+    private ApplicationEventPublisher applicationEventPublisher;
+
+    public AbsRenkeMonitorDataProcessor(ApplicationEventPublisher applicationEventPublisher) {
+        this.applicationEventPublisher = applicationEventPublisher;
+    }
+
+    /**
+     * 处理实时数据
+     * 该方法是数据处理的入口,执行以下步骤:
+     * 1. 校验数据是否有效
+     * 2. 获取设备信息(如设备型号)
+     * 3. 转换数据格式为传感器数据
+     * 4. 发布传感器数据事件
+     *
+     * @param data 实时数据
+     * @return 处理是否成功
+     */
+    @Override
+    public Boolean processData(RealTimeData data) {
+        // 1. 确保实时数据不为空
+        if (Objects.isNull(data) || Objects.isNull(data.getNodeList()) || data.getNodeList().isEmpty()) {
+            return false;
+        }
+        // 2. 数据前处理(如果有需要)
+        preProcess(data);
+        // 3. 获取设备ID,并从设备缓存中获取设备型号
+        final String deviceId = String.valueOf(data.getDeviceId());
+        // 4. 日志记录:输出当前设备的型号信息
+        log.info("开始处理设备数据,设备ID: {}, 设备型号: {}", deviceId, modelName);
+        // 5. 将实时数据转换为传感器数据列表
+        List<SensorData> sensorDataList = transRealTimeData2SensorDatas(data);
+        // 6. 发布传感器数据事件
+        boolean result = writeSensorDatas(sensorDataList);
+        // 7. 日志记录:输出处理结果
+        if (result) {
+            postProcess(sensorDataList);
+            log.info("处理设备数据结束,设备ID: {}, 设备型号: {}", deviceId, modelName);
+        } else {
+            log.error("处理设备数据结束,但保存失败,设备ID: {}, 设备型号: {}", deviceId, modelName);
+        }
+        return result;
+    }
+
+    /**
+     * 数据前处理
+     * 子类可以重写此方法执行特定的预处理操作,如数据校验、转换等。
+     *
+     * @param data 实时数据
+     */
+    protected void preProcess(RealTimeData data) {
+        // 默认不做处理,子类可根据需求重写
+    }
+
+    /**
+     * 数据后处理
+     *
+     * @param sensorDataList 实时数据
+     */
+    protected void postProcess(List<SensorData> sensorDataList) {
+        // 默认不做处理,子类可根据需求重写
+    }
+
+    /**
+     * 将实时数据转换为传感器数据列表
+     * 该方法是抽象的,子类需要实现具体的转换逻辑。
+     *
+     * @param data 实时数据
+     * @return 转换后的传感器数据列表
+     */
+    abstract List<SensorData> transRealTimeData2SensorDatas(RealTimeData data);
+
+    /**
+     * 发布单个传感器数据事件
+     *
+     * @param sensorData 需要发布的传感器数据
+     * @return 是否发布成功
+     */
+    protected boolean writeSensorData(SensorData sensorData) {
+        try {
+            applicationEventPublisher.publishEvent(new SensorDataEvent(this, sensorData));
+            log.info("成功发布传感器数据事件: {}", sensorData);
+            return true;
+        } catch (Exception e) {
+            log.error("保存传感器数据失败: {}", sensorData, e);
+            return false;
+        }
+    }
+
+    /**
+     * 发布传感器数据事件列表
+     *
+     * @param sensorDataList 传感器数据列表
+     * @return 是否成功发布所有事件
+     */
+    protected boolean writeSensorDatas(List<SensorData> sensorDataList) {
+        if (sensorDataList.isEmpty()) {
+            log.warn("传感器数据列表为空,无法发布事件");
+            return false;
+        }
+        // 遍历传感器数据列表并发布每个数据的事件
+        for (SensorData sensorData : sensorDataList) {
+            if (!writeSensorData(sensorData)) {
+                log.error("发布传感器数据事件失败: {}", sensorData);
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * 获取设备型号
+     * 该方法是抽象的,子类需要实现返回设备模型的逻辑。
+     *
+     * @return 设备型号
+     */
+    abstract DeviceModelEnum deviceModel();
+
+    public String getModelName() {
+        return deviceModel().getDeviceCode();
+    }
+
+    /**
+     * 基础的SensorData
+     *
+     * @param data
+     * @return
+     */
+    protected SensorData defaultSensorData(RealTimeData data) {
+        final String deviceId = String.valueOf(data.getDeviceId());
+        SensorData sensorData = new SensorData();
+        // 如果记录时间为空,使用当前时间
+        Instant defaultTime = Instant.now();
+        sensorData.setTime(defaultTime);
+        //设置模型型号
+        sensorData.setModelName(modelName);
+        sensorData.setDeviceId(deviceId);
+        return sensorData;
+    }
+}

+ 53 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiCO2TempHumidityProcessor.java

@@ -0,0 +1,53 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl;
+
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Component;
+import rk.netDevice.sdk.p2.NodeData;
+import rk.netDevice.sdk.p2.RealTimeData;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
+
+import java.util.List;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 21:24:17
+ */
+@Slf4j
+@Component(MonitorDataProcessor.RS_CO2WS_WIFI_2_5000P)
+public class WifiCO2TempHumidityProcessor extends AbsRenkeMonitorDataProcessor {
+    public WifiCO2TempHumidityProcessor(ApplicationEventPublisher applicationEventPublisher) {
+        super(applicationEventPublisher);
+    }
+
+    @Override
+    List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
+        List<NodeData> nodeList = data.getNodeList();
+        if (nodeList.size() < 2) {
+            log.error("数据节点数量不够,需要2个节点,但只有{}个", nodeList.size());
+            return null;
+        }
+        NodeData nodeData = nodeList.get(0);
+        float CO2 = nodeList.get(1).getHum() * 10;
+        SensorData sensorData = defaultSensorData(data);
+        sensorData.setTemperature(nodeData.getTem());
+        sensorData.setHumidity(nodeData.getHum());
+        sensorData.setLat(nodeData.getLat());
+        sensorData.setLng(nodeData.getLng());
+        // c02含量
+        sensorData.setCo2(CO2);
+        return Lists.newArrayList(sensorData);
+    }
+
+    @Override
+    DeviceModelEnum deviceModel() {
+        return DeviceModelEnum.WIFI_CO2_TEMP_HUMIDITY_TRANSCEIVER;
+    }
+}

+ 50 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor1.java

@@ -0,0 +1,50 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl;
+
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Component;
+import rk.netDevice.sdk.p2.NodeData;
+import rk.netDevice.sdk.p2.RealTimeData;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
+
+import java.util.List;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 21:25:30
+ */
+@Slf4j
+@Component(MonitorDataProcessor.RS_WD_WIFI_6_5WL)
+public class WifiLowTempRecorderProcessor1 extends AbsRenkeMonitorDataProcessor {
+    public WifiLowTempRecorderProcessor1(ApplicationEventPublisher applicationEventPublisher) {
+        super(applicationEventPublisher);
+    }
+
+    @Override
+    List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
+        List<NodeData> nodeList = data.getNodeList();
+        NodeData nodeData = nodeList.get(0);
+        SensorData sensorData = defaultSensorData(data);
+        // 只处理有效数据:温度和湿度不为0
+        if (nodeData.getTem() != 0.0 || nodeData.getHum() != 0.0) {
+            log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", sensorData.getDeviceId() + " : " + nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum());
+            sensorData.setTemperature(nodeData.getTem());
+            sensorData.setHumidity(nodeData.getHum());
+            sensorData.setLat(nodeData.getLat());
+            sensorData.setLng(nodeData.getLng());
+        }
+        return Lists.newArrayList(sensorData);
+    }
+
+    @Override
+    DeviceModelEnum deviceModel() {
+        return DeviceModelEnum.WIFI_MULTI_PROBE_TEMP_HUMIDITY_RECORDER_1;
+    }
+}

+ 57 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor2.java

@@ -0,0 +1,57 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl;
+
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Component;
+import rk.netDevice.sdk.p2.NodeData;
+import rk.netDevice.sdk.p2.RealTimeData;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
+
+import java.util.List;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 21:25:30
+ */
+@Slf4j
+@Component(MonitorDataProcessor.RS_WS_WIFI5_C3_Y2)
+public class WifiLowTempRecorderProcessor2 extends AbsRenkeMonitorDataProcessor {
+    public WifiLowTempRecorderProcessor2(ApplicationEventPublisher applicationEventPublisher) {
+        super(applicationEventPublisher);
+    }
+
+    List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
+        List<NodeData> nodeList = data.getNodeList();
+        if (nodeList.size() < 3) {
+            log.error("数据节点数量不够,需要2个节点,但只有{}个", nodeList.size());
+            return null;
+        }
+        List<SensorData> rlt = Lists.newArrayList();
+        //前面两路的温湿度
+        for (int i = 0; i < 2; i++) {
+            NodeData nodeData = nodeList.get(i);
+            SensorData sensorData = defaultSensorData(data);
+            sensorData.setBattery(nodeList.get(2).getTem());//第三路温度表示电量
+            sensorData.setTemperature(nodeData.getTem());
+            sensorData.setHumidity(nodeData.getHum());
+            sensorData.setLat(nodeData.getLat());
+            sensorData.setLng(nodeData.getLng());
+            //设置路数
+            sensorData.setRoads((i + 1));
+            rlt.add(sensorData);
+        }
+        return rlt;
+    }
+
+    @Override
+    DeviceModelEnum deviceModel() {
+        return DeviceModelEnum.WIFI_MULTI_PROBE_TEMP_HUMIDITY_RECORDER_2;
+    }
+}

+ 60 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor4.java

@@ -0,0 +1,60 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl;
+
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Component;
+import rk.netDevice.sdk.p2.NodeData;
+import rk.netDevice.sdk.p2.RealTimeData;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
+
+import java.util.List;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 21:25:30
+ */
+@Slf4j
+@Component(MonitorDataProcessor.RS_WS_WIFI5_C3_Y4)
+public class WifiLowTempRecorderProcessor4 extends AbsRenkeMonitorDataProcessor {
+    public WifiLowTempRecorderProcessor4(ApplicationEventPublisher applicationEventPublisher) {
+        super(applicationEventPublisher);
+    }
+
+    List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
+        List<NodeData> nodeList = data.getNodeList();
+        if (nodeList.size() < 6) {
+            log.error("数据节点数量不够,需要6个节点,但只有{}个", nodeList.size());
+            return null;
+        }
+        List<SensorData> rlt = Lists.newArrayList();
+        //前面4路的温湿度
+        float battery = nodeList.get(4).getTem();
+        String plugInStatus = nodeList.get(5).getTem() < 1 ? "电源供电" : "电池供电";
+        for (int i = 0; i < 4; i++) {
+            NodeData nodeData = nodeList.get(i);
+            SensorData sensorData = defaultSensorData(data);
+            sensorData.setTemperature(nodeData.getTem());
+            sensorData.setHumidity(nodeData.getHum());
+            sensorData.setLat(nodeData.getLat());
+            sensorData.setLng(nodeData.getLng());
+            //设置路数
+            sensorData.setRoads((i + 1));
+            sensorData.setBattery(battery);
+            sensorData.setPlugInStatus(plugInStatus);
+            rlt.add(sensorData);
+        }
+        return rlt;
+    }
+
+    @Override
+    DeviceModelEnum deviceModel() {
+        return DeviceModelEnum.WIFI_MULTI_PROBE_TEMP_HUMIDITY_RECORDER_4;
+    }
+}

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/AbstractColdChainDataHandler.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/AbstractColdChainDataHandler.java

@@ -1,6 +1,6 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+package vip.xiaonuo.coldchain.core.service.dataprocess.handler;
 
 
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.ColdChainMessageData;
 
 
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.Type;

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/ColdChainDataHandler.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/ColdChainDataHandler.java

@@ -1,6 +1,6 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+package vip.xiaonuo.coldchain.core.service.dataprocess.handler;
 
 
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.ColdChainMessageData;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou

+ 3 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/ColdChainHandlerRegistry.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/ColdChainHandlerRegistry.java

@@ -1,6 +1,6 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+package vip.xiaonuo.coldchain.core.service.dataprocess.handler;
 
 
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.ColdChainMessageData;
 
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ConcurrentMap;
@@ -26,6 +26,7 @@ public class ColdChainHandlerRegistry {
     public static ColdChainDataHandler getHandler(Class<? extends ColdChainMessageData> dataClass) {
     public static ColdChainDataHandler getHandler(Class<? extends ColdChainMessageData> dataClass) {
         return handlerMap.get(dataClass);
         return handlerMap.get(dataClass);
     }
     }
+
     // 检查处理器是否已经注册
     // 检查处理器是否已经注册
     public static boolean isHandlerRegistered(Class<?> dataClass) {
     public static boolean isHandlerRegistered(Class<?> dataClass) {
         return handlerMap.containsKey(dataClass);
         return handlerMap.containsKey(dataClass);

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/DataHandlerFactory.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/DataHandlerFactory.java

@@ -1,7 +1,7 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+package vip.xiaonuo.coldchain.core.service.dataprocess.handler;
 
 
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.ColdChainMessageData;
 
 
 /**
 /**
  * DataHandlerFactory - 工厂类通过 Map 注册并返回适合的处理器
  * DataHandlerFactory - 工厂类通过 Map 注册并返回适合的处理器

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/impl/HaierColdChainDataHandler.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/impl/HaierColdChainDataHandler.java

@@ -1,9 +1,9 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl;
+package vip.xiaonuo.coldchain.core.service.dataprocess.handler.impl;
 
 
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.AbstractColdChainDataHandler;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.HaierColdChainMessageData;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.AbstractColdChainDataHandler;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.HaierColdChainMessageData;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou

+ 29 - 15
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/impl/RenKeColdChainDataHandler.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/handler/impl/RenKeColdChainDataHandler.java

@@ -1,16 +1,17 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl;
+package vip.xiaonuo.coldchain.core.service.dataprocess.handler.impl;
 
 
+import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import rk.netDevice.sdk.p2.RealTimeData;
 import rk.netDevice.sdk.p2.RealTimeData;
-import vip.xiaonuo.coldchain.modular.core.bean.influxdb.SensorData;
-import vip.xiaonuo.coldchain.modular.core.event.SensorDataEvent;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.AbstractColdChainDataHandler;
-import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.RenKeColdChainMessageData;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCache;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl.AbsRenkeMonitorDataProcessor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.handler.AbstractColdChainDataHandler;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.RenKeColdChainMessageData;
 
 
-import java.time.Instant;
+import java.util.Map;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -23,13 +24,20 @@ import java.time.Instant;
 @Component
 @Component
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 public class RenKeColdChainDataHandler extends AbstractColdChainDataHandler<RenKeColdChainMessageData> {
 public class RenKeColdChainDataHandler extends AbstractColdChainDataHandler<RenKeColdChainMessageData> {
-    private final ApplicationEventPublisher eventPublisher;  // To publish events
+    private final Map<String, MonitorDataProcessor<?>> monitorDataProcessorMap;
+    //    private final ApplicationEventPublisher eventPublisher;
+    private final MonitorDeviceCache monitorDeviceCache;
 
 
     @Override
     @Override
     public boolean handleRealTimeData(RenKeColdChainMessageData renKeColdChainMessageData) {
     public boolean handleRealTimeData(RenKeColdChainMessageData renKeColdChainMessageData) {
         RealTimeData data = renKeColdChainMessageData.getRealTimeData();
         RealTimeData data = renKeColdChainMessageData.getRealTimeData();
-        final int deviceId = data.getDeviceId();
-        data.getNodeList().forEach(nodeData -> {
+        final String deviceId = String.valueOf(data.getDeviceId());
+        final String modelName = monitorDeviceCache.getDeviceModel(deviceId);
+        if (StrUtil.isNotBlank(modelName)) {
+            AbsRenkeMonitorDataProcessor monitorDataProcessor = (AbsRenkeMonitorDataProcessor) monitorDataProcessorMap.get(modelName);
+            monitorDataProcessor.processData(data);
+        }
+         /*data.getNodeList().forEach(nodeData -> {
             SensorData sensorData = new SensorData();
             SensorData sensorData = new SensorData();
             // 如果记录时间为空,使用当前时间
             // 如果记录时间为空,使用当前时间
             if (nodeData.getRecordTime() == null) {
             if (nodeData.getRecordTime() == null) {
@@ -38,6 +46,8 @@ public class RenKeColdChainDataHandler extends AbstractColdChainDataHandler<RenK
             } else {
             } else {
                 sensorData.setTime(nodeData.getRecordTime().toInstant());
                 sensorData.setTime(nodeData.getRecordTime().toInstant());
             }
             }
+            //设置模型型号
+            sensorData.setModelName(modelName);
             // 只处理有效数据:温度和湿度不为0
             // 只处理有效数据:温度和湿度不为0
             if (nodeData.getTem() != 0.0 || nodeData.getHum() != 0.0) {
             if (nodeData.getTem() != 0.0 || nodeData.getHum() != 0.0) {
                 log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", deviceId + " : " + nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum());
                 log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", deviceId + " : " + nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum());
@@ -45,10 +55,14 @@ public class RenKeColdChainDataHandler extends AbstractColdChainDataHandler<RenK
                 sensorData.setHumidity(nodeData.getHum());
                 sensorData.setHumidity(nodeData.getHum());
                 sensorData.setLat(nodeData.getLat());
                 sensorData.setLat(nodeData.getLat());
                 sensorData.setLng(nodeData.getLng());
                 sensorData.setLng(nodeData.getLng());
-                sensorData.putTag("name","周小杰");
+                sensorData.setDeviceId(deviceId);
+                sensorData.putTag("name", "周小杰");
+
                 writeData(sensorData);
                 writeData(sensorData);
             }
             }
-        });
+        });*/
+
+
         return Boolean.TRUE;
         return Boolean.TRUE;
     }
     }
 
 
@@ -57,7 +71,7 @@ public class RenKeColdChainDataHandler extends AbstractColdChainDataHandler<RenK
      *
      *
      * @param sensorData 传感器数据
      * @param sensorData 传感器数据
      */
      */
-    public void writeData(SensorData sensorData) {
-        eventPublisher.publishEvent(new SensorDataEvent(this, sensorData));
-    }
+//    public void writeData(SensorData sensorData) {
+//        eventPublisher.publishEvent(new SensorDataEvent(this, sensorData));
+//    }
 }
 }

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/ColdChainMessageData.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/ColdChainMessageData.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.model;
+package vip.xiaonuo.coldchain.core.service.dataprocess.model;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/HaierColdChainMessageData.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/HaierColdChainMessageData.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.model;
+package vip.xiaonuo.coldchain.core.service.dataprocess.model;
 
 
 import lombok.Data;
 import lombok.Data;
 
 
@@ -10,5 +10,5 @@ import lombok.Data;
  * @date 2024/11/12 13:00:46
  * @date 2024/11/12 13:00:46
  */
  */
 @Data
 @Data
-public class HaierColdChainMessageData implements ColdChainMessageData{
+public class HaierColdChainMessageData implements ColdChainMessageData {
 }
 }

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/RenKeColdChainMessageData.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/RenKeColdChainMessageData.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.core.service.dataprocess.model;
+package vip.xiaonuo.coldchain.core.service.dataprocess.model;
 
 
 import lombok.Data;
 import lombok.Data;
 import rk.netDevice.sdk.p2.RealTimeData;
 import rk.netDevice.sdk.p2.RealTimeData;
@@ -11,6 +11,6 @@ import rk.netDevice.sdk.p2.RealTimeData;
  * @date 2024/11/12 13:00:46
  * @date 2024/11/12 13:00:46
  */
  */
 @Data
 @Data
-public class RenKeColdChainMessageData implements ColdChainMessageData{
+public class RenKeColdChainMessageData implements ColdChainMessageData {
     private RealTimeData realTimeData;
     private RealTimeData realTimeData;
 }
 }

+ 164 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/controller/AppController.java

@@ -0,0 +1,164 @@
+package vip.xiaonuo.coldchain.modular.app.controller;
+
+import cn.hutool.core.io.resource.InputStreamResource;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import vip.xiaonuo.coldchain.modular.app.param.*;
+import vip.xiaonuo.coldchain.modular.app.service.AppDeviceService;
+import vip.xiaonuo.coldchain.modular.app.service.MessageService;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+@Tag(name = "APP移动端控制器")
+@RestController
+@RequestMapping("/coldchain/api/app")
+public class AppController {
+
+    @Autowired
+    private AppDeviceService appDeviceService;
+    @Autowired
+    private MessageService messageService;
+
+
+    @GetMapping("/devices")
+    @Operation(summary = "设备列表")
+    public List<AppDevice> getDevices() {
+        return appDeviceService.getAllDevices();
+    }
+
+
+    /**
+     * 添加设备接口
+     *
+     * @param device 设备对象
+     * @return ResponseEntity
+     */
+    @PostMapping("/device/add")
+    @Operation(summary = "添加采集器")
+    public ResponseEntity<String> addDevice(@RequestBody @Valid AppDeviceAddParam device) {
+        // 设备对象校验通过后,调用业务逻辑服务层进行保存操作
+        boolean isSuccess = appDeviceService.addDevice(device);
+        // 添加设备完成一样要获取设备默认参数
+        if (isSuccess) {
+            return ResponseEntity.ok("设备添加成功");
+        } else {
+            return ResponseEntity.status(500).body("设备添加失败");
+        }
+    }
+
+
+    // 查询设备数据接口(POST)
+    @PostMapping("/device/view/{deviceCode}")
+    @Operation(summary = "查询采集设备数据")
+    public List<AppDeviceData> queryDeviceData(@RequestBody AppDeviceQueryParams appDeviceQueryParams, @PathVariable(value = "deviceCode", required = true) String deviceCode) {
+
+        // 校验查询条件
+        appDeviceQueryParams.validate();
+
+        // 获取查询结果
+        List<AppDeviceData> appDeviceDataList = appDeviceService.getDeviceData(appDeviceQueryParams, deviceCode);
+
+        // 根据metric筛选数据
+        Metric metric = appDeviceQueryParams.getMetric();
+        if (metric == Metric.TEMPERATURE) {
+            return filterTemperatureData(appDeviceDataList);
+        } else if (metric == Metric.HUMIDITY) {
+            return filterHumidityData(appDeviceDataList);
+        } else if (metric == Metric.CO2_LEVEL) {
+            return filterCo2LevelData(appDeviceDataList);
+        } else {
+            // 默认返回所有数据
+            return appDeviceDataList;
+        }
+    }
+
+    // 根据温度过滤数据
+    private List<AppDeviceData> filterTemperatureData(List<AppDeviceData> appDeviceDataList) {
+        // 根据需要筛选温度数据
+        return appDeviceDataList.stream().filter(data -> data.getTemperature() != null).toList();
+    }
+
+    // 根据湿度过滤数据
+    private List<AppDeviceData> filterHumidityData(List<AppDeviceData> appDeviceDataList) {
+        // 根据需要筛选湿度数据
+        return appDeviceDataList.stream().filter(data -> data.getHumidity() != null).toList();
+    }
+
+    // 根据CO2浓度过滤数据
+    private List<AppDeviceData> filterCo2LevelData(List<AppDeviceData> appDeviceDataList) {
+        // 根据需要筛选CO2浓度数据
+        return appDeviceDataList.stream().filter(data -> data.getCo2Level() != null).toList();
+    }
+
+    // 下载设备数据接口(POST)
+    @PostMapping("/device/download/{deviceCode}")
+    @Operation(summary = "下载采集器设备数据接口")
+    public ResponseEntity<InputStreamResource> downloadDeviceData(@RequestBody AppDeviceQueryParams appDeviceQueryParams, @PathVariable(value = "deviceCode", required = true) String deviceCode) throws IOException {
+
+        // 校验查询条件
+        appDeviceQueryParams.validate();
+
+        // 获取查询结果
+        List<AppDeviceData> appDeviceDataList = appDeviceService.getDeviceData(appDeviceQueryParams, deviceCode);
+
+        // 根据metric筛选数据
+        Metric metric = appDeviceQueryParams.getMetric();
+        if (metric == Metric.TEMPERATURE) {
+            appDeviceDataList = filterTemperatureData(appDeviceDataList);
+        } else if (metric == Metric.HUMIDITY) {
+            appDeviceDataList = filterHumidityData(appDeviceDataList);
+        } else if (metric == Metric.CO2_LEVEL) {
+            appDeviceDataList = filterCo2LevelData(appDeviceDataList);
+        }
+
+        // 生成 CSV 或 Excel 文件数据流
+        ByteArrayInputStream byteArrayInputStream = generateCSV(appDeviceDataList);
+
+        // 设置响应头,指示文件下载
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Disposition", "attachment; filename=devices_data.csv");
+
+        return ResponseEntity.ok().headers(headers).contentType(MediaType.parseMediaType("text/csv")).body(new InputStreamResource(byteArrayInputStream));
+    }
+
+    // 生成 CSV 文件的 ByteArrayInputStream
+    private ByteArrayInputStream generateCSV(List<AppDeviceData> appDeviceDataList) {
+        StringBuilder csvContent = new StringBuilder();
+        csvContent.append("DeviceCode,Timestamp,Temperature,Humidity,CO2 Level,Battery Percentage,Device Name\n");
+
+        for (AppDeviceData data : appDeviceDataList) {
+            csvContent.append(data.getDeviceCode()).append(",").append(data.getTimestamp()).append(",").append(data.getTemperature()).append(",").append(data.getHumidity()).append(",").append(data.getCo2Level()).append(",").append(data.getBatteryPercentage()).append(",").append(data.getDeviceName()).append("\n");
+        }
+
+        return new ByteArrayInputStream(csvContent.toString().getBytes());
+    }
+
+    @GetMapping("/message/unread/count")
+    @Operation(summary = "获取未读消息统计")
+    public Map<String, Long> getUnreadMessagesCount() {
+        return messageService.getUnreadMessagesCount();
+    }
+
+    @GetMapping("/message/list")
+    public List<Message> getMessages(
+            @RequestParam MessageType type,
+            @RequestParam int page,
+            @RequestParam int size) {
+        return messageService.getMessages(type, page, size);
+    }
+
+    @PostMapping("/message/mark-read")
+    @Operation(summary = "批量设置消息为已读")
+    public void markMessagesAsRead(@RequestBody List<Long> messageIds) {
+        messageService.markMessagesAsRead(messageIds);
+    }
+}

+ 54 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDevice.java

@@ -0,0 +1,54 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/17 22:30:15
+ */
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.Locale;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppDevice {
+    private String deviceName;
+    private double batteryPercentage;
+    private double temperature;
+    private LocalDateTime lastUpdated; // 使用 LocalDateTime 存储日期时间
+    private int batteryHealthPercentage;
+
+    // 格式化 lastUpdated 的显示方法
+    public String getFormattedLastUpdated() {
+        // 如果 lastUpdated 为 null,返回默认值
+        if (lastUpdated == null) {
+            return "暂不可用";  // 可以返回适当的默认值
+        }
+
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        // 计算两个日期的差值(以天为单位)
+        long daysDiff = ChronoUnit.DAYS.between(lastUpdated, now);
+
+        // 如果日期在 7 天之内,显示中文星期几
+        if (daysDiff <= 7) {
+            // 使用 Locale.CHINESE 进行格式化,显示中文星期几
+            DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.SIMPLIFIED_CHINESE);
+            return lastUpdated.format(dayFormatter); // 返回中文星期几,例如 星期一, 星期二
+        } else {
+            // 超过 7 天,显示完整的日期时间格式
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            return lastUpdated.format(formatter);
+        }
+    }
+}

+ 44 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDeviceAddParam.java

@@ -0,0 +1,44 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/17 22:30:15
+ */
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppDeviceAddParam {
+    /**
+     * 传感器路数
+     */
+    @Schema(description = "传感器路数")
+    @NotNull(message = "传感器路数不能为空")
+    @Size(min = 1, max = 4, message = "传感器路数必须在 1 到 4 之间")
+    private Integer sensorCount;
+
+    /**
+     * 设备编码
+     */
+    @Schema(description = "设备编码")
+    @NotNull(message = "设备编码不能为空")
+    private String deviceCode;
+
+    /**
+     * 设备型号
+     */
+    @Schema(description = "设备型号")
+    @NotNull(message = "设备型号不能为空")
+    private String modelName;
+}

+ 28 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDeviceData.java

@@ -0,0 +1,28 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/17 22:39:49
+ */
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppDeviceData {
+    private String deviceCode;          // 设备唯一标识符
+    private LocalDateTime timestamp;    // 数据记录的时间
+    private Double temperature;         // 设备温度 (℃)
+    private Double humidity;            // 设备湿度 (%)
+    private Double co2Level;            // 二氧化碳浓度 (ppm)
+    private Double batteryPercentage;   // 电池电量 (%)
+    private String deviceName;          // 设备名称
+}

+ 32 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AppDeviceQueryParams.java

@@ -0,0 +1,32 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/17 22:38:25
+ */
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class AppDeviceQueryParams {
+    private LocalDateTime startTime;     // 查询开始时间
+    private LocalDateTime endTime;       // 查询结束时间
+    private Double minTemperature;       // 最低温度
+    private Double maxTemperature;       // 最高温度
+    private Double minHumidity;          // 最低湿度
+    private Double maxHumidity;          // 最高湿度
+    private Double minCo2Level;          // 最低二氧化碳浓度
+    private Double maxCo2Level;          // 最高二氧化碳浓度
+    private Metric metric;  // 使用 Metric 枚举
+
+    public void validate() {
+        if (startTime != null && endTime != null && startTime.isAfter(endTime)) {
+            throw new IllegalArgumentException("Start time cannot be after end time.");
+        }
+    }
+}

+ 30 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/Message.java

@@ -0,0 +1,30 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class Message {
+
+    private Long id;
+    private MessageType type;      // 消息类型
+    private String title;          // 消息标题
+    private String content;        // 消息内容
+    private boolean read;          // 是否已读
+    private String createdBy;      // 创建人
+    private LocalDateTime createdDate;  // 消息创建时间
+
+    // 构造函数、getter、setter
+    public Message(Long id, MessageType type, String title, String content, boolean read, String createdBy, LocalDateTime createdDate) {
+        this.id = id;
+        this.type = type;
+        this.title = title;
+        this.content = content;
+        this.read = read;
+        this.createdBy = createdBy;
+        this.createdDate = createdDate;
+    }
+
+    // Getters and Setters
+}

+ 13 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/MessageType.java

@@ -0,0 +1,13 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/18 09:37:24
+ */
+public enum MessageType {
+    SYSTEM,  // 系统消息
+    ALERT    // 预警消息
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/Metric.java

@@ -0,0 +1,35 @@
+package vip.xiaonuo.coldchain.modular.app.param;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/17 22:56:52
+ */
+
+public enum Metric {
+    TEMPERATURE("temperature"),
+    HUMIDITY("humidity"),
+    CO2_LEVEL("co2Level");
+
+    private final String value;
+
+    Metric(String value) {
+        this.value = value;
+    }
+
+    // 根据字符串获取枚举实例
+    public static Metric fromString(String value) {
+        for (Metric metric : Metric.values()) {
+            if (metric.getValue().equalsIgnoreCase(value)) {
+                return metric;
+            }
+        }
+        throw new IllegalArgumentException("Invalid metric value: " + value);
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

+ 95 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/AppDeviceService.java

@@ -0,0 +1,95 @@
+package vip.xiaonuo.coldchain.modular.app.service;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/17 22:30:41
+ */
+
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.coldchain.modular.app.param.AppDevice;
+import vip.xiaonuo.coldchain.modular.app.param.AppDeviceAddParam;
+import vip.xiaonuo.coldchain.modular.app.param.AppDeviceData;
+import vip.xiaonuo.coldchain.modular.app.param.AppDeviceQueryParams;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class AppDeviceService {
+
+    public List<AppDevice> getAllDevices() {
+        List<AppDevice> appDevices = new ArrayList<>();
+        // 示例设备数据
+        appDevices.add(new AppDevice("Device A", 80.5, 31.4, LocalDateTime.now().minusDays(1), 75)); // 1天前
+        appDevices.add(new AppDevice("Device B", 90.2, 25.0, LocalDateTime.now().minusDays(5), 85)); // 5天前
+        appDevices.add(new AppDevice("Device C", 65.75, 28.5, LocalDateTime.now().minusDays(10), 70)); // 10天前
+        return appDevices;
+    }
+
+    // 模拟设备保存操作,实际应用中可能会是数据库操作
+    public boolean addDevice(AppDeviceAddParam device) {
+        System.out.println("设备已添加:" + device);
+        return true; // 假设设备保存成功
+    }
+
+    // 查询设备数据的方法
+    public List<AppDeviceData> getDeviceData(AppDeviceQueryParams appDeviceQueryParams, String deviceCode) {
+        // 模拟的设备数据列表,添加了 deviceCode
+        List<AppDeviceData> appDeviceDataList = new ArrayList<>();
+        appDeviceDataList.add(new AppDeviceData("DEVICE001", LocalDateTime.parse("2023-03-18T14:00:40"), 21.0, 60.0, 400.0, 85.0, "Device A"));
+        appDeviceDataList.add(new AppDeviceData("DEVICE002", LocalDateTime.parse("2023-03-20T10:15:30"), 18.5, 65.0, 420.0, 75.0, "Device B"));
+        appDeviceDataList.add(new AppDeviceData("DEVICE001", LocalDateTime.parse("2023-03-25T12:30:00"), 19.2, 63.0, 410.0, 80.0, "Device A"));
+        appDeviceDataList.add(new AppDeviceData("DEVICE003", LocalDateTime.parse("2023-03-28T13:45:10"), 22.5, 55.0, 450.0, 90.0, "Device C"));
+
+        List<AppDeviceData> filteredData = new ArrayList<>();
+        for (AppDeviceData data : appDeviceDataList) {
+            boolean matches = true;
+
+            // 时间范围过滤
+            if (appDeviceQueryParams.getStartTime() != null && data.getTimestamp().isBefore(appDeviceQueryParams.getStartTime())) {
+                matches = false;
+            }
+            if (appDeviceQueryParams.getEndTime() != null && data.getTimestamp().isAfter(appDeviceQueryParams.getEndTime())) {
+                matches = false;
+            }
+
+            // 温度范围过滤
+            if (appDeviceQueryParams.getMinTemperature() != null && data.getTemperature() < appDeviceQueryParams.getMinTemperature()) {
+                matches = false;
+            }
+            if (appDeviceQueryParams.getMaxTemperature() != null && data.getTemperature() > appDeviceQueryParams.getMaxTemperature()) {
+                matches = false;
+            }
+
+            // 湿度范围过滤
+            if (appDeviceQueryParams.getMinHumidity() != null && data.getHumidity() < appDeviceQueryParams.getMinHumidity()) {
+                matches = false;
+            }
+            if (appDeviceQueryParams.getMaxHumidity() != null && data.getHumidity() > appDeviceQueryParams.getMaxHumidity()) {
+                matches = false;
+            }
+
+            // 二氧化碳浓度范围过滤
+            if (appDeviceQueryParams.getMinCo2Level() != null && data.getCo2Level() < appDeviceQueryParams.getMinCo2Level()) {
+                matches = false;
+            }
+            if (appDeviceQueryParams.getMaxCo2Level() != null && data.getCo2Level() > appDeviceQueryParams.getMaxCo2Level()) {
+                matches = false;
+            }
+
+            // 设备编码过滤
+            if (deviceCode != null && !deviceCode.equals(data.getDeviceCode())) {
+                matches = false;
+            }
+
+            if (matches) {
+                filteredData.add(data);
+            }
+        }
+        return filteredData;
+    }
+}

+ 66 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/MessageService.java

@@ -0,0 +1,66 @@
+package vip.xiaonuo.coldchain.modular.app.service;
+
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.coldchain.modular.app.param.Message;
+import vip.xiaonuo.coldchain.modular.app.param.MessageType;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class MessageService {
+
+    private List<Message> messageList;  // 存储所有的消息
+
+    // 构造函数,初始化假数据
+    public MessageService() {
+        this.messageList = new ArrayList<>();
+        generateMockData();
+    }
+
+    // 生成一些假数据
+    private void generateMockData() {
+        messageList.add(new Message(1L, MessageType.SYSTEM, "系统消息1", "这是一个系统消息", false, "admin", LocalDateTime.now().minusDays(1)));
+        messageList.add(new Message(2L, MessageType.SYSTEM, "系统消息2", "这是另一个系统消息", true, "admin", LocalDateTime.now().minusDays(2)));
+        messageList.add(new Message(3L, MessageType.ALERT, "预警消息1", "这是一个预警消息", false, "admin", LocalDateTime.now().minusHours(5)));
+        messageList.add(new Message(4L, MessageType.ALERT, "预警消息2", "这是另一个预警消息", false, "user1", LocalDateTime.now().minusDays(3)));
+        messageList.add(new Message(5L, MessageType.SYSTEM, "系统消息3", "这是最新的系统消息", false, "user2", LocalDateTime.now().minusHours(10)));
+    }
+
+    // 获取未读消息的总数
+    public Map<String, Long> getUnreadMessagesCount() {
+        long unreadSystemMessages = messageList.stream()
+                .filter(m -> m.getType() == MessageType.SYSTEM && !m.isRead())
+                .count();
+
+        long unreadAlertMessages = messageList.stream()
+                .filter(m -> m.getType() == MessageType.ALERT && !m.isRead())
+                .count();
+
+        Map<String, Long> countMap = new HashMap<>();
+        countMap.put("system", unreadSystemMessages);
+        countMap.put("alert", unreadAlertMessages);
+
+        return countMap;
+    }
+
+    // 获取消息分页列表
+    public List<Message> getMessages(MessageType type, int page, int size) {
+        return messageList.stream()
+                .filter(m -> m.getType() == type)
+                .sorted(Comparator.comparing(Message::getCreatedDate).reversed()) // 按创建时间降序
+                .skip(page * size)
+                .limit(size)
+                .collect(Collectors.toList());
+    }
+
+    // 批量设置消息为已读
+    public void markMessagesAsRead(List<Long> messageIds) {
+        for (Message message : messageList) {
+            if (messageIds.contains(message.getId())) {
+                message.setRead(true);
+            }
+        }
+    }
+}

+ 0 - 30
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RKService.java

@@ -1,30 +0,0 @@
-package vip.xiaonuo.coldchain.modular.core.renke;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Component;
-import rk.netDevice.sdk.p2.ParamIdsData;
-import rk.netDevice.sdk.p2.RSServer;
-import vip.xiaonuo.coldchain.modular.core.renke.listener.JfcloudColdChainRenKeDefaultDataListener;
-
-/**
- * @author jackzhou
- * @version 1.0
- * @project jfcloud-coldchain
- * @description
- * @date 2024/11/1 16:23:41
- */
-@Component
-@RequiredArgsConstructor
-public class RKService {
-    private final RSServer rsServer;
-
-    public void test() {
-        boolean b = rsServer.callParamList(30067080);
-    }
-
-    public void paramIdsData() {
-        ParamIdsData paramIdsData = JfcloudColdChainRenKeDefaultDataListener.paramIdsData;
-        rsServer.callParam(30067080, paramIdsData.getPararmIdList());
-    }
-
-}

+ 0 - 96
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RenKeTest.java

@@ -1,96 +0,0 @@
-package vip.xiaonuo.coldchain.modular.core.renke;
-
-import rk.netDevice.sdk.p2.*;
-
-import java.util.Date;
-
-/**
- * @author jackzhou
- * @version 1.0
- * @project jfcloud-coldchain
- * @description
- * @date 2024/11/1 13:55:44
- */
-public class RenKeTest {
-
-    public static void main(String[] args) throws InterruptedException {
-
-        RSServer rsServer;
-        rsServer = RSServer.Initiate(2404);
-
-        final Integer[] deviceIds = new Integer[2];
-
-        rsServer.addDataListener(new IDataListener() {
-            @Override
-            public void receiveTimmingAck(TimmingAck data) {
-                // TODO 校时指令应答处理
-                deviceIds[0] = data.getDeviceId();
-            }
-            @Override
-            public void receiveTelecontrolAck(TelecontrolAck data) {
-                // TODO 遥控指令应答处理
-            }
-            @Override
-            public void receiveStoreData(StoreData data) {
-                // TODO 已存储数据接收处理
-                System.out.println("已存储数据接收处理:"+data.getDeviceId());
-                for (NodeData nodeData : data.getNodeList()) {
-                    System.out.println(nodeData.getRecordTime()+"  : "+nodeData.getTem() + "  : "+nodeData.getHum());
-                }
-            }
-            @Override
-            public void receiveRealtimeData(RealTimeData data) {
-                System.out.println(new Date().toLocaleString()+" "+data.getCoordinateType()+"实时数据接收处理:"+data.getRelayStatus()+"  "+data.getLat()+","+data.getLng() +data.getDeviceId());
-                // TODO 实时数据接收处理
-                for (NodeData nodeData : data.getNodeList()) {
-                    System.out.println(nodeData.getRecordTime()+"  : "+nodeData.getTem() + "  : "+nodeData.getHum() +" time: "+nodeData.getRecordTime());
-                }
-            }
-            @Override
-            public void receiveLoginData(LoginData data) {
-                // TODO 设备登录处理
-                deviceIds[0] = data.getDeviceId();
-            }
-            @Override
-            public void receiveParamIds(ParamIdsData data) {
-                // TODO 设备参数编号接收处理
-            }
-
-            @Override
-            public void receiveParam(ParamData data) {
-                // TODO 设备参数接收处理
-                System.out.println("设备参数接收处理");
-            }
-            @Override
-            public void receiveWriteParamAck(WriteParamAck data) {
-                // TODO 下载参数后设备应答处理
-                System.out.println("下载参数后设备应答处理");
-            }
-            @Override
-            public void receiveTransDataAck(TransDataAck data) {
-                // TODO
-                System.out.println("透传数据后设备应答处理");
-
-            }
-
-            @Override
-            public void receiveHeartbeatData(HeartbeatData heartbeatData) {
-                System.out.println("心跳包:"+heartbeatData.getDeviceId());
-
-            }
-        });
-        rsServer.start();
-        while (true){
-            Thread.sleep(1000);
-        }
-//
-//        System.out.println(rsServer.telecontrol(30067080, 5, 1, 0));
-//
-//        System.out.println(deviceIds[0]);
-//
-//        System.out.println(rsServer.callStoreData(30067080));
-//
-//        rsServer.stop();
-    }
-}
-

+ 0 - 15
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainConstants.java

@@ -1,15 +0,0 @@
-package vip.xiaonuo.coldchain.modular.core.renke.config;
-
-/**
- * @author jackzhou
- * @version 1.0
- * @project jfcloud-coldchain
- * @description
- * @date 2024/11/1 15:02:07
- */
-public interface JfcloudColdChainConstants {
-    /**
-     * TCP 服务端口
-     */
-    Integer SERVER_PORT = 40404;
-}

+ 28 - 28
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java

@@ -14,34 +14,34 @@ package vip.xiaonuo.coldchain.modular.monitordevice.controller;
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
 
 
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 监控设备管理控制器
+ * 采集器管理控制器
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  */
  */
-@Tag(name = "监控设备管理控制器")
+@Tag(name = "采集器管理控制器")
 @RestController
 @RestController
 @Validated
 @Validated
 public class MonitorDeviceController {
 public class MonitorDeviceController {
@@ -50,12 +50,12 @@ public class MonitorDeviceController {
     private MonitorDeviceService monitorDeviceService;
     private MonitorDeviceService monitorDeviceService;
 
 
     /**
     /**
-     * 获取监控设备管理分页
+     * 获取采集器管理分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
-    @Operation(summary = "获取监控设备管理分页")
+    @Operation(summary = "获取采集器管理分页")
     @SaCheckPermission("/coldchain/monitordevice/page")
     @SaCheckPermission("/coldchain/monitordevice/page")
     @GetMapping("/coldchain/monitordevice/page")
     @GetMapping("/coldchain/monitordevice/page")
     public CommonResult<Page<MonitorDevice>> page(MonitorDevicePageParam monitorDevicePageParam) {
     public CommonResult<Page<MonitorDevice>> page(MonitorDevicePageParam monitorDevicePageParam) {
@@ -63,13 +63,13 @@ public class MonitorDeviceController {
     }
     }
 
 
     /**
     /**
-     * 添加监控设备管理
+     * 添加采集器管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
-    @Operation(summary = "添加监控设备管理")
-    @CommonLog("添加监控设备管理")
+    @Operation(summary = "添加采集器管理")
+    @CommonLog("添加采集器管理")
     @SaCheckPermission("/coldchain/monitordevice/add")
     @SaCheckPermission("/coldchain/monitordevice/add")
     @PostMapping("/coldchain/monitordevice/add")
     @PostMapping("/coldchain/monitordevice/add")
     public CommonResult<String> add(@RequestBody @Valid MonitorDeviceAddParam monitorDeviceAddParam) {
     public CommonResult<String> add(@RequestBody @Valid MonitorDeviceAddParam monitorDeviceAddParam) {
@@ -78,13 +78,13 @@ public class MonitorDeviceController {
     }
     }
 
 
     /**
     /**
-     * 编辑监控设备管理
+     * 编辑采集器管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
-    @Operation(summary = "编辑监控设备管理")
-    @CommonLog("编辑监控设备管理")
+    @Operation(summary = "编辑采集器管理")
+    @CommonLog("编辑采集器管理")
     @SaCheckPermission("/coldchain/monitordevice/edit")
     @SaCheckPermission("/coldchain/monitordevice/edit")
     @PostMapping("/coldchain/monitordevice/edit")
     @PostMapping("/coldchain/monitordevice/edit")
     public CommonResult<String> edit(@RequestBody @Valid MonitorDeviceEditParam monitorDeviceEditParam) {
     public CommonResult<String> edit(@RequestBody @Valid MonitorDeviceEditParam monitorDeviceEditParam) {
@@ -93,28 +93,28 @@ public class MonitorDeviceController {
     }
     }
 
 
     /**
     /**
-     * 删除监控设备管理
+     * 删除采集器管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
-    @Operation(summary = "删除监控设备管理")
-    @CommonLog("删除监控设备管理")
+    @Operation(summary = "删除采集器管理")
+    @CommonLog("删除采集器管理")
     @SaCheckPermission("/coldchain/monitordevice/delete")
     @SaCheckPermission("/coldchain/monitordevice/delete")
     @PostMapping("/coldchain/monitordevice/delete")
     @PostMapping("/coldchain/monitordevice/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   List<MonitorDeviceIdParam> monitorDeviceIdParamList) {
+                                       List<MonitorDeviceIdParam> monitorDeviceIdParamList) {
         monitorDeviceService.delete(monitorDeviceIdParamList);
         monitorDeviceService.delete(monitorDeviceIdParamList);
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
 
 
     /**
     /**
-     * 获取监控设备管理详情
+     * 获取采集器管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
-    @Operation(summary = "获取监控设备管理详情")
+    @Operation(summary = "获取采集器管理详情")
     @SaCheckPermission("/coldchain/monitordevice/detail")
     @SaCheckPermission("/coldchain/monitordevice/detail")
     @GetMapping("/coldchain/monitordevice/detail")
     @GetMapping("/coldchain/monitordevice/detail")
     public CommonResult<MonitorDevice> detail(@Valid MonitorDeviceIdParam monitorDeviceIdParam) {
     public CommonResult<MonitorDevice> detail(@Valid MonitorDeviceIdParam monitorDeviceIdParam) {

+ 83 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/ListTypeHandler.java

@@ -0,0 +1,83 @@
+package vip.xiaonuo.coldchain.modular.monitordevice.entity;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/20 16:45:56
+ */
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@MappedJdbcTypes(JdbcType.VARCHAR)
+@MappedTypes({List.class})
+public abstract class ListTypeHandler<T> extends BaseTypeHandler<List<T>> {
+
+    @Override
+    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<T> ts, JdbcType jdbcType) throws SQLException {
+        String content = CollectionUtil.isEmpty(ts) ? null : this.toJSONString(ts);
+        preparedStatement.setString(i, content);
+    }
+
+    @Override
+    public List<T> getNullableResult(ResultSet resultSet, String s) throws SQLException {
+        try {
+            return this.getListByJsonArrayString(resultSet.getString(s));
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public List<T> getNullableResult(ResultSet resultSet, int i) throws SQLException {
+        try {
+            return this.getListByJsonArrayString(resultSet.getString(i));
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public List<T> getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
+        try {
+            return this.getListByJsonArrayString(callableStatement.getString(i));
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private List<T> getListByJsonArrayString(String content) throws JsonProcessingException {
+        return StringUtils.isEmpty(content) ? new ArrayList<>() : new ObjectMapper().readValue(content, this.specificType());
+    }
+
+    protected abstract TypeReference<List<T>> specificType();
+
+    public String toJSONString(Object obj) {
+        try {
+            return null == obj ? null : JSONUtil.toJsonStr(obj);
+        } catch (Exception var2) {
+            throw new RuntimeException(var2);
+        }
+    }
+}
+
+

+ 73 - 20
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java

@@ -12,82 +12,135 @@
  */
  */
 package vip.xiaonuo.coldchain.modular.monitordevice.entity;
 package vip.xiaonuo.coldchain.modular.monitordevice.entity;
 
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
- * 监控设备管理实体
+ * 采集器管理实体
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 @TableName("monitor_device")
 @TableName("monitor_device")
 public class MonitorDevice {
 public class MonitorDevice {
 
 
-    /** 设备唯一标识符,UUID */
+    /**
+     * 设备唯一标识符,UUID
+     */
     @TableId
     @TableId
     @Schema(description = "设备唯一标识符,UUID")
     @Schema(description = "设备唯一标识符,UUID")
     private String id;
     private String id;
 
 
-    /** 设备名称 */
+    /**
+     * 设备名称
+     */
     @Schema(description = "设备名称")
     @Schema(description = "设备名称")
     private String deviceName;
     private String deviceName;
 
 
-    /** 设备编码 */
+    /**
+     * 设备编码
+     */
     @Schema(description = "设备编码")
     @Schema(description = "设备编码")
     private String deviceCode;
     private String deviceCode;
 
 
-    /** 设备型号 */
+    /**
+     * 设备型号
+     */
     @Schema(description = "设备型号")
     @Schema(description = "设备型号")
     private String modelName;
     private String modelName;
 
 
-    /** 最后心跳时间 */
+    /**
+     * 最后心跳时间
+     */
     @Schema(description = "最后心跳时间")
     @Schema(description = "最后心跳时间")
     private Date lastHeartbeatTime;
     private Date lastHeartbeatTime;
 
 
-    /** 设备状态(1:正常,2:闲置) */
+    /**
+     * 设备状态(1:正常,2:闲置)
+     */
     @Schema(description = "设备状态(1:正常,2:闲置)")
     @Schema(description = "设备状态(1:正常,2:闲置)")
-    private String status;
+    private String status = MonitorDeviceStatusEnum.NORMAL.getValue();
 
 
-    /** 传感器路数 */
+    /**
+     * 传感器路数
+     */
     @Schema(description = "传感器路数")
     @Schema(description = "传感器路数")
+    @NotNull(message = "传感器路数不能为空")
+    @Size(min = 1, max = 4, message = "传感器路数的大小必须在1到10之间")
     private Integer sensorCount;
     private Integer sensorCount;
 
 
-    /** 最近登录时间 */
+    /**
+     * 最近登录时间
+     */
     @Schema(description = "最近登录时间")
     @Schema(description = "最近登录时间")
     private Date lastLoginTime;
     private Date lastLoginTime;
 
 
-    /** 排序码 */
+    /**
+     * 排序码
+     */
     @Schema(description = "排序码")
     @Schema(description = "排序码")
     private Integer sortCode;
     private Integer sortCode;
 
 
-    /** 扩展信息 */
+    /**
+     * 扩展信息
+     */
     @Schema(description = "扩展信息")
     @Schema(description = "扩展信息")
     private String extraInfo;
     private String extraInfo;
 
 
-    /** 删除标志 */
+    /**
+     * 删除标志
+     */
     @Schema(description = "删除标志")
     @Schema(description = "删除标志")
     private String isDeleted;
     private String isDeleted;
 
 
-    /** 记录创建时间 */
+    /**
+     * 记录创建时间
+     */
     @Schema(description = "记录创建时间")
     @Schema(description = "记录创建时间")
     private Date createdAt;
     private Date createdAt;
 
 
-    /** 记录创建用户 */
+    /**
+     * 记录创建用户
+     */
     @Schema(description = "记录创建用户")
     @Schema(description = "记录创建用户")
     private String createdBy;
     private String createdBy;
 
 
-    /** 记录修改时间 */
+    /**
+     * 记录修改时间
+     */
     @Schema(description = "记录修改时间")
     @Schema(description = "记录修改时间")
     private Date updatedAt;
     private Date updatedAt;
 
 
-    /** 记录修改用户 */
+    /**
+     * 记录修改用户
+     */
     @Schema(description = "记录修改用户")
     @Schema(description = "记录修改用户")
     private String updatedBy;
     private String updatedBy;
+
+    /**
+     * 设备参数编号信息
+     */
+    @Schema(description = "设备参数编号信息")
+    @TableField(value = "param_ids")//, typeHandler = JacksonTypeHandler.class)
+//    private List<Integer> paramIds;
+    private String paramIds;
+
+    /**
+     * 设备参数信息
+     */
+    @Schema(description = "设备参数信息")
+    @TableField(value = "parameters")//, typeHandler = JacksonTypeHandler.class)
+//    private List<ParamItem> parameters;
+    private String parameters;
 }
 }

+ 60 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/DeviceModelEnum.java

@@ -0,0 +1,60 @@
+package vip.xiaonuo.coldchain.modular.monitordevice.enums;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/19 18:06:11
+ */
+
+import lombok.Getter;
+import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+
+@Getter
+public enum DeviceModelEnum {
+    // 定义所有设备的型号和名称
+    WIFI_CO2_TEMP_HUMIDITY_TRANSCEIVER(MonitorDataProcessor.RS_CO2WS_WIFI_2_5000P, "WIFI型CO2温湿度变迭器"),
+    WIFI_MULTI_PROBE_TEMP_HUMIDITY_RECORDER_1(MonitorDataProcessor.RS_WD_WIFI_6_5WL, "WIFI型超宽低温记录仪"),
+    WIFI_MULTI_PROBE_TEMP_HUMIDITY_RECORDER_2(MonitorDataProcessor.RS_WS_WIFI5_C3_Y2, "WIFI多探头温湿度变迭记录仪(2路)"),
+    WIFI_MULTI_PROBE_TEMP_HUMIDITY_RECORDER_4(MonitorDataProcessor.RS_WS_WIFI5_C3_Y4, "WIFI多探头温湿度变迭记录仪(4路)");
+
+    private final String deviceCode;  // 设备型号
+    private final String deviceName;  // 设备名称
+
+    // 构造方法
+    DeviceModelEnum(String deviceCode, String deviceName) {
+        this.deviceCode = deviceCode;
+        this.deviceName = deviceName;
+    }
+
+    /**
+     * 根据设备型号获取设备名称
+     *
+     * @param deviceCode 设备型号
+     * @return 设备名称
+     */
+    public static String getDeviceNameByCode(String deviceCode) {
+        for (DeviceModelEnum model : values()) {
+            if (model.getDeviceCode().equals(deviceCode)) {
+                return model.getDeviceName();
+            }
+        }
+        return null;  // 返回 null 或者可以抛出异常,依据业务需求
+    }
+
+    /**
+     * 根据设备名称获取设备型号
+     *
+     * @param deviceName 设备名称
+     * @return 设备型号
+     */
+    public static String getDeviceCodeByName(String deviceName) {
+        for (DeviceModelEnum model : values()) {
+            if (model.getDeviceName().equals(deviceName)) {
+                return model.getDeviceCode();
+            }
+        }
+        return null;  // 返回 null 或者可以抛出异常,依据业务需求
+    }
+}

+ 5 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/MonitorDeviceEnum.java

@@ -15,15 +15,17 @@ package vip.xiaonuo.coldchain.modular.monitordevice.enums;
 import lombok.Getter;
 import lombok.Getter;
 
 
 /**
 /**
- * 监控设备管理枚举
+ * 采集器管理枚举
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Getter
 @Getter
 public enum MonitorDeviceEnum {
 public enum MonitorDeviceEnum {
 
 
-    /** 测试 */
+    /**
+     * 测试
+     */
     TEST("TEST");
     TEST("TEST");
 
 
     private final String value;
     private final String value;

+ 33 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/MonitorDeviceStatusEnum.java

@@ -0,0 +1,33 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.enums;
+
+import lombok.Getter;
+
+/**
+ * 采集器管理枚举
+ *
+ * @author 黄渊昊
+ * @date 2024/11/13 16:55
+ **/
+@Getter
+public enum MonitorDeviceStatusEnum {
+    NORMAL("1"),
+    UNUSED("2");
+
+    private final String value;
+
+    MonitorDeviceStatusEnum(String value) {
+        this.value = value;
+    }
+}

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/MonitorDeviceMapper.java

@@ -16,10 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 
 
 /**
 /**
- * 监控设备管理Mapper接口
+ * 采集器管理Mapper接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 public interface MonitorDeviceMapper extends BaseMapper<MonitorDevice> {
 public interface MonitorDeviceMapper extends BaseMapper<MonitorDevice> {
 }
 }

+ 8 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/mapping/MonitorDeviceMapper.xml

@@ -1,5 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper">
-
+    <resultMap id="MonitorDevice" type="vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice">
+        <result column="parameters" property="parameters"
+                jdbcType="VARCHAR"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+        <result column="param_ids" property="paramIds"
+                jdbcType="VARCHAR"
+                typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+    </resultMap>
 </mapper>
 </mapper>

+ 27 - 22
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java

@@ -16,50 +16,55 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 
 
 /**
 /**
- * 监控设备管理添加参数
+ * 采集器管理添加参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceAddParam {
 public class MonitorDeviceAddParam {
-
-    /** 设备名称 */
+    /**
+     * 设备名称
+     */
     @Schema(description = "设备名称")
     @Schema(description = "设备名称")
     private String deviceName;
     private String deviceName;
 
 
-    /** 设备编码 */
+    /**
+     * 设备编码
+     */
     @Schema(description = "设备编码")
     @Schema(description = "设备编码")
+    @NotNull(message = "设备编码不能为空")
     private String deviceCode;
     private String deviceCode;
 
 
-    /** 设备型号 */
+    /**
+     * 设备型号
+     */
     @Schema(description = "设备型号")
     @Schema(description = "设备型号")
+    @NotNull(message = "设备型号不能为空")
     private String modelName;
     private String modelName;
 
 
-    /** 最后心跳时间 */
-    @Schema(description = "最后心跳时间")
-    private Date lastHeartbeatTime;
-
-    /** 设备状态(1:正常,2:闲置) */
+    /**
+     * 设备状态(1:正常,2:闲置)
+     */
     @Schema(description = "设备状态(1:正常,2:闲置)")
     @Schema(description = "设备状态(1:正常,2:闲置)")
-    private String status;
+    private String status = "1";
 
 
-    /** 传感器路数 */
+    /**
+     * 传感器路数
+     */
     @Schema(description = "传感器路数")
     @Schema(description = "传感器路数")
+    @NotNull(message = "传感器路数不能为空")
+    @Size(min = 1, max = 4, message = "传感器路数必须在 1 到 4 之间")
     private Integer sensorCount;
     private Integer sensorCount;
 
 
-    /** 最近登录时间 */
-    @Schema(description = "最近登录时间")
-    private Date lastLoginTime;
-
-    /** 排序码 */
+    /**
+     * 排序码
+     */
     @Schema(description = "排序码")
     @Schema(description = "排序码")
     private Integer sortCode;
     private Integer sortCode;
 
 

+ 30 - 21
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java

@@ -13,58 +13,67 @@
 package vip.xiaonuo.coldchain.modular.monitordevice.param;
 package vip.xiaonuo.coldchain.modular.monitordevice.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 
 
 /**
 /**
- * 监控设备管理编辑参数
+ * 采集器管理编辑参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceEditParam {
 public class MonitorDeviceEditParam {
 
 
-    /** 设备唯一标识符,UUID */
+    /**
+     * 设备唯一标识符,UUID
+     */
     @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;
 
 
-    /** 设备名称 */
+    /**
+     * 设备名称
+     */
     @Schema(description = "设备名称")
     @Schema(description = "设备名称")
     private String deviceName;
     private String deviceName;
 
 
-    /** 设备编码 */
+    /**
+     * 设备编码
+     */
     @Schema(description = "设备编码")
     @Schema(description = "设备编码")
+    @NotNull(message = "设备编码不能为空")
     private String deviceCode;
     private String deviceCode;
 
 
-    /** 设备型号 */
+    /**
+     * 设备型号
+     */
     @Schema(description = "设备型号")
     @Schema(description = "设备型号")
+    @NotNull(message = "设备型号不能为空")
     private String modelName;
     private String modelName;
 
 
-    /** 最后心跳时间 */
-    @Schema(description = "最后心跳时间")
-    private Date lastHeartbeatTime;
-
-    /** 设备状态(1:正常,2:闲置) */
+    /**
+     * 设备状态(1:正常,2:闲置)
+     */
     @Schema(description = "设备状态(1:正常,2:闲置)")
     @Schema(description = "设备状态(1:正常,2:闲置)")
     private String status;
     private String status;
 
 
-    /** 传感器路数 */
+    /**
+     * 传感器路数
+     */
     @Schema(description = "传感器路数")
     @Schema(description = "传感器路数")
+    @NotNull(message = "传感器路数不能为空")
+    @Size(min = 1, max = 4, message = "传感器路数必须在 1 到 4 之间")
     private Integer sensorCount;
     private Integer sensorCount;
 
 
-    /** 最近登录时间 */
-    @Schema(description = "最近登录时间")
-    private Date lastLoginTime;
-
-    /** 排序码 */
+    /**
+     * 排序码
+     */
     @Schema(description = "排序码")
     @Schema(description = "排序码")
     private Integer sortCode;
     private Integer sortCode;
 
 

+ 6 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceIdParam.java

@@ -13,22 +13,23 @@
 package vip.xiaonuo.coldchain.modular.monitordevice.param;
 package vip.xiaonuo.coldchain.modular.monitordevice.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-
 /**
 /**
- * 监控设备管理Id参数
+ * 采集器管理Id参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceIdParam {
 public class MonitorDeviceIdParam {
 
 
-    /** 设备唯一标识符,UUID */
+    /**
+     * 设备唯一标识符,UUID
+     */
     @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;

+ 23 - 11
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDevicePageParam.java

@@ -15,44 +15,56 @@ package vip.xiaonuo.coldchain.modular.monitordevice.param;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 
 /**
 /**
- * 监控设备管理查询参数
+ * 采集器管理查询参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDevicePageParam {
 public class MonitorDevicePageParam {
 
 
-    /** 当前页 */
+    /**
+     * 当前页
+     */
     @Schema(description = "当前页码")
     @Schema(description = "当前页码")
     private Integer current;
     private Integer current;
 
 
-    /** 每页条数 */
+    /**
+     * 每页条数
+     */
     @Schema(description = "每页条数")
     @Schema(description = "每页条数")
     private Integer size;
     private Integer size;
 
 
-    /** 排序字段 */
+    /**
+     * 排序字段
+     */
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     private String sortField;
     private String sortField;
 
 
-    /** 排序方式 */
+    /**
+     * 排序方式
+     */
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     private String sortOrder;
     private String sortOrder;
 
 
-    /** 关键词 */
+    /**
+     * 关键词
+     */
     @Schema(description = "关键词")
     @Schema(description = "关键词")
     private String searchKey;
     private String searchKey;
 
 
-    /** 设备名称 */
+    /**
+     * 设备名称
+     */
     @Schema(description = "设备名称")
     @Schema(description = "设备名称")
     private String deviceName;
     private String deviceName;
 
 
-    /** 设备编码 */
+    /**
+     * 设备编码
+     */
     @Schema(description = "设备编码")
     @Schema(description = "设备编码")
     private String deviceCode;
     private String deviceCode;
 
 

+ 21 - 14
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java

@@ -14,6 +14,8 @@ package vip.xiaonuo.coldchain.modular.monitordevice.service;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import rk.netDevice.sdk.p2.ParamData;
+import rk.netDevice.sdk.p2.ParamIdsData;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
@@ -23,58 +25,63 @@ import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 监控设备管理Service接口
+ * 采集器管理Service接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 public interface MonitorDeviceService extends IService<MonitorDevice> {
 public interface MonitorDeviceService extends IService<MonitorDevice> {
 
 
     /**
     /**
-     * 获取监控设备管理分页
+     * 获取采集器管理分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
     Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam);
     Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam);
 
 
     /**
     /**
-     * 添加监控设备管理
+     * 添加采集器管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
     void add(MonitorDeviceAddParam monitorDeviceAddParam);
     void add(MonitorDeviceAddParam monitorDeviceAddParam);
 
 
     /**
     /**
-     * 编辑监控设备管理
+     * 编辑采集器管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
     void edit(MonitorDeviceEditParam monitorDeviceEditParam);
     void edit(MonitorDeviceEditParam monitorDeviceEditParam);
 
 
     /**
     /**
-     * 删除监控设备管理
+     * 删除采集器管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
     void delete(List<MonitorDeviceIdParam> monitorDeviceIdParamList);
     void delete(List<MonitorDeviceIdParam> monitorDeviceIdParamList);
 
 
     /**
     /**
-     * 获取监控设备管理详情
+     * 获取采集器管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      */
      */
     MonitorDevice detail(MonitorDeviceIdParam monitorDeviceIdParam);
     MonitorDevice detail(MonitorDeviceIdParam monitorDeviceIdParam);
 
 
     /**
     /**
-     * 获取监控设备管理详情
+     * 获取采集器管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:55
+     * @date 2024/11/13 16:55
      **/
      **/
     MonitorDevice queryEntity(String id);
     MonitorDevice queryEntity(String id);
+
+    boolean updateParamIds(ParamIdsData data);
+
+
+    boolean updateParameters(ParamData data);
 }
 }

+ 73 - 13
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java

@@ -16,14 +16,17 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
-import vip.xiaonuo.common.exception.CommonException;
-import vip.xiaonuo.common.page.CommonPageRequest;
+import rk.netDevice.sdk.p2.ParamData;
+import rk.netDevice.sdk.p2.ParamIdsData;
+import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCache;
+import vip.xiaonuo.coldchain.core.renke.RenKeService;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper;
 import vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
@@ -31,31 +34,36 @@ import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
 
 
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 监控设备管理Service接口实现类
+ * 采集器管理Service接口实现类
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:55
+ * @date 2024/11/13 16:55
  **/
  **/
 @Service
 @Service
+@RequiredArgsConstructor
 public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, MonitorDevice> implements MonitorDeviceService {
 public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, MonitorDevice> implements MonitorDeviceService {
+    private final RenKeService renKeService;
+    private final MonitorDeviceCache monitorDeviceCache;
 
 
     @Override
     @Override
     public Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam) {
     public Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam) {
         QueryWrapper<MonitorDevice> queryWrapper = new QueryWrapper<MonitorDevice>().checkSqlInjection();
         QueryWrapper<MonitorDevice> queryWrapper = new QueryWrapper<MonitorDevice>().checkSqlInjection();
-        if(ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceName())) {
+        if (ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceName())) {
             queryWrapper.lambda().like(MonitorDevice::getDeviceName, monitorDevicePageParam.getDeviceName());
             queryWrapper.lambda().like(MonitorDevice::getDeviceName, monitorDevicePageParam.getDeviceName());
         }
         }
-        if(ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceCode())) {
+        if (ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceCode())) {
             queryWrapper.lambda().eq(MonitorDevice::getDeviceCode, monitorDevicePageParam.getDeviceCode());
             queryWrapper.lambda().eq(MonitorDevice::getDeviceCode, monitorDevicePageParam.getDeviceCode());
         }
         }
-        if(ObjectUtil.isAllNotEmpty(monitorDevicePageParam.getSortField(), monitorDevicePageParam.getSortOrder())) {
+        if (ObjectUtil.isAllNotEmpty(monitorDevicePageParam.getSortField(), monitorDevicePageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorDevicePageParam.getSortOrder());
             CommonSortOrderEnum.validate(monitorDevicePageParam.getSortOrder());
-            queryWrapper.orderBy(true, monitorDevicePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(monitorDevicePageParam.getSortField()));
+            queryWrapper.orderBy(true, monitorDevicePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorDevicePageParam.getSortField()));
         } else {
         } else {
             queryWrapper.lambda().orderByAsc(MonitorDevice::getSortCode);
             queryWrapper.lambda().orderByAsc(MonitorDevice::getSortCode);
         }
         }
@@ -65,10 +73,37 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
     public void add(MonitorDeviceAddParam monitorDeviceAddParam) {
     public void add(MonitorDeviceAddParam monitorDeviceAddParam) {
+        // 转换参数
         MonitorDevice monitorDevice = BeanUtil.toBean(monitorDeviceAddParam, MonitorDevice.class);
         MonitorDevice monitorDevice = BeanUtil.toBean(monitorDeviceAddParam, MonitorDevice.class);
-        this.save(monitorDevice);
+        // 检查设备编码是否已注册
+        if (this.getByDeviceCode(monitorDevice.getDeviceCode())) {
+            throw new CommonException("设备编码已注册使用:{}", monitorDevice.getDeviceCode());
+        }
+        // 保存设备
+        boolean save = this.save(monitorDevice);
+        // 召唤设备默认参数
+        if (save) {
+            try {
+                // 调用设备配置参数接口
+                renKeService.callParamIds(Integer.parseInt(monitorDevice.getDeviceCode()));
+            } catch (NumberFormatException e) {
+                // 如果设备编码不能解析为整数,抛出异常或记录日志
+                throw new CommonException("设备编码解析失败,无法发送配置参数。设备编码: " + monitorDevice.getDeviceCode(), e);
+            }
+        } else {
+            throw new CommonException("设备保存失败,设备编码: " + monitorDevice.getDeviceCode());
+        }
+        //缓存整形的设备编号和设备型号到缓存
+        monitorDeviceCache.cacheDevice(monitorDevice.getDeviceCode(), monitorDevice.getModelName());
     }
     }
 
 
+
+    private boolean getByDeviceCode(String deviceCode) {
+        List<MonitorDevice> devices = this.list(new QueryWrapper<MonitorDevice>().like("device_code", deviceCode));
+        return !devices.isEmpty() ? true : false;
+    }
+
+
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
     public void edit(MonitorDeviceEditParam monitorDeviceEditParam) {
     public void edit(MonitorDeviceEditParam monitorDeviceEditParam) {
@@ -92,9 +127,34 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
     @Override
     @Override
     public MonitorDevice queryEntity(String id) {
     public MonitorDevice queryEntity(String id) {
         MonitorDevice monitorDevice = this.getById(id);
         MonitorDevice monitorDevice = this.getById(id);
-        if(ObjectUtil.isEmpty(monitorDevice)) {
-            throw new CommonException("监控设备管理不存在,id值为:{}", id);
+        if (ObjectUtil.isEmpty(monitorDevice)) {
+            throw new CommonException("采集器管理不存在,id值为:{}", id);
         }
         }
         return monitorDevice;
         return monitorDevice;
     }
     }
+
+    @Override
+    public boolean updateParamIds(ParamIdsData data) {
+        int deviceId = data.getDeviceId();
+        MonitorDevice device = this.getOne(new QueryWrapper<MonitorDevice>().like("device_code", deviceId));
+        if (device != null) {
+            List<Integer> pararmIdList = data.getPararmIdList();
+            if (!pararmIdList.isEmpty()) {
+                device.setParamIds(JSONUtil.toJsonStr(pararmIdList));
+            }
+        }
+        return this.updateById(device);
+    }
+
+    @Override
+    public boolean updateParameters(ParamData data) {
+        int deviceId = data.getDeviceId();
+        MonitorDevice device = this.getOne(new QueryWrapper<MonitorDevice>().like("device_code", deviceId));
+        if (device != null && !data.getParameterList().isEmpty()) {
+            if (!data.getParameterList().isEmpty()) {
+                device.setParameters(JSONUtil.toJsonStr(data.getParameterList()));
+            }
+        }
+        return this.updateById(device);
+    }
 }
 }

+ 13 - 13
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/controller/MonitorDeviceParametersController.java

@@ -14,32 +14,32 @@ package vip.xiaonuo.coldchain.modular.monitordeviceparameters.controller;
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersEditParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersEditParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.MonitorDeviceParametersService;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.MonitorDeviceParametersService;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
 
 
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
  * 设备参数及其配置控制器
  * 设备参数及其配置控制器
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  */
  */
 @Tag(name = "设备参数及其配置控制器")
 @Tag(name = "设备参数及其配置控制器")
 @RestController
 @RestController
@@ -53,7 +53,7 @@ public class MonitorDeviceParametersController {
      * 获取设备参数及其配置分页
      * 获取设备参数及其配置分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     @Operation(summary = "获取设备参数及其配置分页")
     @Operation(summary = "获取设备参数及其配置分页")
     @SaCheckPermission("/coldchain/monitordeviceparameters/page")
     @SaCheckPermission("/coldchain/monitordeviceparameters/page")
@@ -66,7 +66,7 @@ public class MonitorDeviceParametersController {
      * 添加设备参数及其配置
      * 添加设备参数及其配置
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     @Operation(summary = "添加设备参数及其配置")
     @Operation(summary = "添加设备参数及其配置")
     @CommonLog("添加设备参数及其配置")
     @CommonLog("添加设备参数及其配置")
@@ -81,7 +81,7 @@ public class MonitorDeviceParametersController {
      * 编辑设备参数及其配置
      * 编辑设备参数及其配置
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     @Operation(summary = "编辑设备参数及其配置")
     @Operation(summary = "编辑设备参数及其配置")
     @CommonLog("编辑设备参数及其配置")
     @CommonLog("编辑设备参数及其配置")
@@ -96,14 +96,14 @@ public class MonitorDeviceParametersController {
      * 删除设备参数及其配置
      * 删除设备参数及其配置
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     @Operation(summary = "删除设备参数及其配置")
     @Operation(summary = "删除设备参数及其配置")
     @CommonLog("删除设备参数及其配置")
     @CommonLog("删除设备参数及其配置")
     @SaCheckPermission("/coldchain/monitordeviceparameters/delete")
     @SaCheckPermission("/coldchain/monitordeviceparameters/delete")
     @PostMapping("/coldchain/monitordeviceparameters/delete")
     @PostMapping("/coldchain/monitordeviceparameters/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList) {
+                                       List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList) {
         monitorDeviceParametersService.delete(monitorDeviceParametersIdParamList);
         monitorDeviceParametersService.delete(monitorDeviceParametersIdParamList);
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
@@ -112,7 +112,7 @@ public class MonitorDeviceParametersController {
      * 获取设备参数及其配置详情
      * 获取设备参数及其配置详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     @Operation(summary = "获取设备参数及其配置详情")
     @Operation(summary = "获取设备参数及其配置详情")
     @SaCheckPermission("/coldchain/monitordeviceparameters/detail")
     @SaCheckPermission("/coldchain/monitordeviceparameters/detail")

+ 41 - 16
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/entity/MonitorDeviceParameters.java

@@ -12,70 +12,95 @@
  */
  */
 package vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity;
 package vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity;
 
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
+
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
  * 设备参数及其配置实体
  * 设备参数及其配置实体
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 @TableName("monitor_device_parameters")
 @TableName("monitor_device_parameters")
 public class MonitorDeviceParameters {
 public class MonitorDeviceParameters {
 
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     @TableId
     @TableId
     @Schema(description = "主键")
     @Schema(description = "主键")
     private String id;
     private String id;
 
 
-    /** 监控设备ID */
-    @Schema(description = "监控设备ID")
+    /**
+     * 采集器ID
+     */
+    @Schema(description = "采集器ID")
     private Integer monitorDeviceId;
     private Integer monitorDeviceId;
 
 
-    /** 参数ID,每个参数的唯一标识 */
+    /**
+     * 参数ID,每个参数的唯一标识
+     */
     @Schema(description = "参数ID,每个参数的唯一标识")
     @Schema(description = "参数ID,每个参数的唯一标识")
     private Integer paramId;
     private Integer paramId;
 
 
-    /** 参数类型 */
+    /**
+     * 参数类型
+     */
     @Schema(description = "参数类型")
     @Schema(description = "参数类型")
     private String paramType;
     private String paramType;
 
 
-    /** 参数描述 */
+    /**
+     * 参数描述
+     */
     @Schema(description = "参数描述")
     @Schema(description = "参数描述")
     private String description;
     private String description;
 
 
-    /** 参数值 */
+    /**
+     * 参数值
+     */
     @Schema(description = "参数值")
     @Schema(description = "参数值")
     private String value;
     private String value;
 
 
-    /** 参数长度 */
+    /**
+     * 参数长度
+     */
     @Schema(description = "参数长度")
     @Schema(description = "参数长度")
     private Integer length;
     private Integer length;
 
 
-    /** 参数的最小值 */
+    /**
+     * 参数的最小值
+     */
     @Schema(description = "参数的最小值")
     @Schema(description = "参数的最小值")
     private Integer minValue;
     private Integer minValue;
 
 
-    /** 参数的最大值 */
+    /**
+     * 参数的最大值
+     */
     @Schema(description = "参数的最大值")
     @Schema(description = "参数的最大值")
     private Integer maxValue;
     private Integer maxValue;
 
 
-    /** 可选的值描述 */
+    /**
+     * 可选的值描述
+     */
     @Schema(description = "可选的值描述")
     @Schema(description = "可选的值描述")
     private String valueDescription;
     private String valueDescription;
 
 
-    /** 记录创建时间 */
+    /**
+     * 记录创建时间
+     */
     @Schema(description = "记录创建时间")
     @Schema(description = "记录创建时间")
     private Date createdAt;
     private Date createdAt;
 
 
-    /** 记录更新时间 */
+    /**
+     * 记录更新时间
+     */
     @Schema(description = "记录更新时间")
     @Schema(description = "记录更新时间")
     private Date updatedAt;
     private Date updatedAt;
 }
 }

+ 4 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/enums/MonitorDeviceParametersEnum.java

@@ -18,12 +18,14 @@ import lombok.Getter;
  * 设备参数及其配置枚举
  * 设备参数及其配置枚举
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Getter
 @Getter
 public enum MonitorDeviceParametersEnum {
 public enum MonitorDeviceParametersEnum {
 
 
-    /** 测试 */
+    /**
+     * 测试
+     */
     TEST("TEST");
     TEST("TEST");
 
 
     private final String value;
     private final String value;

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/MonitorDeviceParametersMapper.java

@@ -19,7 +19,7 @@ import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDevic
  * 设备参数及其配置Mapper接口
  * 设备参数及其配置Mapper接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 public interface MonitorDeviceParametersMapper extends BaseMapper<MonitorDeviceParameters> {
 public interface MonitorDeviceParametersMapper extends BaseMapper<MonitorDeviceParameters> {
 }
 }

+ 0 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/mapping/MonitorDeviceParametersMapper.xml

@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper.MonitorDeviceParametersMapper">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper.MonitorDeviceParametersMapper">
-
 </mapper>
 </mapper>

+ 29 - 16
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersAddParam.java

@@ -16,54 +16,67 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
 /**
 /**
  * 设备参数及其配置添加参数
  * 设备参数及其配置添加参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceParametersAddParam {
 public class MonitorDeviceParametersAddParam {
 
 
-    /** 监控设备ID */
-    @Schema(description = "监控设备ID")
+    /**
+     * 采集器ID
+     */
+    @Schema(description = "采集器ID")
     private Integer monitorDeviceId;
     private Integer monitorDeviceId;
 
 
-    /** 参数ID,每个参数的唯一标识 */
+    /**
+     * 参数ID,每个参数的唯一标识
+     */
     @Schema(description = "参数ID,每个参数的唯一标识")
     @Schema(description = "参数ID,每个参数的唯一标识")
     private Integer paramId;
     private Integer paramId;
 
 
-    /** 参数类型 */
+    /**
+     * 参数类型
+     */
     @Schema(description = "参数类型")
     @Schema(description = "参数类型")
     private String paramType;
     private String paramType;
 
 
-    /** 参数描述 */
+    /**
+     * 参数描述
+     */
     @Schema(description = "参数描述")
     @Schema(description = "参数描述")
     private String description;
     private String description;
 
 
-    /** 参数值 */
+    /**
+     * 参数值
+     */
     @Schema(description = "参数值")
     @Schema(description = "参数值")
     private String value;
     private String value;
 
 
-    /** 参数长度 */
+    /**
+     * 参数长度
+     */
     @Schema(description = "参数长度")
     @Schema(description = "参数长度")
     private Integer length;
     private Integer length;
 
 
-    /** 参数的最小值 */
+    /**
+     * 参数的最小值
+     */
     @Schema(description = "参数的最小值")
     @Schema(description = "参数的最小值")
     private Integer minValue;
     private Integer minValue;
 
 
-    /** 参数的最大值 */
+    /**
+     * 参数的最大值
+     */
     @Schema(description = "参数的最大值")
     @Schema(description = "参数的最大值")
     private Integer maxValue;
     private Integer maxValue;
 
 
-    /** 可选的值描述 */
+    /**
+     * 可选的值描述
+     */
     @Schema(description = "可选的值描述")
     @Schema(description = "可选的值描述")
     private String valueDescription;
     private String valueDescription;
 
 

+ 33 - 17
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersEditParam.java

@@ -13,62 +13,78 @@
 package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
 package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
 /**
 /**
  * 设备参数及其配置编辑参数
  * 设备参数及其配置编辑参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceParametersEditParam {
 public class MonitorDeviceParametersEditParam {
 
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;
 
 
-    /** 监控设备ID */
-    @Schema(description = "监控设备ID")
+    /**
+     * 采集器ID
+     */
+    @Schema(description = "采集器ID")
     private Integer monitorDeviceId;
     private Integer monitorDeviceId;
 
 
-    /** 参数ID,每个参数的唯一标识 */
+    /**
+     * 参数ID,每个参数的唯一标识
+     */
     @Schema(description = "参数ID,每个参数的唯一标识")
     @Schema(description = "参数ID,每个参数的唯一标识")
     private Integer paramId;
     private Integer paramId;
 
 
-    /** 参数类型 */
+    /**
+     * 参数类型
+     */
     @Schema(description = "参数类型")
     @Schema(description = "参数类型")
     private String paramType;
     private String paramType;
 
 
-    /** 参数描述 */
+    /**
+     * 参数描述
+     */
     @Schema(description = "参数描述")
     @Schema(description = "参数描述")
     private String description;
     private String description;
 
 
-    /** 参数值 */
+    /**
+     * 参数值
+     */
     @Schema(description = "参数值")
     @Schema(description = "参数值")
     private String value;
     private String value;
 
 
-    /** 参数长度 */
+    /**
+     * 参数长度
+     */
     @Schema(description = "参数长度")
     @Schema(description = "参数长度")
     private Integer length;
     private Integer length;
 
 
-    /** 参数的最小值 */
+    /**
+     * 参数的最小值
+     */
     @Schema(description = "参数的最小值")
     @Schema(description = "参数的最小值")
     private Integer minValue;
     private Integer minValue;
 
 
-    /** 参数的最大值 */
+    /**
+     * 参数的最大值
+     */
     @Schema(description = "参数的最大值")
     @Schema(description = "参数的最大值")
     private Integer maxValue;
     private Integer maxValue;
 
 
-    /** 可选的值描述 */
+    /**
+     * 可选的值描述
+     */
     @Schema(description = "可选的值描述")
     @Schema(description = "可选的值描述")
     private String valueDescription;
     private String valueDescription;
 
 

+ 5 - 4
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersIdParam.java

@@ -13,22 +13,23 @@
 package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
 package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-
 /**
 /**
  * 设备参数及其配置Id参数
  * 设备参数及其配置Id参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceParametersIdParam {
 public class MonitorDeviceParametersIdParam {
 
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;

+ 22 - 10
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersPageParam.java

@@ -15,44 +15,56 @@ package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 
 /**
 /**
  * 设备参数及其配置查询参数
  * 设备参数及其配置查询参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorDeviceParametersPageParam {
 public class MonitorDeviceParametersPageParam {
 
 
-    /** 当前页 */
+    /**
+     * 当前页
+     */
     @Schema(description = "当前页码")
     @Schema(description = "当前页码")
     private Integer current;
     private Integer current;
 
 
-    /** 每页条数 */
+    /**
+     * 每页条数
+     */
     @Schema(description = "每页条数")
     @Schema(description = "每页条数")
     private Integer size;
     private Integer size;
 
 
-    /** 排序字段 */
+    /**
+     * 排序字段
+     */
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     private String sortField;
     private String sortField;
 
 
-    /** 排序方式 */
+    /**
+     * 排序方式
+     */
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     private String sortOrder;
     private String sortOrder;
 
 
-    /** 关键词 */
+    /**
+     * 关键词
+     */
     @Schema(description = "关键词")
     @Schema(description = "关键词")
     private String searchKey;
     private String searchKey;
 
 
-    /** 参数类型 */
+    /**
+     * 参数类型
+     */
     @Schema(description = "参数类型")
     @Schema(description = "参数类型")
     private String paramType;
     private String paramType;
 
 
-    /** 参数值 */
+    /**
+     * 参数值
+     */
     @Schema(description = "参数值")
     @Schema(description = "参数值")
     private String value;
     private String value;
 
 

+ 7 - 7
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/MonitorDeviceParametersService.java

@@ -26,7 +26,7 @@ import java.util.List;
  * 设备参数及其配置Service接口
  * 设备参数及其配置Service接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 public interface MonitorDeviceParametersService extends IService<MonitorDeviceParameters> {
 public interface MonitorDeviceParametersService extends IService<MonitorDeviceParameters> {
 
 
@@ -34,7 +34,7 @@ public interface MonitorDeviceParametersService extends IService<MonitorDevicePa
      * 获取设备参数及其配置分页
      * 获取设备参数及其配置分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     Page<MonitorDeviceParameters> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam);
     Page<MonitorDeviceParameters> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam);
 
 
@@ -42,7 +42,7 @@ public interface MonitorDeviceParametersService extends IService<MonitorDevicePa
      * 添加设备参数及其配置
      * 添加设备参数及其配置
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     void add(MonitorDeviceParametersAddParam monitorDeviceParametersAddParam);
     void add(MonitorDeviceParametersAddParam monitorDeviceParametersAddParam);
 
 
@@ -50,7 +50,7 @@ public interface MonitorDeviceParametersService extends IService<MonitorDevicePa
      * 编辑设备参数及其配置
      * 编辑设备参数及其配置
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     void edit(MonitorDeviceParametersEditParam monitorDeviceParametersEditParam);
     void edit(MonitorDeviceParametersEditParam monitorDeviceParametersEditParam);
 
 
@@ -58,7 +58,7 @@ public interface MonitorDeviceParametersService extends IService<MonitorDevicePa
      * 删除设备参数及其配置
      * 删除设备参数及其配置
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     void delete(List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList);
     void delete(List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList);
 
 
@@ -66,7 +66,7 @@ public interface MonitorDeviceParametersService extends IService<MonitorDevicePa
      * 获取设备参数及其配置详情
      * 获取设备参数及其配置详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      */
      */
     MonitorDeviceParameters detail(MonitorDeviceParametersIdParam monitorDeviceParametersIdParam);
     MonitorDeviceParameters detail(MonitorDeviceParametersIdParam monitorDeviceParametersIdParam);
 
 
@@ -74,7 +74,7 @@ public interface MonitorDeviceParametersService extends IService<MonitorDevicePa
      * 获取设备参数及其配置详情
      * 获取设备参数及其配置详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 17:03
+     * @date 2024/11/13 17:03
      **/
      **/
     MonitorDeviceParameters queryEntity(String id);
     MonitorDeviceParameters queryEntity(String id);
 }
 }

+ 8 - 8
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/impl/MonitorDeviceParametersServiceImpl.java

@@ -21,9 +21,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
-import vip.xiaonuo.common.exception.CommonException;
-import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper.MonitorDeviceParametersMapper;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper.MonitorDeviceParametersMapper;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
@@ -31,6 +28,9 @@ import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDevice
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.MonitorDeviceParametersService;
 import vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.MonitorDeviceParametersService;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -38,7 +38,7 @@ import java.util.List;
  * 设备参数及其配置Service接口实现类
  * 设备参数及其配置Service接口实现类
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 17:03
+ * @date 2024/11/13 17:03
  **/
  **/
 @Service
 @Service
 public class MonitorDeviceParametersServiceImpl extends ServiceImpl<MonitorDeviceParametersMapper, MonitorDeviceParameters> implements MonitorDeviceParametersService {
 public class MonitorDeviceParametersServiceImpl extends ServiceImpl<MonitorDeviceParametersMapper, MonitorDeviceParameters> implements MonitorDeviceParametersService {
@@ -46,13 +46,13 @@ public class MonitorDeviceParametersServiceImpl extends ServiceImpl<MonitorDevic
     @Override
     @Override
     public Page<MonitorDeviceParameters> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam) {
     public Page<MonitorDeviceParameters> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam) {
         QueryWrapper<MonitorDeviceParameters> queryWrapper = new QueryWrapper<MonitorDeviceParameters>().checkSqlInjection();
         QueryWrapper<MonitorDeviceParameters> queryWrapper = new QueryWrapper<MonitorDeviceParameters>().checkSqlInjection();
-        if(ObjectUtil.isNotEmpty(monitorDeviceParametersPageParam.getParamType())) {
+        if (ObjectUtil.isNotEmpty(monitorDeviceParametersPageParam.getParamType())) {
             queryWrapper.lambda().eq(MonitorDeviceParameters::getParamType, monitorDeviceParametersPageParam.getParamType());
             queryWrapper.lambda().eq(MonitorDeviceParameters::getParamType, monitorDeviceParametersPageParam.getParamType());
         }
         }
-        if(ObjectUtil.isNotEmpty(monitorDeviceParametersPageParam.getValue())) {
+        if (ObjectUtil.isNotEmpty(monitorDeviceParametersPageParam.getValue())) {
             queryWrapper.lambda().like(MonitorDeviceParameters::getValue, monitorDeviceParametersPageParam.getValue());
             queryWrapper.lambda().like(MonitorDeviceParameters::getValue, monitorDeviceParametersPageParam.getValue());
         }
         }
-        if(ObjectUtil.isAllNotEmpty(monitorDeviceParametersPageParam.getSortField(), monitorDeviceParametersPageParam.getSortOrder())) {
+        if (ObjectUtil.isAllNotEmpty(monitorDeviceParametersPageParam.getSortField(), monitorDeviceParametersPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorDeviceParametersPageParam.getSortOrder());
             CommonSortOrderEnum.validate(monitorDeviceParametersPageParam.getSortOrder());
             queryWrapper.orderBy(true, monitorDeviceParametersPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
             queryWrapper.orderBy(true, monitorDeviceParametersPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
                     StrUtil.toUnderlineCase(monitorDeviceParametersPageParam.getSortField()));
                     StrUtil.toUnderlineCase(monitorDeviceParametersPageParam.getSortField()));
@@ -92,7 +92,7 @@ public class MonitorDeviceParametersServiceImpl extends ServiceImpl<MonitorDevic
     @Override
     @Override
     public MonitorDeviceParameters queryEntity(String id) {
     public MonitorDeviceParameters queryEntity(String id) {
         MonitorDeviceParameters monitorDeviceParameters = this.getById(id);
         MonitorDeviceParameters monitorDeviceParameters = this.getById(id);
-        if(ObjectUtil.isEmpty(monitorDeviceParameters)) {
+        if (ObjectUtil.isEmpty(monitorDeviceParameters)) {
             throw new CommonException("设备参数及其配置不存在,id值为:{}", id);
             throw new CommonException("设备参数及其配置不存在,id值为:{}", id);
         }
         }
         return monitorDeviceParameters;
         return monitorDeviceParameters;

+ 28 - 28
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/controller/MonitorMonitorTargetController.java

@@ -14,34 +14,34 @@ package vip.xiaonuo.coldchain.modular.monitormonitortarget.controller;
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.entity.MonitorMonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.entity.MonitorMonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetAddParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetAddParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetEditParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetEditParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.service.MonitorMonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.service.MonitorMonitorTargetService;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
 
 
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 监控设备与目标设备关系控制器
+ * 采集器与监控对象关系控制器
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  */
  */
-@Tag(name = "监控设备与目标设备关系控制器")
+@Tag(name = "采集器与监控对象关系控制器")
 @RestController
 @RestController
 @Validated
 @Validated
 public class MonitorMonitorTargetController {
 public class MonitorMonitorTargetController {
@@ -50,12 +50,12 @@ public class MonitorMonitorTargetController {
     private MonitorMonitorTargetService monitorMonitorTargetService;
     private MonitorMonitorTargetService monitorMonitorTargetService;
 
 
     /**
     /**
-     * 获取监控设备与目标设备关系分页
+     * 获取采集器与监控对象关系分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
-    @Operation(summary = "获取监控设备与目标设备关系分页")
+    @Operation(summary = "获取采集器与监控对象关系分页")
     @SaCheckPermission("/coldchain/monitormonitortarget/page")
     @SaCheckPermission("/coldchain/monitormonitortarget/page")
     @GetMapping("/coldchain/monitormonitortarget/page")
     @GetMapping("/coldchain/monitormonitortarget/page")
     public CommonResult<Page<MonitorMonitorTarget>> page(MonitorMonitorTargetPageParam monitorMonitorTargetPageParam) {
     public CommonResult<Page<MonitorMonitorTarget>> page(MonitorMonitorTargetPageParam monitorMonitorTargetPageParam) {
@@ -63,13 +63,13 @@ public class MonitorMonitorTargetController {
     }
     }
 
 
     /**
     /**
-     * 添加监控设备与目标设备关系
+     * 添加采集器与监控对象关系
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
-    @Operation(summary = "添加监控设备与目标设备关系")
-    @CommonLog("添加监控设备与目标设备关系")
+    @Operation(summary = "添加采集器与监控对象关系")
+    @CommonLog("添加采集器与监控对象关系")
     @SaCheckPermission("/coldchain/monitormonitortarget/add")
     @SaCheckPermission("/coldchain/monitormonitortarget/add")
     @PostMapping("/coldchain/monitormonitortarget/add")
     @PostMapping("/coldchain/monitormonitortarget/add")
     public CommonResult<String> add(@RequestBody @Valid MonitorMonitorTargetAddParam monitorMonitorTargetAddParam) {
     public CommonResult<String> add(@RequestBody @Valid MonitorMonitorTargetAddParam monitorMonitorTargetAddParam) {
@@ -78,13 +78,13 @@ public class MonitorMonitorTargetController {
     }
     }
 
 
     /**
     /**
-     * 编辑监控设备与目标设备关系
+     * 编辑采集器与监控对象关系
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
-    @Operation(summary = "编辑监控设备与目标设备关系")
-    @CommonLog("编辑监控设备与目标设备关系")
+    @Operation(summary = "编辑采集器与监控对象关系")
+    @CommonLog("编辑采集器与监控对象关系")
     @SaCheckPermission("/coldchain/monitormonitortarget/edit")
     @SaCheckPermission("/coldchain/monitormonitortarget/edit")
     @PostMapping("/coldchain/monitormonitortarget/edit")
     @PostMapping("/coldchain/monitormonitortarget/edit")
     public CommonResult<String> edit(@RequestBody @Valid MonitorMonitorTargetEditParam monitorMonitorTargetEditParam) {
     public CommonResult<String> edit(@RequestBody @Valid MonitorMonitorTargetEditParam monitorMonitorTargetEditParam) {
@@ -93,28 +93,28 @@ public class MonitorMonitorTargetController {
     }
     }
 
 
     /**
     /**
-     * 删除监控设备与目标设备关系
+     * 删除采集器与监控对象关系
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
-    @Operation(summary = "删除监控设备与目标设备关系")
-    @CommonLog("删除监控设备与目标设备关系")
+    @Operation(summary = "删除采集器与监控对象关系")
+    @CommonLog("删除采集器与监控对象关系")
     @SaCheckPermission("/coldchain/monitormonitortarget/delete")
     @SaCheckPermission("/coldchain/monitormonitortarget/delete")
     @PostMapping("/coldchain/monitormonitortarget/delete")
     @PostMapping("/coldchain/monitormonitortarget/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   List<MonitorMonitorTargetIdParam> monitorMonitorTargetIdParamList) {
+                                       List<MonitorMonitorTargetIdParam> monitorMonitorTargetIdParamList) {
         monitorMonitorTargetService.delete(monitorMonitorTargetIdParamList);
         monitorMonitorTargetService.delete(monitorMonitorTargetIdParamList);
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
 
 
     /**
     /**
-     * 获取监控设备与目标设备关系详情
+     * 获取采集器与监控对象关系详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
-    @Operation(summary = "获取监控设备与目标设备关系详情")
+    @Operation(summary = "获取采集器与监控对象关系详情")
     @SaCheckPermission("/coldchain/monitormonitortarget/detail")
     @SaCheckPermission("/coldchain/monitormonitortarget/detail")
     @GetMapping("/coldchain/monitormonitortarget/detail")
     @GetMapping("/coldchain/monitormonitortarget/detail")
     public CommonResult<MonitorMonitorTarget> detail(@Valid MonitorMonitorTargetIdParam monitorMonitorTargetIdParam) {
     public CommonResult<MonitorMonitorTarget> detail(@Valid MonitorMonitorTargetIdParam monitorMonitorTargetIdParam) {

+ 35 - 16
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/entity/MonitorMonitorTarget.java

@@ -12,58 +12,77 @@
  */
  */
 package vip.xiaonuo.coldchain.modular.monitormonitortarget.entity;
 package vip.xiaonuo.coldchain.modular.monitormonitortarget.entity;
 
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
+
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
- * 监控设备与目标设备关系实体
+ * 采集器与监控对象关系实体
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 @TableName("monitor_monitor_target")
 @TableName("monitor_monitor_target")
 public class MonitorMonitorTarget {
 public class MonitorMonitorTarget {
 
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     @TableId
     @TableId
     @Schema(description = "主键")
     @Schema(description = "主键")
     private String id;
     private String id;
 
 
-    /** 监控设备ID */
-    @Schema(description = "监控设备ID")
+    /**
+     * 采集器ID
+     */
+    @Schema(description = "采集器ID")
     private String monitorDeviceId;
     private String monitorDeviceId;
 
 
-    /** 目标设备ID */
-    @Schema(description = "目标设备ID")
+    /**
+     * 监控对象ID
+     */
+    @Schema(description = "监控对象ID")
     private String monitorTargetId;
     private String monitorTargetId;
 
 
-    /** 目标设备区域ID */
-    @Schema(description = "目标设备区域ID")
+    /**
+     * 监控对象区域ID
+     */
+    @Schema(description = "监控对象区域ID")
     private String monitorTargetRegionId;
     private String monitorTargetRegionId;
 
 
-    /** 传感器路数 */
+    /**
+     * 传感器路数
+     */
     @Schema(description = "传感器路数")
     @Schema(description = "传感器路数")
     private Integer sensorRoute;
     private Integer sensorRoute;
 
 
-    /** 记录创建时间 */
+    /**
+     * 记录创建时间
+     */
     @Schema(description = "记录创建时间")
     @Schema(description = "记录创建时间")
     private Date createdAt;
     private Date createdAt;
 
 
-    /** 记录创建用户 */
+    /**
+     * 记录创建用户
+     */
     @Schema(description = "记录创建用户")
     @Schema(description = "记录创建用户")
     private String createdBy;
     private String createdBy;
 
 
-    /** 记录修改时间 */
+    /**
+     * 记录修改时间
+     */
     @Schema(description = "记录修改时间")
     @Schema(description = "记录修改时间")
     private Date updatedAt;
     private Date updatedAt;
 
 
-    /** 记录修改用户 */
+    /**
+     * 记录修改用户
+     */
     @Schema(description = "记录修改用户")
     @Schema(description = "记录修改用户")
     private String updatedBy;
     private String updatedBy;
 }
 }

+ 5 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/enums/MonitorMonitorTargetEnum.java

@@ -15,15 +15,17 @@ package vip.xiaonuo.coldchain.modular.monitormonitortarget.enums;
 import lombok.Getter;
 import lombok.Getter;
 
 
 /**
 /**
- * 监控设备与目标设备关系枚举
+ * 采集器与监控对象关系枚举
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Getter
 @Getter
 public enum MonitorMonitorTargetEnum {
 public enum MonitorMonitorTargetEnum {
 
 
-    /** 测试 */
+    /**
+     * 测试
+     */
     TEST("TEST");
     TEST("TEST");
 
 
     private final String value;
     private final String value;

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/mapper/MonitorMonitorTargetMapper.java

@@ -16,10 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.entity.MonitorMonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.entity.MonitorMonitorTarget;
 
 
 /**
 /**
- * 监控设备与目标设备关系Mapper接口
+ * 采集器与监控对象关系Mapper接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 public interface MonitorMonitorTargetMapper extends BaseMapper<MonitorMonitorTarget> {
 public interface MonitorMonitorTargetMapper extends BaseMapper<MonitorMonitorTarget> {
 }
 }

+ 0 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/mapper/mapping/MonitorMonitorTargetMapper.xml

@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitormonitortarget.mapper.MonitorMonitorTargetMapper">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitormonitortarget.mapper.MonitorMonitorTargetMapper">
-
 </mapper>
 </mapper>

+ 29 - 16
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetAddParam.java

@@ -16,50 +16,63 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
- * 监控设备与目标设备关系添加参数
+ * 采集器与监控对象关系添加参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorMonitorTargetAddParam {
 public class MonitorMonitorTargetAddParam {
 
 
-    /** 监控设备ID */
-    @Schema(description = "监控设备ID")
+    /**
+     * 采集器ID
+     */
+    @Schema(description = "采集器ID")
     private String monitorDeviceId;
     private String monitorDeviceId;
 
 
-    /** 目标设备ID */
-    @Schema(description = "目标设备ID")
+    /**
+     * 监控对象ID
+     */
+    @Schema(description = "监控对象ID")
     private String monitorTargetId;
     private String monitorTargetId;
 
 
-    /** 目标设备区域ID */
-    @Schema(description = "目标设备区域ID")
+    /**
+     * 监控对象区域ID
+     */
+    @Schema(description = "监控对象区域ID")
     private String monitorTargetRegionId;
     private String monitorTargetRegionId;
 
 
-    /** 传感器路数 */
+    /**
+     * 传感器路数
+     */
     @Schema(description = "传感器路数")
     @Schema(description = "传感器路数")
     private Integer sensorRoute;
     private Integer sensorRoute;
 
 
-    /** 记录创建时间 */
+    /**
+     * 记录创建时间
+     */
     @Schema(description = "记录创建时间")
     @Schema(description = "记录创建时间")
     private Date createdAt;
     private Date createdAt;
 
 
-    /** 记录创建用户 */
+    /**
+     * 记录创建用户
+     */
     @Schema(description = "记录创建用户")
     @Schema(description = "记录创建用户")
     private String createdBy;
     private String createdBy;
 
 
-    /** 记录修改时间 */
+    /**
+     * 记录修改时间
+     */
     @Schema(description = "记录修改时间")
     @Schema(description = "记录修改时间")
     private Date updatedAt;
     private Date updatedAt;
 
 
-    /** 记录修改用户 */
+    /**
+     * 记录修改用户
+     */
     @Schema(description = "记录修改用户")
     @Schema(description = "记录修改用户")
     private String updatedBy;
     private String updatedBy;
 
 

+ 33 - 17
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetEditParam.java

@@ -13,58 +13,74 @@
 package vip.xiaonuo.coldchain.modular.monitormonitortarget.param;
 package vip.xiaonuo.coldchain.modular.monitormonitortarget.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
 
 
 /**
 /**
- * 监控设备与目标设备关系编辑参数
+ * 采集器与监控对象关系编辑参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorMonitorTargetEditParam {
 public class MonitorMonitorTargetEditParam {
 
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;
 
 
-    /** 监控设备ID */
-    @Schema(description = "监控设备ID")
+    /**
+     * 采集器ID
+     */
+    @Schema(description = "采集器ID")
     private String monitorDeviceId;
     private String monitorDeviceId;
 
 
-    /** 目标设备ID */
-    @Schema(description = "目标设备ID")
+    /**
+     * 监控对象ID
+     */
+    @Schema(description = "监控对象ID")
     private String monitorTargetId;
     private String monitorTargetId;
 
 
-    /** 目标设备区域ID */
-    @Schema(description = "目标设备区域ID")
+    /**
+     * 监控对象区域ID
+     */
+    @Schema(description = "监控对象区域ID")
     private String monitorTargetRegionId;
     private String monitorTargetRegionId;
 
 
-    /** 传感器路数 */
+    /**
+     * 传感器路数
+     */
     @Schema(description = "传感器路数")
     @Schema(description = "传感器路数")
     private Integer sensorRoute;
     private Integer sensorRoute;
 
 
-    /** 记录创建时间 */
+    /**
+     * 记录创建时间
+     */
     @Schema(description = "记录创建时间")
     @Schema(description = "记录创建时间")
     private Date createdAt;
     private Date createdAt;
 
 
-    /** 记录创建用户 */
+    /**
+     * 记录创建用户
+     */
     @Schema(description = "记录创建用户")
     @Schema(description = "记录创建用户")
     private String createdBy;
     private String createdBy;
 
 
-    /** 记录修改时间 */
+    /**
+     * 记录修改时间
+     */
     @Schema(description = "记录修改时间")
     @Schema(description = "记录修改时间")
     private Date updatedAt;
     private Date updatedAt;
 
 
-    /** 记录修改用户 */
+    /**
+     * 记录修改用户
+     */
     @Schema(description = "记录修改用户")
     @Schema(description = "记录修改用户")
     private String updatedBy;
     private String updatedBy;
 
 

+ 6 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetIdParam.java

@@ -13,22 +13,23 @@
 package vip.xiaonuo.coldchain.modular.monitormonitortarget.param;
 package vip.xiaonuo.coldchain.modular.monitormonitortarget.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-
 /**
 /**
- * 监控设备与目标设备关系Id参数
+ * 采集器与监控对象关系Id参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorMonitorTargetIdParam {
 public class MonitorMonitorTargetIdParam {
 
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;

+ 17 - 9
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/param/MonitorMonitorTargetPageParam.java

@@ -15,36 +15,44 @@ package vip.xiaonuo.coldchain.modular.monitormonitortarget.param;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 
 /**
 /**
- * 监控设备与目标设备关系查询参数
+ * 采集器与监控对象关系查询参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorMonitorTargetPageParam {
 public class MonitorMonitorTargetPageParam {
 
 
-    /** 当前页 */
+    /**
+     * 当前页
+     */
     @Schema(description = "当前页码")
     @Schema(description = "当前页码")
     private Integer current;
     private Integer current;
 
 
-    /** 每页条数 */
+    /**
+     * 每页条数
+     */
     @Schema(description = "每页条数")
     @Schema(description = "每页条数")
     private Integer size;
     private Integer size;
 
 
-    /** 排序字段 */
+    /**
+     * 排序字段
+     */
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     private String sortField;
     private String sortField;
 
 
-    /** 排序方式 */
+    /**
+     * 排序方式
+     */
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     private String sortOrder;
     private String sortOrder;
 
 
-    /** 关键词 */
+    /**
+     * 关键词
+     */
     @Schema(description = "关键词")
     @Schema(description = "关键词")
     private String searchKey;
     private String searchKey;
 
 

+ 14 - 14
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/service/MonitorMonitorTargetService.java

@@ -23,58 +23,58 @@ import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTa
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 监控设备与目标设备关系Service接口
+ * 采集器与监控对象关系Service接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 public interface MonitorMonitorTargetService extends IService<MonitorMonitorTarget> {
 public interface MonitorMonitorTargetService extends IService<MonitorMonitorTarget> {
 
 
     /**
     /**
-     * 获取监控设备与目标设备关系分页
+     * 获取采集器与监控对象关系分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
     Page<MonitorMonitorTarget> page(MonitorMonitorTargetPageParam monitorMonitorTargetPageParam);
     Page<MonitorMonitorTarget> page(MonitorMonitorTargetPageParam monitorMonitorTargetPageParam);
 
 
     /**
     /**
-     * 添加监控设备与目标设备关系
+     * 添加采集器与监控对象关系
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
     void add(MonitorMonitorTargetAddParam monitorMonitorTargetAddParam);
     void add(MonitorMonitorTargetAddParam monitorMonitorTargetAddParam);
 
 
     /**
     /**
-     * 编辑监控设备与目标设备关系
+     * 编辑采集器与监控对象关系
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
     void edit(MonitorMonitorTargetEditParam monitorMonitorTargetEditParam);
     void edit(MonitorMonitorTargetEditParam monitorMonitorTargetEditParam);
 
 
     /**
     /**
-     * 删除监控设备与目标设备关系
+     * 删除采集器与监控对象关系
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
     void delete(List<MonitorMonitorTargetIdParam> monitorMonitorTargetIdParamList);
     void delete(List<MonitorMonitorTargetIdParam> monitorMonitorTargetIdParamList);
 
 
     /**
     /**
-     * 获取监控设备与目标设备关系详情
+     * 获取采集器与监控对象关系详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      */
      */
     MonitorMonitorTarget detail(MonitorMonitorTargetIdParam monitorMonitorTargetIdParam);
     MonitorMonitorTarget detail(MonitorMonitorTargetIdParam monitorMonitorTargetIdParam);
 
 
     /**
     /**
-     * 获取监控设备与目标设备关系详情
+     * 获取采集器与监控对象关系详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/15 10:45
+     * @date 2024/11/15 10:45
      **/
      **/
     MonitorMonitorTarget queryEntity(String id);
     MonitorMonitorTarget queryEntity(String id);
 }
 }

+ 8 - 8
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitormonitortarget/service/impl/MonitorMonitorTargetServiceImpl.java

@@ -21,9 +21,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
-import vip.xiaonuo.common.exception.CommonException;
-import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.entity.MonitorMonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.entity.MonitorMonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.mapper.MonitorMonitorTargetMapper;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.mapper.MonitorMonitorTargetMapper;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetAddParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetAddParam;
@@ -31,14 +28,17 @@ import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTa
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.param.MonitorMonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.service.MonitorMonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitormonitortarget.service.MonitorMonitorTargetService;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
 
 
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 监控设备与目标设备关系Service接口实现类
+ * 采集器与监控对象关系Service接口实现类
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/15 10:45
+ * @date 2024/11/15 10:45
  **/
  **/
 @Service
 @Service
 public class MonitorMonitorTargetServiceImpl extends ServiceImpl<MonitorMonitorTargetMapper, MonitorMonitorTarget> implements MonitorMonitorTargetService {
 public class MonitorMonitorTargetServiceImpl extends ServiceImpl<MonitorMonitorTargetMapper, MonitorMonitorTarget> implements MonitorMonitorTargetService {
@@ -46,7 +46,7 @@ public class MonitorMonitorTargetServiceImpl extends ServiceImpl<MonitorMonitorT
     @Override
     @Override
     public Page<MonitorMonitorTarget> page(MonitorMonitorTargetPageParam monitorMonitorTargetPageParam) {
     public Page<MonitorMonitorTarget> page(MonitorMonitorTargetPageParam monitorMonitorTargetPageParam) {
         QueryWrapper<MonitorMonitorTarget> queryWrapper = new QueryWrapper<MonitorMonitorTarget>().checkSqlInjection();
         QueryWrapper<MonitorMonitorTarget> queryWrapper = new QueryWrapper<MonitorMonitorTarget>().checkSqlInjection();
-        if(ObjectUtil.isAllNotEmpty(monitorMonitorTargetPageParam.getSortField(), monitorMonitorTargetPageParam.getSortOrder())) {
+        if (ObjectUtil.isAllNotEmpty(monitorMonitorTargetPageParam.getSortField(), monitorMonitorTargetPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorMonitorTargetPageParam.getSortOrder());
             CommonSortOrderEnum.validate(monitorMonitorTargetPageParam.getSortOrder());
             queryWrapper.orderBy(true, monitorMonitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
             queryWrapper.orderBy(true, monitorMonitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
                     StrUtil.toUnderlineCase(monitorMonitorTargetPageParam.getSortField()));
                     StrUtil.toUnderlineCase(monitorMonitorTargetPageParam.getSortField()));
@@ -86,8 +86,8 @@ public class MonitorMonitorTargetServiceImpl extends ServiceImpl<MonitorMonitorT
     @Override
     @Override
     public MonitorMonitorTarget queryEntity(String id) {
     public MonitorMonitorTarget queryEntity(String id) {
         MonitorMonitorTarget monitorMonitorTarget = this.getById(id);
         MonitorMonitorTarget monitorMonitorTarget = this.getById(id);
-        if(ObjectUtil.isEmpty(monitorMonitorTarget)) {
-            throw new CommonException("监控设备与目标设备关系不存在,id值为:{}", id);
+        if (ObjectUtil.isEmpty(monitorMonitorTarget)) {
+            throw new CommonException("采集器与监控对象关系不存在,id值为:{}", id);
         }
         }
         return monitorMonitorTarget;
         return monitorMonitorTarget;
     }
     }

+ 28 - 28
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java

@@ -14,34 +14,34 @@ package vip.xiaonuo.coldchain.modular.monitortarget.controller;
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
 
 
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 目标设备管理控制器
+ * 监控对象管理控制器
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  */
  */
-@Tag(name = "目标设备管理控制器")
+@Tag(name = "监控对象管理控制器")
 @RestController
 @RestController
 @Validated
 @Validated
 public class MonitorTargetController {
 public class MonitorTargetController {
@@ -50,12 +50,12 @@ public class MonitorTargetController {
     private MonitorTargetService monitorTargetService;
     private MonitorTargetService monitorTargetService;
 
 
     /**
     /**
-     * 获取目标设备管理分页
+     * 获取监控对象管理分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
-    @Operation(summary = "获取目标设备管理分页")
+    @Operation(summary = "获取监控对象管理分页")
     @SaCheckPermission("/coldchain/monitortarget/page")
     @SaCheckPermission("/coldchain/monitortarget/page")
     @GetMapping("/coldchain/monitortarget/page")
     @GetMapping("/coldchain/monitortarget/page")
     public CommonResult<Page<MonitorTarget>> page(MonitorTargetPageParam monitorTargetPageParam) {
     public CommonResult<Page<MonitorTarget>> page(MonitorTargetPageParam monitorTargetPageParam) {
@@ -63,13 +63,13 @@ public class MonitorTargetController {
     }
     }
 
 
     /**
     /**
-     * 添加目标设备管理
+     * 添加监控对象管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
-    @Operation(summary = "添加目标设备管理")
-    @CommonLog("添加目标设备管理")
+    @Operation(summary = "添加监控对象管理")
+    @CommonLog("添加监控对象管理")
     @SaCheckPermission("/coldchain/monitortarget/add")
     @SaCheckPermission("/coldchain/monitortarget/add")
     @PostMapping("/coldchain/monitortarget/add")
     @PostMapping("/coldchain/monitortarget/add")
     public CommonResult<String> add(@RequestBody @Valid MonitorTargetAddParam monitorTargetAddParam) {
     public CommonResult<String> add(@RequestBody @Valid MonitorTargetAddParam monitorTargetAddParam) {
@@ -78,13 +78,13 @@ public class MonitorTargetController {
     }
     }
 
 
     /**
     /**
-     * 编辑目标设备管理
+     * 编辑监控对象管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
-    @Operation(summary = "编辑目标设备管理")
-    @CommonLog("编辑目标设备管理")
+    @Operation(summary = "编辑监控对象管理")
+    @CommonLog("编辑监控对象管理")
     @SaCheckPermission("/coldchain/monitortarget/edit")
     @SaCheckPermission("/coldchain/monitortarget/edit")
     @PostMapping("/coldchain/monitortarget/edit")
     @PostMapping("/coldchain/monitortarget/edit")
     public CommonResult<String> edit(@RequestBody @Valid MonitorTargetEditParam monitorTargetEditParam) {
     public CommonResult<String> edit(@RequestBody @Valid MonitorTargetEditParam monitorTargetEditParam) {
@@ -93,28 +93,28 @@ public class MonitorTargetController {
     }
     }
 
 
     /**
     /**
-     * 删除目标设备管理
+     * 删除监控对象管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
-    @Operation(summary = "删除目标设备管理")
-    @CommonLog("删除目标设备管理")
+    @Operation(summary = "删除监控对象管理")
+    @CommonLog("删除监控对象管理")
     @SaCheckPermission("/coldchain/monitortarget/delete")
     @SaCheckPermission("/coldchain/monitortarget/delete")
     @PostMapping("/coldchain/monitortarget/delete")
     @PostMapping("/coldchain/monitortarget/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   List<MonitorTargetIdParam> monitorTargetIdParamList) {
+                                       List<MonitorTargetIdParam> monitorTargetIdParamList) {
         monitorTargetService.delete(monitorTargetIdParamList);
         monitorTargetService.delete(monitorTargetIdParamList);
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
 
 
     /**
     /**
-     * 获取目标设备管理详情
+     * 获取监控对象管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
-    @Operation(summary = "获取目标设备管理详情")
+    @Operation(summary = "获取监控对象管理详情")
     @SaCheckPermission("/coldchain/monitortarget/detail")
     @SaCheckPermission("/coldchain/monitortarget/detail")
     @GetMapping("/coldchain/monitortarget/detail")
     @GetMapping("/coldchain/monitortarget/detail")
     public CommonResult<MonitorTarget> detail(@Valid MonitorTargetIdParam monitorTargetIdParam) {
     public CommonResult<MonitorTarget> detail(@Valid MonitorTargetIdParam monitorTargetIdParam) {

+ 32 - 15
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java

@@ -12,58 +12,75 @@
  */
  */
 package vip.xiaonuo.coldchain.modular.monitortarget.entity;
 package vip.xiaonuo.coldchain.modular.monitortarget.entity;
 
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 
 /**
 /**
- * 目标设备管理实体
+ * 监控对象管理实体
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 @TableName("monitor_target")
 @TableName("monitor_target")
 public class MonitorTarget {
 public class MonitorTarget {
 
 
-    /** ID */
+    /**
+     * ID
+     */
     @TableId
     @TableId
     @Schema(description = "ID")
     @Schema(description = "ID")
     private String id;
     private String id;
 
 
-    /** 名称 */
+    /**
+     * 名称
+     */
     @Schema(description = "名称")
     @Schema(description = "名称")
     private String name;
     private String name;
 
 
-    /** 状态(1:正常,2:闲置) */
+    /**
+     * 状态(1:正常,2:闲置)
+     */
     @Schema(description = "状态(1:正常,2:闲置)")
     @Schema(description = "状态(1:正常,2:闲置)")
     private String status;
     private String status;
 
 
-    /** 监控位置区域 */
+    /**
+     * 监控位置区域
+     */
     @Schema(description = "监控位置区域")
     @Schema(description = "监控位置区域")
     private String monitorPoint;
     private String monitorPoint;
 
 
-    /** 传感器类型 */
+    /**
+     * 传感器类型
+     */
     @Schema(description = "传感器类型")
     @Schema(description = "传感器类型")
     private String sensorType;
     private String sensorType;
 
 
-    /** 监控设备编号 */
-    @Schema(description = "监控设备编号")
+    /**
+     * 采集器编号
+     */
+    @Schema(description = "采集器编号")
     private String monitorDeviceId;
     private String monitorDeviceId;
 
 
-    /** 冷链编号 */
+    /**
+     * 冷链编号
+     */
     @Schema(description = "冷链编号")
     @Schema(description = "冷链编号")
     private String code;
     private String code;
 
 
-    /** 报警上限 */
+    /**
+     * 报警上限
+     */
     @Schema(description = "报警上限")
     @Schema(description = "报警上限")
     private String limitUp;
     private String limitUp;
 
 
-    /** 报警下限 */
+    /**
+     * 报警下限
+     */
     @Schema(description = "报警下限")
     @Schema(description = "报警下限")
     private String limitDown;
     private String limitDown;
 }
 }

+ 5 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorTargetEnum.java

@@ -15,15 +15,17 @@ package vip.xiaonuo.coldchain.modular.monitortarget.enums;
 import lombok.Getter;
 import lombok.Getter;
 
 
 /**
 /**
- * 目标设备管理枚举
+ * 监控对象管理枚举
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Getter
 @Getter
 public enum MonitorTargetEnum {
 public enum MonitorTargetEnum {
 
 
-    /** 测试 */
+    /**
+     * 测试
+     */
     TEST("TEST");
     TEST("TEST");
 
 
     private final String value;
     private final String value;

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/MonitorTargetMapper.java

@@ -16,10 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 
 
 /**
 /**
- * 目标设备管理Mapper接口
+ * 监控对象管理Mapper接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 public interface MonitorTargetMapper extends BaseMapper<MonitorTarget> {
 public interface MonitorTargetMapper extends BaseMapper<MonitorTarget> {
 }
 }

+ 0 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/mapping/MonitorTargetMapper.xml

@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper">
 <mapper namespace="vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper">
-
 </mapper>
 </mapper>

+ 27 - 16
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java

@@ -16,50 +16,61 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
 /**
 /**
- * 目标设备管理添加参数
+ * 监控对象管理添加参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorTargetAddParam {
 public class MonitorTargetAddParam {
 
 
-    /** 名称 */
+    /**
+     * 名称
+     */
     @Schema(description = "名称")
     @Schema(description = "名称")
     private String name;
     private String name;
 
 
-    /** 状态(1:正常,2:闲置) */
+    /**
+     * 状态(1:正常,2:闲置)
+     */
     @Schema(description = "状态(1:正常,2:闲置)")
     @Schema(description = "状态(1:正常,2:闲置)")
     private String status;
     private String status;
 
 
-    /** 监控位置区域 */
+    /**
+     * 监控位置区域
+     */
     @Schema(description = "监控位置区域")
     @Schema(description = "监控位置区域")
     private String monitorPoint;
     private String monitorPoint;
 
 
-    /** 传感器类型 */
+    /**
+     * 传感器类型
+     */
     @Schema(description = "传感器类型")
     @Schema(description = "传感器类型")
     private String sensorType;
     private String sensorType;
 
 
-    /** 监控设备编号 */
-    @Schema(description = "监控设备编号")
+    /**
+     * 采集器编号
+     */
+    @Schema(description = "采集器编号")
     private String monitorDeviceId;
     private String monitorDeviceId;
 
 
-    /** 冷链编号 */
+    /**
+     * 冷链编号
+     */
     @Schema(description = "冷链编号")
     @Schema(description = "冷链编号")
     private String code;
     private String code;
 
 
-    /** 报警上限 */
+    /**
+     * 报警上限
+     */
     @Schema(description = "报警上限")
     @Schema(description = "报警上限")
     private String limitUp;
     private String limitUp;
 
 
-    /** 报警下限 */
+    /**
+     * 报警下限
+     */
     @Schema(description = "报警下限")
     @Schema(description = "报警下限")
     private String limitDown;
     private String limitDown;
 
 

+ 31 - 17
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java

@@ -13,58 +13,72 @@
 package vip.xiaonuo.coldchain.modular.monitortarget.param;
 package vip.xiaonuo.coldchain.modular.monitortarget.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
 /**
 /**
- * 目标设备管理编辑参数
+ * 监控对象管理编辑参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorTargetEditParam {
 public class MonitorTargetEditParam {
 
 
-    /** ID */
+    /**
+     * ID
+     */
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;
 
 
-    /** 名称 */
+    /**
+     * 名称
+     */
     @Schema(description = "名称")
     @Schema(description = "名称")
     private String name;
     private String name;
 
 
-    /** 状态(1:正常,2:闲置) */
+    /**
+     * 状态(1:正常,2:闲置)
+     */
     @Schema(description = "状态(1:正常,2:闲置)")
     @Schema(description = "状态(1:正常,2:闲置)")
     private String status;
     private String status;
 
 
-    /** 监控位置区域 */
+    /**
+     * 监控位置区域
+     */
     @Schema(description = "监控位置区域")
     @Schema(description = "监控位置区域")
     private String monitorPoint;
     private String monitorPoint;
 
 
-    /** 传感器类型 */
+    /**
+     * 传感器类型
+     */
     @Schema(description = "传感器类型")
     @Schema(description = "传感器类型")
     private String sensorType;
     private String sensorType;
 
 
-    /** 监控设备编号 */
-    @Schema(description = "监控设备编号")
+    /**
+     * 采集器编号
+     */
+    @Schema(description = "采集器编号")
     private String monitorDeviceId;
     private String monitorDeviceId;
 
 
-    /** 冷链编号 */
+    /**
+     * 冷链编号
+     */
     @Schema(description = "冷链编号")
     @Schema(description = "冷链编号")
     private String code;
     private String code;
 
 
-    /** 报警上限 */
+    /**
+     * 报警上限
+     */
     @Schema(description = "报警上限")
     @Schema(description = "报警上限")
     private String limitUp;
     private String limitUp;
 
 
-    /** 报警下限 */
+    /**
+     * 报警下限
+     */
     @Schema(description = "报警下限")
     @Schema(description = "报警下限")
     private String limitDown;
     private String limitDown;
 
 

+ 6 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetIdParam.java

@@ -13,22 +13,23 @@
 package vip.xiaonuo.coldchain.modular.monitortarget.param;
 package vip.xiaonuo.coldchain.modular.monitortarget.param;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import jakarta.validation.constraints.NotBlank;
-
 /**
 /**
- * 目标设备管理Id参数
+ * 监控对象管理Id参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorTargetIdParam {
 public class MonitorTargetIdParam {
 
 
-    /** ID */
+    /**
+     * ID
+     */
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "id不能为空")
     @NotBlank(message = "id不能为空")
     private String id;
     private String id;

+ 20 - 10
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java

@@ -15,40 +15,50 @@ package vip.xiaonuo.coldchain.modular.monitortarget.param;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 
 /**
 /**
- * 目标设备管理查询参数
+ * 监控对象管理查询参数
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Getter
 @Getter
 @Setter
 @Setter
 public class MonitorTargetPageParam {
 public class MonitorTargetPageParam {
 
 
-    /** 当前页 */
+    /**
+     * 当前页
+     */
     @Schema(description = "当前页码")
     @Schema(description = "当前页码")
     private Integer current;
     private Integer current;
 
 
-    /** 每页条数 */
+    /**
+     * 每页条数
+     */
     @Schema(description = "每页条数")
     @Schema(description = "每页条数")
     private Integer size;
     private Integer size;
 
 
-    /** 排序字段 */
+    /**
+     * 排序字段
+     */
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     @Schema(description = "排序字段,字段驼峰名称,如:userName")
     private String sortField;
     private String sortField;
 
 
-    /** 排序方式 */
+    /**
+     * 排序方式
+     */
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
     private String sortOrder;
     private String sortOrder;
 
 
-    /** 关键词 */
+    /**
+     * 关键词
+     */
     @Schema(description = "关键词")
     @Schema(description = "关键词")
     private String searchKey;
     private String searchKey;
 
 
-    /** 名称 */
+    /**
+     * 名称
+     */
     @Schema(description = "名称")
     @Schema(description = "名称")
     private String name;
     private String name;
 
 

+ 14 - 14
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java

@@ -23,58 +23,58 @@ import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 目标设备管理Service接口
+ * 监控对象管理Service接口
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 public interface MonitorTargetService extends IService<MonitorTarget> {
 public interface MonitorTargetService extends IService<MonitorTarget> {
 
 
     /**
     /**
-     * 获取目标设备管理分页
+     * 获取监控对象管理分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
     Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam);
     Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam);
 
 
     /**
     /**
-     * 添加目标设备管理
+     * 添加监控对象管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
     void add(MonitorTargetAddParam monitorTargetAddParam);
     void add(MonitorTargetAddParam monitorTargetAddParam);
 
 
     /**
     /**
-     * 编辑目标设备管理
+     * 编辑监控对象管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
     void edit(MonitorTargetEditParam monitorTargetEditParam);
     void edit(MonitorTargetEditParam monitorTargetEditParam);
 
 
     /**
     /**
-     * 删除目标设备管理
+     * 删除监控对象管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
     void delete(List<MonitorTargetIdParam> monitorTargetIdParamList);
     void delete(List<MonitorTargetIdParam> monitorTargetIdParamList);
 
 
     /**
     /**
-     * 获取目标设备管理详情
+     * 获取监控对象管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      */
      */
     MonitorTarget detail(MonitorTargetIdParam monitorTargetIdParam);
     MonitorTarget detail(MonitorTargetIdParam monitorTargetIdParam);
 
 
     /**
     /**
-     * 获取目标设备管理详情
+     * 获取监控对象管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:56
+     * @date 2024/11/13 16:56
      **/
      **/
     MonitorTarget queryEntity(String id);
     MonitorTarget queryEntity(String id);
 }
 }

+ 9 - 9
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java

@@ -21,9 +21,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
-import vip.xiaonuo.common.exception.CommonException;
-import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper;
 import vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
@@ -31,14 +28,17 @@ import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
 
 
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 目标设备管理Service接口实现类
+ * 监控对象管理Service接口实现类
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:56
+ * @date 2024/11/13 16:56
  **/
  **/
 @Service
 @Service
 public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, MonitorTarget> implements MonitorTargetService {
 public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, MonitorTarget> implements MonitorTargetService {
@@ -46,10 +46,10 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     @Override
     @Override
     public Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam) {
     public Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam) {
         QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
         QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
-        if(ObjectUtil.isNotEmpty(monitorTargetPageParam.getName())) {
+        if (ObjectUtil.isNotEmpty(monitorTargetPageParam.getName())) {
             queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
             queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
         }
         }
-        if(ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
+        if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
             CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
             queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
             queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
                     StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
                     StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
@@ -89,8 +89,8 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     @Override
     @Override
     public MonitorTarget queryEntity(String id) {
     public MonitorTarget queryEntity(String id) {
         MonitorTarget monitorTarget = this.getById(id);
         MonitorTarget monitorTarget = this.getById(id);
-        if(ObjectUtil.isEmpty(monitorTarget)) {
-            throw new CommonException("目标设备管理不存在,id值为:{}", id);
+        if (ObjectUtil.isEmpty(monitorTarget)) {
+            throw new CommonException("监控对象管理不存在,id值为:{}", id);
         }
         }
         return monitorTarget;
         return monitorTarget;
     }
     }

+ 13 - 13
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/controller/MonitorTargetRegionController.java

@@ -14,32 +14,32 @@ package vip.xiaonuo.coldchain.modular.monitortargetregion.controller;
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionAddParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionAddParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionEditParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionEditParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionIdParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionIdParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionPageParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionPageParam;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
 
 
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
  * 区域管理控制器
  * 区域管理控制器
  *
  *
  * @author 黄渊昊
  * @author 黄渊昊
- * @date  2024/11/13 16:57
+ * @date 2024/11/13 16:57
  */
  */
 @Tag(name = "区域管理控制器")
 @Tag(name = "区域管理控制器")
 @RestController
 @RestController
@@ -53,7 +53,7 @@ public class MonitorTargetRegionController {
      * 获取区域管理分页
      * 获取区域管理分页
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:57
+     * @date 2024/11/13 16:57
      */
      */
     @Operation(summary = "获取区域管理分页")
     @Operation(summary = "获取区域管理分页")
     @SaCheckPermission("/coldchain/monitortargetregion/page")
     @SaCheckPermission("/coldchain/monitortargetregion/page")
@@ -66,7 +66,7 @@ public class MonitorTargetRegionController {
      * 添加区域管理
      * 添加区域管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:57
+     * @date 2024/11/13 16:57
      */
      */
     @Operation(summary = "添加区域管理")
     @Operation(summary = "添加区域管理")
     @CommonLog("添加区域管理")
     @CommonLog("添加区域管理")
@@ -81,7 +81,7 @@ public class MonitorTargetRegionController {
      * 编辑区域管理
      * 编辑区域管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:57
+     * @date 2024/11/13 16:57
      */
      */
     @Operation(summary = "编辑区域管理")
     @Operation(summary = "编辑区域管理")
     @CommonLog("编辑区域管理")
     @CommonLog("编辑区域管理")
@@ -96,14 +96,14 @@ public class MonitorTargetRegionController {
      * 删除区域管理
      * 删除区域管理
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:57
+     * @date 2024/11/13 16:57
      */
      */
     @Operation(summary = "删除区域管理")
     @Operation(summary = "删除区域管理")
     @CommonLog("删除区域管理")
     @CommonLog("删除区域管理")
     @SaCheckPermission("/coldchain/monitortargetregion/delete")
     @SaCheckPermission("/coldchain/monitortargetregion/delete")
     @PostMapping("/coldchain/monitortargetregion/delete")
     @PostMapping("/coldchain/monitortargetregion/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   List<MonitorTargetRegionIdParam> monitorTargetRegionIdParamList) {
+                                       List<MonitorTargetRegionIdParam> monitorTargetRegionIdParamList) {
         monitorTargetRegionService.delete(monitorTargetRegionIdParamList);
         monitorTargetRegionService.delete(monitorTargetRegionIdParamList);
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
@@ -112,7 +112,7 @@ public class MonitorTargetRegionController {
      * 获取区域管理详情
      * 获取区域管理详情
      *
      *
      * @author 黄渊昊
      * @author 黄渊昊
-     * @date  2024/11/13 16:57
+     * @date 2024/11/13 16:57
      */
      */
     @Operation(summary = "获取区域管理详情")
     @Operation(summary = "获取区域管理详情")
     @SaCheckPermission("/coldchain/monitortargetregion/detail")
     @SaCheckPermission("/coldchain/monitortargetregion/detail")

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно