From e5ce1952795ab19302afbc1dca0473d0eabf630b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 2 Jul 2025 23:28:03 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90IoT=20=E7=89=A9=E8=81=94?= =?UTF-8?q?=E7=BD=91=E3=80=91=E5=A2=9E=E5=8A=A0=20OTA=20=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/device/IotDeviceController.java | 11 ++++-- .../admin/ota/IotOtaFirmwareController.java | 18 ++++++++-- .../admin/ota/IotOtaTaskRecordController.java | 34 ++++++++++++++++--- .../ota/vo/firmware/IotOtaFirmwareRespVO.java | 3 ++ .../record/IotOtaTaskRecordPageReqVO.java | 7 ++-- .../task/record/IotOtaTaskRecordRespVO.java | 34 +++++++++++-------- .../iot/dal/mysql/device/IotDeviceMapper.java | 6 ++-- .../dal/mysql/ota/IotOtaTaskRecordMapper.java | 3 +- .../module/iot/enums/DictTypeConstants.java | 1 + .../iot/service/device/IotDeviceService.java | 26 ++++++++++++-- .../service/device/IotDeviceServiceImpl.java | 17 ++++++---- .../service/ota/IotOtaFirmwareService.java | 34 ++++++++++++++++--- .../ota/IotOtaFirmwareServiceImpl.java | 13 +++++++ .../service/ota/IotOtaTaskRecordService.java | 2 +- .../ota/IotOtaTaskRecordServiceImpl.java | 2 +- 15 files changed, 167 insertions(+), 44 deletions(-) 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 052d34edc4..b72717f5f1 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 @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; @@ -121,10 +122,14 @@ public class IotDeviceController { @GetMapping("/simple-list") @Operation(summary = "获取设备的精简信息列表", description = "主要用于前端的下拉选项") - @Parameter(name = "deviceType", description = "设备类型", example = "1") + @Parameters({ + @Parameter(name = "deviceType", description = "设备类型", example = "1"), + @Parameter(name = "productId", description = "产品编号", example = "1024") + }) public CommonResult> getDeviceSimpleList( - @RequestParam(value = "deviceType", required = false) Integer deviceType) { - List list = deviceService.getDeviceListByDeviceType(deviceType); + @RequestParam(value = "deviceType", required = false) Integer deviceType, + @RequestParam(value = "productId", required = false) Long productId) { + List list = deviceService.getDeviceListByCondition(deviceType, productId); return success(convertList(list, device -> // 只返回 id、name、productId 字段 new IotDeviceRespVO().setId(device.getId()).setDeviceName(device.getDeviceName()) .setProductId(device.getProductId()))); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java index a2a5a114e7..7c3a5b78f4 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java @@ -3,12 +3,14 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota; 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; +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwareCreateReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwarePageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwareRespVO; -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwareCreateReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwareUpdateReqVO; import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO; import cn.iocoder.yudao.module.iot.service.ota.IotOtaFirmwareService; +import cn.iocoder.yudao.module.iot.service.product.IotProductService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -27,6 +29,8 @@ public class IotOtaFirmwareController { @Resource private IotOtaFirmwareService otaFirmwareService; + @Resource + private IotProductService productService; @PostMapping("/create") @Operation(summary = "创建 OTA 固件") @@ -47,8 +51,16 @@ public class IotOtaFirmwareController { @Operation(summary = "获得 OTA 固件") @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')") public CommonResult getOtaFirmware(@RequestParam("id") Long id) { - IotOtaFirmwareDO otaFirmware = otaFirmwareService.getOtaFirmware(id); - return success(BeanUtils.toBean(otaFirmware, IotOtaFirmwareRespVO.class)); + IotOtaFirmwareDO firmware = otaFirmwareService.getOtaFirmware(id); + if (firmware == null) { + return success(null); + } + return success(BeanUtils.toBean(firmware, IotOtaFirmwareRespVO.class, o -> { + IotProductDO product = productService.getProduct(firmware.getProductId()); + if (product != null) { + o.setProductName(product.getName()); + } + })); } @GetMapping("/page") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaTaskRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaTaskRecordController.java index 1110ff8f49..cc17108e5e 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaTaskRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaTaskRecordController.java @@ -2,10 +2,15 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordRespVO; +import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO; +import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; +import cn.iocoder.yudao.module.iot.service.ota.IotOtaFirmwareService; import cn.iocoder.yudao.module.iot.service.ota.IotOtaTaskRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -13,6 +18,7 @@ import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; +import org.dromara.hutool.core.collection.CollUtil; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -23,6 +29,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - IoT OTA 升级任务记录") @RestController @@ -32,18 +39,22 @@ public class IotOtaTaskRecordController { @Resource private IotOtaTaskRecordService otaTaskRecordService; + @Resource + private IotDeviceService deviceService; + @Resource + private IotOtaFirmwareService otaFirmwareService; - @GetMapping("/get-status-count") + @GetMapping("/get-status-statistics") @Operation(summary = "获得 OTA 升级记录状态统计") @Parameters({ @Parameter(name = "firmwareId", description = "固件编号", example = "1024"), @Parameter(name = "taskId", description = "升级任务编号", example = "2048") }) @PreAuthorize("@ss.hasPermission('iot:ota-task-record:query')") - public CommonResult> getOtaTaskRecordStatusCountMap( + public CommonResult> getOtaTaskRecordStatusStatistics( @RequestParam(value = "firmwareId", required = false) Long firmwareId, @RequestParam(value = "taskId", required = false) Long taskId) { - return success(otaTaskRecordService.getOtaTaskRecordStatusCountMap(firmwareId, taskId)); + return success(otaTaskRecordService.getOtaTaskRecordStatusStatistics(firmwareId, taskId)); } @GetMapping("/page") @@ -52,7 +63,22 @@ public class IotOtaTaskRecordController { public CommonResult> getOtaTaskRecordPage( @Valid IotOtaTaskRecordPageReqVO pageReqVO) { PageResult pageResult = otaTaskRecordService.getOtaTaskRecordPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, IotOtaTaskRecordRespVO.class)); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty()); + } + + // 批量查询固件信息 + Map firmwareMap = otaFirmwareService.getOtaFirmwareMap( + convertSet(pageResult.getList(), IotOtaTaskRecordDO::getFromFirmwareId)); + Map deviceMap = deviceService.getDeviceMap( + convertSet(pageResult.getList(), IotOtaTaskRecordDO::getDeviceId)); + // 转换为响应 VO + return success(BeanUtils.toBean(pageResult, IotOtaTaskRecordRespVO.class, (vo) -> { + MapUtils.findAndThen(firmwareMap, vo.getFromFirmwareId(), firmware -> + vo.setFromFirmwareVersion(firmware.getVersion())); + MapUtils.findAndThen(deviceMap, vo.getDeviceId(), device -> + vo.setDeviceName(device.getDeviceName())); + })); } @GetMapping("/get") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java index 0ad8a82ee6..d6fdbf7260 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java @@ -25,6 +25,9 @@ public class IotOtaFirmwareRespVO implements VO { @Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long productId; + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "智能设备") + private String productName; + @Schema(description = "固件文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/firmware.bin") private String fileUrl; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java index 839a8b06d8..00c6fe7f32 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,7 +13,8 @@ public class IotOtaTaskRecordPageReqVO extends PageParam { @Schema(description = "升级任务编号", example = "1024") private Long taskId; - @Schema(description = "设备标识", example = "摄像头A1-1") - private String deviceName; + @Schema(description = "升级记录状态", example = "5") + @InEnum(IotOtaTaskRecordStatusEnum.class) + private Integer status; } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java index 4de8204f0b..f7ab1edf58 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java @@ -3,40 +3,46 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -@Schema(description = "管理后台 - IoT OTA 升级记录 Response VO") +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - IoT OTA 升级任务记录 Response VO") @Data public class IotOtaTaskRecordRespVO { - // TODO @芋艿:梳理字段 - - @Schema(description = "升级记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long id; @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long firmwareId; - @Schema(description = "固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0") - private String firmwareVersion; - - @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") private Long taskId; @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private String deviceId; + private Long deviceId; - @Schema(description = "来源的固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @Schema(description = "设备名称", example = "智能开关") + private String deviceName; + + @Schema(description = "来源的固件编号", example = "1023") private Long fromFirmwareId; - @Schema(description = "来源的固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0") + @Schema(description = "来源固件版本", example = "1.0.0") private String fromFirmwareVersion; - @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer status; - @Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "50") private Integer progress; - @Schema(description = "升级进度描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @Schema(description = "升级进度描述", example = "正在下载固件...") private String description; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime updateTime; + } 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 5f3dc56e04..606cf8f033 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 @@ -52,9 +52,11 @@ public interface IotDeviceMapper extends BaseMapperX { return selectCount(IotDeviceDO::getProductId, productId); } - default List selectListByDeviceType(@Nullable Integer deviceType) { + default List selectListByCondition(@Nullable Integer deviceType, + @Nullable Long productId) { return selectList(new LambdaQueryWrapperX() - .geIfPresent(IotDeviceDO::getDeviceType, deviceType)); + .eqIfPresent(IotDeviceDO::getDeviceType, deviceType) + .eqIfPresent(IotDeviceDO::getProductId, productId)); } default List selectListByState(Integer state) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaTaskRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaTaskRecordMapper.java index d6d147107f..76c83beef1 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaTaskRecordMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaTaskRecordMapper.java @@ -23,7 +23,8 @@ public interface IotOtaTaskRecordMapper extends BaseMapperX default PageResult selectPage(IotOtaTaskRecordPageReqVO pageReqVO) { return selectPage(pageReqVO, new LambdaQueryWrapperX() - .eqIfPresent(IotOtaTaskRecordDO::getTaskId, pageReqVO.getTaskId())); + .eqIfPresent(IotOtaTaskRecordDO::getTaskId, pageReqVO.getTaskId()) + .eqIfPresent(IotOtaTaskRecordDO::getStatus, pageReqVO.getStatus())); } default void updateByTaskIdAndStatus(Long taskId, Integer fromStatus, IotOtaTaskRecordDO updateRecord) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java index 384bf734e6..6e089632c4 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java @@ -18,5 +18,6 @@ public class DictTypeConstants { public static final String OTA_TASK_DEVICE_SCOPE = "iot_ota_task_device_scope"; public static final String OTA_TASK_STATUS = "iot_ota_task_status"; + public static final String OTA_TASK_RECORD_STATUS = "iot_ota_task_record_status"; } 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 328d7bd5d6..e1219cd5f7 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 @@ -13,6 +13,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; + /** * IoT 设备 Service 接口 * @@ -138,12 +140,14 @@ public interface IotDeviceService { PageResult getDevicePage(IotDevicePageReqVO pageReqVO); /** - * 基于设备类型,获得设备列表 + * 根据条件,获得设备列表 * * @param deviceType 设备类型 + * @param productId 产品编号 * @return 设备列表 */ - List getDeviceListByDeviceType(@Nullable Integer deviceType); + List getDeviceListByCondition(@Nullable Integer deviceType, + @Nullable Long productId); /** * 获得状态,获得设备列表 @@ -241,4 +245,22 @@ public interface IotDeviceService { */ List validateDeviceListExists(Collection ids); + /** + * 获得设备列表 + * + * @param ids 设备编号数组 + * @return 设备列表 + */ + List getDeviceList(Collection ids); + + /** + * 获得设备 Map + * + * @param ids 设备编号数组 + * @return 设备 Map + */ + default Map getDeviceMap(Collection ids) { + return convertMap(getDeviceList(ids), IotDeviceDO::getId); + } + } 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 4cdf859d06..1a5578526b 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 @@ -264,8 +264,8 @@ public class IotDeviceServiceImpl implements IotDeviceService { } @Override - public List getDeviceListByDeviceType(@Nullable Integer deviceType) { - return deviceMapper.selectListByDeviceType(deviceType); + public List getDeviceListByCondition(@Nullable Integer deviceType, @Nullable Long productId) { + return deviceMapper.selectListByCondition(deviceType, productId); } @Override @@ -470,16 +470,21 @@ public class IotDeviceServiceImpl implements IotDeviceService { @Override public List validateDeviceListExists(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - List devices = deviceMapper.selectByIds(ids); + List devices = getDeviceList(ids); if (devices.size() != ids.size()) { throw exception(DEVICE_NOT_EXISTS); } return devices; } + @Override + public List getDeviceList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return deviceMapper.selectByIds(ids); + } + private IotDeviceServiceImpl getSelf() { return SpringUtil.getBean(getClass()); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareService.java index 14fc38cde7..c6fafc7f92 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareService.java @@ -7,6 +7,12 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwa import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; import jakarta.validation.Valid; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * OTA 固件管理 Service 接口 * @@ -30,13 +36,31 @@ public interface IotOtaFirmwareService { void updateOtaFirmware(@Valid IotOtaFirmwareUpdateReqVO updateReqVO); /** - * 根据 ID 获取 OTA 固件信息 + * 获取 OTA 固件信息 * - * @param id OTA 固件编号 + * @param id 固件编号 * @return 固件信息 */ IotOtaFirmwareDO getOtaFirmware(Long id); + /** + * 获取 OTA 固件信息列表 + * + * @param ids 固件编号集合 + * @return 固件信息列表 + */ + List getOtaFirmwareList(Collection ids); + + /** + * 获取 OTA 固件信息 Map + * + * @param ids 固件编号集合 + * @return 固件信息 Map + */ + default Map getOtaFirmwareMap(Collection ids) { + return convertMap(getOtaFirmwareList(ids), IotOtaFirmwareDO::getId); + } + /** * 分页查询 OTA 固件信息 * @@ -46,10 +70,10 @@ public interface IotOtaFirmwareService { PageResult getOtaFirmwarePage(@Valid IotOtaFirmwarePageReqVO pageReqVO); /** - * 验证物联网 OTA 固件是否存在 + * 验证 OTA 固件是否存在 * - * @param id 物联网 OTA 固件编号 - * @return OTA 固件 + * @param id 固件编号 + * @return 固件信息 */ IotOtaFirmwareDO validateFirmwareExists(Long id); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java index a5da1dba3f..87290c14fb 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java @@ -18,8 +18,13 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.io.ByteArrayInputStream; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_NOT_EXISTS; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE; @@ -76,6 +81,14 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { return otaFirmwareMapper.selectById(id); } + @Override + public List getOtaFirmwareList(Collection ids) { + if (ids == null || ids.isEmpty()) { + return Collections.emptyList(); + } + return otaFirmwareMapper.selectByIds(ids); + } + @Override public PageResult getOtaFirmwarePage(IotOtaFirmwarePageReqVO pageReqVO) { return otaFirmwareMapper.selectPage(pageReqVO); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordService.java index eb5a04ac2a..ba5dc826c8 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordService.java @@ -31,7 +31,7 @@ public interface IotOtaTaskRecordService { * @param taskId 任务编号 * @return 状态统计 Map,key 为状态码,value 为对应状态的升级记录数量 */ - Map getOtaTaskRecordStatusCountMap(Long firmwareId, Long taskId); + Map getOtaTaskRecordStatusStatistics(Long firmwareId, Long taskId); /** * 获取 OTA 升级记录 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordServiceImpl.java index ab156a8787..88b009caa3 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordServiceImpl.java @@ -42,7 +42,7 @@ public class IotOtaTaskRecordServiceImpl implements IotOtaTaskRecordService { } @Override - public Map getOtaTaskRecordStatusCountMap(Long firmwareId, Long taskId) { + public Map getOtaTaskRecordStatusStatistics(Long firmwareId, Long taskId) { // 按照 status 枚举,初始化 countMap 为 0 Map countMap = convertMap(Arrays.asList(IotOtaTaskRecordStatusEnum.values()), IotOtaTaskRecordStatusEnum::getStatus, iotOtaTaskRecordStatusEnum -> 0L);