Browse Source

pms 瑞都日报导出

zhangcl 1 day ago
parent
commit
3689ed8dfc

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

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport;
 package cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@@ -23,7 +24,9 @@ import cn.iocoder.yudao.module.pms.service.iotprojectinfo.IotProjectInfoService;
 import cn.iocoder.yudao.module.pms.service.iotprojecttask.IotProjectTaskService;
 import cn.iocoder.yudao.module.pms.service.iotprojecttask.IotProjectTaskService;
 import cn.iocoder.yudao.module.pms.service.iotrhdailyreport.IotRhDailyReportService;
 import cn.iocoder.yudao.module.pms.service.iotrhdailyreport.IotRhDailyReportService;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import cn.iocoder.yudao.module.system.service.dict.DictDataService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -36,6 +39,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.atomic.AtomicReference;
 
 
@@ -58,6 +62,8 @@ public class IotRhDailyReportController {
     private IotProjectInfoService iotProjectInfoService;
     private IotProjectInfoService iotProjectInfoService;
     @Resource
     @Resource
     private IotProjectTaskService iotProjectTaskService;
     private IotProjectTaskService iotProjectTaskService;
+    @Resource
+    private DictDataService dictDataService;
 
 
     @PostMapping("/create")
     @PostMapping("/create")
     @Operation(summary = "创建瑞恒日报")
     @Operation(summary = "创建瑞恒日报")
@@ -183,10 +189,28 @@ public class IotRhDailyReportController {
         Map<Long, String> taskPair = new HashMap<>();
         Map<Long, String> taskPair = new HashMap<>();
         // key任务id   value设计注气量
         // key任务id   value设计注气量
         Map<Long, String> taskExtPropertyPair = new HashMap<>();
         Map<Long, String> taskExtPropertyPair = new HashMap<>();
+        // key施工状态数据字典value   value施工状态数据字典label
+        Map<String, String> constructStatusPair = new HashMap<>();
+        // key非生产时间原因数据字典value   value非生产时间原因数据字典label
+        Map<String, String> nptReasonPair = new HashMap<>();
         // 搬迁安装天数
         // 搬迁安装天数
         Map<Long, BigDecimal> relocationDaysPair = new HashMap<>();
         Map<Long, BigDecimal> relocationDaysPair = new HashMap<>();
         // key部门id  value产能
         // key部门id  value产能
         AtomicReference<Map<Long, BigDecimal>> capacityPair = new AtomicReference<>(new HashMap<>());
         AtomicReference<Map<Long, BigDecimal>> capacityPair = new AtomicReference<>(new HashMap<>());
+        // 施工状态 字典数据
+        List<DictDataDO> constructionStatusDictData = dictDataService.getDictDataListByDictType("constructionStatus");
+        // 非生产时间原因 字典数据
+        List<DictDataDO> nptReasonDictData = dictDataService.getDictDataListByDictType("nptReason");
+        if (CollUtil.isNotEmpty(constructionStatusDictData)) {
+            constructionStatusDictData.forEach(data -> {
+                constructStatusPair.put(data.getValue(), data.getLabel());
+            });
+        }
+        if (CollUtil.isNotEmpty(nptReasonDictData)) {
+            nptReasonDictData.forEach(data -> {
+                nptReasonPair.put(data.getValue(), data.getLabel());
+            });
+        }
         DataPermissionUtils.executeIgnore(() -> {
         DataPermissionUtils.executeIgnore(() -> {
             // 查询日报关联的项目信息
             // 查询日报关联的项目信息
             IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
             IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
@@ -229,6 +253,17 @@ public class IotRhDailyReportController {
         });
         });
         // 2. 拼接数据
         // 2. 拼接数据
         return BeanUtils.toBean(reports, IotRhDailyReportRespVO.class, (reportVO) -> {
         return BeanUtils.toBean(reports, IotRhDailyReportRespVO.class, (reportVO) -> {
+            if (ObjUtil.isNotEmpty(reportVO.getTransitTime())) {
+                // 获取原始小数
+                BigDecimal transitTime = reportVO.getTransitTime();
+                // 乘以100转换为百分比数值
+                BigDecimal percentage = transitTime.multiply(BigDecimal.valueOf(100));
+                // 格式化保留2位小数
+                DecimalFormat df = new DecimalFormat("0.00");
+                String transitTimeRate = df.format(percentage) + "%";
+                // 赋值
+                reportVO.setTransitTimeRate(transitTimeRate);
+            }
             // 2.1 拼接部门信息
             // 2.1 拼接部门信息
             findAndThen(deptMap, reportVO.getDeptId(), dept -> reportVO.setDeptName(dept.getName()));
             findAndThen(deptMap, reportVO.getDeptId(), dept -> reportVO.setDeptName(dept.getName()));
             // 2.2 日报关联的项目信息
             // 2.2 日报关联的项目信息
@@ -241,6 +276,10 @@ public class IotRhDailyReportController {
             findAndThen(relocationDaysPair, reportVO.getDeptId(), relocationDays -> reportVO.setRelocationDays(relocationDays));
             findAndThen(relocationDaysPair, reportVO.getDeptId(), relocationDays -> reportVO.setRelocationDays(relocationDays));
             // 2.6 产能
             // 2.6 产能
             findAndThen(capacityPair.get(), reportVO.getDeptId(), capacity -> reportVO.setCapacity(capacity));
             findAndThen(capacityPair.get(), reportVO.getDeptId(), capacity -> reportVO.setCapacity(capacity));
+            // 施工状态 数据字典
+            findAndThen(constructStatusPair, reportVO.getConstructionStatus(), statusLabel -> reportVO.setConstructionStatusName(statusLabel));
+            // 非生产时间原因 数据字典
+            findAndThen(nptReasonPair, reportVO.getNptReason(), statusLabel -> reportVO.setNptReasonName(statusLabel));
         });
         });
     }
     }
 
 
@@ -251,10 +290,35 @@ public class IotRhDailyReportController {
     public void exportIotRhDailyReportExcel(@Valid IotRhDailyReportPageReqVO pageReqVO,
     public void exportIotRhDailyReportExcel(@Valid IotRhDailyReportPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         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<IotRhDailyReportDO> list = iotRhDailyReportService.getIotRhDailyReportPage(pageReqVO).getList();
         List<IotRhDailyReportDO> list = iotRhDailyReportService.getIotRhDailyReportPage(pageReqVO).getList();
         // 导出 Excel
         // 导出 Excel
         ExcelUtils.write(response, "瑞恒日报.xls", "数据", IotRhDailyReportRespVO.class,
         ExcelUtils.write(response, "瑞恒日报.xls", "数据", IotRhDailyReportRespVO.class,
-                        BeanUtils.toBean(list, IotRhDailyReportRespVO.class));
+                buildRhDailyReports(list));
     }
     }
 
 
 }
 }

+ 41 - 41
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrhdailyreport/vo/IotRhDailyReportRespVO.java

@@ -13,36 +13,58 @@ import java.time.LocalDateTime;
 @ExcelIgnoreUnannotated
 @ExcelIgnoreUnannotated
 public class IotRhDailyReportRespVO {
 public class IotRhDailyReportRespVO {
 
 
+    @Schema(description = "创建时间")
+    @ExcelProperty("日报生成日期")
+    private LocalDateTime createTime;
+
+    @Schema(description = "部门名称")
+    @ExcelProperty("施工队伍")
+    private String deptName;
+
+    @Schema(description = "项目/合同名称")
+    @ExcelProperty("项目")
+    private String contractName;
+
+    @Schema(description = "任务 井号-施工地点")
+    @ExcelProperty("任务")
+    private String taskName;
+
+    @Schema(description = "施工状态 对应的数据字典 label")
+    @ExcelProperty("施工状态")
+    private String constructionStatusName;
+
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5694")
     @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5694")
-    @ExcelProperty("主键id")
     private Long id;
     private Long id;
 
 
     @Schema(description = "施工队伍id", example = "17995")
     @Schema(description = "施工队伍id", example = "17995")
-    @ExcelProperty("施工队伍id")
     private Long deptId;
     private Long deptId;
 
 
     @Schema(description = "项目id", example = "24473")
     @Schema(description = "项目id", example = "24473")
-    @ExcelProperty("项目id")
     private Long projectId;
     private Long projectId;
 
 
     @Schema(description = "任务id", example = "20353")
     @Schema(description = "任务id", example = "20353")
-    @ExcelProperty("任务id")
     private Long taskId;
     private Long taskId;
 
 
     @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
     @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
-    @ExcelProperty("项目类别(钻井 修井 注氮 酸化压裂... )")
     private String projectClassification;
     private String projectClassification;
 
 
     @Schema(description = "搬迁安装天数")
     @Schema(description = "搬迁安装天数")
     @ExcelProperty("搬迁安装天数")
     @ExcelProperty("搬迁安装天数")
     private BigDecimal relocationDays;
     private BigDecimal relocationDays;
 
 
+    @Schema(description = "设计注气量")
+    @ExcelProperty("设计注气量(万方)")
+    private String designInjection;
+
     @Schema(description = "运行时效")
     @Schema(description = "运行时效")
-    @ExcelProperty("运行时效")
     private BigDecimal transitTime;
     private BigDecimal transitTime;
 
 
+    @Schema(description = "运行时效 小数转换成百分比格式")
+    @ExcelProperty("运行时效")
+    private String transitTimeRate;
+
     @Schema(description = "当日注气量(万方)")
     @Schema(description = "当日注气量(万方)")
-    @ExcelProperty("当日注气量(万方)")
+    @ExcelProperty("当日注气量(方)")
     private BigDecimal dailyGasInjection;
     private BigDecimal dailyGasInjection;
 
 
     @Schema(description = "当日注水量(方)")
     @Schema(description = "当日注水量(方)")
@@ -66,9 +88,12 @@ public class IotRhDailyReportRespVO {
     private BigDecimal nonProductionTime;
     private BigDecimal nonProductionTime;
 
 
     @Schema(description = "非生产时间原因")
     @Schema(description = "非生产时间原因")
-    @ExcelProperty("非生产时间原因")
     private String nptReason;
     private String nptReason;
 
 
+    @Schema(description = "非生产时间原因 数据字典label值")
+    @ExcelProperty("非生产时间原因")
+    private String nptReasonName;
+
     @Schema(description = "施工开始日期")
     @Schema(description = "施工开始日期")
     @ExcelProperty("施工开始日期")
     @ExcelProperty("施工开始日期")
     private LocalDateTime constructionStartDate;
     private LocalDateTime constructionStartDate;
@@ -77,24 +102,22 @@ public class IotRhDailyReportRespVO {
     @ExcelProperty("施工结束日期")
     @ExcelProperty("施工结束日期")
     private LocalDateTime constructionEndDate;
     private LocalDateTime constructionEndDate;
 
 
-    @Schema(description = "当日生产情况生产动态", example = "2")
-    @ExcelProperty("当日生产情况生产动态")
+    @Schema(description = "生产动态", example = "2")
+    @ExcelProperty("生产动态")
     private String productionStatus;
     private String productionStatus;
 
 
     @Schema(description = "下步工作计划")
     @Schema(description = "下步工作计划")
-    @ExcelProperty("下步工作计划")
     private String nextPlan;
     private String nextPlan;
 
 
     @Schema(description = "施工状态(动迁 准备 施工 完工)", example = "2")
     @Schema(description = "施工状态(动迁 准备 施工 完工)", example = "2")
-    @ExcelProperty("施工状态(动迁 准备 施工 完工)")
     private String constructionStatus;
     private String constructionStatus;
 
 
     @Schema(description = "人员情况")
     @Schema(description = "人员情况")
     @ExcelProperty("人员情况")
     @ExcelProperty("人员情况")
     private String personnel;
     private String personnel;
 
 
-    @Schema(description = "累计注气量(方)")
-    @ExcelProperty("累计注气量(方)")
+    @Schema(description = "累计注气量(方)")
+    @ExcelProperty("累计注气量(方)")
     private BigDecimal totalGasInjection;
     private BigDecimal totalGasInjection;
 
 
     @Schema(description = "累计注水量(方)")
     @Schema(description = "累计注水量(方)")
@@ -105,12 +128,14 @@ public class IotRhDailyReportRespVO {
     @ExcelProperty("累计完工井次")
     @ExcelProperty("累计完工井次")
     private BigDecimal cumulativeCompletion;
     private BigDecimal cumulativeCompletion;
 
 
+    @Schema(description = "产能")
+    @ExcelProperty("产能(方)")
+    private BigDecimal capacity;
+
     @Schema(description = "不同专业公司的扩展属性值")
     @Schema(description = "不同专业公司的扩展属性值")
-    @ExcelProperty("不同专业公司的扩展属性值")
     private String extProperty;
     private String extProperty;
 
 
     @Schema(description = "排序值")
     @Schema(description = "排序值")
-    @ExcelProperty("排序值")
     private Integer sort;
     private Integer sort;
 
 
     @Schema(description = "备注", example = "你说的对")
     @Schema(description = "备注", example = "你说的对")
@@ -118,37 +143,12 @@ public class IotRhDailyReportRespVO {
     private String remark;
     private String remark;
 
 
     @Schema(description = "状态(0启用 1禁用)", example = "2")
     @Schema(description = "状态(0启用 1禁用)", example = "2")
-    @ExcelProperty("状态(0启用 1禁用)")
     private Integer status;
     private Integer status;
 
 
     @Schema(description = "流程实例id", example = "1131")
     @Schema(description = "流程实例id", example = "1131")
-    @ExcelProperty("流程实例id")
     private String processInstanceId;
     private String processInstanceId;
 
 
     @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
     @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
-    @ExcelProperty("审批状态 未提交、审批中、审批通过、审批不通过、已取消")
     private Integer auditStatus;
     private Integer auditStatus;
 
 
-    @Schema(description = "创建时间")
-    @ExcelProperty("创建时间")
-    private LocalDateTime createTime;
-
-    /**
-     * 扩展字段
-     */
-    @Schema(description = "部门名称")
-    private String deptName;
-
-    @Schema(description = "项目/合同名称")
-    private String contractName;
-
-    @Schema(description = "任务 井号-施工地点")
-    private String taskName;
-
-    @Schema(description = "设计注气量")
-    private String designInjection;
-
-    @Schema(description = "产能")
-    private BigDecimal capacity;
-
 }
 }