Просмотр исходного кода

pms 设备状态调整、责任人调整日志导出

zhangcl 2 дней назад
Родитель
Сommit
ab07dc3664

+ 38 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicepersonlog/IotDevicePersonLogController.java

@@ -1,6 +1,9 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotdevicepersonlog;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@@ -13,6 +16,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicepersonlog.vo.IotDevicePersonLogPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicepersonlog.vo.IotDevicePersonLogRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicepersonlog.vo.IotDevicePersonLogSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicepersonlog.IotDevicePersonLogDO;
 import cn.iocoder.yudao.module.pms.service.IotDeviceService;
@@ -168,10 +172,42 @@ public class IotDevicePersonLogController {
     public void exportIotDevicePersonLogExcel(@Valid IotDevicePersonLogPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        // 先查询符合条件的设备id集合 再根据deviceIds集合查询对应的调拨记录
+        IotDevicePageReqVO deviceReqVO = new IotDevicePageReqVO();
+        BeanUtils.copyProperties(pageReqVO, deviceReqVO);
+        deviceReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<IotDeviceRespVO> relationDevices = iotDeviceService.statusRelationDevices(deviceReqVO).getList();
+        List<Long> deviceIds = new ArrayList<>();
+
+        if (CollUtil.isNotEmpty(relationDevices)) {
+            relationDevices.forEach(device -> {
+                deviceIds.add(device.getId());
+            });
+        }
+        if (CollUtil.isEmpty(deviceIds)) {
+            deviceIds.add(Long.MAX_VALUE);
+        }
+        pageReqVO.setDeviceIds(deviceIds);
         List<IotDevicePersonLogDO> list = iotDevicePersonLogService.getIotDevicePersonLogPage(pageReqVO).getList();
+        List<IotDevicePersonLogRespVO> devicePersonLogs = buildDevicePersonList(list);
+        if (CollUtil.isNotEmpty(devicePersonLogs)) {
+            devicePersonLogs.forEach(log -> {
+                // 创建时间 格式化 yyyy-MM-dd
+                if (ObjUtil.isNotEmpty(log.getCreateTime())) {
+                    log.setCreateTimeStr(LocalDateTimeUtil.format(log.getCreateTime(), DatePattern.NORM_DATETIME_PATTERN));
+                }
+                // 设备名称 去掉多语言标识
+                String deviceName = log.getDeviceName();
+                if (StrUtil.isNotBlank(deviceName) && deviceName.contains("~~")) {
+                    // 截取首次~~之前的部分
+                    String processedName = deviceName.substring(0, deviceName.indexOf("~~"));
+                    log.setDeviceName(processedName);
+                }
+            });
+        }
         // 导出 Excel
-        ExcelUtils.write(response, "设备责任人日志.xls", "数据", IotDevicePersonLogRespVO.class,
-                        BeanUtils.toBean(list, IotDevicePersonLogRespVO.class));
+        ExcelUtils.write(response, "设备责任人调整日志列表.xls", "设备责任人调整日志列表", IotDevicePersonLogRespVO.class,
+                devicePersonLogs);
     }
 
 }

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicepersonlog/vo/IotDevicePersonLogPageReqVO.java

@@ -8,6 +8,7 @@ import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.Collection;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -42,4 +43,9 @@ public class IotDevicePersonLogPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "设备id集合", example = "12,13")
+    private Collection<Long> deviceIds;
 }

+ 24 - 23
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicepersonlog/vo/IotDevicePersonLogRespVO.java

