Преглед изворни кода

pms 瑞都日报生成逻辑优化 以任务施工队伍id 作为日报deptId

zhangcl пре 3 дана
родитељ
комит
c3a070b331

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

@@ -144,15 +144,23 @@ public class CreateRdDailyReportOrderJob implements JobHandler {
         Set<Long> userIds = new HashSet<>();
         List<IotRdDailyReportDO> reports = new ArrayList<>();
         Map<Long, Long> taskSubmitterPair = new HashMap<>();
+        // key任务id  value施工队伍id
+        Map<Long, Long> taskTeamIdPair = new HashMap<>();
+        Set<Long> teamDepartmentIds = new HashSet<>();
         if (CollUtil.isNotEmpty(qualifiedTasks)) {
             qualifiedTasks.forEach(task -> {
                 // 查询当前任务的 工单填报人
                 Set<Long> submitterIds = task.getSubmitter();
+                Set<Long> teamDeptIds = task.getDeptIds();
                 if (CollUtil.isNotEmpty(submitterIds)) {
                     // 查询工单填报人所在部门
                     userIds.addAll(submitterIds);
                     taskSubmitterPair.put(task.getId(), new ArrayList<>(submitterIds).get(0));
                 }
+                if (CollUtil.isNotEmpty(teamDeptIds)) {
+                    taskTeamIdPair.put(task.getId(), new ArrayList<>(teamDeptIds).get(0));
+                    teamDepartmentIds.addAll(teamDeptIds);
+                }
             });
             // 查询所有任务配置的工单填报人的信息
             Map<Long, AdminUserRespDTO> users = adminUserApi.getUserMap(userIds);
@@ -163,7 +171,8 @@ public class CreateRdDailyReportOrderJob implements JobHandler {
                     deptIds.add(user.getDeptId());
                 });
             }
-            Map<Long, DeptDO> deptPair = deptService.getDeptMap(deptIds);
+            // 查询所有任务施工队伍的 deptId
+            Map<Long, DeptDO> deptPair = deptService.getDeptMap(teamDepartmentIds);
             // 以任务为维度 生成瑞都日报 部门为任务配置的工单填报人对应的部门
             // todo 任务填报人列表中 如果有人属于队伍上 则 设置日报deptId=队伍id 这样项目部填报人也能看到日报
             qualifiedTasks.forEach(task -> {
@@ -174,10 +183,15 @@ public class CreateRdDailyReportOrderJob implements JobHandler {
                         Long userId = taskSubmitterPair.get(task.getId());
                         if (users.containsKey(userId)) {
                             AdminUserRespDTO user = users.get(userId);
-                            report.setDeptId(user.getDeptId());
+                            // 取任务施工队伍的 deptId
+                            if (taskTeamIdPair.containsKey(task.getId())) {
+                                report.setDeptId(taskTeamIdPair.get(task.getId()));
+                            } else {
+                                report.setDeptId(user.getDeptId());
+                            }
                             // 根据用户部门名称 生成日报标题
-                            if (deptPair.containsKey(user.getDeptId())) {
-                                DeptDO dept = deptPair.get(user.getDeptId());
+                            if (deptPair.containsKey(report.getDeptId())) {
+                                DeptDO dept = deptPair.get(report.getDeptId());
                                 String deptName = dept.getName();
                                 String[] multiLangDeptNames = deptName.split("~~");
                                 report.setReportName(multiLangDeptNames[0] + "/" + currentFormatDateStr + "日报填报" );

+ 22 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java

@@ -1,17 +1,23 @@
 package cn.iocoder.yudao.module.system.controller.admin.dept;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -31,6 +37,10 @@ public class DeptController {
 
     @Resource
     private DeptService deptService;
+    @Autowired
+    private WebFrameworkUtils webFrameworkUtils;
+    @Autowired
+    private AdminUserMapper userMapper;
 
     @PostMapping("create")
     @Operation(summary = "创建部门")
@@ -100,7 +110,19 @@ public class DeptController {
         DeptListReqVO reqVO = new DeptListReqVO();
         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
         reqVO.setDeptId(deptId);
+        // 过滤掉数据权限 队伍可以查询上级部门信息
         List<DeptDO> list = deptService.getChildDeptList(deptId);
+        // 查询当前用户所属部门 可能是队伍 list 查询结果为0
+        if (CollUtil.isEmpty(list)) {
+            Long userId = webFrameworkUtils.getLoginUserId();
+            if (ObjUtil.isNotEmpty(userId)) {
+                // 查询当前登录人所属部门
+                AdminUserDO user = userMapper.selectById(userId);
+                if (ObjUtil.isNotEmpty(user)) {
+                    deptId = user.getDeptId();
+                }
+            }
+        }
         // 查询 deptId 对应的部门 加入 最终返回的集合
         DeptDO currentDept = deptService.getDept(deptId);
         list.add(currentDept);