diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/DeviceOperationRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/DeviceOperationRecordController.java index 1ac76fb3c..c622af662 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/DeviceOperationRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/DeviceOperationRecordController.java @@ -104,6 +104,15 @@ public class DeviceOperationRecordController { } + @GetMapping("/deviceOperationList") + @Operation(summary = "产线设备运行开机率/稼动率-大屏") + @PreAuthorize("@ss.hasPermission('iot:device-operation-record:query')") + public CommonResult> deviceOperationList(@Valid DeviceTotalTimeRecordReqVO pageReqVO) { + List deviceTotalTimeRecordRespVOList = deviceOperationRecordService.deviceOperationList(pageReqVO); + return success(deviceTotalTimeRecordRespVOList); + } + + @GetMapping("/export-device-operation-report") @Operation(summary = "导出设备运行报表记录 Excel") @PreAuthorize("@ss.hasPermission('iot:device-operation-record:export')") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/vo/DeviceTotalTimeRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/vo/DeviceTotalTimeRecordRespVO.java index 40c8584a4..5b4d8820d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/vo/DeviceTotalTimeRecordRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceoperationrecord/vo/DeviceTotalTimeRecordRespVO.java @@ -11,8 +11,8 @@ import lombok.Data; @ExcelIgnoreUnannotated public class DeviceTotalTimeRecordRespVO { -// @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4283") -// private Long id; + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4283") + private Long id; @Schema(description = "设备编码") @ExcelProperty("设备编码") @@ -59,4 +59,13 @@ public class DeviceTotalTimeRecordRespVO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ExcelProperty("结束时间") private String endTime; + + @Schema(description = "产线编码") + private String lineCode; + + @Schema(description = "产线名称") + private String lineName; + + @Schema(description = "产线id") + private Long lineId; } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/deviceoperationrecord/DeviceOperationRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/deviceoperationrecord/DeviceOperationRecordMapper.java index 375f74125..52290e421 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/deviceoperationrecord/DeviceOperationRecordMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/deviceoperationrecord/DeviceOperationRecordMapper.java @@ -37,4 +37,8 @@ public interface DeviceOperationRecordMapper extends BaseMapperX selectLatestRecords(@Param("deviceIds") Collection deviceIds); + + List selectLine(); + + List deviceOperationList(@Param("deviceTotalTimeRecordReqVO") DeviceTotalTimeRecordReqVO deviceTotalTimeRecordReqVO); } \ 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/deviceoperationrecord/DeviceOperationRecordService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceoperationrecord/DeviceOperationRecordService.java index 6ef733e47..37614e7af 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceoperationrecord/DeviceOperationRecordService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceoperationrecord/DeviceOperationRecordService.java @@ -54,4 +54,5 @@ public interface DeviceOperationRecordService { PageResult deviceOperationPage(@Valid DeviceTotalTimeRecordReqVO pageReqVO); + List deviceOperationList(@Valid DeviceTotalTimeRecordReqVO pageReqVO); } \ 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/deviceoperationrecord/DeviceOperationRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceoperationrecord/DeviceOperationRecordServiceImpl.java index a23cba46f..0ebf99b5c 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceoperationrecord/DeviceOperationRecordServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceoperationrecord/DeviceOperationRecordServiceImpl.java @@ -12,8 +12,11 @@ import org.springframework.transaction.annotation.Transactional; import java.time.Duration; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; + import cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo.*; import cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord.DeviceOperationRecordDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -95,6 +98,65 @@ public class DeviceOperationRecordServiceImpl implements DeviceOperationRecordSe } + @Override + public List deviceOperationList(DeviceTotalTimeRecordReqVO deviceTotalTimeRecordReqVO) { + + // 1 查询产线设备 + List lineList = deviceOperationRecordMapper.selectLine(); + + // 2 提取 deviceId + String ids = lineList.stream() + .map(DeviceTotalTimeRecordRespVO::getId) + .filter(Objects::nonNull) + .distinct() + .map(String::valueOf) + .collect(Collectors.joining(",")); + + // 3 设置时间 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + deviceTotalTimeRecordReqVO.setStartTime(LocalDateTime.now().with(LocalTime.MIN).format(formatter)); + deviceTotalTimeRecordReqVO.setEndTime(LocalDateTime.now().format(formatter)); + deviceTotalTimeRecordReqVO.setIds(ids); + + // 4 查询统计数据 + List list = + deviceOperationRecordMapper.deviceOperationList(deviceTotalTimeRecordReqVO); + + if (list != null && !list.isEmpty()) { + + + // 5 计算转换 + calculateAndSetConvertedValues(list, deviceTotalTimeRecordReqVO); + + // 6 转成 map (deviceId -> 统计数据) + Map recordMap = + list.stream().collect(Collectors.toMap( + DeviceTotalTimeRecordRespVO::getId, + v -> v, + (a, b) -> a + )); + + // 7 回填到 lineList + for (DeviceTotalTimeRecordRespVO line : lineList) { + + DeviceTotalTimeRecordRespVO record = recordMap.get(line.getId()); + + if (record != null) { + line.setTotalOfflineTime(record.getTotalOfflineTime()); + line.setTotalRunningTime(record.getTotalRunningTime()); + line.setTotalStandbyTime(record.getTotalStandbyTime()); + line.setTotalFaultTime(record.getTotalFaultTime()); + line.setPowerOnRate(record.getPowerOnRate()); + line.setUtilizationRate(record.getUtilizationRate()); + + } + } + } + + // 8 返回产线设备 + return lineList; + } + private void calculateAndSetConvertedValues( List records, DeviceTotalTimeRecordReqVO reqVO) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/deviceoperationrecord/DeviceOperationRecordMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/deviceoperationrecord/DeviceOperationRecordMapper.xml index 8b6c36057..0e1d481db 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/deviceoperationrecord/DeviceOperationRecordMapper.xml +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/deviceoperationrecord/DeviceOperationRecordMapper.xml @@ -44,6 +44,11 @@ AND ide.device_name LIKE CONCAT('%', #{pageReqVO.deviceName}, '%') + + + AND FIND_IN_SET(ide.id, #{pageReqVO.ids}) + + GROUP BY ide.id, ide.device_code, ide.device_name ORDER BY ide.id desc @@ -98,4 +103,58 @@ AND t1.create_time = t2.max_time + + \ No newline at end of file