From 061819f25b16275b2ef97915f821dbf66cd673dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=B5=A9=E6=B5=A9?= <1036606149@qq.com> Date: Sat, 14 Sep 2024 08:32:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9AIOT=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=A0=B9=E6=8D=AE=E5=B1=9E=E6=80=A7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E4=BA=8B=E4=BB=B6=E5=92=8C=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E3=80=81=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IotThinkModelFunctionServiceImpl.java | 67 ++++++++++++++----- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thinkmodelfunction/IotThinkModelFunctionServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thinkmodelfunction/IotThinkModelFunctionServiceImpl.java index 66fc017798..a2943a77b9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thinkmodelfunction/IotThinkModelFunctionServiceImpl.java +++ b/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 events = reqVO.getEvents() != null ? new ArrayList<>(reqVO.getEvents()) : new ArrayList<>(); - ThingModelEvent propertyPostEvent = generatePropertyPostEvent(properties); - events.add(propertyPostEvent); + // 获取现有的事件和服务 + List existingEvents = reqVO.getEvents() != null ? new ArrayList<>(reqVO.getEvents()) : new ArrayList<>(); + List existingServices = reqVO.getServices() != null ? new ArrayList<>(reqVO.getServices()) : new ArrayList<>(); - // 生成属性设置和获取服务 - List services = reqVO.getServices() != null ? new ArrayList<>(reqVO.getServices()) : new ArrayList<>(); + // 生成或更新属性上报事件 + ThingModelEvent propertyPostEvent = generatePropertyPostEvent(properties); + updateEventInList(existingEvents, propertyPostEvent); + + // 生成或更新属性设置和获取服务 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 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 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); + } + + /** * 生成属性上报事件 */