Ver código fonte

pms 日报 任务 上传不同类型的附件

zhangcl 1 dia atrás
pai
commit
a23302fe86

+ 3 - 2
yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/AttachmentTypeEnum.java

@@ -7,8 +7,9 @@ package cn.iocoder.yudao.module.pms.enums;
  **/
 public enum AttachmentTypeEnum {
     EXTERNAL_RENTAL("EXTERNAL_RENTAL", "外租设备", 1),
-    CONSTRUCTION_DESIGN("CONSTRUCTION_DESIGN", "施工设计", 2),
-    COMPLETION_REPORT("COMPLETION_REPORT", "完工报告", 3);
+    CONSTRUCTION_DESIGN("CONSTRUCTION_DESIGN", "工程设计", 2),
+    GEOLOGICAL_DESIGN("GEOLOGICAL_DESIGN", "地质设计", 3),
+    COMPLETION_REPORT("COMPLETION_REPORT", "完井报告", 4);
 
     private String code;
     private String msg;

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

@@ -48,4 +48,7 @@ public class IotAttachmentPageReqVO extends PageParam {
 
     @Schema(description = "业务主键id 集合", example = "3510,3610")
     private Collection<Long> bizIds;
+
+    @Schema(description = "附件类型 集合", example = "CONSTRUCTION_DESIGN,GEOLOGICAL_DESIGN,COMPLETION_REPORT")
+    private Collection<String> types;
 }

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

@@ -9,16 +9,22 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 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.iotattachment.vo.IotAttachmentPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.*;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportStatisticsItemVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
 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.iotrddailyreport.IotRdDailyReportDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotattachment.IotAttachmentMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojectinfo.IotProjectInfoMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreport.IotRdDailyReportMapper;
+import cn.iocoder.yudao.module.pms.enums.AttachmentCategoryEnum;
+import cn.iocoder.yudao.module.pms.enums.AttachmentTypeEnum;
 import cn.iocoder.yudao.module.pms.service.iotprojectinfo.IotProjectInfoService;
 import cn.iocoder.yudao.module.pms.service.iotprojecttask.IotProjectTaskService;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
@@ -64,6 +70,8 @@ public class IotProjectTaskController {
     private IotProjectInfoMapper iotProjectInfoMapper;
     @Resource
     private DictDataService dictDataService;
+    @Resource
+    private IotAttachmentMapper iotAttachmentMapper;
 
     @PostMapping("/create")
     @Operation(summary = "创建项目信息任务拆分")
@@ -337,10 +345,34 @@ public class IotProjectTaskController {
                 taskFinishedWorkloadPair.put(task.getId(), items);
             });
         }
+        // 查询当前任务关联的 附件列表
+        Map<Long, List<IotAttachmentRespVO>> attachmentsPair = new HashMap<>();
+        IotAttachmentPageReqVO attReqVO = new IotAttachmentPageReqVO();
+        attReqVO.setCategory(AttachmentCategoryEnum.DAILY_REPORT.getCode());
+        attReqVO.setTypes(Arrays.asList(AttachmentTypeEnum.CONSTRUCTION_DESIGN.getCode(),
+                AttachmentTypeEnum.GEOLOGICAL_DESIGN.getCode(), AttachmentTypeEnum.COMPLETION_REPORT.getCode()));
+        attReqVO.setBizIds(convertList(pagedTasks, IotProjectTaskDO::getId));
+        List<IotAttachmentDO> attachments = iotAttachmentMapper.attachments(attReqVO);
+        if (CollUtil.isNotEmpty(attachments)) {
+            attachments.forEach(att -> {
+                IotAttachmentRespVO attResp = BeanUtils.toBean(att, IotAttachmentRespVO.class);
+                if (attachmentsPair.containsKey(att.getBizId())) {
+                    List<IotAttachmentRespVO> tempAttachments = attachmentsPair.get(att.getBizId());
+                    tempAttachments.add(attResp);
+                    attachmentsPair.put(att.getBizId(), tempAttachments);
+                } else {
+                    List<IotAttachmentRespVO> tempAttachments = new ArrayList<>();
+                    tempAttachments.add(attResp);
+                    attachmentsPair.put(att.getBizId(), tempAttachments);
+                }
+            });
+        }
         // 2. 拼接数据
         return BeanUtils.toBean(pagedTasks, IotProjectTaskRespVO.class, (taskVO) -> {
             // 拼接平台井信息
             findAndThen(platformWellPair, taskVO.getId(), tasks -> taskVO.setPlatformWells(tasks));
+            // 附件
+            findAndThen(attachmentsPair, taskVO.getId(), attachmentRespS -> taskVO.setAttachments(attachmentRespS));
             // 任务已经完成的工作量
             findAndThen(taskFinishedWorkloadPair, taskVO.getId(), workloads -> taskVO.setItems(workloads));
         });

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo;
 