@@ -12,60 +12,61 @@ import java.time.LocalDateTime;
 @ExcelIgnoreUnannotated
 public class IotDevicePersonLogRespVO {
 
+    @Schema(description = "设备编码", example = "YF001")
+    @ExcelProperty("设备编码")
+    private String deviceCode;
+
+    @Schema(description = "设备名称", example = "钻机")
+    @ExcelProperty("设备名称")
+    private String deviceName;
+
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14500")
-    @ExcelProperty("主键id")
     private Long id;
 
     @Schema(description = "设备id", example = "14117")
-    @ExcelProperty("设备id")
     private Long deviceId;
 
     @Schema(description = "设备调整前责任人", example = "12055")
-    @ExcelProperty("设备调整前责任人")
     private Long oldPersonId;
 
     @Schema(description = "设备调整前责任人id集合")
-    @ExcelProperty("设备调整前责任人id集合")
     private String oldPersonIds;
 
     @Schema(description = "设备调整后责任人", example = "29347")
-    @ExcelProperty("设备调整后责任人")
     private Long newPersonId;
 
     @Schema(description = "设备调整后责任人id集合")
-    @ExcelProperty("设备调整后责任人id集合")
     private String newPersonIds;
 
+    @Schema(description = "修改前责任人姓名 逗号分隔", example = "张三,李四")
+    @ExcelProperty("调整前责任人")
+    private String oldPersonNames;
+
+    @Schema(description = "修改后责任人姓名 逗号分隔", example = "张三,李四")
+    @ExcelProperty("调整后责任人")
+    private String newPersonNames;
+
     @Schema(description = "调整原因", example = "不好")
     @ExcelProperty("调整原因")
     private String reason;
 
     @Schema(description = "备注", example = "你猜")
-    @ExcelProperty("备注")
     private String remark;
 
     @Schema(description = "创建时间")
-    @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
-    /**
-     * 扩展字段
-     */
-    @Schema(description = "设备编码", example = "YF001")
-    private String deviceCode;
-
-    @Schema(description = "设备名称", example = "钻机")
-    private String deviceName;
-
-    @Schema(description = "修改前责任人姓名 逗号分隔", example = "张三,李四")
-    private String oldPersonNames;
-
-    @Schema(description = "修改后责任人姓名 逗号分隔", example = "张三,李四")
-    private String newPersonNames;
-
     @Schema(description = "创建人姓名", example = "张三")
+    @ExcelProperty("调整人")
     private String creatorName;
 
+    @Schema(description = "创建时间")
+    @ExcelProperty("调整时间")
+    private String createTimeStr;
+
+    /**
+     * 扩展字段
+     */
     @Schema(description = "创建人id", example = "101")
     private String creator;
 }

+ 77 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicestatuslog/IotDeviceStatusLogController.java

@@ -1,6 +1,10 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotdevicestatuslog;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -12,12 +16,15 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicestatuslog.vo.IotDeviceStatusLogPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicestatuslog.vo.IotDeviceStatusLogRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicestatuslog.vo.IotDeviceStatusLogSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicestatuslog.IotDeviceStatusLogDO;
 import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotdevicestatuslog.IotDeviceStatusLogService;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
