Commit 39ba4e72da281a90715baab359a8995627747f7a

Authored by YunaiV
1 parent b02e396a

【功能新增】IoT:设备管理界面增加设备分组功能

yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceController.java
@@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; 8 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
9 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDevicePageReqVO;  
10 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceRespVO;  
11 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceSaveReqVO;  
12 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO; 9 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.*;
13 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 10 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
14 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; 11 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
15 import io.swagger.v3.oas.annotations.Operation; 12 import io.swagger.v3.oas.annotations.Operation;
@@ -62,6 +59,14 @@ public class IotDeviceController { @@ -62,6 +59,14 @@ public class IotDeviceController {
62 return success(true); 59 return success(true);
63 } 60 }
64 61
  62 + @PutMapping("/update-group")
  63 + @Operation(summary = "更新设备分组")
  64 + @PreAuthorize("@ss.hasPermission('iot:device:update')")
  65 + public CommonResult<Boolean> updateDeviceGroup(@Valid @RequestBody IotDeviceUpdateGroupReqVO updateReqVO) {
  66 + deviceService.updateDeviceGroup(updateReqVO);
  67 + return success(true);
  68 + }
  69 +
65 @DeleteMapping("/delete") 70 @DeleteMapping("/delete")
66 @Operation(summary = "删除单个设备") 71 @Operation(summary = "删除单个设备")
67 @Parameter(name = "id", description = "编号", required = true) 72 @Parameter(name = "id", description = "编号", required = true)
@@ -102,7 +107,7 @@ public class IotDeviceController { @@ -102,7 +107,7 @@ public class IotDeviceController {
102 @PreAuthorize("@ss.hasPermission('iot:device:export')") 107 @PreAuthorize("@ss.hasPermission('iot:device:export')")
103 @ApiAccessLog(operateType = EXPORT) 108 @ApiAccessLog(operateType = EXPORT)
104 public void exportDeviceExcel(@Valid IotDevicePageReqVO exportReqVO, 109 public void exportDeviceExcel(@Valid IotDevicePageReqVO exportReqVO,
105 - HttpServletResponse response) throws IOException { 110 + HttpServletResponse response) throws IOException {
106 exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); 111 exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
107 CommonResult<PageResult<IotDeviceRespVO>> result = getDevicePage(exportReqVO); 112 CommonResult<PageResult<IotDeviceRespVO>> result = getDevicePage(exportReqVO);
108 // 导出 Excel 113 // 导出 Excel
@@ -125,7 +130,7 @@ public class IotDeviceController { @@ -125,7 +130,7 @@ public class IotDeviceController {
125 @RequestParam(value = "deviceType", required = false) Integer deviceType) { 130 @RequestParam(value = "deviceType", required = false) Integer deviceType) {
126 List<IotDeviceDO> list = deviceService.getDeviceList(deviceType); 131 List<IotDeviceDO> list = deviceService.getDeviceList(deviceType);
127 return success(convertList(list, device -> // 只返回 id、name 字段 132 return success(convertList(list, device -> // 只返回 id、name 字段
128 - new IotDeviceRespVO().setId(device.getId()).setDeviceName(device.getDeviceName()))); 133 + new IotDeviceRespVO().setId(device.getId()).setDeviceName(device.getDeviceName())));
129 } 134 }
130 135
131 } 136 }
132 \ No newline at end of file 137 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/device/IotDeviceUpdateGroupReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.device;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import lombok.Data;
  6 +
  7 +import java.util.Set;
  8 +
  9 +@Schema(description = "管理后台 - IoT 设备更新分组 Request VO")
  10 +@Data
  11 +public class IotDeviceUpdateGroupReqVO {
  12 +
  13 + @Schema(description = "设备编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
  14 + @NotEmpty(message = "设备编号列表不能为空")
  15 + private Set<Long> ids;
  16 +
  17 + @Schema(description = "分组编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
  18 + @NotEmpty(message = "分组编号列表不能为空")
  19 + private Set<Long> groupIds;
  20 +
  21 +}
0 \ No newline at end of file 22 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceService.java
@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDevicePageReqVO; 4 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDevicePageReqVO;
5 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceSaveReqVO; 5 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceSaveReqVO;
6 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO; 6 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO;
  7 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceUpdateGroupReqVO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 8 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
8 import jakarta.validation.Valid; 9 import jakarta.validation.Valid;
9 10
@@ -34,6 +35,20 @@ public interface IotDeviceService { @@ -34,6 +35,20 @@ public interface IotDeviceService {
34 void updateDevice(@Valid IotDeviceSaveReqVO updateReqVO); 35 void updateDevice(@Valid IotDeviceSaveReqVO updateReqVO);
35 36
36 /** 37 /**
  38 + * 更新设备状态
  39 + *
  40 + * @param updateReqVO 更新信息
  41 + */
  42 + void updateDeviceStatus(IotDeviceStatusUpdateReqVO updateReqVO);
  43 +
  44 + /**
  45 + * 更新设备分组
  46 + *
  47 + * @param updateReqVO 更新信息
  48 + */
  49 + void updateDeviceGroup(@Valid IotDeviceUpdateGroupReqVO updateReqVO);
  50 +
  51 + /**
37 * 删除单个设备 52 * 删除单个设备
38 * 53 *
39 * @param id 编号 54 * @param id 编号
@@ -72,13 +87,6 @@ public interface IotDeviceService { @@ -72,13 +87,6 @@ public interface IotDeviceService {
72 List<IotDeviceDO> getDeviceList(@Nullable Integer deviceType); 87 List<IotDeviceDO> getDeviceList(@Nullable Integer deviceType);
73 88
74 /** 89 /**
75 - * 更新设备状态  
76 - *  
77 - * @param updateReqVO 更新信息  
78 - */  
79 - void updateDeviceStatus(IotDeviceStatusUpdateReqVO updateReqVO);  
80 -  
81 - /**  
82 * 获得设备数量 90 * 获得设备数量
83 * 91 *
84 * @param productId 产品编号 92 * @param productId 产品编号
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; @@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
9 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDevicePageReqVO; 9 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDevicePageReqVO;
10 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceSaveReqVO; 10 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceSaveReqVO;
11 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO; 11 import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceStatusUpdateReqVO;
  12 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.device.IotDeviceUpdateGroupReqVO;
12 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 13 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
13 import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO; 14 import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
14 import cn.iocoder.yudao.module.iot.dal.mysql.device.IotDeviceMapper; 15 import cn.iocoder.yudao.module.iot.dal.mysql.device.IotDeviceMapper;
@@ -29,6 +30,7 @@ import java.util.List; @@ -29,6 +30,7 @@ import java.util.List;
29 import java.util.Objects; 30 import java.util.Objects;
30 31
31 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 32 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  33 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
32 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; 34 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
33 35
34 /** 36 /**
@@ -67,7 +69,7 @@ public class IotDeviceServiceImpl implements IotDeviceService { @@ -67,7 +69,7 @@ public class IotDeviceServiceImpl implements IotDeviceService {
67 } 69 }
68 // 1.4 校验父设备是否为合法网关 70 // 1.4 校验父设备是否为合法网关
69 if (IotProductDeviceTypeEnum.isGateway(product.getDeviceType()) 71 if (IotProductDeviceTypeEnum.isGateway(product.getDeviceType())
70 - && createReqVO.getGatewayId() != null) { 72 + && createReqVO.getGatewayId() != null) {
71 validateGatewayDeviceExists(createReqVO.getGatewayId()); 73 validateGatewayDeviceExists(createReqVO.getGatewayId());
72 } 74 }
73 // 1.5 校验分组存在 75 // 1.5 校验分组存在
@@ -108,6 +110,22 @@ public class IotDeviceServiceImpl implements IotDeviceService { @@ -108,6 +110,22 @@ public class IotDeviceServiceImpl implements IotDeviceService {
108 } 110 }
109 111
110 @Override 112 @Override
  113 + @Transactional(rollbackFor = Exception.class)
  114 + public void updateDeviceGroup(IotDeviceUpdateGroupReqVO updateReqVO) {
  115 + // 1.1 校验设备存在
  116 + List<IotDeviceDO> devices = deviceMapper.selectBatchIds(updateReqVO.getIds());
  117 + if (CollUtil.isEmpty(devices)) {
  118 + return;
  119 + }
  120 + // 1.2 校验分组存在
  121 + deviceGroupService.validateDeviceGroupExists(updateReqVO.getGroupIds());
  122 +
  123 + // 3. 更新设备分组
  124 + deviceMapper.updateBatch(convertList(devices, device -> new IotDeviceDO()
  125 + .setId(device.getId()).setGroupIds(updateReqVO.getGroupIds())));
  126 + }
  127 +
  128 + @Override
111 public void deleteDevice(Long id) { 129 public void deleteDevice(Long id) {
112 // 1.1 校验存在 130 // 1.1 校验存在
113 IotDeviceDO device = validateDeviceExists(id); 131 IotDeviceDO device = validateDeviceExists(id);