fix: repair stale publisher dept resolution
This commit is contained in:
parent
e51ee0163c
commit
d5c62318a8
@ -2074,6 +2074,16 @@ public class TaskItemService {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (brandId != null) {
|
||||
Long brandDeptId = deptBrandRelationMapper.getDeptIdByBrandId(brandId);
|
||||
if (brandDeptId != null) {
|
||||
com.designhub.entity.Department brandDepartment = departmentMapper.selectById(brandDeptId);
|
||||
if (isActiveDemandDepartment(brandDepartment)) {
|
||||
return brandDepartment;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<com.designhub.entity.UserDepartment> userDepartments = userDepartmentMapper.selectList(
|
||||
new LambdaQueryWrapper<com.designhub.entity.UserDepartment>()
|
||||
.eq(com.designhub.entity.UserDepartment::getUserId, userId)
|
||||
|
||||
@ -1733,6 +1733,18 @@ public class TaskService {
|
||||
* 填充任务关联信息(品牌、类目、平台、发布人等)
|
||||
*/
|
||||
private void fillTaskRelatedInfo(Task task) {
|
||||
Department effectivePublisherDept = resolveDisplayPublisherDept(task);
|
||||
if (effectivePublisherDept != null) {
|
||||
task.setPublisherDeptId(effectivePublisherDept.getId());
|
||||
task.setPublisherDeptName(effectivePublisherDept.getDeptName());
|
||||
}
|
||||
|
||||
Department effectivePrimaryPublisherDept = resolveDisplayPrimaryPublisherDept(task);
|
||||
if (effectivePrimaryPublisherDept != null) {
|
||||
task.setPrimaryPublisherDeptId(effectivePrimaryPublisherDept.getId());
|
||||
task.setPrimaryPublisherDeptName(effectivePrimaryPublisherDept.getDeptName());
|
||||
}
|
||||
|
||||
// 填充品牌名称
|
||||
if (task.getBrandId() != null) {
|
||||
Brand brand = brandMapper.selectById(task.getBrandId());
|
||||
@ -1765,14 +1777,6 @@ public class TaskService {
|
||||
}
|
||||
}
|
||||
|
||||
// 填充发布人部门名称
|
||||
if (task.getPublisherDeptId() != null) {
|
||||
Department dept = departmentService.getDepartmentById(task.getPublisherDeptId());
|
||||
if (dept != null) {
|
||||
task.setPublisherDeptName(dept.getDeptName());
|
||||
}
|
||||
}
|
||||
|
||||
// 填充接收人名称
|
||||
if (task.getReceiverId() != null) {
|
||||
User receiver = userService.getUserById(task.getReceiverId());
|
||||
@ -1797,14 +1801,6 @@ public class TaskService {
|
||||
}
|
||||
}
|
||||
|
||||
// 填充一级需求发起人部门名称
|
||||
if (task.getPrimaryPublisherDeptId() != null) {
|
||||
Department primaryDept = departmentService.getDepartmentById(task.getPrimaryPublisherDeptId());
|
||||
if (primaryDept != null) {
|
||||
task.setPrimaryPublisherDeptName(primaryDept.getDeptName());
|
||||
}
|
||||
}
|
||||
|
||||
// 填充明细完善人名称(需求部门成员)
|
||||
if (task.getDetailCompleterId() != null) {
|
||||
User detailCompleter = userService.getUserById(task.getDetailCompleterId());
|
||||
@ -1849,6 +1845,10 @@ public class TaskService {
|
||||
if (!canUpdate) {
|
||||
throw new BusinessException(ResultCode.PARAM_ERROR, "任务已在进行中或已完成,无法编辑");
|
||||
}
|
||||
|
||||
User editor = userService.getUserById(userId);
|
||||
Department publisherDept = resolvePublisherDeptForTaskUpdate(existTask, task.getPublisherDeptId(), editor, isAdmin);
|
||||
task.setPublisherDeptId(publisherDept.getId());
|
||||
|
||||
task.setId(id);
|
||||
|
||||
@ -1975,7 +1975,8 @@ public class TaskService {
|
||||
|
||||
// 检查部门积分是否充足(管理员跳过积分检查,一级需求部门无明细提交场景跳过)
|
||||
User user = userService.getUserById(userId);
|
||||
Department publisherDept = resolvePublishingDepartment(user, existTask.getPublisherDeptId(), isAdmin);
|
||||
Department publisherDept = resolvePublisherDeptForTaskUpdate(existTask, dto.getPublisherDeptId(), user, isAdmin);
|
||||
existTask.setPublisherDeptId(publisherDept.getId());
|
||||
if (!isAdmin && !allowPrimaryTaskWithoutItems && publisherDept.getId() != null) {
|
||||
if (!teamScorePoolService.checkBalance(publisherDept.getId(), totalScoreInt)) {
|
||||
throw new BusinessException(ResultCode.INSUFFICIENT_SCORE, "部门积分余额不足");
|
||||
@ -2095,6 +2096,120 @@ public class TaskService {
|
||||
|
||||
log.info("流水线任务更新成功: taskId={}, userId={}", id, userId);
|
||||
}
|
||||
|
||||
private Department resolvePublisherDeptForTaskUpdate(Task existTask, Long requestedDeptId, User editor, boolean isAdmin) {
|
||||
if (editor != null && requestedDeptId != null) {
|
||||
return resolvePublishingDepartment(editor, requestedDeptId, isAdmin);
|
||||
}
|
||||
|
||||
if (editor != null && (isAdmin || editor.getId().equals(existTask.getPublisherId()))) {
|
||||
try {
|
||||
return resolvePublishingDepartment(editor, existTask.getPublisherDeptId(), isAdmin);
|
||||
} catch (BusinessException ex) {
|
||||
log.info("任务 {} 原发起部门已失效,尝试按任务信息自动修复: {}", existTask.getId(), ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
Department fallbackDept = resolveDisplayPublisherDept(existTask);
|
||||
if (fallbackDept != null) {
|
||||
return fallbackDept;
|
||||
}
|
||||
|
||||
throw new BusinessException(ResultCode.PARAM_ERROR, "任务发起部门已失效,请联系管理员处理后再提交");
|
||||
}
|
||||
|
||||
private Department resolveDisplayPublisherDept(Task task) {
|
||||
if (task == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Department storedDept = departmentService.getDepartmentById(task.getPublisherDeptId());
|
||||
if (isUsablePublishingDepartment(storedDept)) {
|
||||
return storedDept;
|
||||
}
|
||||
|
||||
Department brandDept = resolveBrandMappedPublishingDept(task.getBrandId());
|
||||
if (brandDept != null) {
|
||||
return brandDept;
|
||||
}
|
||||
|
||||
return resolveUserPublishingDepartment(task.getPublisherId(), task.getPublisherDeptId());
|
||||
}
|
||||
|
||||
private Department resolveDisplayPrimaryPublisherDept(Task task) {
|
||||
if (task == null || task.getPrimaryPublisherDeptId() == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Department storedDept = departmentService.getDepartmentById(task.getPrimaryPublisherDeptId());
|
||||
if (isUsablePublishingDepartment(storedDept)) {
|
||||
return storedDept;
|
||||
}
|
||||
|
||||
return resolveUserPublishingDepartment(task.getPrimaryPublisherId(), task.getPrimaryPublisherDeptId());
|
||||
}
|
||||
|
||||
private Department resolveBrandMappedPublishingDept(Long brandId) {
|
||||
if (brandId == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Department brandDept = departmentService.getDemandDeptByBrandId(brandId);
|
||||
return isUsablePublishingDepartment(brandDept) ? brandDept : null;
|
||||
}
|
||||
|
||||
private Department resolveUserPublishingDepartment(Long userId, Long preferredDeptId) {
|
||||
if (userId == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<Department> validDepartments = userService.getUserDepartments(userId).stream()
|
||||
.filter(java.util.Objects::nonNull)
|
||||
.filter(this::isUsablePublishingDepartment)
|
||||
.collect(Collectors.collectingAndThen(
|
||||
Collectors.toMap(Department::getId, dept -> dept, (left, right) -> left, java.util.LinkedHashMap::new),
|
||||
map -> map.values().stream().toList()
|
||||
));
|
||||
|
||||
if (validDepartments.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (preferredDeptId != null) {
|
||||
for (Department department : validDepartments) {
|
||||
if (preferredDeptId.equals(department.getId())) {
|
||||
return department;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
User user = userService.getUserById(userId);
|
||||
if (user != null && user.getDeptId() != null) {
|
||||
for (Department department : validDepartments) {
|
||||
if (user.getDeptId().equals(department.getId())) {
|
||||
return department;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return validDepartments.get(0);
|
||||
}
|
||||
|
||||
private boolean isUsablePublishingDepartment(Department department) {
|
||||
if (department == null || department.getId() == null) {
|
||||
return false;
|
||||
}
|
||||
if (!"demand".equals(department.getDeptType()) && !"primary_demand".equals(department.getDeptType())) {
|
||||
return false;
|
||||
}
|
||||
if (department.getStatus() == null || department.getStatus() != 1) {
|
||||
return false;
|
||||
}
|
||||
if (department.getDeleted() != null && department.getDeleted() == 1) {
|
||||
return false;
|
||||
}
|
||||
return departmentService.isDepartmentActiveWithAncestors(department.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 为更新操作创建流水线子任务(复用createPipelineTask的子任务创建逻辑)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user