From 9dcde5b27b70a4b0c0885347af5405eb2d1ef089 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 12 十二月 2025 17:00:54 +0800
Subject: [PATCH] 修改前端状态显示变更,保持前端实时更新

---
 mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceConfigServiceImpl.java |  110 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 71 insertions(+), 39 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceConfigServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceConfigServiceImpl.java
index 55a9693..6f5b2b3 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceConfigServiceImpl.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/DeviceConfigServiceImpl.java
@@ -27,6 +27,7 @@
 public class DeviceConfigServiceImpl extends ServiceImpl<DeviceConfigMapper, DeviceConfig> implements DeviceConfigService {
 
     private final ObjectMapper objectMapper = new ObjectMapper();
+    private static final TypeReference<Map<String, Object>> MAP_TYPE = new TypeReference<Map<String, Object>>() {};
 
     @Override
     public boolean createDevice(DeviceConfig deviceConfig) {
@@ -134,10 +135,7 @@
         
         // 璁惧绫诲瀷杩囨护
         if (deviceType != null && !deviceType.trim().isEmpty()) {
-            String convertedDeviceType = convertDeviceTypeFromString(deviceType);
-            if (convertedDeviceType != null) {
-                wrapper.eq(DeviceConfig::getDeviceType, convertedDeviceType);
-            }
+            wrapper.eq(DeviceConfig::getDeviceType, deviceType.trim());
         }
         
         // 璁惧鐘舵�佽繃婊�
@@ -214,7 +212,7 @@
             vo.setStatus(getStatusName(device.getStatus()));
             vo.setDeviceStatus(convertStatusToCode(device.getStatus()));
             vo.setDescription(device.getDescription());
-            vo.setLocation("榛樿浣嶇疆"); // TODO: 浠庢墿灞曞弬鏁版垨鍏宠仈琛ㄤ腑鑾峰彇
+            vo.setLocation(extractLocationFromDevice(device));
             vo.setCreatedTime(device.getCreatedTime());
             vo.setUpdatedTime(device.getUpdatedTime());
             vo.setProjectId(device.getProjectId());
@@ -311,29 +309,6 @@
         }
     }
 
