Pārlūkot izejas kodu

pms 瑞鹰 挂靠队伍 生成日报定时任务逻辑优化

zhangcl 1 nedēļu atpakaļ
vecāks
revīzija
ffe18193b2

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

@@ -100,6 +100,9 @@ public class IotRhDailyReportSaveReqVO {
     @Schema(description = "审批意见", example = "同意")
     private String opinion;
 
+    @Schema(description = "创建人id", example = "212")
+    private String creator;
+
     /**
      * 扩展字段
      */

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

@@ -159,6 +159,9 @@ public class IotRyDailyReportSaveReqVO {
     @Schema(description = "审批意见", example = "同意")
     private String opinion;
 
+    @Schema(description = "创建人id", example = "212")
+    private String creator;
+
     /**
      * 扩展字段
      */

+ 92 - 12
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/dailyreport/CreateRyDailyReportOrderJob.java

@@ -2,24 +2,31 @@ package cn.iocoder.yudao.module.pms.job.dailyreport;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.pms.controller.admin.depttype.vo.IotDeptTypePageReqVO;
+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.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO;
 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.iotprojectinfo.IotProjectInfoDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreport.IotRyDailyReportDO;
 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.iotrydailyreport.IotRyDailyReportMapper;
 import cn.iocoder.yudao.module.pms.message.PmsMessage;
-import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
 import cn.iocoder.yudao.module.pms.service.iotmainworkorderbom.IotMainWorkOrderBomService;
+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;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import lombok.extern.slf4j.Slf4j;
@@ -29,10 +36,8 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.module.pms.framework.config.MultiThreadConfiguration.PMS_THREAD_POOL_TASK_EXECUTOR;
@@ -44,7 +49,7 @@ import static cn.iocoder.yudao.module.pms.framework.config.MultiThreadConfigurat
 @Slf4j
 public class CreateRyDailyReportOrderJob implements JobHandler {
     @Resource
-    private IotDevicePersonService iotDevicePersonService;
+    private IotProjectInfoService iotProjectInfoService;
     @Resource
     private IotRyDailyReportMapper iotRyDailyReportMapper;
     @Autowired
@@ -73,14 +78,33 @@ public class CreateRyDailyReportOrderJob implements JobHandler {
 
         // 查询瑞鹰下所有部门 筛选出 修井 队伍(不包含任何设备的队伍)
         IotDeptTypePageReqVO deptTypeReqVO = new IotDeptTypePageReqVO();
-        // 查询 钻井 修井 类型的部门
+        // 查询 钻井 修井 类型的部门 综合队 层气项目
         deptTypeReqVO.setType("xj");
         List<IotDeptTypeDO> deptTypes = iotDeptTypeMapper.selectList(deptTypeReqVO);
         Set<Long> xjDeptIds = new HashSet<>();
+        // 挂靠 的部门id集合
+        Set<Long> affiliatedDeptIds = new HashSet<>();
+        // key部门id      value日报填报人id
+        Map<Long, Long> affiliatedDeptIdUserIdPair = new HashMap<>();
+        AtomicReference<String> creator = new AtomicReference<>(StrUtil.EMPTY);
+        Long userId = 0l;
         if (CollUtil.isNotEmpty(deptTypes)) {
             deptTypes.forEach(deptType -> {
                 xjDeptIds.add(deptType.getDeptId());
+                // 部分部门的日报需要由固定的人填写 RYMQC
+                if (StrUtil.isNotBlank(deptType.getCreator())) {
+                    affiliatedDeptIds.add(deptType.getDeptId());
+                    creator.set(deptType.getCreator());
+                }
             });
+            // 根据 用户账号 查询用户id 挂靠队伍 日报填报人
+            if (StrUtil.isNotBlank(creator.get())) {
+                List<AdminUserRespDTO> users = adminUserApi.getUserListByUsername(creator.get());
+                if (CollUtil.isNotEmpty(users)) {
+                    AdminUserRespDTO user = users.get(0);
+                    userId = user.getId();
+                }
+            }
         }
         // 查询瑞鹰下所有队伍
         Set<Long> ryTeamDeptIds = new HashSet<>();
@@ -116,7 +140,7 @@ public class CreateRyDailyReportOrderJob implements JobHandler {
         ryReqVO.setProjectClassification("2");
         List<IotRyDailyReportDO> ryDailyReports = iotRyDailyReportMapper.dailyReports(ryReqVO);
 
-        // 查询所有瑞的项目任务 以‘部门-时间’ 为唯一键 当天创建时间 内没有生成过日报 就自动生成
+        // 查询所有瑞的项目任务 以‘部门-时间’ 为唯一键 当天创建时间 内没有生成过日报 就自动生成
         IotRdDailyReportPageReqVO pageReqVO = new IotRdDailyReportPageReqVO();
         LocalDateTime currentDate = LocalDateTime.now();
         String currentFormatDateStr = LocalDateTimeUtil.format(currentDate, "yyyy-MM-dd");
@@ -130,7 +154,7 @@ public class CreateRyDailyReportOrderJob implements JobHandler {
                 LocalDateTime createDate = report.getCreateTime();
                 String formatDateStr = LocalDateTimeUtil.format(createDate, "yyyy-MM-dd");
                 if (formatDateStr.equals(currentFormatDateStr)) {
-                    currentDayReportedDeptIds.add(report.getTaskId());
+                    currentDayReportedDeptIds.add(report.getDeptId());
                 }
             });
         }
@@ -141,16 +165,72 @@ public class CreateRyDailyReportOrderJob implements JobHandler {
                 .collect(Collectors.toSet());
 
         if (CollUtil.isNotEmpty(tobeReportXjDeptIds)) {
+            // 查询这些部门对象集合
+            Map<Long, DeptDO> deptMap = deptService.getDeptMap(tobeReportXjDeptIds);
+
+            // 查询这些部门所有的项目任务
+            IotProjectTaskPageReqVO taskReqVO = new IotProjectTaskPageReqVO();
+            taskReqVO.setCompanyId(158l);
+            List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(taskReqVO);
+            Map<Long, Set<Long>> taskDeptPair = new HashMap<>();
+            // key任务id   value项目id
+            Map<Long, Long> taskProjectPair = new HashMap<>();
+            Set<Long> projectIds = new HashSet<>();
+            if (CollUtil.isNotEmpty(tasks)) {
+                tasks.forEach(task -> {
+                    taskDeptPair.put(task.getId(), task.getDeptIds());
+                    projectIds.add(task.getProjectId());
+                    taskProjectPair.put(task.getId(), task.getProjectId());
+                });
+            }
+            Map<Long, IotProjectInfoDO> projectPair = new HashMap<>();
+            if (CollUtil.isNotEmpty(projectIds)) {
+                IotProjectInfoPageReqVO projectReqVO = new IotProjectInfoPageReqVO();
+                projectReqVO.setProjectIds(new ArrayList<>(projectIds));
+                List<IotProjectInfoDO> projects = iotProjectInfoService.getIotProjectInfos(projectReqVO);
+                if (CollUtil.isNotEmpty(projects)) {
+                    projects.forEach(project -> {
+                        projectPair.put(project.getId(), project);
+                    });
+                }
+            }
+
             List<IotRyDailyReportDO> tobeAddedReports = new ArrayList<>();
-            tobeReportXjDeptIds.forEach(deptId -> {
+            for (Long tobeReportXjDeptId : tobeReportXjDeptIds) {
                 IotRyDailyReportDO noDeviceReport = new IotRyDailyReportDO();
-                noDeviceReport.setDeptId(deptId);
+                noDeviceReport.setDeptId(tobeReportXjDeptId);
                 noDeviceReport.setProjectClassification("2");
+                if (affiliatedDeptIds.contains(tobeReportXjDeptId)) {
+                    // 挂靠队伍 煤层气 的日报
+                    noDeviceReport.setCreator(String.valueOf(userId));
+                } else {
+                    // 综合队等其它挂靠修井队
+                    if (CollUtil.isNotEmpty(deptMap) && deptMap.containsKey(tobeReportXjDeptId)) {
+                        DeptDO dept = deptMap.get(tobeReportXjDeptId);
+                        if (ObjUtil.isNotEmpty(dept.getLeaderUserId())) {
+                            noDeviceReport.setCreator(String.valueOf(dept.getLeaderUserId()));
+                        }
+                    }
+                }
+                // 设置日报的项目任务信息
+                if (CollUtil.isNotEmpty(taskDeptPair)) {
+                    taskDeptPair.forEach((taskId, deptIds) -> {
+                        if (deptIds.contains(tobeReportXjDeptId)) {
+                            noDeviceReport.setTaskId(taskId);
+                        }
+                        if (taskProjectPair.containsKey(taskId)) {
+                            noDeviceReport.setProjectId(taskProjectPair.get(taskId));
+                        }
+                    });
+                }
                 tobeAddedReports.add(noDeviceReport);
-            });
+            }
+
             if (CollUtil.isNotEmpty(tobeAddedReports)) {
                 iotRyDailyReportMapper.insertBatch(tobeAddedReports);
             }
+            // 异步发送消息提醒 钉钉 站内信
+
         }
 
         return "创建成功";

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

@@ -749,10 +749,12 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
         dailyReport.setOpinion(updateReqVO.getOpinion());
         if (SupplierAuditStatusEnum.REJECT.getStatus().equals(updateReqVO.getAuditStatus())) {
             dailyReport.setStatus(0);
-            // 审批拒绝后需要向 日报填报人 发送消息提醒 每个队伍暂时只有1人 随机取1
+            // 审批拒绝后需要向 日报填报人 发送消息提醒 驳回到日报创建
             Long deptId = dailyReport.getDeptId();
             Long taskId = dailyReport.getTaskId();
             DeptDO dept = deptService.getDept(deptId);
+            // 当前日报创建人
+            String creator = dailyReport.getCreator();
             // 消息标题
             String msgTitle = dept.getName();
             if (ObjUtil.isNotEmpty(taskId)) {
@@ -767,9 +769,9 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
                 AdminUserDO user = users.get(0);
                 String mobile = user.getMobile();
                 String finalMsgTitle = msgTitle;
-                if (StrUtil.isNotBlank(mobile) && StrUtil.isNotBlank(finalMsgTitle)) {
+                if (StrUtil.isNotBlank(mobile) && StrUtil.isNotBlank(finalMsgTitle) && StrUtil.isNotBlank(creator)) {
                     pmsThreadPoolTaskExecutor.execute(() -> {
-                        pmsMessage.sendMessage(dailyReport.getId(), finalMsgTitle, PmsConstants.RY_DAILY_REPORT, user.getId(), mobile);
+                        pmsMessage.sendMessage(dailyReport.getId(), finalMsgTitle, PmsConstants.RY_DAILY_REPORT, Long.valueOf(creator), mobile);
                     });
                 }
             }