diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceController.java index 08fc244b15..ecc4726e7b 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceController.java @@ -185,4 +185,12 @@ public class IotDeviceController { return success(deviceService.getMqttConnectionParams(deviceId)); } -} \ No newline at end of file + @GetMapping("/list-by-product-key-and-names") + @Operation(summary = "通过产品标识和设备名称列表获取设备") + @PreAuthorize("@ss.hasPermission('iot:device:query')") + public CommonResult> getDevicesByProductKeyAndNames(@Valid IotDeviceByProductKeyAndNamesReqVO reqVO) { + List devices = deviceService.getDevicesByProductKeyAndNames(reqVO.getProductKey(), reqVO.getDeviceNames()); + return success(BeanUtils.toBean(devices, IotDeviceRespVO.class)); + } + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/device/IotDeviceByProductKeyAndNamesReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/device/IotDeviceByProductKeyAndNamesReqVO.java new file mode 100644 index 0000000000..e617cad935 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/device/IotDeviceByProductKeyAndNamesReqVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.device; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 通过产品标识和设备名称列表获取设备 Request VO") +@Data +public class IotDeviceByProductKeyAndNamesReqVO { + + @Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "1de24640dfe") + @NotBlank(message = "产品标识不能为空") + private String productKey; + + @Schema(description = "设备名称列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "device001,device002") + @NotEmpty(message = "设备名称列表不能为空") + private List deviceNames; + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java index 2d8c856400..08614d4a0a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java @@ -93,6 +93,21 @@ public class IotProductController { })); } + @GetMapping("/get-by-key") + @Operation(summary = "通过 ProductKey 获得产品") + @Parameter(name = "productKey", description = "产品Key", required = true, example = "abc123") + @PreAuthorize("@ss.hasPermission('iot:product:query')") + public CommonResult getProductByKey(@RequestParam("productKey") String productKey) { + IotProductDO product = productService.getProductByProductKey(productKey); + // 拼接数据 + IotProductCategoryDO category = categoryService.getProductCategory(product.getCategoryId()); + return success(BeanUtils.toBean(product, IotProductRespVO.class, bean -> { + if (category != null) { + bean.setCategoryName(category.getName()); + } + })); + } + @GetMapping("/page") @Operation(summary = "获得产品分页") @PreAuthorize("@ss.hasPermission('iot:product:query')") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java index 95e50a4a27..b4839144f0 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -17,7 +18,10 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @Tag(name = "管理后台 - IoT 数据桥梁") @RestController @@ -69,4 +73,12 @@ public class IotDataBridgeController { return success(BeanUtils.toBean(pageResult, IotDataBridgeRespVO.class)); } -} \ No newline at end of file + @GetMapping("/simple-list") + @Operation(summary = "获取数据桥梁的精简信息列表", description = "主要用于前端的下拉选项") + public CommonResult> getSimpleDataBridgeList() { + List list = dataBridgeService.getDataBridgeList(CommonStatusEnum.ENABLE.getStatus()); + return success(convertList(list, dataBridge -> // 只返回 id、name 字段 + new IotDataBridgeRespVO().setId(dataBridge.getId()).setName(dataBridge.getName()))); + } + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotRuleSceneDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotRuleSceneDO.java index af4d39b67f..a1fa2cd852 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotRuleSceneDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotRuleSceneDO.java @@ -144,8 +144,16 @@ public class IotRuleSceneDO extends TenantBaseDO { @Data public static class TriggerConditionParameter { + // TODO @芋艿: identifier0 存事件和服务的 identifier 属性的情况 identifier0 就为 null 解决前端回显问题 /** - * 标识符(属性、事件、服务) + * 标识符(事件、服务) + * + * 关联 {@link IotThingModelDO#getIdentifier()} + */ + private String identifier0; + + /** + * 标识符(属性) * * 关联 {@link IotThingModelDO#getIdentifier()} */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/IotDeviceMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/IotDeviceMapper.java index babbf29e7d..785af92551 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/IotDeviceMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/IotDeviceMapper.java @@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Mapper; import javax.annotation.Nullable; import java.time.LocalDateTime; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -77,6 +78,12 @@ public interface IotDeviceMapper extends BaseMapperX { .geIfPresent(IotDeviceDO::getCreateTime, createTime)); } + default List selectByProductKeyAndDeviceNames(String productKey, Collection deviceNames) { + return selectList(new LambdaQueryWrapperX() + .eq(IotDeviceDO::getProductKey, productKey) + .in(IotDeviceDO::getDeviceName, deviceNames)); + } + /** * 查询指定产品下各状态的设备数量 * @@ -93,4 +100,4 @@ public interface IotDeviceMapper extends BaseMapperX { */ List> selectDeviceCountGroupByState(); -} \ No newline at end of file +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/rule/IotDataBridgeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/rule/IotDataBridgeMapper.java index 3035791162..bfaee9acf4 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/rule/IotDataBridgeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/rule/IotDataBridgeMapper.java @@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.IotDataBr import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataBridgeDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * IoT 数据桥梁 Mapper * @@ -23,4 +25,10 @@ public interface IotDataBridgeMapper extends BaseMapperX { .orderByDesc(IotDataBridgeDO::getId)); } + default List selectList(Integer status) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(IotDataBridgeDO::getStatus, status) + .orderByDesc(IotDataBridgeDO::getId)); + } + } \ 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/device/IotDeviceService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceService.java index 1dda3f333c..11a0767bcd 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceService.java @@ -219,4 +219,13 @@ public interface IotDeviceService { */ Map getDeviceCountMapByState(); -} \ No newline at end of file + /** + * 通过产品标识和设备名称列表获取设备列表 + * + * @param productKey 产品标识 + * @param deviceNames 设备名称列表 + * @return 设备列表 + */ + List getDevicesByProductKeyAndNames(String productKey, List deviceNames); + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java index 989f10a095..785e376eb7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java @@ -451,4 +451,12 @@ public class IotDeviceServiceImpl implements IotDeviceService { )); } -} \ No newline at end of file + @Override + public List getDevicesByProductKeyAndNames(String productKey, List deviceNames) { + if (StrUtil.isBlank(productKey) || CollUtil.isEmpty(deviceNames)) { + return Collections.emptyList(); + } + return deviceMapper.selectByProductKeyAndDeviceNames(productKey, deviceNames); + } + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeService.java index 18069376b0..934bf39570 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeService.java @@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.IotDataBr import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataBridgeDO; import jakarta.validation.Valid; +import java.util.List; + /** * IoT 数据桥梁 Service 接口 * @@ -51,4 +53,12 @@ public interface IotDataBridgeService { */ PageResult getDataBridgePage(IotDataBridgePageReqVO pageReqVO); -} \ No newline at end of file + /** + * 获取数据桥梁列表 + * + * @param status 状态,如果为空,则不进行筛选 + * @return 数据桥梁列表 + */ + List getDataBridgeList(Integer status); + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeServiceImpl.java index 9e439fc996..16fa025669 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeServiceImpl.java @@ -10,6 +10,8 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DATA_BRIDGE_NOT_EXISTS; @@ -67,4 +69,9 @@ public class IotDataBridgeServiceImpl implements IotDataBridgeService { return dataBridgeMapper.selectPage(pageReqVO); } -} \ No newline at end of file + @Override + public List getDataBridgeList(Integer status) { + return dataBridgeMapper.selectList(status); + } + +}