24282 2 жил өмнө
parent
commit
d07f041f7a

+ 2 - 0
hx-iot/src/main/java/com/fjhx/iot/constants/RedisConstant.java

@@ -9,4 +9,6 @@ public interface RedisConstant {
      */
     String DEVICE_PREFIX = PREFIX + "device:";
 
+    String DEVICE_COMPUTER_PREFIX = PREFIX + "upperComputer:";
+
 }

+ 8 - 0
hx-iot/src/main/java/com/fjhx/iot/controller/tda/TdaDeviceController.java

@@ -1,5 +1,6 @@
 package com.fjhx.iot.controller.tda;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
@@ -17,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -45,6 +48,11 @@ public class TdaDeviceController {
         return tdaDeviceService.getPage(dto);
     }
 
+    @PostMapping("computerList")
+    public List<JSONObject> computerList(@RequestBody TdaDeviceSelectDto dto) {
+        return tdaDeviceService.getComputerList(dto);
+    }
+
     /**
      * 设备数据
      */

+ 15 - 3
hx-iot/src/main/java/com/fjhx/iot/listener/DtaListener.java

@@ -4,6 +4,7 @@ import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.JSONReader;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.iot.constants.RedisConstant;
@@ -108,7 +109,7 @@ public class DtaListener {
         try {
 
             String messageBodyStr = message.getBody(String.class);
-            MessageBody messageBody = JSONObject.parseObject(messageBodyStr, MessageBody.class);
+            MessageBody messageBody = JSONObject.parseObject(messageBodyStr, MessageBody.class, JSONReader.Feature.SupportSmartMatch);
 
             if (messageBody == null) {
                 log.error(" messageBody == null ");
@@ -199,12 +200,23 @@ public class DtaListener {
             return;
         }
 
+        JSONObject deviceData = properties.getJSONObject("DeviceData");
         switch (deviceType) {
             case "ebc":
-                doEbc(productId, deviceId, eventTime, properties.getJSONObject("DeviceData").toJavaObject(EbcDto.class));
+                doEbc(productId, deviceId, eventTime, deviceData.toJavaObject(EbcDto.class));
                 break;
+
+            // 默认上位机
             default:
-                log.error("未知 deviceType:{}", deviceType);
+
+                // 设备编号
+                String equipmentNo = deviceData.getString("equipmentNo");
+
+                if (equipmentNo != null) {
+                    deviceData.put("iot_productId", productId);
+                    deviceData.put("iot_deviceId", deviceId);
+                    redisCache.setCacheObject(RedisConstant.DEVICE_COMPUTER_PREFIX + ":" + equipmentNo, deviceData);
+                }
         }
 
         DynamicDataSourceContextHolder.clear();

+ 12 - 4
hx-iot/src/main/java/com/fjhx/iot/service/tda/TdaDeviceService.java

@@ -1,11 +1,14 @@
 package com.fjhx.iot.service.tda;
 
-import com.fjhx.iot.entity.tda.po.TdaDevice;
-import com.ruoyi.common.core.service.BaseService;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.iot.entity.tda.vo.TdaDeviceVo;
-import com.fjhx.iot.entity.tda.dto.TdaDeviceSelectDto;
 import com.fjhx.iot.entity.tda.dto.TdaDeviceDto;
+import com.fjhx.iot.entity.tda.dto.TdaDeviceSelectDto;
+import com.fjhx.iot.entity.tda.po.TdaDevice;
+import com.fjhx.iot.entity.tda.vo.TdaDeviceVo;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
 
 
 /**
@@ -38,4 +41,9 @@ public interface TdaDeviceService extends BaseService<TdaDevice> {
      */
     void delete(Long id);
 
+    /**
+     * 获取上位机设备列表
+     */
+    List<JSONObject> getComputerList(TdaDeviceSelectDto dto);
+
 }

+ 14 - 0
hx-iot/src/main/java/com/fjhx/iot/service/tda/impl/TdaDeviceServiceImpl.java

@@ -2,6 +2,7 @@ package com.fjhx.iot.service.tda.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.iot.constants.RedisConstant;
@@ -27,6 +28,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.HashMap;
 import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 
 /**
@@ -149,4 +153,14 @@ public class TdaDeviceServiceImpl extends ServiceImpl<TdaDeviceMapper, TdaDevice
         this.removeById(id);
     }
 
+    @Override
+    public List<JSONObject> getComputerList(TdaDeviceSelectDto dto) {
+        Set<String> computerKeys = redisCache.scan(RedisConstant.DEVICE_COMPUTER_PREFIX + "*");
+
+        List<JSONObject> computerList = computerKeys.stream().map(item -> (JSONObject) redisCache.getCacheObject(item))
+                .filter(Objects::nonNull).collect(Collectors.toList());
+
+        return computerList;
+    }
+
 }