+import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportStatisticsItemVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
@@ -124,4 +125,7 @@ public class IotProjectTaskRespVO {
 
     @Schema(description = "当前任务已经完成的工作量明细")
     private List<IotRdDailyReportStatisticsItemVO> items;
+
+    @Schema(description = "任务附件集合")
+    private List<IotAttachmentRespVO> attachments;
 }

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo;
 
+import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -88,4 +89,7 @@ public class IotProjectTaskSaveReqVO {
      */
     @Schema(description = "施工区域数据字典类型", example = "rq_iot_project_work_area_rh")
     private String dictType;
+
+    @Schema(description = "附件列表", example = "瑞鹰 工程设计 地质设计 完井报告")
+    private List<IotAttachmentSaveReqVO> attachments;
 }

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

@@ -39,6 +39,7 @@ public interface IotAttachmentMapper extends BaseMapperX<IotAttachmentDO> {
                 .eqIfPresent(IotAttachmentDO::getType, reqVO.getType())
                 .likeIfPresent(IotAttachmentDO::getFilename, reqVO.getFilename())
                 .eqIfPresent(IotAttachmentDO::getFileType, reqVO.getFileType())
+                .inIfPresent(IotAttachmentDO::getType, reqVO.getTypes())
                 .eqIfPresent(IotAttachmentDO::getFilePath, reqVO.getFilePath())
                 .eqIfPresent(IotAttachmentDO::getFileSize, reqVO.getFileSize())
                 .eqIfPresent(IotAttachmentDO::getRemark, reqVO.getRemark())

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

@@ -55,25 +55,6 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
                 .orderByDesc(IotProjectTaskDO::getId));
     }
 
