fix: 后端全面支持三级分类继承二级分类的接单部门配置
- TaskService: 创建任务分组时支持继承 - TaskService: 获取可接单任务列表时支持继承 - TaskItemService: 接单权限验证时支持继承 - TaskApprovalService: 确定接单部门负责人时支持继承 - PipelineTaskDTO: 添加预览图字段
This commit is contained in:
parent
373d1c1ed4
commit
73fd5a9b08
@ -45,6 +45,7 @@ public class PipelineTaskDTO {
|
||||
private String releaseType; // 发布类型:default/recruitment/assigned
|
||||
private Long receiverId; // 指定接收人ID(assigned模式使用)
|
||||
private List<String> productBarcodes; // 商品条码列表(已验证库存)
|
||||
private String previewImage; // 预览图URL
|
||||
|
||||
/**
|
||||
* 子任务项DTO
|
||||
|
||||
@ -629,7 +629,7 @@ public class TaskApprovalService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定接单部门负责人
|
||||
* 确定接单部门负责人(支持三级分类继承二级分类的配置)
|
||||
*/
|
||||
private Long determineReceivingLeader(Task task) {
|
||||
// 根据任务类型的allowedDeptIds确定接单部门
|
||||
@ -644,13 +644,25 @@ public class TaskApprovalService {
|
||||
try {
|
||||
Long typeId = Long.parseLong(typeIdStr.trim());
|
||||
DemandType demandType = configService.getDemandTypeById(typeId);
|
||||
if (demandType != null && demandType.getAllowedDeptIds() != null) {
|
||||
String[] deptIds = demandType.getAllowedDeptIds().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 (demandType != null) {
|
||||
// 获取允许的部门ID(支持继承)
|
||||
String allowedDeptIds = demandType.getAllowedDeptIds();
|
||||
if ((allowedDeptIds == null || allowedDeptIds.isEmpty()) && demandType.getParentId() != null) {
|
||||
// 三级分类没有配置,尝试获取父级(二级分类)的配置
|
||||
DemandType parentType = configService.getDemandTypeById(demandType.getParentId());
|
||||
if (parentType != null) {
|
||||
allowedDeptIds = parentType.getAllowedDeptIds();
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,21 +142,33 @@ public class TaskItemService {
|
||||
throw new BusinessException(ResultCode.FORBIDDEN, "部门负责人不能接单,请分配给设计师");
|
||||
}
|
||||
|
||||
// 检查4:验证部门是否允许接该任务类型
|
||||
// 检查4:验证部门是否允许接该任务类型(支持三级分类继承二级分类的配置)
|
||||
if (item.getTaskTypeId() != null) {
|
||||
com.designhub.entity.DemandType demandType = configService.getDemandTypeById(item.getTaskTypeId());
|
||||
if (demandType != null && demandType.getAllowedDeptIds() != null && !demandType.getAllowedDeptIds().isEmpty()) {
|
||||
// 检查用户部门是否在允许列表中
|
||||
String[] allowedIds = demandType.getAllowedDeptIds().split(",");
|
||||
boolean isAllowed = false;
|
||||
for (String allowedId : allowedIds) {
|
||||
if (allowedId.trim().equals(String.valueOf(user.getDeptId()))) {
|
||||
isAllowed = true;
|
||||
break;
|
||||
if (demandType != null) {
|
||||
// 获取允许的部门ID(支持继承)
|
||||
String allowedDeptIds = demandType.getAllowedDeptIds();
|
||||
if ((allowedDeptIds == null || allowedDeptIds.isEmpty()) && demandType.getParentId() != null) {
|
||||
// 三级分类没有配置,尝试获取父级(二级分类)的配置
|
||||
var parentType = configService.getDemandTypeById(demandType.getParentId());
|
||||
if (parentType != null) {
|
||||
allowedDeptIds = parentType.getAllowedDeptIds();
|
||||
}
|
||||
}
|
||||
if (!isAllowed) {
|
||||
throw new BusinessException(ResultCode.FORBIDDEN, "您的部门无权接收此类型的任务");
|
||||
|
||||
if (allowedDeptIds != null && !allowedDeptIds.isEmpty()) {
|
||||
// 检查用户部门是否在允许列表中
|
||||
String[] allowedIds = allowedDeptIds.split(",");
|
||||
boolean isAllowed = false;
|
||||
for (String allowedId : allowedIds) {
|
||||
if (allowedId.trim().equals(String.valueOf(user.getDeptId()))) {
|
||||
isAllowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isAllowed) {
|
||||
throw new BusinessException(ResultCode.FORBIDDEN, "您的部门无权接收此类型的任务");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@ import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
@ -295,6 +296,7 @@ public class TaskService {
|
||||
task.setSpuInfo(dto.getSpuInfo());
|
||||
task.setTaskSubType(dto.getTaskSubType());
|
||||
task.setAttachmentUrl(dto.getAttachmentUrl());
|
||||
task.setPreviewImage(dto.getPreviewImage());
|
||||
task.setRemark(dto.getRemark());
|
||||
task.setPriority(dto.getPriority() != null ? dto.getPriority() : 1); // 默认优先级:1-普通
|
||||
|
||||
@ -354,8 +356,17 @@ public class TaskService {
|
||||
com.designhub.dto.PipelineTaskDTO.TaskItemDTO itemDto = dto.getItems().get(i);
|
||||
var demandType = configService.getDemandTypeById(itemDto.getTaskTypeId());
|
||||
|
||||
// 获取当前任务类型的接单部门配置
|
||||
// 获取当前任务类型的接单部门配置(支持三级分类继承二级分类的配置)
|
||||
String currentAllowedDeptIds = demandType.getAllowedDeptIds();
|
||||
if (currentAllowedDeptIds == null && demandType.getParentId() != null) {
|
||||
// 如果当前类型没有配置,尝试获取父级的配置
|
||||
var parentType = configService.getDemandTypeById(demandType.getParentId());
|
||||
if (parentType != null) {
|
||||
currentAllowedDeptIds = parentType.getAllowedDeptIds();
|
||||
log.info("三级分类 {} 继承父级 {} 的接单部门配置: {}",
|
||||
demandType.getTypeName(), parentType.getTypeName(), currentAllowedDeptIds);
|
||||
}
|
||||
}
|
||||
|
||||
// 判断是否需要创建新分组
|
||||
boolean needNewGroup = false;
|
||||
@ -651,12 +662,26 @@ public class TaskService {
|
||||
String timeRange, String sortBy, Long userDeptId) {
|
||||
Page<Task> pageParam = new Page<>(page, pageSize);
|
||||
|
||||
// 获取当前用户部门可以接单的任务类型ID列表
|
||||
// 获取当前用户部门可以接单的任务类型ID列表(支持三级分类继承二级分类的配置)
|
||||
List<Long> allowedTaskTypeIds = null;
|
||||
if (userDeptId != null) {
|
||||
allowedTaskTypeIds = demandTypeMapper.selectList(null).stream()
|
||||
List<DemandType> allDemandTypes = demandTypeMapper.selectList(null);
|
||||
// 构建ID到DemandType的映射,用于快速查找父级
|
||||
Map<Long, DemandType> demandTypeMap = allDemandTypes.stream()
|
||||
.collect(Collectors.toMap(DemandType::getId, dt -> dt));
|
||||
|
||||
allowedTaskTypeIds = allDemandTypes.stream()
|
||||
.filter(dt -> {
|
||||
// 获取允许的部门ID(支持继承)
|
||||
String allowedDepts = dt.getAllowedDeptIds();
|
||||
if ((allowedDepts == null || allowedDepts.isEmpty()) && dt.getParentId() != null) {
|
||||
// 三级分类没有配置,尝试获取父级(二级分类)的配置
|
||||
DemandType parentType = demandTypeMap.get(dt.getParentId());
|
||||
if (parentType != null) {
|
||||
allowedDepts = parentType.getAllowedDeptIds();
|
||||
}
|
||||
}
|
||||
|
||||
// 如果allowedDeptIds为空,表示所有部门都可接单
|
||||
if (allowedDepts == null || allowedDepts.isEmpty()) {
|
||||
return true;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user