Commit 64fefaa6305027762e4836ae06dae3ebac961429

Authored by 安浩浩
1 parent 061819f2

修改:IOT 序列化报错问题处理、请求示例修改

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}} @@ -146,9 +146,9 @@ tenant-id: {{adminTenentId}}
146 Authorization: Bearer {{token}} 146 Authorization: Bearer {{token}}
147 147
148 { 148 {
149 - "id": 1,  
150 - "productId": 1001,  
151 - "productKey": "smart-sensor-001", 149 + "id": 3,
  150 + "productId": 1002,
  151 + "productKey": "smart-sensor-002",
152 "properties": [ 152 "properties": [
153 { 153 {
154 "identifier": "Temperature", 154 "identifier": "Temperature",
@@ -158,8 +158,8 @@ Authorization: Bearer {{token}} @@ -158,8 +158,8 @@ Authorization: Bearer {{token}}
158 "dataType": { 158 "dataType": {
159 "type": "float", 159 "type": "float",
160 "specs": { 160 "specs": {
161 - "min": -40.0,  
162 - "max": 125.0, 161 + "min": -100.0,
  162 + "max": 200.0,
163 "step": 0.1, 163 "step": 0.1,
164 "unit": "℃" 164 "unit": "℃"
165 } 165 }
@@ -229,7 +229,8 @@ Authorization: Bearer {{token}} @@ -229,7 +229,8 @@ Authorization: Bearer {{token}}
229 "name": "重启设备", 229 "name": "重启设备",
230 "callType": "async", 230 "callType": "async",
231 "inputData": [], 231 "inputData": [],
232 - "description": "远程重启设备" 232 + "description": "远程重启设备",
  233 + "method": "thing.service.reboot"
233 }, 234 },
234 { 235 {
235 "identifier": "SetThreshold", 236 "identifier": "SetThreshold",
@@ -251,7 +252,8 @@ Authorization: Bearer {{token}} @@ -251,7 +252,8 @@ Authorization: Bearer {{token}}
251 "description": "报警温度阈值" 252 "description": "报警温度阈值"
252 } 253 }
253 ], 254 ],
254 - "description": "设置设备的温度报警阈值" 255 + "description": "设置设备的温度报警阈值",
  256 + "method": "thing.service.setThreshold"
255 } 257 }
256 ], 258 ],
257 "events": [ 259 "events": [
@@ -272,13 +274,14 @@ Authorization: Bearer {{token}} @@ -272,13 +274,14 @@ Authorization: Bearer {{token}}
272 "description": "触发报警时的温度值" 274 "description": "触发报警时的温度值"
273 } 275 }
274 ], 276 ],
275 - "description": "当温度超过阈值时触发高温报警事件" 277 + "description": "当温度超过阈值时触发高温报警事件",
  278 + "method": "thing.event.highTemperatureAlert"
276 } 279 }
277 ] 280 ]
278 } 281 }
279 282
280 283
281 ### 请求 /iot/think-model-function/get-by-product-key 接口 => 成功 284 ### 请求 /iot/think-model-function/get-by-product-key 接口 => 成功
282 -GET {{baseUrl}}/iot/think-model-function/get-by-product-key?productKey=123456 285 +GET {{baseUrl}}/iot/think-model-function/get-by-product-key?productKey=smart-sensor-002
283 tenant-id: {{adminTenentId}} 286 tenant-id: {{adminTenentId}}
284 Authorization: Bearer {{token}} 287 Authorization: Bearer {{token}}
285 \ No newline at end of file 288 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thinkmodelfunction/IotThinkModelFunctionConvert.java
1 package cn.iocoder.yudao.module.iot.convert.thinkmodelfunction; 1 package cn.iocoder.yudao.module.iot.convert.thinkmodelfunction;
2 2
3 -import cn.hutool.json.JSONUtil;  
4 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelEvent; 3 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelEvent;
5 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelProperty; 4 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelProperty;
6 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelService; 5 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.thingModel.ThingModelService;
7 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThinkModelFunctionRespVO; 6 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThinkModelFunctionRespVO;
8 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThinkModelFunctionSaveReqVO; 7 import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThinkModelFunctionSaveReqVO;
9 import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO; 8 import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO;
  9 +import com.fasterxml.jackson.core.JsonProcessingException;
  10 +import com.fasterxml.jackson.databind.ObjectMapper;
