소스 검색

pms 项目任务 更新 平台井 取消与选中

zhangcl 22 시간 전
부모
커밋
cefcc3d86f

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

@@ -97,4 +97,7 @@ public class IotProjectTaskPageReqVO extends PageParam {
     @Schema(description = "定时任务标识 Y")
     private String jobFlag;
 
+    @Schema(description = "platformGroup 集合")
+    private List<String> platformGroups;
+
 }

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

@@ -222,6 +222,7 @@ public class IotRdDailyReportController {
         if (1 == dailyReport.getPlatformWell()) {
             IotProjectTaskPageReqVO pageReqVO = new IotProjectTaskPageReqVO();
             pageReqVO.setPlatformGroup(dailyReport.getTaskPlatform());
+            pageReqVO.setJobFlag("Y");
             List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(pageReqVO);
             // 查询相同平台井组关联的 日报
             IotRdDailyReportPageReqVO reportReqVO  = new IotRdDailyReportPageReqVO();

+ 4 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotprojecttask/IotProjectTaskMapper.java

@@ -91,9 +91,10 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
         }
         // 定时任务 如果是平台井 只生成主井号任务
         if (ObjUtil.isNotEmpty(reqVO.getJobFlag())) {
-            wrapper.and(wq -> wq.eq(IotProjectTaskDO::getPlatformWell, 0)
+            wrapper.and(wq -> wq.ne(IotProjectTaskDO::getStatus, "wg"));
+                    /* .and(innerWq -> innerWq.eq(IotProjectTaskDO::getPlatformWell, 0)
                     .or()
-                    .eq(IotProjectTaskDO::getPlatformWell, 1));
+                    .eq(IotProjectTaskDO::getPlatformWell, 1))); */
         }
         return selectList(wrapper);
     }
@@ -119,6 +120,7 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
                 .likeIfPresent(IotProjectTaskDO::getWellName, reqVO.getWellName())
                 .eqIfPresent(IotProjectTaskDO::getWellType, reqVO.getWellType())
                 .eqIfPresent(IotProjectTaskDO::getPlatformGroup, reqVO.getPlatformGroup())
+                .inIfPresent(IotProjectTaskDO::getPlatformGroup, reqVO.getPlatformGroups())
                 .eqIfPresent(IotProjectTaskDO::getLocation, reqVO.getLocation())
                 .eqIfPresent(IotProjectTaskDO::getTechnique, reqVO.getTechnique())
                 .eqIfPresent(IotProjectTaskDO::getWorkloadDesign, reqVO.getWorkloadDesign())

+ 46 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/dailyreport/CreateRdDailyReportOrderJob.java

@@ -89,13 +89,55 @@ public class CreateRdDailyReportOrderJob implements JobHandler {
         // 平台井任务只生成主井号任务 关联井在日报中聚合处理
         IotProjectTaskPageReqVO taskReqVO = new IotProjectTaskPageReqVO();
         taskReqVO.setCompanyId(163l);
-        taskReqVO.setJobFlag(StrUtil.EMPTY);
+        taskReqVO.setJobFlag("Y");
         List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(taskReqVO);
+        // 平台井任务关联了3口井,其中2口井已经完工,1口井还在施工,平台井任务需要定时生成日报
+        // 从任务列表中筛选出 (platformWell=0或platformGroup有值)的记录,并进一步找到 platformGroup有值的记录 对应的‘主井记录’生成日报
+        List<IotProjectTaskDO> qualifiedTasks = new ArrayList<>();
+        Set<String> platformGroups = new HashSet<>();
+        // 未施工完成的任务id集合
+        Set<Long> unfinishedTaskIds = new HashSet<>();
+        // key平台井标识platformGroup    value平台井platformWell=1时的taskId
+        Map<String, IotProjectTaskDO> mainWellTaskPair = new HashMap<>();
+        if (CollUtil.isNotEmpty(tasks)) {
+            tasks.forEach(task -> {
+                // 非平台井任务 直接生成日报
+                qualifiedTasks.add(task);
+                if (StrUtil.isNotBlank(task.getPlatformGroup())) {
+                    platformGroups.add(task.getPlatformGroup());
+                    if (1 == task.getPlatformWell()) {
+                        mainWellTaskPair.put(task.getPlatformGroup(), task);
+                    }
+                }
+                // 生成所有所有未施工完成的任务id集合
+                unfinishedTaskIds.add(task.getId());
+            });
+            // 找出 关联井未施工完成 但是主井已经施工完成的记录 同步生成主井日报
+
+            // 查询出 platformGroups 对应的任务,找到主井记录
+            if (CollUtil.isNotEmpty(platformGroups)) {
+                IotProjectTaskPageReqVO platformTaskReqVO = new IotProjectTaskPageReqVO();
+                platformTaskReqVO.setPlatformGroups(new ArrayList<>(platformGroups));
+                List<IotProjectTaskDO> platformTasks = iotProjectTaskService.projectTasks(platformTaskReqVO);
+                if (CollUtil.isNotEmpty(platformTasks)) {
+                    // platformTasks 可能同时包含 主井 关联井 有的已经施工完成 有的未施工完成
+                    // 已经施工完成的关联井不再生成日报
+                    // 未施工完成的关联井需要和相关主井一起生成日报
+                    platformTasks.forEach(task -> {
+                        if (2 == task.getPlatformWell() && !"wg".equals(task.getStatus())
+                                && mainWellTaskPair.containsKey(task.getPlatformGroup()) && !unfinishedTaskIds.contains(task.getId())) {
+                            qualifiedTasks.add(mainWellTaskPair.get(task.getPlatformGroup()));
+                        }
+                    });
+                }
+            }
+        }
+
         Set<Long> userIds = new HashSet<>();
         List<IotRdDailyReportDO> reports = new ArrayList<>();
         Map<Long, Long> taskSubmitterPair = new HashMap<>();
-        if (CollUtil.isNotEmpty(tasks)) {
-            tasks.forEach(task -> {
+        if (CollUtil.isNotEmpty(qualifiedTasks)) {
+            qualifiedTasks.forEach(task -> {
                 // 查询当前任务的 工单填报人
                 Set<Long> submitterIds = task.getSubmitter();
                 if (CollUtil.isNotEmpty(submitterIds)) {
@@ -115,7 +157,7 @@ public class CreateRdDailyReportOrderJob implements JobHandler {
             }
             Map<Long, DeptDO> deptPair = deptService.getDeptMap(deptIds);
             // 以任务为维度 生成瑞都日报 部门为任务配置的工单填报人对应的部门
-            tasks.forEach(task -> {
+            qualifiedTasks.forEach(task -> {
                 if (!taskIds.contains(task.getId()) && CollUtil.isNotEmpty(task.getSubmitter())) {
                     // 生成当天的日报
                     IotRdDailyReportDO report = new IotRdDailyReportDO();

+ 34 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskServiceImpl.java

@@ -95,10 +95,23 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
         // 如果是瑞都的平台井,使用已有的 platformGroup 关联平台井多个任务
         AtomicBoolean platformWell = new AtomicBoolean(false);
         AtomicReference<String> platformGroup = new AtomicReference<>(StrUtil.EMPTY);
+        String uuid = StrUtil.uuid();
+        // 是否是从已有的非平台井 转换成 平台井
+        AtomicBoolean transferFlag = new AtomicBoolean(false);
         list.forEach(task -> {
+            // 如果 设置为 平台井后 task.getPlatformGroup() 为空 说明是非平台井修改成平台井的情况
+            // 此时需要 重新生成 platformGroup
+            if (StrUtil.isNotBlank(task.getPlatformGroup())) {
+                platformGroup.set(task.getPlatformGroup());
+            }
             if (1 == task.getPlatformWell()) {
                 platformWell.set(true);
-                platformGroup.set(task.getPlatformGroup());
+                if (StrUtil.isBlank(task.getPlatformGroup())) {
+                    transferFlag.set(true);
+                }
+            } else {
+                // 可能之前设置过平台井 然后又取消 这里需要 删除主井外的关联井
+                // 并清空 主井 的 platformGroup
             }
         });
         // 查询系统中已有的关联平台井 保存时入参集合中没有的平台井 需要删除掉
@@ -116,16 +129,29 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
             iotProjectInfoService.saveDictData(saveReqVO.getDictType(), updateObj.getLocation());
             if (ObjUtil.isEmpty(updateObj.getId())) {
                 // 新增加的任务 瑞都平台井
-                updateObj.setPlatformGroup(platformGroup.get());
+                if (transferFlag.get()) {
+                    updateObj.setPlatformGroup(uuid);
+                } else {
+                    updateObj.setPlatformGroup(platformGroup.get());
+                }
                 tobeAddedTasks.add(updateObj);
             } else {
+                // 更新现有的井任务
+                if (!platformWell.get()) {
+                    // 非平台井 设置 platformWell = 0 兼容 之前是平台井然后再取消选中的情况
+                    updateObj.setPlatformGroup(StrUtil.EMPTY);
+                }
+                if (transferFlag.get()) {
+                    // 非平台井 设置 platformWell = 0 兼容 之前是平台井然后再取消选中的情况
+                    updateObj.setPlatformGroup(uuid);
+                }
                 taskDOS.add(updateObj);
             }
             if (ObjUtil.isNotEmpty(saveReqVO.getId())) {
                 currentTaskIds.add(saveReqVO.getId());
             }
         }
-        // 找到需要删除的 平台井任务
+        // 找到需要 删除 的 平台井任务
         if (StrUtil.isNotBlank(platformGroup.get())) {
             IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
             reqVO.setPlatformGroup(platformGroup.get());
@@ -138,6 +164,11 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
                         tobeDeletedTasks.add(task);
                         deletedTaskIds.add(task.getId());
                     }
+                    if (2 == task.getPlatformWell() && !platformWell.get()) {
+                        // 取消平台井设置时 主井的关联井也需要删除
+                        tobeDeletedTasks.add(task);
+                        deletedTaskIds.add(task.getId());
+                    }
                 });
             }
         }