fix: 修复接单部门审批人选择错误的问题
1. TaskService: 创建子任务时保存用户选择的接单部门(selectedDeptId)到receiver_dept_id 2. TaskApprovalService: 优先从子任务的receiver_dept_id确定接单部门负责人 3. 解决多接单部门时总是取第一个部门负责人的问题
This commit is contained in:
parent
7d4ab4f275
commit
5573a89e41
@ -630,10 +630,45 @@ public class TaskApprovalService {
|
||||
|
||||
/**
|
||||
* 确定接单部门负责人(支持三级分类继承二级分类的配置)
|
||||
* 🔥 优先使用子任务上设置的接单部门
|
||||
*/
|
||||
private Long determineReceivingLeader(Task task) {
|
||||
// 根据任务类型的allowedDeptIds确定接单部门
|
||||
// 简化版本:取第一个任务类型的第一个允许部门
|
||||
// 🔥 步骤1:优先从子任务获取接单部门
|
||||
// 流水线任务:查找第一个子任务的 receiver_dept_id
|
||||
if (task.getIsPipeline() != null && task.getIsPipeline() == 1) {
|
||||
List<TaskItem> taskItems = taskItemMapper.selectList(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<TaskItem>()
|
||||
.eq(TaskItem::getTaskId, task.getId())
|
||||
.orderByAsc(TaskItem::getSortOrder)
|
||||
);
|
||||
|
||||
if (taskItems != null && !taskItems.isEmpty()) {
|
||||
// 查找第一个有 receiver_dept_id 的子任务
|
||||
for (TaskItem item : taskItems) {
|
||||
if (item.getReceiverDeptId() != null) {
|
||||
Department dept = departmentMapper.selectById(item.getReceiverDeptId());
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
log.info("从子任务 {} 获取接单部门负责人: 部门={}, 负责人ID={}",
|
||||
item.getItemNo(), dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 步骤2:如果主任务有 receiver_dept_id,使用它
|
||||
if (task.getReceiverDeptId() != null) {
|
||||
Department dept = departmentMapper.selectById(task.getReceiverDeptId());
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
log.info("从主任务获取接单部门负责人: 部门={}, 负责人ID={}",
|
||||
dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
}
|
||||
}
|
||||
|
||||
// 🔥 步骤3:降级方案 - 根据任务类型的allowedDeptIds确定接单部门
|
||||
// 取第一个任务类型的第一个允许部门
|
||||
String taskTypeIds = task.getTaskTypeIds();
|
||||
if (taskTypeIds == null || taskTypeIds.isEmpty()) {
|
||||
return null;
|
||||
@ -657,11 +692,13 @@ public class TaskApprovalService {
|
||||
|
||||
if (allowedDeptIds != null && !allowedDeptIds.isEmpty()) {
|
||||
String[] deptIds = allowedDeptIds.split(",");
|
||||
if (deptIds.length > 0) {
|
||||
Long deptId = Long.parseLong(deptIds[0].trim());
|
||||
Department dept = departmentMapper.selectById(deptId);
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
return dept.getLeaderId();
|
||||
if (deptIds.length > 0) {
|
||||
Long deptId = Long.parseLong(deptIds[0].trim());
|
||||
Department dept = departmentMapper.selectById(deptId);
|
||||
if (dept != null && dept.getLeaderId() != null) {
|
||||
log.info("从任务类型配置获取接单部门负责人(降级方案): 部门={}, 负责人ID={}",
|
||||
dept.getDeptName(), dept.getLeaderId());
|
||||
return dept.getLeaderId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,6 +574,26 @@ public class TaskService {
|
||||
item.setSortOrder(itemIndex);
|
||||
item.setProgress(0);
|
||||
|
||||
// 🔥 设置子任务的接单部门(无论什么模式都要设置)
|
||||
// 优先使用用户选择的部门,否则尝试从任务类型配置获取
|
||||
if (!groupItems.isEmpty()) {
|
||||
Long selectedDeptId = groupItems.get(0).getSelectedDeptId();
|
||||
if (selectedDeptId != null) {
|
||||
// 用户明确选择了接单部门
|
||||
item.setReceiverDeptId(selectedDeptId);
|
||||
log.info("子任务 {} 设置用户选择的接单部门: {}", item.getItemNo(), selectedDeptId);
|
||||
} else if (deptKey != null && !deptKey.equals("null") && !deptKey.contains(",")) {
|
||||
// 任务类型只配置了一个部门,自动设置
|
||||
try {
|
||||
Long singleDeptId = Long.parseLong(deptKey.trim());
|
||||
item.setReceiverDeptId(singleDeptId);
|
||||
log.info("子任务 {} 自动设置唯一的接单部门: {}", item.getItemNo(), singleDeptId);
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("无法解析部门ID: {}", deptKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是assigned模式,设置子任务的接收人(从该组的第一个任务项获取)
|
||||
if ("assigned".equals(dto.getReleaseType()) && !groupItems.isEmpty()) {
|
||||
Long itemReceiverId = groupItems.get(0).getReceiverId();
|
||||
@ -582,7 +602,8 @@ public class TaskService {
|
||||
User itemReceiver = userService.getUserById(itemReceiverId);
|
||||
if (itemReceiver != null) {
|
||||
item.setReceiverName(itemReceiver.getRealName());
|
||||
if (itemReceiver.getDeptId() != null) {
|
||||
// 如果还没有设置接单部门,从设计师信息获取
|
||||
if (item.getReceiverDeptId() == null && itemReceiver.getDeptId() != null) {
|
||||
item.setReceiverDeptId(itemReceiver.getDeptId());
|
||||
}
|
||||
}
|
||||
@ -1660,6 +1681,26 @@ public class TaskService {
|
||||
item.setSortOrder(itemIndex);
|
||||
item.setProgress(0);
|
||||
|
||||
// 🔥 设置子任务的接单部门(无论什么模式都要设置)
|
||||
String deptKeyForItem = groupToDeptKey.get(groupNo);
|
||||
if (!groupItems.isEmpty()) {
|
||||
Long selectedDeptIdForItem = groupItems.get(0).getSelectedDeptId();
|
||||
if (selectedDeptIdForItem != null) {
|
||||
// 用户明确选择了接单部门
|
||||
item.setReceiverDeptId(selectedDeptIdForItem);
|
||||
log.info("子任务 {} 设置用户选择的接单部门: {}", item.getItemNo(), selectedDeptIdForItem);
|
||||
} else if (deptKeyForItem != null && !deptKeyForItem.equals("null") && !deptKeyForItem.contains(",")) {
|
||||
// 任务类型只配置了一个部门,自动设置
|
||||
try {
|
||||
Long singleDeptIdForItem = Long.parseLong(deptKeyForItem.trim());
|
||||
item.setReceiverDeptId(singleDeptIdForItem);
|
||||
log.info("子任务 {} 自动设置唯一的接单部门: {}", item.getItemNo(), singleDeptIdForItem);
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("无法解析部门ID: {}", deptKeyForItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是assigned模式,设置子任务的接收人
|
||||
if ("assigned".equals(dto.getReleaseType()) && !groupItems.isEmpty()) {
|
||||
Long itemReceiverId = groupItems.get(0).getReceiverId();
|
||||
@ -1668,7 +1709,8 @@ public class TaskService {
|
||||
User itemReceiver = userService.getUserById(itemReceiverId);
|
||||
if (itemReceiver != null) {
|
||||
item.setReceiverName(itemReceiver.getRealName());
|
||||
if (itemReceiver.getDeptId() != null) {
|
||||
// 如果还没有设置接单部门,从设计师信息获取
|
||||
if (item.getReceiverDeptId() == null && itemReceiver.getDeptId() != null) {
|
||||
item.setReceiverDeptId(itemReceiver.getDeptId());
|
||||
}
|
||||
}
|
||||
@ -1693,8 +1735,8 @@ public class TaskService {
|
||||
}
|
||||
|
||||
taskItemMapper.insert(item);
|
||||
log.info("子任务创建成功,ID: {}, 编号: {}, 部门序号: {}, 部门内序号: {}",
|
||||
item.getId(), item.getItemNo(), currentDeptIndex, subIndex);
|
||||
log.info("子任务创建成功,ID: {}, 编号: {}, 部门序号: {}, 部门内序号: {}, 接单部门: {}",
|
||||
item.getId(), item.getItemNo(), currentDeptIndex, subIndex, item.getReceiverDeptId());
|
||||
|
||||
itemIndex++;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user