فهرست منبع

pms 瑞都导出非生产时效列表

zhangcl 3 هفته پیش
والد
کامیت
7373d4316b

+ 56 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/IotRdDailyReportController.java

@@ -1213,6 +1213,62 @@ public class IotRdDailyReportController {
         return success(resultMap);
     }
 
+    @GetMapping("/exportNptStatistics")
+    @Operation(summary = "导出 瑞都日报 非生产时效 统计")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:export')")
+    public void exportNptStatistics(@Valid IotRdDailyReportPageReqVO pageReqVO,
+                                    HttpServletResponse response) throws IOException {
+        // 根据查询参数筛选出 符合条件 的记录id 再传入 分页查询
+        Set<Long> projectIds = new HashSet<>();
+        Set<Long> taskIds = new HashSet<>();
+        if (StrUtil.isNotBlank(pageReqVO.getContractName())) {
+            IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
+            reqVO.setContractName(pageReqVO.getContractName());
+            List<IotProjectInfoDO> projects = iotProjectInfoService.getIotProjectInfos(reqVO);
+            if (CollUtil.isNotEmpty(projects)) {
+                projects.forEach(project -> {
+                    projectIds.add(project.getId());
+                });
+                pageReqVO.setProjectIds(projectIds);
+            }
+        }
+        if (StrUtil.isNotBlank(pageReqVO.getTaskName())) {
+            IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
+            reqVO.setSearchKey(pageReqVO.getTaskName());
+            List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(reqVO);
+            if (CollUtil.isNotEmpty(tasks)) {
+                tasks.forEach(task -> {
+                    taskIds.add(task.getId());
+                });
+                pageReqVO.setTaskIds(taskIds);
+            }
+        }
+        List<IotRdDailyReportNptStatisticsRespVO> statistics = iotRdDailyReportService.nptStatistics(pageReqVO);
+
+        if (CollUtil.isNotEmpty(statistics)) {
+            statistics.forEach(stat -> {
+                // 将npt合计占比转换成 % 形式
+                BigDecimal nptRate = stat.getNptRate();
+                if (ObjUtil.isEmpty(nptRate) || nptRate.compareTo(BigDecimal.ZERO) == 0) {
+                    stat.setNptRateFormat("0.00%");
+                } else {
+                    // 转换逻辑:乘以100 → 保留2位小数(四舍五入)→ 拼接%
+                    BigDecimal percent = nptRate.multiply(new BigDecimal("100"))
+                            .setScale(2, RoundingMode.HALF_UP);
+                    stat.setNptRateFormat(percent + "%");
+                }
+            });
+        }
+
+        String sheetName = StrUtil.EMPTY;
+        // 瑞都日报汇总数据
+        sheetName = "瑞都日报NPT汇总";
+        // 导出 Excel
+        ExcelUtils.write(response, "瑞都日报非生产时效汇总.xls", sheetName,
+                IotRdDailyReportNptStatisticsRespVO.class, statistics);
+
+    }
+
     @GetMapping("/abnormalAlert")
     @Operation(summary = "瑞都日报 看板 异常警示")
     @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:query')")

+ 12 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportNptStatisticsRespVO.java

@@ -22,11 +22,9 @@ public class IotRdDailyReportNptStatisticsRespVO {
     private Long projectDeptId;
 
     @Schema(description = "项目部名称", example = "西南压裂项目部")
-    @ExcelProperty("项目部名称")
     private String projectDeptName;
 
     @Schema(description = "队伍名称", example = "压裂二队")
-    @ExcelProperty("队伍名称")
     private String deptName;
 
     @Schema(description = "队伍id", example = "125")
@@ -43,7 +41,6 @@ public class IotRdDailyReportNptStatisticsRespVO {
     private Long taskId;
 
     @Schema(description = "井号")
-    @ExcelProperty("井号")
     private String wellName;
 
     @Schema(description = "排序", example = "1")
@@ -97,12 +94,21 @@ public class IotRdDailyReportNptStatisticsRespVO {
     @ExcelProperty("其它非生产时间H")
     private BigDecimal otherNptTime;
 
-    @Schema(description = "自然时间H")
-    private BigDecimal calendarTime;
-
     @Schema(description = "非生产时效")
     private BigDecimal nptRate = BigDecimal.ZERO;
 
     @Schema(description = "NPT合计")
+    @ExcelProperty("NPT合计时长H")
     private BigDecimal nptTotal;
+
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "非生产时效 %形式")
+    @ExcelProperty("NPT合计占比")
+    private String nptRateFormat;
+
+    @Schema(description = "自然时间H")
+    @ExcelProperty("自然时间H")
+    private BigDecimal calendarTime;
 }