소스 검색

pms 瑞都 平台井 新增修改平台井逻辑优化

zhangcl 4 일 전
부모
커밋
d7119285ed

+ 42 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/IotProjectTaskController.java

@@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 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.iotprojecttask.vo.IotProjectTaskPlatformVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotTaskSaveVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO;
@@ -35,6 +36,7 @@ import java.util.*;
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
 
 
 @Tag(name = "管理后台 - 项目信息任务拆分")
@@ -94,7 +96,46 @@ public class IotProjectTaskController {
             idList.add(pageReqVO.getDeptId());
         } */
         PageResult<IotProjectTaskDO> pageResult = iotProjectTaskService.getIotProjectTaskPage1(pageReqVO, idList);
-        return success(BeanUtils.toBean(pageResult, IotProjectTaskRespVO.class));
+
+        return success(new PageResult<>(buildTasks(pageResult.getList()), pageResult.getTotal()));
+    }
+
+    /**
+     * 组装 设备-bom 关联关系对象
+     * @param pagedTasks
+     * @return
+     */
+    private List<IotProjectTaskRespVO> buildTasks(List<IotProjectTaskDO> pagedTasks) {
+        if (CollUtil.isEmpty(pagedTasks)) {
+            return Collections.emptyList();
+        }
+        Map<Long, List<IotProjectTaskPlatformVO>> platformWellPair = new HashMap<>();
+        // 循环每个任务 找到任务 关联的平台井
+        if (CollUtil.isNotEmpty(pagedTasks)) {
+            pagedTasks.forEach(task -> {
+                String platformGroup = task.getPlatformGroup();
+                if (StrUtil.isNotBlank(platformGroup)) {
+                    // 根据 platformGroup 查询关联的平台井
+                    IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
+                    reqVO.setPlatformGroup(platformGroup);
+                    List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(reqVO);
+                    List<IotProjectTaskPlatformVO> platforms = new ArrayList<>();
+                    tasks.forEach(groupTask -> {
+                        IotProjectTaskPlatformVO tempPlatform = new IotProjectTaskPlatformVO();
+                        tempPlatform.setId(groupTask.getId());
+                        tempPlatform.setWellName(groupTask.getWellName());
+                        tempPlatform.setWorkloadDesign(groupTask.getWorkloadDesign());
+                        platforms.add(tempPlatform);
+                    });
+                    platformWellPair.put(task.getId(), platforms);
+                }
+            });
+        }
+        // 2. 拼接数据
+        return BeanUtils.toBean(pagedTasks, IotProjectTaskRespVO.class, (taskVO) -> {
+            // 2.1 拼接平台井信息
+            findAndThen(platformWellPair, taskVO.getId(), tasks -> taskVO.setPlatformWells(tasks));
+        });
     }
 
     @GetMapping("/list")

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

@@ -21,6 +21,9 @@ public class IotProjectTaskPageReqVO extends PageParam {
     @Schema(description = "项目id", example = "2988")
     private Long projectId;
 
+    @Schema(description = "平台井组", example = "982oierwweo9823")
+    private String platformGroup;
+
     @Schema(description = "井号", example = "赵六")
     private String wellName;
 

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

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 项目任务 平台井 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class IotProjectTaskPlatformVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31284")
+    private Long id;
+
+    @Schema(description = "井号", example = "#2988")
+    private String wellName;
+
+    @Schema(description = "设计工作量", example = "123")
+    private String workloadDesign;
+}

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