-    /* default List<IotProjectTaskDO> selectList(IotProjectTaskPageReqVO reqVO) {
-        LambdaQueryWrapperX<IotProjectTaskDO> wrapper = new LambdaQueryWrapperX<IotProjectTaskDO>()
-                .inIfPresent(IotProjectTaskDO::getId,  reqVO.getTaskIds())
-                .eqIfPresent(IotProjectTaskDO::getProjectId, reqVO.getProjectId())
-                .likeIfPresent(IotProjectTaskDO::getWellName, reqVO.getWellName())
-                .eqIfPresent(IotProjectTaskDO::getWellType, reqVO.getWellType())
-                .eqIfPresent(IotProjectTaskDO::getLocation, reqVO.getLocation())
-                .eqIfPresent(IotProjectTaskDO::getTechnique, reqVO.getTechnique())
-                .eqIfPresent(IotProjectTaskDO::getWorkloadDesign, reqVO.getWorkloadDesign())
-                .betweenIfPresent(IotProjectTaskDO::getCreateTime, reqVO.getCreateTime())
-                .likeIfPresent(IotProjectTaskDO::getUserName, reqVO.getUserName())
-                .eqIfPresent(IotProjectTaskDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(IotProjectTaskDO::getRemark, reqVO.getRemark());
-        if (ObjUtil.isNotEmpty(reqVO.getDeptId())) {
-            wrapper.apply("FIND_IN_SET({0}, REPLACE(REPLACE(dept_ids,'[',''),']',''))", reqVO.getDeptId());
-        }
-        return selectList(wrapper);
-    } */
-
     default List<IotProjectTaskDO> selectList(IotProjectTaskPageReqVO reqVO) {
         LambdaQueryWrapperX<IotProjectTaskDO> wrapper = buildCommonQuery(reqVO)
                 .inIfPresent(IotProjectTaskDO::getId, reqVO.getTaskIds());

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

@@ -6,18 +6,24 @@ 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.iotattachment.vo.IotAttachmentSaveReqVO;
 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.IotProjectTaskSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
 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.mysql.iotattachment.IotAttachmentMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojectinfo.IotProjectInfoMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask.IotProjectTaskMapper;
+import cn.iocoder.yudao.module.pms.enums.AttachmentCategoryEnum;
+import cn.iocoder.yudao.module.pms.enums.AttachmentTypeEnum;
 import cn.iocoder.yudao.module.pms.service.iotprojectinfo.IotProjectInfoService;
 import cn.iocoder.yudao.module.supplier.service.product.SupplierService;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.stereotype.Service;
@@ -53,6 +59,8 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
     private IotProjectInfoMapper iotProjectInfoMapper;
     @Resource
     private DeptMapper deptMapper;
+    @Resource
+    private IotAttachmentMapper attachmentMapper;
 
     @Override
     public Long createIotProjectTask(IotProjectTaskSaveReqVO createReqVO) {
@@ -132,7 +140,7 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
         List<Long> deletedTaskIds = new ArrayList<>();
         // 本次保存中包含的任务id集合
         List<Long> currentTaskIds = new ArrayList<>();
-        for (IotProjectTaskSaveReqVO saveReqVO:list) {
+        for (IotProjectTaskSaveReqVO saveReqVO : list) {
             IotProjectTaskDO updateObj = BeanUtils.toBean(saveReqVO, IotProjectTaskDO.class);
             // 校验施工区域 下拉列表数据字典 是否包含在 已有的数据字典值集合中
             // 如果不包含 新增数据字典值
@@ -155,6 +163,35 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
                     // 非平台井 设置 platformWell = 0 兼容 之前是平台井然后再取消选中的情况
                     updateObj.setPlatformGroup(uuid);
                 }
+                // 瑞鹰 上传多种类型的附件
+                List<IotAttachmentSaveReqVO> attachmentsSaveReqVOS = saveReqVO.getAttachments();
+                List<IotAttachmentDO> attachmentDOS = new ArrayList<>();
+                if (CollUtil.isNotEmpty(attachmentsSaveReqVOS)) {
+                    attachmentsSaveReqVOS.forEach(att -> {
+                        IotAttachmentDO attachment = new IotAttachmentDO();
+                        attachment.setBizId(updateObj.getId());
+                        attachment.setCategory(AttachmentCategoryEnum.DAILY_REPORT.getCode());
+                        // 瑞鹰任务附件 工程设计 地质设计 完井报告
+                        attachment.setType(att.getType());
+                        attachment.setFilePath(att.getFilePath());
+                        attachment.setFileSize(att.getFileSize());
+                        attachment.setFilename(att.getFilename());
+                        attachment.setFileType(att.getFileType());
+                        attachment.setRemark(att.getRemark());
+                        attachmentDOS.add(attachment);
+                    });
+                    // 先删除已有数据再新增
+                    if (CollUtil.isNotEmpty(attachmentDOS)) {
+                        List<String> types = Arrays.asList(AttachmentTypeEnum.CONSTRUCTION_DESIGN.getCode(),
+                                AttachmentTypeEnum.GEOLOGICAL_DESIGN.getCode(), AttachmentTypeEnum.COMPLETION_REPORT.getCode());
+                        LambdaQueryWrapper<IotAttachmentDO> wrapper = new LambdaQueryWrapper<>();
+                        wrapper.eq(IotAttachmentDO::getCategory, AttachmentCategoryEnum.DAILY_REPORT.getCode())
+                                .eq(IotAttachmentDO::getBizId, updateObj.getId())
+                                .in(IotAttachmentDO::getType, types);
+                        int count = attachmentMapper.delete(wrapper);
+                        attachmentMapper.insertBatch(attachmentDOS);
+                    }
+                }
                 taskDOS.add(updateObj);
             }
             if (ObjUtil.isNotEmpty(saveReqVO.getId())) {

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportServiceImpl.java

@@ -2704,7 +2704,7 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
                     if (ObjUtil.isNotEmpty(detailRole)) {
                         // 拥有日报查阅权限的人员列表
                         Set<Long> detailRoleIds = new HashSet<>();
-                        detailRoleIds.add(role.getId());
+                        detailRoleIds.add(detailRole.getId());
                         List<UserRoleDO> userRoles = userRoleMapper.selectListByRoleIds(detailRoleIds);
                         if (CollUtil.isNotEmpty(userRoles)) {
                             // 提取有审批角色的所有用户ID(去重+空值过滤)