diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thinkmodelfunction/IotThinkModelFunctionController.http b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thinkmodelfunction/IotThinkModelFunctionController.http index e31540710..34a4054f6 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thinkmodelfunction/IotThinkModelFunctionController.http +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thinkmodelfunction/IotThinkModelFunctionController.http @@ -146,9 +146,9 @@ tenant-id: {{adminTenentId}} Authorization: Bearer {{token}} { - "id": 1, - "productId": 1001, - "productKey": "smart-sensor-001", + "id": 3, + "productId": 1002, + "productKey": "smart-sensor-002", "properties": [ { "identifier": "Temperature", @@ -158,8 +158,8 @@ Authorization: Bearer {{token}} "dataType": { "type": "float", "specs": { - "min": -40.0, - "max": 125.0, + "min": -100.0, + "max": 200.0, "step": 0.1, "unit": "℃" } @@ -229,7 +229,8 @@ Authorization: Bearer {{token}} "name": "重启设备", "callType": "async", "inputData": [], - "description": "远程重启设备" + "description": "远程重启设备", + "method": "thing.service.reboot" }, { "identifier": "SetThreshold", @@ -251,7 +252,8 @@ Authorization: Bearer {{token}} "description": "报警温度阈值" } ], - "description": "设置设备的温度报警阈值" + "description": "设置设备的温度报警阈值", + "method": "thing.service.setThreshold" } ], "events": [ @@ -272,13 +274,14 @@ Authorization: Bearer {{token}} "description": "触发报警时的温度值" } ], - "description": "当温度超过阈值时触发高温报警事件" + "description": "当温度超过阈值时触发高温报警事件", + "method": "thing.event.highTemperatureAlert" } ] } ### 请求 /iot/think-model-function/get-by-product-key 接口 => 成功 -GET {{baseUrl}}/iot/think-model-function/get-by-product-key?productKey=123456 +GET {{baseUrl}}/iot/think-model-function/get-by-product-key?productKey=smart-sensor-002 tenant-id: {{adminTenentId}} Authorization: Bearer {{token}} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thinkmodelfunction/IotThinkModelFunctionConvert.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thinkmodelfunction/IotThinkModelFunctionConvert.java index 41e0c583b..aa7322eb3 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thinkmodelfunction/IotThinkModelFunctionConvert.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thinkmodelfunction/IotThinkModelFunctionConvert.java @@ -1,12 +1,13 @@ package cn.iocoder.yudao.module.iot.convert.thinkmodelfunction; -import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelEvent; import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelProperty; import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelService; import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThinkModelFunctionRespVO; import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThinkModelFunctionSaveReqVO; import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -19,6 +20,8 @@ public interface IotThinkModelFunctionConvert { IotThinkModelFunctionConvert INSTANCE = Mappers.getMapper(IotThinkModelFunctionConvert.class); + ObjectMapper objectMapper = new ObjectMapper(); + // 将 SaveReqVO 转换为 DO 对象,处理 properties, services, events 字段 @Mapping(target = "properties", expression = "java(convertPropertiesToJson(bean.getProperties()))") @Mapping(target = "services", expression = "java(convertServicesToJson(bean.getServices()))") @@ -26,15 +29,27 @@ public interface IotThinkModelFunctionConvert { IotThinkModelFunctionDO convert(IotThinkModelFunctionSaveReqVO bean); default String convertPropertiesToJson(List properties) { - return properties != null ? JSONUtil.toJsonStr(properties) : "[]"; + try { + return properties != null ? objectMapper.writeValueAsString(properties) : "[]"; + } catch (JsonProcessingException e) { + throw new RuntimeException("序列化 properties 时发生错误", e); + } } default String convertServicesToJson(List services) { - return services != null ? JSONUtil.toJsonStr(services) : "[]"; + try { + return services != null ? objectMapper.writeValueAsString(services) : "[]"; + } catch (JsonProcessingException e) { + throw new RuntimeException("序列化 services 时发生错误", e); + } } default String convertEventsToJson(List events) { - return events != null ? JSONUtil.toJsonStr(events) : "[]"; + try { + return events != null ? objectMapper.writeValueAsString(events) : "[]"; + } catch (JsonProcessingException e) { + throw new RuntimeException("序列化 events 时发生错误", e); + } } // 将 DO 转换为 RespVO 对象,处理 properties, services, events 字段 @@ -44,18 +59,29 @@ public interface IotThinkModelFunctionConvert { IotThinkModelFunctionRespVO convert(IotThinkModelFunctionDO bean); default List convertJsonToProperties(String propertiesJson) { - return propertiesJson != null ? JSONUtil.toList(propertiesJson, ThingModelProperty.class) : new ArrayList<>(); + try { + return propertiesJson != null ? objectMapper.readValue(propertiesJson, objectMapper.getTypeFactory().constructCollectionType(List.class, ThingModelProperty.class)) : new ArrayList<>(); + } catch (JsonProcessingException e) { + throw new RuntimeException("反序列化 properties 时发生错误", e); + } } default List convertJsonToServices(String servicesJson) { - return servicesJson != null ? JSONUtil.toList(servicesJson, ThingModelService.class) : new ArrayList<>(); + try { + return servicesJson != null ? objectMapper.readValue(servicesJson, objectMapper.getTypeFactory().constructCollectionType(List.class, ThingModelService.class)) : new ArrayList<>(); + } catch (JsonProcessingException e) { + throw new RuntimeException("反序列化 services 时发生错误", e); + } } default List convertJsonToEvents(String eventsJson) { - return eventsJson != null ? JSONUtil.toList(eventsJson, ThingModelEvent.class) : new ArrayList<>(); + try { + return eventsJson != null ? objectMapper.readValue(eventsJson, objectMapper.getTypeFactory().constructCollectionType(List.class, ThingModelEvent.class)) : new ArrayList<>(); + } catch (JsonProcessingException e) { + throw new RuntimeException("反序列化 events 时发生错误", e); + } } // 批量转换 DO 列表到 RespVO 列表 List convertList(List list); -} - +} \ No newline at end of file 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 a2943a77b..559e0bed7 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 @@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThi import cn.iocoder.yudao.module.iot.convert.thinkmodelfunction.IotThinkModelFunctionConvert; import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO; import cn.iocoder.yudao.module.iot.dal.mysql.thinkmodelfunction.IotThinkModelFunctionMapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -27,6 +29,8 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe @Resource private IotThinkModelFunctionMapper thinkModelFunctionMapper; + private ObjectMapper objectMapper = new ObjectMapper(); + @Override public Long createThinkModelFunction(IotThinkModelFunctionSaveReqVO createReqVO) { log.info("创建物模型,参数:{}", createReqVO); @@ -121,8 +125,12 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe updateServiceInList(existingServices, propertyGetService); // 更新 thinkModelFunction 对象的 events 和 services 字段 - thinkModelFunction.setEvents(JSONUtil.toJsonStr(existingEvents)); - thinkModelFunction.setServices(JSONUtil.toJsonStr(existingServices)); + try { + thinkModelFunction.setEvents(objectMapper.writeValueAsString(existingEvents)); + thinkModelFunction.setServices(objectMapper.writeValueAsString(existingServices)); + } catch (JsonProcessingException e) { + throw new RuntimeException("序列化事件和服务时发生错误", e); + } } /**