Эх сурвалжийг харах

pms 瑞都 日报工作量能耗列表导出

zhangcl 2 өдөр өмнө
parent
commit
6aa5dd3a96

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

@@ -66,6 +66,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.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -2507,4 +2508,51 @@ public class IotRdDailyReportController {
                 result);
     }
 
+    @GetMapping("/exportStatistics")
+    @Operation(summary = "导出瑞都日报工作量汇总 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportStatistics(@Valid IotRdDailyReportPageReqVO 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<IotRdDailyReportStatisticsRespVO> statistics = iotRdDailyReportService.summaryStatistics(pageReqVO);
+        // 修改油耗单位 为 万升
+        if (CollUtil.isNotEmpty(statistics)) {
+            statistics.forEach(stat -> {
+                BigDecimal totalDailyFuel = stat.getTotalDailyFuel();
+                BigDecimal fuelWan = totalDailyFuel
+                        .divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP);
+                stat.setTotalDailyFuel(fuelWan);
+            });
+        }
+        // 导出 Excel
+        ExcelUtils.write(response, "瑞都日报汇总.xls", "日报汇总数据",
+                IotRdDailyReportStatisticsRespExportVO.class, BeanUtils.toBean(statistics, IotRdDailyReportStatisticsRespExportVO.class));
+    }
+
 }

+ 112 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportStatisticsRespExportVO.java

@@ -0,0 +1,112 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 瑞都日报 统计 导出 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class IotRdDailyReportStatisticsRespExportVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13853")
+    private Long id;
+
+    @Schema(description = "项目部id", example = "125")
+    private Long deptId;
+
+    @Schema(description = "项目部id", example = "125")
+    private Long projectDeptId;
+
+    @Schema(description = "项目部名称", example = "西南压裂项目部")
+    @ExcelProperty("项目部名称")
+    private String projectDeptName;
+
+    @Schema(description = "队伍名称", example = "压裂二队")
+    @ExcelProperty("队伍名称")
+    private String deptName;
+
+    @Schema(description = "队伍id", example = "125")
+    private Long teamId;
+
+    @Schema(description = "队伍名称", example = "HY-A1")
+    @ExcelProperty("队伍名称")
+    private String teamName;
+
+    @Schema(description = "部门类型(公司级1 项目部2 队伍3)", example = "1")
+    private String type;
+
+    @Schema(description = "任务id", example = "15678")
+    private Long taskId;
+
+    @Schema(description = "甲方")
+    private String manufactureName;
+
+    @Schema(description = "井号")
+    private String wellName;
+
+    @Schema(description = "施工周期 天")
+    private String period;
+
+    @Schema(description = "施工状态")
+    private String rdStatus;
+
+    @Schema(description = "施工状态")
+    private String rdStatusLabel;
+
+    @Schema(description = "施工工艺 多个逗号分隔")
+    private String techniques;
+
+    @Schema(description = "总工作量")
+    private BigDecimal workloadDesign;
+
+    @Schema(description = "已完成工作量")
+    private BigDecimal finishedWorkload;
+
+    @Schema(description = "任务创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "油耗L")
+    @ExcelProperty("油耗(万升)")
+    private BigDecimal totalDailyFuel;
+
+    @Schema(description = "排序", example = "1")
+    private Integer sort;
+
+    @Schema(description = "工作量明细")
+    private List<IotRdDailyReportStatisticsItemVO> items;
+
+    // 汇总统计 工作量
+    @Schema(description = "桥塞(个数)")
+    @ExcelProperty("桥塞")
+    private BigDecimal cumulativeBridgePlug;
+    @Schema(description = "趟数")
+    @ExcelProperty("趟数")
+    private BigDecimal cumulativeRunCount;
+    @Schema(description = "井数")
+    @ExcelProperty("井数")
+    private BigDecimal cumulativeWorkingWell;
+    @Schema(description = "小时H")
+    @ExcelProperty("小时H")
+    private BigDecimal cumulativeHourCount;
+    @Schema(description = "水方量(方)")
+    @ExcelProperty("水方量(方)")
+    private BigDecimal cumulativeWaterVolume;
+    @Schema(description = "段数  累计施工-层")
+    @ExcelProperty("段数")
+    private BigDecimal cumulativeWorkingLayers;
+    @Schema(description = "台次 当日仪表/混砂")
+    @ExcelProperty("仪表/混砂台次")
+    private BigDecimal cumulativeMixSand;
+    @Schema(description = "台次 当日泵车台次")
+    @ExcelProperty("泵车台次")
+    private BigDecimal cumulativePumpTrips;
+
+    @Schema(description = "台次 泵车台次 仪表/混砂")
+    private BigDecimal taici;
+}

+ 8 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportServiceImpl.java

@@ -50,6 +50,7 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -1306,7 +1307,13 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
             statistics.setCumulativeWorkingLayers(cumulativeWorkingLayersPair.get(deptId));
             statistics.setCumulativeMixSand(cumulativeMixSandPair.get(deptId));
             statistics.setCumulativePumpTrips(cumulativePumpTripsPair.get(deptId));
-            statistics.setTotalDailyFuel(cumulativeFuelsPair.get(deptId));
+            BigDecimal cumulativeFuel = cumulativeFuelsPair.get(deptId);
+            if (ObjUtil.isNotEmpty(cumulativeFuel)) {
+                // 油耗单位转换成 万升
+                BigDecimal FuelWan = cumulativeFuel
+                        .divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP);
+                statistics.setTotalDailyFuel(FuelWan);
+            }
             result.add(statistics);
         });