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

pms 瑞都日报 油耗 显示逻辑优化。

zhangcl 1 неделя назад
Родитель
Сommit
a50600698b

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotattachment/vo/IotAttachmentPageReqVO.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;
 
@@ -45,4 +46,6 @@ public class IotAttachmentPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "业务主键id 集合", example = "3510,3610")
+    private Collection<Long> bizIds;
 }

+ 19 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/vo/IotProjectTaskPlatformVO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo;
 
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -43,4 +44,22 @@ public class IotProjectTaskPlatformVO {
 
     @Schema(description = "关联井当日油耗", example = "12.3")
     private BigDecimal dailyFuel;
+
+    @Schema(description = "当日生产情况生产动态", example = "正常施工")
+    private String productionStatus;;
+
+    @Schema(description = "下步工作计划", example = "继续施工")
+    private String nextPlan;
+
+    @Schema(description = "外租情况")
+    private String externalRental;
+
+    @Schema(description = "故障情况")
+    private String malfunction;
+
+    @Schema(description = "故障误工h")
+    private BigDecimal faultDowntime;
+
+    @Schema(description = "附件列表")
+    private List<IotAttachmentDO> attachments;
 }

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

@@ -32,6 +32,7 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoD
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotattachment.IotAttachmentMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotcarzhbd.IotCarZhbdMapper;
 import cn.iocoder.yudao.module.pms.enums.AttachmentCategoryEnum;
 import cn.iocoder.yudao.module.pms.enums.AttachmentTypeEnum;
