Ver Fonte

pms 瑞鹰 瑞都 生产动态明细 保存 列表查询

zhangcl há 6 dias atrás
pai
commit
fa85137fa1

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

@@ -2336,6 +2336,9 @@ public class IotRdDailyReportController {
         Map<Long, String> relatedPlatformsPair = new HashMap<>();
         // key施工状态数据字典value   value施工状态数据字典label
         Map<String, String> constructStatusPair = new HashMap<>();
+        // key日报id   value生产动态明细
+        Map<Long, List<IotRdDailyReportDetailRespVO>> reportDetailsPair = new HashMap<>();
+
         // 施工状态 字典数据
         List<DictDataDO> rdStatusData = dictDataService.getDictDataListByDictType("rdStatus");
         if (CollUtil.isNotEmpty(rdStatusData)) {
@@ -2349,6 +2352,28 @@ public class IotRdDailyReportController {
         Map<String, List<BigDecimal>> platformNonProductPair = new HashMap<>();
         // key平台井标识  value平台井非生产时效集合
         Map<String, BigDecimal> platformNptPair = new HashMap<>();
+
+        // 查询每个日报的生产动态明细
+        IotRdDailyReportDetailPageReqVO detailReqVO = new IotRdDailyReportDetailPageReqVO();
+        detailReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        detailReqVO.setReportIds(convertList(reports, IotRdDailyReportDO::getId));
+        PageResult<IotRdDailyReportDetailDO> reportDetailsPage = iotRdDailyReportDetailMapper.selectPage(detailReqVO);
+        List<IotRdDailyReportDetailDO> reportDetails = reportDetailsPage.getList();
+        if (CollUtil.isNotEmpty(reportDetails)) {
+            // 设置每个日报的生产动态明细
+            reportDetails.forEach(detail -> {
+                if (reportDetailsPair.containsKey(detail.getReportId())) {
+                    List<IotRdDailyReportDetailRespVO> tempDetails = reportDetailsPair.get(detail.getReportId());
+                    tempDetails.add(BeanUtils.toBean(detail, IotRdDailyReportDetailRespVO.class));
+                    reportDetailsPair.put(detail.getReportId(), tempDetails);
+                } else {
+                    List<IotRdDailyReportDetailRespVO> tempDetails = new ArrayList<>();
+                    tempDetails.add(BeanUtils.toBean(detail, IotRdDailyReportDetailRespVO.class));
+                    reportDetailsPair.put(detail.getReportId(), tempDetails);
+                }
+            });
+        }
+
         DataPermissionUtils.executeIgnore(() -> {
             // 查询日报关联的项目信息
             IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
@@ -2642,6 +2667,8 @@ public class IotRdDailyReportController {
             if (ObjUtil.isNotEmpty(reportVO.getCreateTime())) {
                 reportVO.setCreateTimeStr(LocalDateTimeUtil.format(reportVO.getCreateTime(), DatePattern.NORM_DATE_PATTERN));
             }
+            // 生产动态明细
+            findAndThen(reportDetailsPair, reportVO.getId(), details -> reportVO.setReportDetails(details));
             // 平台井 非生产时效
             findAndThen(platformNptPair, reportVO.getPlatformGroup(), npt -> reportVO.setNonProductionRate(npt));
             // 部门信息 任务中关联的施工队伍

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreportdetail/vo/IotRdDailyReportDetailPageReqVO.java

@@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Collection;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -71,4 +72,9 @@ public class IotRdDailyReportDetailPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "日报id", example = "25536")
+    private Collection<Long> reportIds;
 }

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

@@ -17,13 +17,17 @@ import cn.iocoder.yudao.module.pms.controller.admin.depttype.vo.IotDeptTypePageR
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.*;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.depttype.IotDeptTypeDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO;
 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.iotrydailyreport.IotRyDailyReportDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreportdetail.IotRyDailyReportDetailDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.depttype.IotDeptTypeMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotrydailyreport.IotRyDailyReportMapper;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotrydailyreportdetail.IotRyDailyReportDetailMapper;
 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.iotrydailyreport.IotRyDailyReportService;
@@ -74,6 +78,8 @@ public class IotRyDailyReportController {
     @Resource
     private IotRyDailyReportMapper iotRyDailyReportMapper;
     @Resource
+    private IotRyDailyReportDetailMapper iotRyDailyReportDetailMapper;
+    @Resource
     private DictDataService dictDataService;
     @Resource
     private IotDeptTypeMapper iotDeptTypeMapper;
@@ -142,6 +148,16 @@ public class IotRyDailyReportController {
         reqVO.setDeptId(deptId);
         reqVO.setTaskId(taskId);
         List<IotRyDailyReportDO> currentTaskReports = iotRyDailyReportMapper.dailyReports(reqVO);
+        // 查询日报的生产动态详情
+        IotRyDailyReportDetailPageReqVO detailReqVO = new IotRyDailyReportDetailPageReqVO();
+        detailReqVO.setReportId(iotRyDailyReport.getId());
+        detailReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        PageResult<IotRyDailyReportDetailDO> reportDetailsPage = iotRyDailyReportDetailMapper.selectPage(detailReqVO);
+        List<IotRyDailyReportDetailDO> reportDetails = reportDetailsPage.getList();
+        if (CollUtil.isNotEmpty(reportDetails)) {
+            List<IotRyDailyReportDetailRespVO> reportDetailsResp = BeanUtils.toBean(reportDetails, IotRyDailyReportDetailRespVO.class);
+            result.setReportDetails(reportDetailsResp);
+        }
         // 按照创建时间倒序排列 取第2条记录对应的 当前井深 即 上次日报的当前井深
         if (CollUtil.isNotEmpty(currentTaskReports)) {
             currentTaskReports.sort(Comparator.comparing(IotRyDailyReportDO::getCreateTime));
@@ -350,6 +366,8 @@ public class IotRyDailyReportController {
         Map<String, String> nptReasonPair = new HashMap<>();
         // key施工状态数据字典value   value施工状态数据字典label
         Map<String, String> constructStatusPair = new HashMap<>();
+        // key日报id   value生产动态明细
+        Map<Long, List<IotRyDailyReportDetailRespVO>> reportDetailsPair = new HashMap<>();
 
         // 钻井 施工状态 字典数据
         List<DictDataDO> rigStatusDictData = dictDataService.getDictDataListByDictType("rigStatus");
@@ -375,7 +393,26 @@ public class IotRyDailyReportController {
                 constructStatusPair.put(data.getValue(), data.getLabel());
             });
         }
-
+        // 查询每个日报的生产动态明细
+        IotRyDailyReportDetailPageReqVO detailReqVO = new IotRyDailyReportDetailPageReqVO();
+        detailReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        detailReqVO.setReportIds(convertList(reports, IotRyDailyReportDO::getId));
+        PageResult<IotRyDailyReportDetailDO> reportDetailsPage = iotRyDailyReportDetailMapper.selectPage(detailReqVO);
+        List<IotRyDailyReportDetailDO> reportDetails = reportDetailsPage.getList();
+        if (CollUtil.isNotEmpty(reportDetails)) {
+            // 设置每个日报的生产动态明细
+            reportDetails.forEach(detail -> {
+                if (reportDetailsPair.containsKey(detail.getReportId())) {
+                    List<IotRyDailyReportDetailRespVO> tempDetails = reportDetailsPair.get(detail.getReportId());
+                    tempDetails.add(BeanUtils.toBean(detail, IotRyDailyReportDetailRespVO.class));
+                    reportDetailsPair.put(detail.getReportId(), tempDetails);
+                } else {
+                    List<IotRyDailyReportDetailRespVO> tempDetails = new ArrayList<>();
+                    tempDetails.add(BeanUtils.toBean(detail, IotRyDailyReportDetailRespVO.class));
+                    reportDetailsPair.put(detail.getReportId(), tempDetails);
+                }
+            });
+        }
         DataPermissionUtils.executeIgnore(() -> {
             // 查询日报关联的项目信息
             IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
@@ -482,6 +519,8 @@ public class IotRyDailyReportController {
             findAndThen(taskPair, reportVO.getTaskId(), taskName -> reportVO.setTaskName(taskName));
             // 2.4 设计井深
             findAndThen(taskExtPropertyPair, reportVO.getTaskId(), wellDepth -> reportVO.setDesignWellDepth(wellDepth));
+            // 生产动态明细
+            findAndThen(reportDetailsPair, reportVO.getId(), details -> reportVO.setReportDetails(details));
             // 施工工艺
             findAndThen(taskTechniquePair, reportVO.getTaskId(), technique -> reportVO.setTechnique(technique));
             // 井别

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/vo/IotRyDailyReportRespVO.java

@@ -1,5 +1,7 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo;
 
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailSaveReqVO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -7,6 +9,7 @@ import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description = "管理后台 - 瑞鹰日报 Response VO")
 @Data
@@ -306,4 +309,7 @@ public class IotRyDailyReportRespVO {
 
     @Schema(description = "非生产时效")
     private BigDecimal nonProductionRate;
+
+    @Schema(description = "运行记录工单创建日期")
+    private List<IotRyDailyReportDetailRespVO> reportDetails;
 }

+ 5 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/vo/IotRyDailyReportSaveReqVO.java

@@ -1,10 +1,12 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo;
 
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailSaveReqVO;
 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 = "管理后台 - 瑞鹰日报新增/修改 Request VO")
 @Data
@@ -187,4 +189,7 @@ public class IotRyDailyReportSaveReqVO {
 
     @Schema(description = "编辑标识 Y N")
     private String editFlag;
+
+    @Schema(description = "运行记录工单创建日期")
+    private List<IotRyDailyReportDetailSaveReqVO> reportDetails;
 }

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreportdetail/vo/IotRyDailyReportDetailPageReqVO.java

@@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Collection;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -68,4 +69,9 @@ public class IotRyDailyReportDetailPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "日报id", example = "7685")
+    private Collection<Long> reportIds;
 }

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

@@ -21,6 +21,7 @@ public interface IotRyDailyReportDetailMapper extends BaseMapperX<IotRyDailyRepo
                 .eqIfPresent(IotRyDailyReportDetailDO::getProjectId, reqVO.getProjectId())
                 .eqIfPresent(IotRyDailyReportDetailDO::getTaskId, reqVO.getTaskId())
                 .eqIfPresent(IotRyDailyReportDetailDO::getReportId, reqVO.getReportId())
+                .inIfPresent(IotRyDailyReportDetailDO::getReportId, reqVO.getReportIds())
                 .betweenIfPresent(IotRyDailyReportDetailDO::getReportDate, reqVO.getReportDate())
                 .betweenIfPresent(IotRyDailyReportDetailDO::getStartTime, reqVO.getStartTime())
                 .betweenIfPresent(IotRyDailyReportDetailDO::getEndTime, reqVO.getEndTime())

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

@@ -15,18 +15,22 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotdevicecategorytemplateatt
 import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.*;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreportdetail.vo.IotRyDailyReportDetailSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.depttype.IotDeptTypeDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO;
 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.iotrddailyreportdetail.IotRdDailyReportDetailDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreport.IotRyDailyReportDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreportdetail.IotRyDailyReportDetailDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.IotDeviceMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.depttype.IotDeptTypeMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotopeationfill.IotOpeationFillMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask.IotProjectTaskMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotrydailyreport.IotRyDailyReportMapper;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotrydailyreportdetail.IotRyDailyReportDetailMapper;
 import cn.iocoder.yudao.module.pms.message.PmsMessage;
 import cn.iocoder.yudao.module.supplier.enums.common.SupplierAuditStatusEnum;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -44,6 +48,7 @@ import cn.iocoder.yudao.module.system.service.permission.RoleService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -105,6 +110,8 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
     private PmsMessage pmsMessage;
     @Resource
     private IotOpeationFillMapper iotOpeationFillMapper;
+    @Resource
+    private IotRyDailyReportDetailMapper iotRyDailyReportDetailMapper;
 
 
     @Override
@@ -228,9 +235,12 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
         // 当天如果已经有此小队的记录 新增 当天如果没有此小队的日报记录 修改
         // deptId - taskId - createTime(yyyy-MM-dd) 确定唯一一条记录 不能使用 LocalDateTime.now() 来查询,应该使用 运行记录工单的创建日期查询
         IotRyDailyReportDO existReport = iotRyDailyReportMapper.selectExistReport(createReqVO.getDeptId(), null, reportDate);
+        LocalDateTime reportDetailDate;
         if (ObjUtil.isEmpty(existReport)) {
+
             // reportDate 所代表日期前1天的7点
             LocalDateTime today7am = reportDate.withHour(7).withMinute(0).withSecond(0).withNano(0);
+            reportDetailDate = reportDate;
             // reportDate 所代表日期的7点
             LocalDateTime yesterday7am = today7am.minusDays(1);
             iotRyDailyReport.setConstructionStartDate(yesterday7am);
@@ -241,8 +251,38 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
         } else {
             // 修改现有记录
             iotRyDailyReport.setId(existReport.getId());
+            reportDetailDate = existReport.getCreateTime();
             iotRyDailyReportMapper.updateById(iotRyDailyReport);
         }
+        // 保存日报生产动态明细
+        if (CollUtil.isNotEmpty(createReqVO.getReportDetails())) {
+            List<IotRyDailyReportDetailSaveReqVO> reportDetails = createReqVO.getReportDetails();
+            // 先删除明细 再新增
+            int count = iotRyDailyReportDetailMapper.deleteByMap(ImmutableMap.of(
+                    "report_id", iotRyDailyReport.getId()
+            ));
+            // 新增生产动态明细
+            List<IotRyDailyReportDetailDO> reportDOs = new ArrayList<>();
+            reportDetails.forEach(detail -> {
+                String detailEndTime = detail.getEndTime();
+                if (StrUtil.isNotBlank(detailEndTime)) {
+                    String[] timeAttr = detailEndTime.split(":");
+                    if ("24".equals(timeAttr[0])) {
+                        detail.setEndTime("23:59:59");
+                    }
+                }
+                IotRyDailyReportDetailDO tempDetail = BeanUtils.toBean(detail, IotRyDailyReportDetailDO.class);
+                tempDetail.setDeptId(iotRyDailyReport.getDeptId());
+                tempDetail.setTaskId(iotRyDailyReport.getTaskId());
+                tempDetail.setReportId(iotRyDailyReport.getId());
+                tempDetail.setReportDate(reportDetailDate);
+                reportDOs.add(tempDetail);
+            });
+            // 插入日报明细记录
+            if (CollUtil.isNotEmpty(reportDOs)) {
+                iotRyDailyReportDetailMapper.insertBatch(reportDOs);
+            }
+        }
         // 生成消息提醒 到 项目部审批人员 站内信 钉钉
         if (StrUtil.isBlank(createReqVO.getEditFlag())) {
             // 日报管理员编辑审批后的日报 不需要发送钉钉消息提醒