10 import org.mapstruct.Mapper; 11 import org.mapstruct.Mapper;
11 import org.mapstruct.Mapping; 12 import org.mapstruct.Mapping;
12 import org.mapstruct.factory.Mappers; 13 import org.mapstruct.factory.Mappers;
@@ -19,6 +20,8 @@ public interface IotThinkModelFunctionConvert { @@ -19,6 +20,8 @@ public interface IotThinkModelFunctionConvert {
19 20
20 IotThinkModelFunctionConvert INSTANCE = Mappers.getMapper(IotThinkModelFunctionConvert.class); 21 IotThinkModelFunctionConvert INSTANCE = Mappers.getMapper(IotThinkModelFunctionConvert.class);
21 22
  23 + ObjectMapper objectMapper = new ObjectMapper();
  24 +
22 // 将 SaveReqVO 转换为 DO 对象,处理 properties, services, events 字段 25 // 将 SaveReqVO 转换为 DO 对象,处理 properties, services, events 字段
23 @Mapping(target = "properties", expression = "java(convertPropertiesToJson(bean.getProperties()))") 26 @Mapping(target = "properties", expression = "java(convertPropertiesToJson(bean.getProperties()))")
24 @Mapping(target = "services", expression = "java(convertServicesToJson(bean.getServices()))") 27 @Mapping(target = "services", expression = "java(convertServicesToJson(bean.getServices()))")
@@ -26,15 +29,27 @@ public interface IotThinkModelFunctionConvert { @@ -26,15 +29,27 @@ public interface IotThinkModelFunctionConvert {
26 IotThinkModelFunctionDO convert(IotThinkModelFunctionSaveReqVO bean); 29 IotThinkModelFunctionDO convert(IotThinkModelFunctionSaveReqVO bean);
27 30
28 default String convertPropertiesToJson(List<ThingModelProperty> properties) { 31 default String convertPropertiesToJson(List<ThingModelProperty> properties) {
29 - return properties != null ? JSONUtil.toJsonStr(properties) : "[]"; 32 + try {
  33 + return properties != null ? objectMapper.writeValueAsString(properties) : "[]";
  34 + } catch (JsonProcessingException e) {
  35 + throw new RuntimeException("序列化 properties 时发生错误", e);
  36 + }
30 } 37 }
31 38
32 default String convertServicesToJson(List<ThingModelService> services) { 39 default String convertServicesToJson(List<ThingModelService> services) {
33 - return services != null ? JSONUtil.toJsonStr(services) : "[]"; 40 + try {
  41 + return services != null ? objectMapper.writeValueAsString(services) : "[]";
  42 + } catch (JsonProcessingException e) {
  43 + throw new RuntimeException("序列化 services 时发生错误", e);
  44 + }
34 } 45 }
35 46
36 default String convertEventsToJson(List<ThingModelEvent> events) { 47 default String convertEventsToJson(List<ThingModelEvent> events) {
37 - return events != null ? JSONUtil.toJsonStr(events) : "[]"; 48 + try {
  49 + return events != null ? objectMapper.writeValueAsString(events) : "[]";
  50 + } catch (JsonProcessingException e) {
  51 + throw new RuntimeException("序列化 events 时发生错误", e);
  52 + }
38 } 53 }
39 54
40 // 将 DO 转换为 RespVO 对象,处理 properties, services, events 字段 55 // 将 DO 转换为 RespVO 对象,处理 properties, services, events 字段
@@ -44,18 +59,29 @@ public interface IotThinkModelFunctionConvert { @@ -44,18 +59,29 @@ public interface IotThinkModelFunctionConvert {
44 IotThinkModelFunctionRespVO convert(IotThinkModelFunctionDO bean); 59 IotThinkModelFunctionRespVO convert(IotThinkModelFunctionDO bean);
45 60
46 default List<ThingModelProperty> convertJsonToProperties(String propertiesJson) { 61 default List<ThingModelProperty> convertJsonToProperties(String propertiesJson) {
47 - return propertiesJson != null ? JSONUtil.toList(propertiesJson, ThingModelProperty.class) : new ArrayList<>(); 62 + try {
  63 + return propertiesJson != null ? objectMapper.readValue(propertiesJson, objectMapper.getTypeFactory().constructCollectionType(List.class, ThingModelProperty.class)) : new ArrayList<>();
  64 + } catch (JsonProcessingException e) {
  65 + throw new RuntimeException("反序列化 properties 时发生错误", e);
  66 + }
48 } 67 }
49 68
50 default List<ThingModelService> convertJsonToServices(String servicesJson) { 69 default List<ThingModelService> convertJsonToServices(String servicesJson) {
51 - return servicesJson != null ? JSONUtil.toList(servicesJson, ThingModelService.class) : new ArrayList<>(); 70 + try {
  71 + return servicesJson != null ? objectMapper.readValue(servicesJson, objectMapper.getTypeFactory().constructCollectionType(List.class, ThingModelService.class)) : new ArrayList<>();
  72 + } catch (JsonProcessingException e) {
  73 + throw new RuntimeException("反序列化 services 时发生错误", e);
  74 + }
52 } 75 }
53 76
54 default List<ThingModelEvent> convertJsonToEvents(String eventsJson) { 77 default List<ThingModelEvent> convertJsonToEvents(String eventsJson) {
55 - return eventsJson != null ? JSONUtil.toList(eventsJson, ThingModelEvent.class) : new ArrayList<>(); 78 + try {
  79 + return eventsJson != null ? objectMapper.readValue(eventsJson, objectMapper.getTypeFactory().constructCollectionType(List.class, ThingModelEvent.class)) : new ArrayList<>();
  80 + } catch (JsonProcessingException e) {
  81 + throw new RuntimeException("反序列化 events 时发生错误", e);
  82 + }
56 } 83 }
57 84
58 // 批量转换 DO 列表到 RespVO 列表 85 // 批量转换 DO 列表到 RespVO 列表
59 List<IotThinkModelFunctionRespVO> convertList(List<IotThinkModelFunctionDO> list); 86 List<IotThinkModelFunctionRespVO> convertList(List<IotThinkModelFunctionDO> list);
60 -}  
61 - 87 +}
62 \ No newline at end of file 88 \ No newline at end of file
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 @@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.IotThi
6 import cn.iocoder.yudao.module.iot.convert.thinkmodelfunction.IotThinkModelFunctionConvert; 6 import cn.iocoder.yudao.module.iot.convert.thinkmodelfunction.IotThinkModelFunctionConvert;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO;
8 import cn.iocoder.yudao.module.iot.dal.mysql.thinkmodelfunction.IotThinkModelFunctionMapper; 8 import cn.iocoder.yudao.module.iot.dal.mysql.thinkmodelfunction.IotThinkModelFunctionMapper;
  9 +import com.fasterxml.jackson.core.JsonProcessingException;
  10 +import com.fasterxml.jackson.databind.ObjectMapper;
9 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
10 import lombok.extern.slf4j.Slf4j; 12 import lombok.extern.slf4j.Slf4j;
11 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
@@ -27,6 +29,8 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe @@ -27,6 +29,8 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe
27 @Resource 29 @Resource
28 private IotThinkModelFunctionMapper thinkModelFunctionMapper; 30 private IotThinkModelFunctionMapper thinkModelFunctionMapper;
29 31
  32 + private ObjectMapper objectMapper = new ObjectMapper();
  33 +
30 @Override 34 @Override
31 public Long createThinkModelFunction(IotThinkModelFunctionSaveReqVO createReqVO) { 35 public Long createThinkModelFunction(IotThinkModelFunctionSaveReqVO createReqVO) {
32 log.info("创建物模型,参数:{}", createReqVO); 36 log.info("创建物模型,参数:{}", createReqVO);
@@ -121,8 +125,12 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe @@ -121,8 +125,12 @@ public class IotThinkModelFunctionServiceImpl implements IotThinkModelFunctionSe
121 updateServiceInList(existingServices, propertyGetService); 125 updateServiceInList(existingServices, propertyGetService);
122 126
123 // 更新 thinkModelFunction 对象的 events 和 services 字段 127 // 更新 thinkModelFunction 对象的 events 和 services 字段
124 - thinkModelFunction.setEvents(JSONUtil.toJsonStr(existingEvents));  
125 - thinkModelFunction.setServices(JSONUtil.toJsonStr(existingServices)); 128 + try {
  129 + thinkModelFunction.setEvents(objectMapper.writeValueAsString(existingEvents));
  130 + thinkModelFunction.setServices(objectMapper.writeValueAsString(existingServices));
  131 + } catch (JsonProcessingException e) {
  132 + throw new RuntimeException("序列化事件和服务时发生错误", e);
  133 + }
126 } 134 }
127 135
128 /** 136 /**