@@ -69,6 +70,7 @@ import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -115,6 +117,8 @@ public class IotRdDailyReportController {
     private ZHBDUtil zhbdUtil;
     @Resource
     private IotDailyReportFuelService iotDailyReportFuelService;
+    @Resource
+    private IotAttachmentMapper iotAttachmentMapper;
 
     @PostMapping("/create")
     @Operation(summary = "创建瑞都日报")
@@ -195,14 +199,46 @@ public class IotRdDailyReportController {
             dailyReportVO.setVirtualProject(project.getContractSubject());
         }
         // 查询当前日报是否已经绑定了油耗信息
+        // 兼容主井完工 关联井 没有完工的情况 查询关联井的油耗信息
         boolean hasFuels = false;
-        IotDailyReportFuelPageReqVO fuelPageReqVO = new IotDailyReportFuelPageReqVO();
+        /* IotDailyReportFuelPageReqVO fuelPageReqVO = new IotDailyReportFuelPageReqVO();
         fuelPageReqVO.setType("RD");
         fuelPageReqVO.setReportId(dailyReport.getId());
-        List<IotDailyReportFuelDO> reportFuels = iotDailyReportFuelService.getIotDailyReportFuels(fuelPageReqVO);
-        if (CollUtil.isNotEmpty(reportFuels)) {
+        List<IotDailyReportFuelDO> reportFuels = iotDailyReportFuelService.getIotDailyReportFuels(fuelPageReqVO); */
+
+        // 查询所有主井 关联井 油耗
+        Map<Long, List<IotDailyReportFuelDO>> reportedFuelsPair = new HashMap<>();
+        if (1 == dailyReport.getPlatformWell()) {
+            // 查询相同平台井组关联的 日报
+            IotRdDailyReportPageReqVO reportReqVO  = new IotRdDailyReportPageReqVO();
+            reportReqVO.setPlatformGroup(dailyReport.getPlatformGroup());
+            List<IotRdDailyReportDO> reports = iotRdDailyReportService.dailyReports(reportReqVO);
+            List<Long> reportIds = convertList(reports, IotRdDailyReportDO::getId);
+            // 兼容主井 完工 关联井未完工 的情况 查询关联井的油耗信息
+            IotDailyReportFuelPageReqVO fuelReqVO = new IotDailyReportFuelPageReqVO();
+            fuelReqVO.setType("RD");
+            fuelReqVO.setReportIds(reportIds);
+            List<IotDailyReportFuelDO> reportedFuels = iotDailyReportFuelService.getIotDailyReportFuels(fuelReqVO);
+            if (CollUtil.isNotEmpty(reportedFuels)) {
+                reportedFuels.forEach(fuel -> {
+                    if (reportedFuelsPair.containsKey(fuel.getReportId())) {
+                        List<IotDailyReportFuelDO> tempFuels = reportedFuelsPair.get(fuel.getReportId());
+                        tempFuels.add(fuel);
+                        reportedFuelsPair.put(fuel.getReportId(), tempFuels);
+                    } else {
+                        List<IotDailyReportFuelDO> tempFuels = new ArrayList<>();
+                        tempFuels.add(fuel);
+                        reportedFuelsPair.put(fuel.getReportId(), tempFuels);
+                    }
+                });
+            }
+        }
+
+        if (CollUtil.isNotEmpty(reportedFuelsPair)) {
             hasFuels = true;
-            dailyReportVO.setReportedFuels(reportFuels);
+            reportedFuelsPair.forEach((reportId, fuels) -> {
+                dailyReportVO.setReportedFuels(fuels);
+            });
         }
         // 查询施工工艺字典数据
         List<DictDataDO> rdTechniquesDicts = dictDataService.getDictDataListByDictType("rq_iot_project_technology_rd");
@@ -501,6 +537,31 @@ public class IotRdDailyReportController {
             IotRdDailyReportPageReqVO reportReqVO  = new IotRdDailyReportPageReqVO();
             reportReqVO.setPlatformGroup(dailyReport.getPlatformGroup());
             List<IotRdDailyReportDO> reports = iotRdDailyReportService.dailyReports(reportReqVO);
+            // 查询所有主井 关联井 附件
+            Map<Long, List<IotAttachmentDO>> reportAttachmentsPair = new HashMap<>();
+
+            if (CollUtil.isNotEmpty(reports)) {
+                List<Long> reportIds = convertList(reports, IotRdDailyReportDO::getId);
+                // 兼容主井 完工 关联井未完工 的情况 查询关联井的附件
+                IotAttachmentPageReqVO attachmentReqVO = new IotAttachmentPageReqVO();
+                attachmentReqVO.setBizIds(reportIds);
+                attachmentReqVO.setCategory(AttachmentCategoryEnum.DAILY_REPORT.getCode());
+                attachmentReqVO.setType(AttachmentTypeEnum.EXTERNAL_RENTAL.getCode());
+                List<IotAttachmentDO> reportsAttachments = iotAttachmentMapper.attachments(attachmentReqVO);
+                if (CollUtil.isNotEmpty(reportsAttachments)) {
+                    reportsAttachments.forEach(attachment -> {
+                        if (reportAttachmentsPair.containsKey(attachment.getBizId())) {
+                            List<IotAttachmentDO> tempAttachments = reportAttachmentsPair.get(attachment.getBizId());
+                            tempAttachments.add(attachment);
+                            reportAttachmentsPair.put(attachment.getBizId(), tempAttachments);
+                        } else {
+                            List<IotAttachmentDO> tempAttachments = new ArrayList<>();
+                            tempAttachments.add(attachment);
+                            reportAttachmentsPair.put(attachment.getBizId(), tempAttachments);
+                        }
+                    });
+                }
+            }
             // key任务id  value日报id
             Map<Long, Long> reportPair = new HashMap<>();
             // key任务id  value任务井对应日报当日油耗
@@ -532,6 +593,14 @@ public class IotRdDailyReportController {
                     }
                     platformVO.setTechniqueIds(report.getTechniqueIds());
                     platformVO.setExtProperty(report.getExtProperty());
+                    platformVO.setProductionStatus(report.getProductionStatus());
+                    platformVO.setNextPlan(report.getNextPlan());
+                    platformVO.setExternalRental(report.getExternalRental());
+                    platformVO.setMalfunction(report.getMalfunction());
+                    platformVO.setFaultDowntime(report.getFaultDowntime());
+                    if (reportAttachmentsPair.containsKey(report.getId())) {
+                        platformVO.setAttachments(reportAttachmentsPair.get(report.getId()));
+                    }
                     platformPair.put(report.getTaskId(), platformVO);
                 });
             }
@@ -554,7 +623,7 @@ public class IotRdDailyReportController {
                     }
                 });
             }