+import cn.iocoder.yudao.module.system.service.dict.DictDataService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -29,9 +36,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Stream;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -50,6 +55,8 @@ public class IotDeviceStatusLogController {
     private IotDeviceService iotDeviceService;
     @Resource
     private AdminUserApi adminUserApi;
+    @Resource
+    private DictDataService dictDataService;
 
     @PostMapping("/create")
     @Operation(summary = "创建设备状态调整日志")
@@ -94,16 +101,80 @@ public class IotDeviceStatusLogController {
     }
 
     @GetMapping("/export-excel")
-    @Operation(summary = "导出设备状态调整日志 Excel")
+    @Operation(summary = "导出设备状态调整日志列表 Excel")
     @PreAuthorize("@ss.hasPermission('pms:iot-device-status-log:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportIotDeviceStatusLogExcel(@Valid IotDeviceStatusLogPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        // 先查询符合条件的设备id集合 再根据deviceIds集合查询对应的调拨记录
+        IotDevicePageReqVO deviceReqVO = new IotDevicePageReqVO();
+        BeanUtils.copyProperties(pageReqVO, deviceReqVO);
+        deviceReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<IotDeviceRespVO> relationDevices = iotDeviceService.statusRelationDevices(deviceReqVO).getList();
+        List<Long> deviceIds = new ArrayList<>();
+
+        if (CollUtil.isNotEmpty(relationDevices)) {
+            relationDevices.forEach(device -> {
+                deviceIds.add(device.getId());
+            });
+        }
+        if (CollUtil.isEmpty(deviceIds)) {
+            deviceIds.add(Long.MAX_VALUE);
+        }
+        pageReqVO.setDeviceIds(deviceIds);
         List<IotDeviceStatusLogDO> list = iotDeviceStatusLogService.getIotDeviceStatusLogPage(pageReqVO).getList();
+        List<IotDeviceStatusLogRespVO> deviceStatusLogs = buildDeviceStatusList(list);
+        // 查询设备状态字典表
+        // key施工状态数据字典value   value施工状态数据字典label
+        Map<String, String> deviceStatusPair = new HashMap<>();
+        // 施工状态 字典数据
+        List<DictDataDO> deviceStatusData = dictDataService.getDictDataListByDictType("pms_device_status");
+        if (CollUtil.isNotEmpty(deviceStatusData)) {
+            deviceStatusData.forEach(data -> {
+                deviceStatusPair.put(data.getValue(), data.getLabel());
+            });
+        }
+        if (CollUtil.isNotEmpty(deviceStatusLogs)) {
+            deviceStatusLogs.forEach(log -> {
+                // 创建时间 格式化 yyyy-MM-dd
+                if (ObjUtil.isNotEmpty(log.getCreateTime())) {
+                    log.setCreateTimeStr(LocalDateTimeUtil.format(log.getCreateTime(), DatePattern.NORM_DATETIME_PATTERN));
+                }
+                // 设备名称 去掉多语言标识
+                String deviceName = log.getDeviceName();
+                if (StrUtil.isNotBlank(deviceName) && deviceName.contains("~~")) {
+                    // 截取首次~~之前的部分
+                    String processedName = deviceName.substring(0, deviceName.indexOf("~~"));
+                    log.setDeviceName(processedName);
+                }
+                // 调整前状态 去掉 多语言标识
+                if (StrUtil.isNotBlank(log.getOldStatus()) && deviceStatusPair.containsKey(log.getOldStatus())) {
+                    String oldStatus = deviceStatusPair.get(log.getOldStatus());
+                    if (oldStatus.contains("~~")) {
+                        // 截取首次~~之前的部分
+                        String processedName = oldStatus.substring(0, oldStatus.indexOf("~~"));
+                        log.setOldStatus(processedName);
+                    } else {
+                        log.setOldStatus(oldStatus);
+                    }
+                }
+                // 调整后状态 去掉 多语言标识
+                if (StrUtil.isNotBlank(log.getNewStatus()) && deviceStatusPair.containsKey(log.getNewStatus())) {
+                    String newStatus = deviceStatusPair.get(log.getNewStatus());
+                    if (newStatus.contains("~~")) {
+                        // 截取首次~~之前的部分
+                        String processedName = newStatus.substring(0, newStatus.indexOf("~~"));
+                        log.setNewStatus(processedName);
+                    } else {
+                        log.setNewStatus(newStatus);
+                    }
+                }
+            });
+        }
         // 导出 Excel
-        ExcelUtils.write(response, "设备状态调整日志.xls", "数据", IotDeviceStatusLogRespVO.class,
-                        BeanUtils.toBean(list, IotDeviceStatusLogRespVO.class));
+        ExcelUtils.write(response, "设备调拨日志.xls", "设备调拨日志", IotDeviceStatusLogRespVO.class,
+                deviceStatusLogs);
     }
 
     private List<IotDeviceStatusLogRespVO> buildDeviceStatusList(List<IotDeviceStatusLogDO> deviceStatuses) {

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicestatuslog/vo/IotDeviceStatusLogPageReqVO.java

@@ -8,6 +8,7 @@ import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.Collection;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -36,4 +37,9 @@ public class IotDeviceStatusLogPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "设备id集合", example = "12,13")
+    private Collection<Long> deviceIds;
 }

