From d23be8616483862d0cfe034fa532c9312ff2e3fb Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 4 Feb 2025 16:35:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BB=A3=E7=A0=81=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E3=80=91IoT=EF=BC=9A=E7=89=A9=E6=A8=A1=E5=9E=8B=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thingmodel/IotThingModelController.java | 7 ++-- .../module/iot/convert/package-info.java | 4 ++- .../thingmodel/IotThingModelConvert.java | 12 ------- .../thingmodel/IotThingModelServiceImpl.java | 35 +++++++++---------- 4 files changed, 22 insertions(+), 36 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.java index e4913486d3..382940fc48 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.java @@ -7,7 +7,6 @@ import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotThingModelL import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotThingModelPageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotThingModelRespVO; import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotThingModelSaveReqVO; -import cn.iocoder.yudao.module.iot.convert.thingmodel.IotThingModelConvert; import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO; import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService; import io.swagger.v3.oas.annotations.Operation; @@ -62,7 +61,7 @@ public class IotThingModelController { @PreAuthorize("@ss.hasPermission('iot:thing-model:query')") public CommonResult getThingModel(@RequestParam("id") Long id) { IotThingModelDO thingModel = thingModelService.getThingModel(id); - return success(IotThingModelConvert.INSTANCE.convert(thingModel)); + return success(BeanUtils.toBean(thingModel, IotThingModelRespVO.class)); } @GetMapping("/list-by-product-id") @@ -71,7 +70,7 @@ public class IotThingModelController { @PreAuthorize("@ss.hasPermission('iot:thing-model:query')") public CommonResult> getThingModelListByProductId(@RequestParam("productId") Long productId) { List list = thingModelService.getThingModelListByProductId(productId); - return success(IotThingModelConvert.INSTANCE.convertList(list)); + return success(BeanUtils.toBean(list, IotThingModelRespVO.class)); } // TODO @puhui @super:getThingModelListByProductId 和 getThingModelListByProductId 可以融合么? @@ -80,7 +79,7 @@ public class IotThingModelController { @PreAuthorize("@ss.hasPermission('iot:thing-model:query')") public CommonResult> getThingModelListByProductId(@Valid IotThingModelListReqVO reqVO) { List list = thingModelService.getThingModelList(reqVO); - return success(IotThingModelConvert.INSTANCE.convertList(list)); + return success(BeanUtils.toBean(list, IotThingModelRespVO.class)); } @GetMapping("/page") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/package-info.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/package-info.java index 28131f0905..18d7ad21db 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/package-info.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/package-info.java @@ -1,4 +1,6 @@ /** - * TODO 芋艿:占位 + * 提供 POJO 类的实体转换 + * + * 目前使用 MapStruct 框架 */ package cn.iocoder.yudao.module.iot.convert; \ 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/thingmodel/IotThingModelConvert.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thingmodel/IotThingModelConvert.java index 2e9b5441ce..9577b18f7b 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thingmodel/IotThingModelConvert.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/thingmodel/IotThingModelConvert.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.convert.thingmodel; import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelEvent; import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelProperty; import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelService; -import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotThingModelRespVO; import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotThingModelSaveReqVO; import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO; import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelTypeEnum; @@ -12,7 +11,6 @@ import org.mapstruct.Mapping; import org.mapstruct.Named; import org.mapstruct.factory.Mappers; -import java.util.List; import java.util.Objects; @Mapper @@ -20,21 +18,11 @@ public interface IotThingModelConvert { IotThingModelConvert INSTANCE = Mappers.getMapper(IotThingModelConvert.class); - // 将 SaveReqVO 转换为 DO @Mapping(target = "property", expression = "java(convertToProperty(bean))") @Mapping(target = "event", expression = "java(convertToEvent(bean))") @Mapping(target = "service", expression = "java(convertToService(bean))") IotThingModelDO convert(IotThingModelSaveReqVO bean); - // 将 DO 转换为 RespVO - @Mapping(target = "property", source = "property") - @Mapping(target = "event", source = "event") - @Mapping(target = "service", source = "service") - IotThingModelRespVO convert(IotThingModelDO bean); - - // 批量转换 - List convertList(List list); - @Named("convertToProperty") default ThingModelProperty convertToProperty(IotThingModelSaveReqVO bean) { if (Objects.equals(bean.getType(), IotThingModelTypeEnum.PROPERTY.getType())) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thingmodel/IotThingModelServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thingmodel/IotThingModelServiceImpl.java index 1b8cf79e0c..c57ab76ba7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thingmodel/IotThingModelServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/thingmodel/IotThingModelServiceImpl.java @@ -58,9 +58,7 @@ public class IotThingModelServiceImpl implements IotThingModelService { validateIdentifierUnique(createReqVO.getProductId(), createReqVO.getIdentifier()); // 1.2 功能名称在同一产品下是否唯一 validateNameUnique(createReqVO.getProductId(), createReqVO.getName()); - // 1.3 系统保留字段,不能用于标识符定义 - validateNotDefaultEventAndService(createReqVO.getIdentifier()); - // 1.4 校验产品状态,发布状态下,不允许新增功能 + // 1.3 校验产品状态,发布状态下,不允许新增功能 validateProductStatus(createReqVO.getProductId()); // 2. 插入数据库 @@ -71,7 +69,6 @@ public class IotThingModelServiceImpl implements IotThingModelService { if (Objects.equals(createReqVO.getType(), IotThingModelTypeEnum.PROPERTY.getType())) { createDefaultEventsAndServices(createReqVO.getProductId(), createReqVO.getProductKey()); } - // TODO @puhui999: 服务和事件的情况 method 怎么设置?在前端设置还是后端设置? // 4. 删除缓存 deleteThingModelListCache(createReqVO.getProductKey()); @@ -177,14 +174,6 @@ public class IotThingModelServiceImpl implements IotThingModelService { } } - // TODO @芋艿:在 review 下 - private void validateNotDefaultEventAndService(String identifier) { - // 系统保留字段,不能用于标识符定义 - if (StrUtil.equalsAny(identifier, "set", "get", "post", "property", "event", "time", "value")) { - throw exception(THING_MODEL_IDENTIFIER_INVALID); - } - } - private void validateNameUnique(Long productId, String name) { IotThingModelDO thingModel = thingModelMapper.selectByProductIdAndName(productId, name); if (thingModel != null) { @@ -193,6 +182,12 @@ public class IotThingModelServiceImpl implements IotThingModelService { } private void validateIdentifierUnique(Long productId, String identifier) { + // 系统保留字段,不能用于标识符定义 + if (StrUtil.equalsAny(identifier, "set", "get", "post", "property", "event", "time", "value")) { + throw exception(THING_MODEL_IDENTIFIER_INVALID); + } + + // 校验唯一 IotThingModelDO thingModel = thingModelMapper.selectByProductIdAndIdentifier(productId, identifier); if (thingModel != null) { throw exception(THING_MODEL_IDENTIFIER_EXISTS); @@ -215,17 +210,17 @@ public class IotThingModelServiceImpl implements IotThingModelService { // 2.1 生成属性上报事件 ThingModelEvent propertyPostEvent = generatePropertyPostEvent(properties); if (propertyPostEvent != null) { - newThingModels.add(buildEventThingModelDO(productId, productKey, propertyPostEvent, "属性上报事件")); + newThingModels.add(buildEventThingModel(productId, productKey, propertyPostEvent, "属性上报事件")); } // 2.2 生成属性设置服务 ThingModelService propertySetService = generatePropertySetService(properties); if (propertySetService != null) { - newThingModels.add(buildServiceThingModelDO(productId, productKey, propertySetService, "属性设置服务")); + newThingModels.add(buildServiceThingModel(productId, productKey, propertySetService, "属性设置服务")); } // 2.3 生成属性获取服务 ThingModelService propertyGetService = generatePropertyGetService(properties); if (propertyGetService != null) { - newThingModels.add(buildServiceThingModelDO(productId, productKey, propertyGetService, "属性获取服务")); + newThingModels.add(buildServiceThingModel(productId, productKey, propertyGetService, "属性获取服务")); } // 3.1 获取数据库中的默认的旧事件和服务列表 @@ -269,8 +264,8 @@ public class IotThingModelServiceImpl implements IotThingModelService { /** * 构建事件功能对象 */ - private IotThingModelDO buildEventThingModelDO(Long productId, String productKey, - ThingModelEvent event, String description) { + private IotThingModelDO buildEventThingModel(Long productId, String productKey, + ThingModelEvent event, String description) { return new IotThingModelDO().setProductId(productId).setProductKey(productKey) .setIdentifier(event.getIdentifier()).setName(event.getName()).setDescription(description) .setType(IotThingModelTypeEnum.EVENT.getType()).setEvent(event); @@ -279,13 +274,14 @@ public class IotThingModelServiceImpl implements IotThingModelService { /** * 构建服务功能对象 */ - private IotThingModelDO buildServiceThingModelDO(Long productId, String productKey, - ThingModelService service, String description) { + private IotThingModelDO buildServiceThingModel(Long productId, String productKey, + ThingModelService service, String description) { return new IotThingModelDO().setProductId(productId).setProductKey(productKey) .setIdentifier(service.getIdentifier()).setName(service.getName()).setDescription(description) .setType(IotThingModelTypeEnum.SERVICE.getType()).setService(service); } + // TODO @haohao:是不是不用生成这个?目前属性上报,是个批量接口 /** * 生成属性上报事件 */ @@ -301,6 +297,7 @@ public class IotThingModelServiceImpl implements IotThingModelService { .setOutputParams(buildInputOutputParam(thingModels, IotThingModelParamDirectionEnum.OUTPUT)); } + // TODO @haohao:是不是不用生成这个?目前属性上报,是个批量接口 /** * 生成属性设置服务 */