-            // 返回已经填报的油耗记录
+            // 如果主井已经 完工 则显示 首个关联井 的 生产动态 下步计划 ...
 
             List<IotProjectTaskPlatformVO> platforms = new ArrayList<>();
             if (CollUtil.isNotEmpty(tasks)) {
@@ -574,12 +643,21 @@ public class IotRdDailyReportController {
                             platform.setTechniqueIds(tempPlatform.getTechniqueIds());
                             platform.setTechniqueNames(tempPlatform.getTechniqueNames());
                             platform.setExtProperty(tempPlatform.getExtProperty());
+                            platform.setProductionStatus(tempPlatform.getProductionStatus());
+                            platform.setNextPlan(tempPlatform.getNextPlan());
+                            platform.setExternalRental(tempPlatform.getExternalRental());
+                            platform.setMalfunction(tempPlatform.getMalfunction());
+                            platform.setFaultDowntime(tempPlatform.getFaultDowntime());
+                            platform.setAttachments(tempPlatform.getAttachments());
                         }
                         platforms.add(platform);
                     }
                 });
                 dailyReportVO.setPlatforms(platforms);
             }
+
+            // 如果当前井id不存在集合 platforms 中 说明 主井已完工 关联井 未完工
+
             if (CollUtil.isEmpty(platforms)) {
                 List<IotProjectTaskPlatformVO> finishedPlatforms = new ArrayList<>();
                 // key任务井id   value任务井名称
@@ -641,6 +719,25 @@ public class IotRdDailyReportController {
                     });
                 }
                 dailyReportVO.setFinishedPlatforms(finishedPlatforms);
+            } else {
+                AtomicBoolean mainExist = new AtomicBoolean(false);
+                // 如果当前井id不存在集合 platforms 中 说明 主井已完工 关联井 未完工
+                platforms.forEach(platform -> {
+                    if (dailyReportVO.getId().equals(platform.getReportId())) {
+                        mainExist.set(true);
+                    }
+                });
+                if (!mainExist.get()) {
+                    // 主井不存在 需要显示 关联井的 主体信息 生产动态 计划 ...
+                    platforms.forEach(platform -> {
+                        dailyReportVO.setProductionStatus(platform.getProductionStatus());
+                        dailyReportVO.setNextPlan(platform.getNextPlan());
+                        dailyReportVO.setExternalRental(platform.getExternalRental());
+                        dailyReportVO.setMalfunction(platform.getMalfunction());
+                        dailyReportVO.setFaultDowntime(platform.getFaultDowntime());
+                        dailyReportVO.setAttachments(platform.getAttachments());
+                    });
+                }
             }
         }
         return dailyReportVO;

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotattachment/IotAttachmentMapper.java

@@ -35,6 +35,7 @@ public interface IotAttachmentMapper extends BaseMapperX<IotAttachmentDO> {
         return selectList(new LambdaQueryWrapperX<IotAttachmentDO>()
                 .eqIfPresent(IotAttachmentDO::getCategory, reqVO.getCategory())
                 .eqIfPresent(IotAttachmentDO::getBizId, reqVO.getBizId())
+                .inIfPresent(IotAttachmentDO::getBizId, reqVO.getBizIds())
                 .eqIfPresent(IotAttachmentDO::getType, reqVO.getType())
                 .likeIfPresent(IotAttachmentDO::getFilename, reqVO.getFilename())
                 .eqIfPresent(IotAttachmentDO::getFileType, reqVO.getFileType())

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrydailyreport/IotRyDailyReportServiceImpl.java

@@ -115,7 +115,7 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
         if (ObjUtil.isEmpty(createReqVO.getDeptId())) {
             throw exception(IOT_RH_DAILY_REPORT_NO_DEPT);
         }
-        if ((StrUtil.isBlank(createReqVO.getProjectClassification())||"1".equals(createReqVO.getProjectClassification()))
+        if ((StrUtil.isBlank(createReqVO.getProjectClassification()) || "1".equals(createReqVO.getProjectClassification()))
                 && ObjUtil.isEmpty(createReqVO.getCurrentDepth())) {
             // 钻井类型日报必须 填写当前井深
             throw exception(IOT_RY_DAILY_REPORT_CURRENT_DEPTH_NOT_EXISTS);