+ 19 - 17
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicestatuslog/vo/IotDeviceStatusLogRespVO.java

@@ -12,47 +12,49 @@ import java.time.LocalDateTime;
 @ExcelIgnoreUnannotated
 public class IotDeviceStatusLogRespVO {
 
+    @Schema(description = "设备名称", example = "钻机")
+    @ExcelProperty("设备名称")
+    private String deviceName;
+
+    @Schema(description = "设备编码", example = "YF001")
+    @ExcelProperty("设备编码")
+    private String deviceCode;
+
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8781")
-    @ExcelProperty("主键id")
     private Long id;
 
     @Schema(description = "设备id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23664")
-    @ExcelProperty("设备id")
     private Long deviceId;
 
     @Schema(description = "设备修改前状态", example = "2")
-    @ExcelProperty("设备修改前状态")
+    @ExcelProperty("调整前状态")
     private String oldStatus;
 
     @Schema(description = "设备修改后状态", example = "1")
-    @ExcelProperty("设备修改后状态")
+    @ExcelProperty("调整后状态")
     private String newStatus;
 
     @Schema(description = "设备状态调整原因", example = "不对")
-    @ExcelProperty("设备状态调整原因")
+    @ExcelProperty("调整原因")
     private String reason;
 
+    @Schema(description = "创建人姓名", example = "张三")
+    @ExcelProperty("调整人")
+    private String creatorName;
+
     @Schema(description = "备注", example = "你说的对")
-    @ExcelProperty("备注")
     private String remark;
 
     @Schema(description = "创建时间")
-    @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "创建时间")
+    @ExcelProperty("调整时间")
+    private String createTimeStr;
+
     /**
      * 扩展属性
      */
-    @Schema(description = "设备编码", example = "YF001")
-    private String deviceCode;
-
-    @Schema(description = "设备名称", example = "钻机")
-    private String deviceName;
-
-    @Schema(description = "创建人姓名", example = "张三")
-    private String creatorName;
-
     @Schema(description = "创建人id", example = "101")
     private String creator;
-
 }

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotdevicestatuslog/IotDeviceStatusLogMapper.java

@@ -18,12 +18,13 @@ public interface IotDeviceStatusLogMapper extends BaseMapperX<IotDeviceStatusLog
     default PageResult<IotDeviceStatusLogDO> selectPage(IotDeviceStatusLogPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<IotDeviceStatusLogDO>()
                 .eqIfPresent(IotDeviceStatusLogDO::getDeviceId, reqVO.getDeviceId())
+                .inIfPresent(IotDeviceStatusLogDO::getDeviceId, reqVO.getDeviceIds())
                 .eqIfPresent(IotDeviceStatusLogDO::getOldStatus, reqVO.getOldStatus())
                 .eqIfPresent(IotDeviceStatusLogDO::getNewStatus, reqVO.getNewStatus())
                 .eqIfPresent(IotDeviceStatusLogDO::getReason, reqVO.getReason())
                 .eqIfPresent(IotDeviceStatusLogDO::getRemark, reqVO.getRemark())
                 .betweenIfPresent(IotDeviceStatusLogDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(IotDeviceStatusLogDO::getId));
+                .orderByDesc(IotDeviceStatusLogDO::getDeviceId));
     }
 
 }

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotRyDailyReportMapper.xml

@@ -150,6 +150,9 @@
                 #{key}
             </foreach>
         </if>
+        <if test="reqVO.projectClassification != null and reqVO.projectClassification !=''">
+            AND rdr.project_classification = #{reqVO.projectClassification}
+        </if>
         <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
             <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
             <if test="reqVO.createTime[0] != null">
@@ -254,6 +257,9 @@
                 #{key}
             </foreach>
         </if>
+        <if test="reqVO.projectClassification != null and reqVO.projectClassification !=''">
+            AND rdr.project_classification = #{reqVO.projectClassification}
+        </if>
         <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
             <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
             <if test="reqVO.createTime[0] != null">