|
@@ -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.pms.service.maintenance.IotMaintenancePlanService;
|
|
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
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.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.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.dept.DeptService;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
@@ -78,6 +83,10 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
|
private PmsMessage pmsMessage;
|
|
private PmsMessage pmsMessage;
|
|
|
@Resource
|
|
@Resource
|
|
|
private DeptService deptService;
|
|
private DeptService deptService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private RoleService roleService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private UserRoleMapper userRoleMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@TenantJob
|
|
@TenantJob
|
|
@@ -470,18 +479,69 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
|
}
|
|
}
|
|
|
// 向工单责任人发送 站内信及 钉钉消息
|
|
// 向工单责任人发送 站内信及 钉钉消息
|
|
|
if (CollUtil.isNotEmpty(workOrders)) {
|
|
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())));
|
|
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, AdminUserRespDTO> users = adminUserApi.getUserMap(personIds);
|
|
|
// 建立保养工单与 用户手机号的 对应关系
|
|
// 建立保养工单与 用户手机号的 对应关系
|
|
|
Map<Long, String> orderMobilePair = new HashMap<>();
|
|
Map<Long, String> orderMobilePair = new HashMap<>();
|
|
|
|
|
+ Set<Long> orderDeptIds = new HashSet<>();
|
|
|
workOrders.forEach(order -> {
|
|
workOrders.forEach(order -> {
|
|
|
if (users.containsKey(Long.valueOf(order.getResponsiblePerson()))) {
|
|
if (users.containsKey(Long.valueOf(order.getResponsiblePerson()))) {
|
|
|
AdminUserRespDTO user = users.get(Long.valueOf(order.getResponsiblePerson()));
|
|
AdminUserRespDTO user = users.get(Long.valueOf(order.getResponsiblePerson()));
|
|
|
orderMobilePair.put(order.getId(), user.getMobile());
|
|
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 -> {
|
|
workOrders.forEach(order -> {
|
|
|
CountDownLatch latch = new CountDownLatch(workOrders.size());
|
|
CountDownLatch latch = new CountDownLatch(workOrders.size());
|
|
|
pmsThreadPoolTaskExecutor.execute(() -> {
|
|
pmsThreadPoolTaskExecutor.execute(() -> {
|
|
@@ -490,6 +550,21 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
|
String mobile = orderMobilePair.get(order.getId());
|
|
String mobile = orderMobilePair.get(order.getId());
|
|
|
pmsMessage.sendMessage(order.getId(), order.getName(), PmsConstants.GENERATE_MAINTENANCE,
|
|
pmsMessage.sendMessage(order.getId(), order.getName(), PmsConstants.GENERATE_MAINTENANCE,
|
|
|
Long.valueOf(order.getResponsiblePerson()), mobile);
|
|
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 {
|
|
} finally {
|
|
|
latch.countDown();
|
|
latch.countDown();
|