@@ -23,6 +23,14 @@ public class IotProjectTaskRespVO {
     @ExcelProperty("项目id")
     private Long projectId;
 
+    @Schema(description = "平台井标识 0非平台井 1平台井", example = "1")
+    @ExcelProperty("平台井标识 0非平台井 1平台井")
+    private Integer platformWell;
+
+    @Schema(description = "平台井组", example = "984r98roori928392")
+    @ExcelProperty("平台井组")
+    private String platformGroup;
+
     @Schema(description = "井号", example = "赵六")
     @ExcelProperty("井号")
     private String wellName;
@@ -111,4 +119,7 @@ public class IotProjectTaskRespVO {
 
     @Schema(description = "施工队伍", example = "THA1,THA2")
     private String deptNames;
+
+    @Schema(description = "平台井明细", example = "[{\"井号\": #233, \"工作量\": 234}]")
+    private List<IotProjectTaskPlatformVO> platformWells;
 }

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

@@ -17,6 +17,12 @@ public class IotProjectTaskSaveReqVO {
     @Schema(description = "项目id", example = "2988")
     private Long projectId;
 
+    @Schema(description = "平台井标识 0非平台井 1平台井", example = "1")
+    private Integer platformWell;
+
+    @Schema(description = "平台井组", example = "463e3996-be48-4758-8229-c1351cbf3e37")
+    private String platformGroup;
+
     @Schema(description = "井号", example = "赵六")
     private String wellName;
 

+ 8 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotprojecttask/IotProjectTaskDO.java

@@ -36,6 +36,14 @@ public class IotProjectTaskDO extends BaseDO {
      * 项目id
      */
     private Long projectId;
+    /**
+     * 平台井标识 0非平台井 1平台井
+     */
+    private Integer platformWell;
+    /**
+     * 平台井组
+     */
+    private String platformGroup;
     /**
      * 井号
      */

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

@@ -112,6 +112,7 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
                 .eqIfPresent(IotProjectTaskDO::getProjectId, reqVO.getProjectId())
                 .likeIfPresent(IotProjectTaskDO::getWellName, reqVO.getWellName())
                 .eqIfPresent(IotProjectTaskDO::getWellType, reqVO.getWellType())
+                .eqIfPresent(IotProjectTaskDO::getPlatformGroup, reqVO.getPlatformGroup())
                 .eqIfPresent(IotProjectTaskDO::getLocation, reqVO.getLocation())
                 .eqIfPresent(IotProjectTaskDO::getTechnique, reqVO.getTechnique())
                 .eqIfPresent(IotProjectTaskDO::getWorkloadDesign, reqVO.getWorkloadDesign())

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

@@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.pms.service.iotprojecttask;
 
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
@@ -19,6 +21,8 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_PROJECT_TASK_NOT_EXISTS;
@@ -52,8 +56,20 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
     @Override
     public Boolean createIotProjectTaskList(List<IotProjectTaskSaveReqVO> list) {
         List<IotProjectTaskDO> taskDOS = new ArrayList<>();
+        // 如果是瑞都的平台井,生成uuid关联平台井多个任务
+        AtomicBoolean platformWell = new AtomicBoolean(false);
+        list.forEach(task -> {
+            if (1 == task.getPlatformWell()) {
+                platformWell.set(true);
+            }
+        });
+        String platformGroup = StrUtil.EMPTY;
+        if (platformWell.get()) {
+            platformGroup = StrUtil.uuid();
+        }
         for (IotProjectTaskSaveReqVO saveReqVO:list) {
             IotProjectTaskDO iotProjectTask = BeanUtils.toBean(saveReqVO, IotProjectTaskDO.class);
+            iotProjectTask.setPlatformGroup(platformGroup);
             // 将项目的 deptId 赋值给 任务的 deptId
             IotProjectInfoDO project = iotProjectInfoMapper.selectById(iotProjectTask.getProjectId());
             iotProjectTask.setDeptId(project.getDeptId());
@@ -76,14 +92,37 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
     @Override
     public void updateIotProjectTaskList(List<IotProjectTaskSaveReqVO> list) {
         List<IotProjectTaskDO> taskDOS = new ArrayList<>();
+        // 如果是瑞都的平台井,使用已有的 platformGroup 关联平台井多个任务
+        AtomicBoolean platformWell = new AtomicBoolean(false);
+        AtomicReference<String> platformGroup = new AtomicReference<>(StrUtil.EMPTY);
+        list.forEach(task -> {
+            if (1 == task.getPlatformWell()) {
+                platformWell.set(true);
+                platformGroup.set(task.getPlatformGroup());
+            }
+        });
+        List<IotProjectTaskDO> tobeAddedTasks = new ArrayList<>();
         for (IotProjectTaskSaveReqVO saveReqVO:list) {
             IotProjectTaskDO updateObj = BeanUtils.toBean(saveReqVO, IotProjectTaskDO.class);
             // 校验施工区域 下拉列表数据字典 是否包含在 已有的数据字典值集合中
             // 如果不包含 新增数据字典值
             iotProjectInfoService.saveDictData(saveReqVO.getDictType(), updateObj.getLocation());
-            taskDOS.add(updateObj);
+            if (ObjUtil.isEmpty(updateObj.getId())) {
+                // 新增加的任务 瑞都平台井
+                updateObj.setPlatformGroup(platformGroup.get());
+                tobeAddedTasks.add(updateObj);
+            } else {
+                taskDOS.add(updateObj);
+            }
+        }
+        if (CollUtil.isNotEmpty(taskDOS)) {
+            // 需要更新的任务
+            iotProjectTaskMapper.updateBatch(taskDOS);
+        }
+        if (CollUtil.isNotEmpty(tobeAddedTasks)) {
+            // 瑞都平台井 需要新增的任务
+            iotProjectTaskMapper.insertBatch(tobeAddedTasks);
         }
-        iotProjectTaskMapper.updateBatch(taskDOS);
     }
 
     @Override
@@ -117,7 +156,9 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
 
     @Override
     public PageResult<IotProjectTaskDO> getIotProjectTaskPage1(IotProjectTaskPageReqVO pageReqVO, Collection<Long> deptIds) {
-        return iotProjectTaskMapper.selectPage1(pageReqVO, deptIds);
+        PageResult<IotProjectTaskDO> pagedTasks = iotProjectTaskMapper.selectPage1(pageReqVO, deptIds);
+
+        return pagedTasks;
     }
 
     @Override

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotProjectTaskMapper.xml

@@ -41,6 +41,7 @@
         and a.project_id = b.id
         and a.deleted = 0
         and b.deleted = 0
+        and (a.platform_well = 0 or a.platform_well = 1)
         <if test="manufactureName != null  and manufactureName != ''">
         and b.manufacture_name like concat('%', #{manufactureName}, '%')
         </if>