Commit 061819f25b16275b2ef97915f821dbf66cd673dd

Authored by 安浩浩
1 parent 1f8576f6

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

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 @@ -96,7 +96,6 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe
96 } 96 }
97 97
98 /** 98 /**
99 - * @ TODO 还要再优化  
100 * 根据属性列表,自动生成属性上报事件和属性设置、获取服务 99 * 根据属性列表,自动生成属性上报事件和属性设置、获取服务
101 */ 100 */
102 private void generateDefaultEventsAndServices(IotThinkModelFunctionSaveReqVO reqVO, IotThinkModelFunctionDO thinkModelFunction) { 101 private void generateDefaultEventsAndServices(IotThinkModelFunctionSaveReqVO reqVO, IotThinkModelFunctionDO thinkModelFunction) {
@@ -106,28 +105,66 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe @@ -106,28 +105,66 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe
106 properties = new ArrayList<>(); 105 properties = new ArrayList<>();
107 } 106 }
108 107
109 - // 生成属性上报事件  
110 - List<ThingModelEvent> events = reqVO.getEvents() != null ? new ArrayList<>(reqVO.getEvents()) : new ArrayList<>(); 108 + // 获取现有的事件和服务
  109 + List<ThingModelEvent> existingEvents = reqVO.getEvents() != null ? new ArrayList<>(reqVO.getEvents()) : new ArrayList<>();
  110 + List<ThingModelService> existingServices = reqVO.getServices() != null ? new ArrayList<>(reqVO.getServices()) : new ArrayList<>();
  111 +
  112 + // 生成或更新属性上报事件
111 ThingModelEvent propertyPostEvent = generatePropertyPostEvent(properties); 113 ThingModelEvent propertyPostEvent = generatePropertyPostEvent(properties);
112 - events.add(propertyPostEvent); 114 + updateEventInList(existingEvents, propertyPostEvent);
113 115
114 - // 生成属性设置和获取服务  
115 - List<ThingModelService> services = reqVO.getServices() != null ? new ArrayList<>(reqVO.getServices()) : new ArrayList<>(); 116 + // 生成或更新属性设置和获取服务
116 ThingModelService propertySetService = generatePropertySetService(properties); 117 ThingModelService propertySetService = generatePropertySetService(properties);
117 - if (propertySetService != null) {  
118 - services.add(propertySetService);  
119 - } 118 + updateServiceInList(existingServices, propertySetService);
  119 +
120 ThingModelService propertyGetService = generatePropertyGetService(properties); 120 ThingModelService propertyGetService = generatePropertyGetService(properties);
121 - if (propertyGetService != null) {  
122 - services.add(propertyGetService);  
123 - } 121 + updateServiceInList(existingServices, propertyGetService);
124 122
125 // 更新 thinkModelFunction 对象的 events 和 services 字段 123 // 更新 thinkModelFunction 对象的 events 和 services 字段
126 - thinkModelFunction.setEvents(JSONUtil.toJsonStr(events));  
127 - thinkModelFunction.setServices(JSONUtil.toJsonStr(services)); 124 + thinkModelFunction.setEvents(JSONUtil.toJsonStr(existingEvents));
  125 + thinkModelFunction.setServices(JSONUtil.toJsonStr(existingServices));
128 } 126 }
129 127
130 /** 128 /**
  129 + * 在事件列表中更新或添加事件
  130 + */
  131 + private void updateEventInList(List<ThingModelEvent> events, ThingModelEvent newEvent) {
  132 + if (newEvent == null) {
  133 + return;
  134 + }
  135 + for (int i = 0; i < events.size(); i++) {
  136 + ThingModelEvent event = events.get(i);
  137 + if (event.getIdentifier().equals(newEvent.getIdentifier())) {
  138 + // 更新已有的事件
  139 + events.set(i, newEvent);
  140 + return;
  141 + }
  142 + }
  143 + // 如果不存在,则添加新的事件
  144 + events.add(newEvent);
  145 + }
  146 +
  147 + /**
  148 + * 在服务列表中更新或添加服务
  149 + */
  150 + private void updateServiceInList(List<ThingModelService> services, ThingModelService newService) {
  151 + if (newService == null) {
  152 + return;
  153 + }
  154 + for (int i = 0; i < services.size(); i++) {
  155 + ThingModelService service = services.get(i);
  156 + if (service.getIdentifier().equals(newService.getIdentifier())) {
  157 + // 更新已有的服务
  158 + services.set(i, newService);
  159 + return;
  160 + }
  161 + }
  162 + // 如果不存在,则添加新的服务
  163 + services.add(newService);
  164 + }
  165 +
  166 +
  167 + /**
131 * 生成属性上报事件 168 * 生成属性上报事件
132 */ 169 */
133 private ThingModelEvent generatePropertyPostEvent(List<ThingModelProperty> properties) { 170 private ThingModelEvent generatePropertyPostEvent(List<ThingModelProperty> properties) {