-    /**
-     * 瀛楃涓茶浆鎹负璁惧绫诲瀷
-     */
-    private String convertDeviceTypeFromString(String deviceType) {
-        if (deviceType == null) return null;
-        
-        switch (deviceType.trim().toLowerCase()) {
-            case "load_vehicle":
-            case "涓婂ぇ杞�":
-            case "1":
-                return DeviceConfig.DeviceType.LOAD_VEHICLE;
-            case "large_glass":
-            case "澶х悊鐗�":
-            case "2":
-                return DeviceConfig.DeviceType.LARGE_GLASS;
-            case "glass_storage":
-            case "鐜荤拑瀛樺偍":
-            case "3":
-                return DeviceConfig.DeviceType.GLASS_STORAGE;
-            default:
-                return null;
-        }
-    }
 
     /**
      * 瀛楃涓茶浆鎹负鐘舵��
@@ -623,12 +598,9 @@
             }
             
             // 璁惧绫诲瀷杩囨护
-            if (deviceType != null && !deviceType.trim().isEmpty()) {
-                String convertedDeviceType = convertDeviceTypeFromString(deviceType);
-                if (convertedDeviceType != null) {
-                    wrapper.eq(DeviceConfig::getDeviceType, convertedDeviceType);
-                }
-            }
+        if (deviceType != null && !deviceType.trim().isEmpty()) {
+            wrapper.eq(DeviceConfig::getDeviceType, deviceType.trim());
+        }
             
             // 璁惧鐘舵�佽繃婊�
             if (deviceStatus != null && !deviceStatus.trim().isEmpty()) {
@@ -656,12 +628,42 @@
 
     @Override
     public List<String> getAllDeviceTypes() {
-        List<String> deviceTypes = new ArrayList<>();
-        deviceTypes.add("PLC璁惧");
-        deviceTypes.add("浼犳劅鍣ㄨ澶�");
-        deviceTypes.add("鎵ц鍣ㄨ澶�");
-        deviceTypes.add("浜烘満鐣岄潰璁惧");
+        try {
+            // 浠庢暟鎹簱涓煡璇㈡墍鏈夊凡瀛樺湪鐨勮澶囩被鍨嬶紙鍘婚噸锛�
+            LambdaQueryWrapper<DeviceConfig> wrapper = new LambdaQueryWrapper<>();
+            wrapper.select(DeviceConfig::getDeviceType);
+            wrapper.eq(DeviceConfig::getIsDeleted, 0);
+            wrapper.isNotNull(DeviceConfig::getDeviceType);
+            wrapper.ne(DeviceConfig::getDeviceType, "");
+            
+            List<DeviceConfig> devices = list(wrapper);
+            List<String> deviceTypes = devices.stream()
+                    .map(DeviceConfig::getDeviceType)
+                    .filter(Objects::nonNull)
+                    .filter(type -> !type.trim().isEmpty())
+                    .distinct()
+                    .sorted()
+                    .collect(Collectors.toList());
+            
+            // 濡傛灉鏁版嵁搴撲腑娌℃湁璁惧绫诲瀷锛岃繑鍥為粯璁ょ被鍨�
+            if (deviceTypes.isEmpty()) {
+                deviceTypes.add(DeviceConfig.DeviceType.LOAD_VEHICLE);
+                deviceTypes.add(DeviceConfig.DeviceType.LARGE_GLASS);
+                deviceTypes.add(DeviceConfig.DeviceType.WORKSTATION_SCANNER);
+                deviceTypes.add(DeviceConfig.DeviceType.WORKSTATION_TRANSFER);
+            }
+            
         return deviceTypes;
+        } catch (Exception e) {
+            log.error("鑾峰彇璁惧绫诲瀷鍒楄〃澶辫触", e);
+            // 寮傚父鏃惰繑鍥為粯璁ょ被鍨�
+            List<String> defaultTypes = new ArrayList<>();
+            defaultTypes.add(DeviceConfig.DeviceType.LOAD_VEHICLE);
+            defaultTypes.add(DeviceConfig.DeviceType.LARGE_GLASS);
+            defaultTypes.add(DeviceConfig.DeviceType.WORKSTATION_SCANNER);
+            defaultTypes.add(DeviceConfig.DeviceType.WORKSTATION_TRANSFER);
+            return defaultTypes;
+        }
     }
 
     @Override
@@ -771,4 +773,34 @@
             return new ArrayList<>();
         }
     }
+
+    /**
+     * 浠庤澶囨墿灞曞弬鏁颁腑鎻愬彇浣嶇疆淇℃伅
+     */
+    private String extractLocationFromDevice(DeviceConfig device) {
+        if (device == null) {
+            return "榛樿浣嶇疆";
+        }
+        try {
+            // 浼樺厛浠巈xtraParams涓幏鍙�
+            if (device.getExtraParams() != null && !device.getExtraParams().trim().isEmpty()) {
+                Map<String, Object> extraParams = objectMapper.readValue(device.getExtraParams(), MAP_TYPE);
+                Object location = extraParams.get("location");
+                if (location != null) {
+                    return String.valueOf(location);
+                }
+            }
+            // 浠巆onfigJson涓幏鍙�
+            if (device.getConfigJson() != null && !device.getConfigJson().trim().isEmpty()) {
+                Map<String, Object> configJson = objectMapper.readValue(device.getConfigJson(), MAP_TYPE);
+                Object location = configJson.get("location");
+                if (location != null) {
+                    return String.valueOf(location);
+                }
+            }
+        } catch (Exception e) {
+            log.warn("瑙f瀽璁惧浣嶇疆淇℃伅澶辫触, deviceId={}", device.getId(), e);
+        }
+        return "榛樿浣嶇疆";
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0