Quellcode durchsuchen

pms 生成保养工单 瑞鹰新疆项目部 提醒王志焕

zhangcl vor 2 Tagen
Ursprung
Commit
d2daeac159

+ 75 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java

@@ -31,8 +31,13 @@ import cn.iocoder.yudao.module.pms.service.iotmainworkorderbom.IotMainWorkOrderB
 import cn.iocoder.yudao.module.pms.service.maintenance.IotMaintenancePlanService;
 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.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
+import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import cn.iocoder.yudao.module.system.service.permission.RoleService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -78,6 +83,10 @@ public class CreateMainWorkOrderJob implements JobHandler {
     private PmsMessage pmsMessage;
     @Resource
     private DeptService deptService;
+    @Resource
+    private RoleService roleService;
+    @Resource
+    private UserRoleMapper userRoleMapper;
 
     @Override
     @TenantJob
@@ -470,18 +479,69 @@ public class CreateMainWorkOrderJob implements JobHandler {
             }
             // 向工单责任人发送 站内信及 钉钉消息
             if (CollUtil.isNotEmpty(workOrders)) {
+                // 查询 字段 email 值 = 新疆项目管理RY 的部门
+                DeptListReqVO deptReqVO = new DeptListReqVO();
+                deptReqVO.setEmail("新疆项目管理RY");
+                List<DeptDO> departments = deptService.getDeptList(deptReqVO);
+                Set<Long> parentDeptIds = new HashSet<>();
+                if (CollUtil.isNotEmpty(departments)) {
+                    departments.forEach(dept -> {
+                        parentDeptIds.add(dept.getId());
+                    });
+                }
+                // 查询用户手机号的用户列表
+                Set<Long> targetUserIds = new HashSet<>();
+                if (CollUtil.isNotEmpty(parentDeptIds)) {
+                    // 查询指定角色对应的用户
+                    RoleDO role = roleService.getRoleByCode("新疆项目管理RY");
+                    if (ObjUtil.isNotEmpty(role)) {
+                        Set<Long> roleIds = new HashSet<>();
+                        roleIds.add(role.getId());
+                        List<UserRoleDO> userRoles = userRoleMapper.selectListByRoleIds(roleIds);
+                        if (CollUtil.isNotEmpty(userRoles)) {
+                            // 提取有审批角色的所有用户ID(去重+空值过滤)
+                            Set<Long> roleUserIds = userRoles.stream()
+                                    .map(UserRoleDO::getUserId)
+                                    .filter(Objects::nonNull) // 过滤空userId
+                                    .collect(Collectors.toSet());
+                            targetUserIds.addAll(roleUserIds);
+                        }
+                    }
+                }
+
                 // 先查询所有工单责任人的手机号
                 Set<Long> personIds = new HashSet<>(convertList(workOrders, order -> Long.valueOf(order.getResponsiblePerson())));
+                if (CollUtil.isNotEmpty(targetUserIds)) {
+                    personIds.addAll(targetUserIds);
+                }
                 Map<Long, AdminUserRespDTO> users = adminUserApi.getUserMap(personIds);
                 // 建立保养工单与 用户手机号的 对应关系
                 Map<Long, String> orderMobilePair = new HashMap<>();
+                Set<Long> orderDeptIds = new HashSet<>();
                 workOrders.forEach(order -> {
                     if (users.containsKey(Long.valueOf(order.getResponsiblePerson()))) {
                         AdminUserRespDTO user = users.get(Long.valueOf(order.getResponsiblePerson()));
                         orderMobilePair.put(order.getId(), user.getMobile());
                     }
+                    // 收集所有工单的部门 查询上级部门是否是 瑞鹰-新疆项目部
+                    orderDeptIds.add(order.getDeptId());
                 });
+
+                // 查询工单部门信息
+                Set<Long> ryXjDeptIds = new HashSet<>();
+                if (CollUtil.isNotEmpty(orderDeptIds)) {
+                    List<DeptDO> deptInfos = deptService.getDeptList(orderDeptIds);
+                    if (CollUtil.isNotEmpty(deptInfos)) {
+                        deptInfos.forEach(dept -> {
+                            if (parentDeptIds.contains(dept.getParentId())) {
+                                ryXjDeptIds.add(dept.getId());
+                            }
+                        });
+                    }
+                }
+                System.out.println("目标部门id集合:" + ryXjDeptIds.size());
                 // 异步多线程发送 站内信 钉钉 消息
+                // 如果是 瑞鹰 新疆项目部的保养工单,需要提醒到 ‘新疆项目管理RY’ 角色
                 workOrders.forEach(order -> {
                     CountDownLatch latch = new CountDownLatch(workOrders.size());
                     pmsThreadPoolTaskExecutor.execute(() -> {
@@ -490,6 +550,21 @@ public class CreateMainWorkOrderJob implements JobHandler {
                                 String mobile = orderMobilePair.get(order.getId());
                                 pmsMessage.sendMessage(order.getId(), order.getName(), PmsConstants.GENERATE_MAINTENANCE,
                                         Long.valueOf(order.getResponsiblePerson()), mobile);
+                                // 如果是瑞鹰的 新疆项目部保养工单 同时提醒到 指定拥有指定角色 新疆项目管理RY 的人
+                                System.out.println("工单部门id:" + order.getDeptId());
+                                System.out.println("目标用户id集合:" + targetUserIds.size());
+                                if (ryXjDeptIds.contains(order.getDeptId())) {
+                                    if (CollUtil.isNotEmpty(targetUserIds)) {
+                                        List<Long> userIdList = new ArrayList<>(targetUserIds);
+                                        Long targetUserId = userIdList.get(0);
+                                        if (users.containsKey(targetUserId)) {
+                                            AdminUserRespDTO targetUser = users.get(targetUserId);
+                                            String targetUserMobile = targetUser.getMobile();
+                                            pmsMessage.sendMessage(order.getId(), order.getName(), PmsConstants.GENERATE_MAINTENANCE,
+                                                    targetUserId, targetUserMobile);
+                                        }
+                                    }
+                                }
                             }
                         } finally {
                             latch.countDown();

+ 3 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java

@@ -21,4 +21,7 @@ public class DeptListReqVO {
     @Schema(description = "指定的部门id", example = "123")
     private Long deptId;
 
+    @Schema(description = "邮箱 扩展字段,模糊匹配", example = "新疆项目管理RY")
+    private String email;
+
 }

+ 1 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java

@@ -17,6 +17,7 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
     default List<DeptDO> selectList(DeptListReqVO reqVO) {
         return selectList(new LambdaQueryWrapperX<DeptDO>()
                 .likeIfPresent(DeptDO::getName, reqVO.getName())
+                .eqIfPresent(DeptDO::getEmail, reqVO.getEmail())
                 .inIfPresent(DeptDO::getId, reqVO.getDeptIds())
                 .eqIfPresent(DeptDO::getStatus, reqVO.getStatus()));
     }