瀏覽代碼

pms 瑞恒 瑞鹰 日报 汇总页面 导出

zhangcl 13 小時之前
父節點
當前提交
3b4b5a70af

+ 52 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrhdailyreport/IotRhDailyReportController.java

@@ -554,4 +554,56 @@ public class IotRhDailyReportController {
                 buildRhDailyReports(list));
     }
 
+    @GetMapping("/exportStatistics")
+    @Operation(summary = "导出瑞恒日报汇总 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rh-daily-report:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportStatistics(@Valid IotRhDailyReportPageReqVO pageReqVO,
+                                            HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        // 根据查询参数筛选出 符合条件 的记录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<IotRhDailyReportStatisticsRespVO> statistics = iotRhDailyReportService.statistics(pageReqVO);
+        // 设置 运行时效 转换为 %
+        if (CollUtil.isNotEmpty(statistics)) {
+            statistics.forEach(stat -> {
+                BigDecimal transitTime = stat.getTransitTime();
+                if (ObjUtil.isEmpty(transitTime) || transitTime.compareTo(BigDecimal.ZERO) == 0) {
+                    stat.setTransitTimePercent("0.00%");
+                } else {
+                    // 转换逻辑:乘以100 → 保留2位小数(四舍五入)→ 拼接%
+                    BigDecimal percent = transitTime.multiply(new BigDecimal("100"))
+                            .setScale(2, RoundingMode.HALF_UP);
+                    stat.setTransitTimePercent(percent + "%");
+                }
+            });
+        }
+        // 导出 Excel
+        ExcelUtils.write(response, "瑞恒日报汇总.xls", "日报汇总数据",
+                IotRhDailyReportStatisticsRespVO.class, statistics);
+    }
+
 }

+ 6 - 9
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrhdailyreport/vo/IotRhDailyReportStatisticsRespVO.java

@@ -13,15 +13,12 @@ import java.math.BigDecimal;
 public class IotRhDailyReportStatisticsRespVO {
 
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13853")
-    @ExcelProperty("主键id")
     private Long id;
 
     @Schema(description = "项目部id", example = "125")
-    @ExcelProperty("项目部id")
     private Long projectDeptId;
 
     @Schema(description = "队伍id", example = "125")
-    @ExcelProperty("队伍id")
     private Long teamId;
 
     @Schema(description = "项目部名称", example = "塔河项目部")
@@ -33,23 +30,20 @@ public class IotRhDailyReportStatisticsRespVO {
     private String teamName;
 
     @Schema(description = "任务id", example = "15678")
-    @ExcelProperty("任务id")
     private Long taskId;
 
     @Schema(description = "排序", example = "1")
-    @ExcelProperty("排序")
     private Integer sort;
 
     @Schema(description = "部门类型(公司级1 项目部2 队伍3)", example = "1")
-    @ExcelProperty("部门类型(公司级1 项目部2 队伍3)")
     private String type;
 
     @Schema(description = "累计注气量(方)")
     @ExcelProperty("累计注气量(方)")
     private BigDecimal cumulativeGasInjection = BigDecimal.ZERO;
 
-    @Schema(description = "累计注量(方)")
-    @ExcelProperty("累计注量(方)")
+    @Schema(description = "累计注量(方)")
+    @ExcelProperty("累计注量(方)")
     private BigDecimal cumulativeWaterInjection = BigDecimal.ZERO;
 
     @Schema(description = "累计用电量(kWh)")
@@ -61,7 +55,10 @@ public class IotRhDailyReportStatisticsRespVO {
     private BigDecimal cumulativeFuelConsumption = BigDecimal.ZERO;
 
     @Schema(description = "运行时效")
-    @ExcelProperty("运行时效")
     private BigDecimal transitTime = BigDecimal.ZERO;
 
+    @Schema(description = "运行时效")
+    @ExcelProperty("运行时效")
+    private String transitTimePercent;
+
 }

+ 60 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/IotRyDailyReportController.java

@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
@@ -435,4 +436,63 @@ public class IotRyDailyReportController {
                         BeanUtils.toBean(list, IotRyDailyReportRespVO.class));
     }
 
+    @GetMapping("/exportStatistics")
+    @Operation(summary = "导出瑞鹰日报汇总 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-ry-daily-report:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportStatistics(@Valid IotRyDailyReportPageReqVO pageReqVO,
+                                 HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        // 根据查询参数筛选出 符合条件 的记录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<IotRyDailyReportStatisticsRespVO> statistics = iotRyDailyReportService.statistics(pageReqVO);
+        if (CollUtil.isNotEmpty(statistics)) {
+            statistics.forEach(stat -> {
+                BigDecimal transitTime = stat.getTransitTime();
+                if (ObjUtil.isEmpty(transitTime) || transitTime.compareTo(BigDecimal.ZERO) == 0) {
+                    stat.setTransitTimePercent("0.00%");
+                } else {
+                    // 转换逻辑:乘以100 → 保留2位小数(四舍五入)→ 拼接%
+                    BigDecimal percent = transitTime.multiply(new BigDecimal("100"))
+                            .setScale(2, RoundingMode.HALF_UP);
+                    stat.setTransitTimePercent(percent + "%");
+                }
+            });
+        }
+        String sheetName = StrUtil.EMPTY;
+        if ("1".equals(pageReqVO.getProjectClassification())) {
+            // 钻井日报汇总数据
+            sheetName = "钻井日报汇总数据";
+        } else {
+            // 修井日报汇总数据
+            sheetName = "修井日报汇总数据";
+        }
+        // 导出 Excel
+        ExcelUtils.write(response, "瑞鹰日报汇总.xls", sheetName,
+                IotRyDailyReportStatisticsRespVO.class, statistics);
+    }
+
 }

+ 4 - 7
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/vo/IotRyDailyReportStatisticsRespVO.java

@@ -13,15 +13,12 @@ import java.math.BigDecimal;
 public class IotRyDailyReportStatisticsRespVO {
 
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13853")
-    @ExcelProperty("主键id")
     private Long id;
 
     @Schema(description = "项目部id", example = "125")
-    @ExcelProperty("项目部id")
     private Long projectDeptId;
 
     @Schema(description = "队伍id", example = "125")
-    @ExcelProperty("队伍id")
     private Long teamId;
 
     @Schema(description = "项目部名称", example = "新疆项目部")
@@ -33,15 +30,12 @@ public class IotRyDailyReportStatisticsRespVO {
     private String teamName;
 
     @Schema(description = "任务id", example = "15678")
-    @ExcelProperty("任务id")
     private Long taskId;
 
     @Schema(description = "排序", example = "1")
-    @ExcelProperty("排序")
     private Integer sort;
 
     @Schema(description = "部门类型(公司级1 项目部2 队伍3)", example = "1")
-    @ExcelProperty("部门类型(公司级1 项目部2 队伍3)")
     private String type;
 
     @Schema(description = "累计进尺(m)")
@@ -65,7 +59,10 @@ public class IotRyDailyReportStatisticsRespVO {
     private BigDecimal cumulativeFuelConsumption = BigDecimal.ZERO;
 
     @Schema(description = "运行时效")
-    @ExcelProperty("运行时效")
     private BigDecimal transitTime = BigDecimal.ZERO;
 
+    @Schema(description = "运行时效")
+    @ExcelProperty("运行时效")
+    private String transitTimePercent;
+
 }