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

修改:IOT 优化根据属性列表,自动生成属性上报事件和属性设置、获取服务

安浩浩 7 сар өмнө
parent
commit
061819f25b

+ 51 - 14
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thinkmodelfunction/IotThinkModelFunctionServiceImpl.java

@@ -96,7 +96,6 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe
     }
 
     /**
-     * @ TODO 还要再优化
      * 根据属性列表,自动生成属性上报事件和属性设置、获取服务
      */
     private void generateDefaultEventsAndServices(IotThinkModelFunctionSaveReqVO reqVO, IotThinkModelFunctionDO thinkModelFunction) {
@@ -106,27 +105,65 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe
             properties = new ArrayList<>();
         }
 
-        // 生成属性上报事件
-        List<ThingModelEvent> events = reqVO.getEvents() != null ? new ArrayList<>(reqVO.getEvents()) : new ArrayList<>();
+        // 获取现有的事件和服务
+        List<ThingModelEvent> existingEvents = reqVO.getEvents() != null ? new ArrayList<>(reqVO.getEvents()) : new ArrayList<>();
+        List<ThingModelService> existingServices = reqVO.getServices() != null ? new ArrayList<>(reqVO.getServices()) : new ArrayList<>();
+
+        // 生成或更新属性上报事件
         ThingModelEvent propertyPostEvent = generatePropertyPostEvent(properties);
-        events.add(propertyPostEvent);
+        updateEventInList(existingEvents, propertyPostEvent);
 
-        // 生成属性设置和获取服务
-        List<ThingModelService> services = reqVO.getServices() != null ? new ArrayList<>(reqVO.getServices()) : new ArrayList<>();
+        // 生成或更新属性设置和获取服务
         ThingModelService propertySetService = generatePropertySetService(properties);
-        if (propertySetService != null) {
-            services.add(propertySetService);
-        }
+        updateServiceInList(existingServices, propertySetService);
+
         ThingModelService propertyGetService = generatePropertyGetService(properties);
-        if (propertyGetService != null) {
-            services.add(propertyGetService);
-        }
+        updateServiceInList(existingServices, propertyGetService);
 
         // 更新 thinkModelFunction 对象的 events 和 services 字段
-        thinkModelFunction.setEvents(JSONUtil.toJsonStr(events));
-        thinkModelFunction.setServices(JSONUtil.toJsonStr(services));
+        thinkModelFunction.setEvents(JSONUtil.toJsonStr(existingEvents));
+        thinkModelFunction.setServices(JSONUtil.toJsonStr(existingServices));
     }
 
+    /**
+     * 在事件列表中更新或添加事件
+     */
+    private void updateEventInList(List<ThingModelEvent> events, ThingModelEvent newEvent) {
+        if (newEvent == null) {
+            return;
+        }
+        for (int i = 0; i < events.size(); i++) {
+            ThingModelEvent event = events.get(i);
+            if (event.getIdentifier().equals(newEvent.getIdentifier())) {
+                // 更新已有的事件
+                events.set(i, newEvent);
+                return;
+            }
+        }
+        // 如果不存在,则添加新的事件
+        events.add(newEvent);
+    }
+
+    /**
+     * 在服务列表中更新或添加服务
+     */
+    private void updateServiceInList(List<ThingModelService> services, ThingModelService newService) {
+        if (newService == null) {
+            return;
+        }
+        for (int i = 0; i < services.size(); i++) {
+            ThingModelService service = services.get(i);
+            if (service.getIdentifier().equals(newService.getIdentifier())) {
+                // 更新已有的服务
+                services.set(i, newService);
+                return;
+            }
+        }
+        // 如果不存在,则添加新的服务
+        services.add(newService);
+    }
+
+
     /**
      * 生成属性上报事件
      */