diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index 932e6eb..c850d04 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -44,6 +44,8 @@ public class TaskItemService { private final ExternalAssetService externalAssetService; private final SystemConfigService systemConfigService; private final DemandTypeMapper demandTypeMapper; + private final com.designhub.mapper.DeptBrandRelationMapper deptBrandRelationMapper; + private final com.designhub.mapper.UserDepartmentMapper userDepartmentMapper; private final com.designhub.mapper.UserMapper userMapper; private final ObjectMapper objectMapper; private final com.designhub.util.WorkHoursCalculator workHoursCalculator; @@ -1931,7 +1933,8 @@ public class TaskItemService { com.designhub.entity.User detailCompleter = userMapper.selectById(mainTask.getDetailCompleterId()); if (detailCompleter != null) { groupInfo.put("publisherName", detailCompleter.getRealName()); - groupInfo.put("publisherDeptName", detailCompleter.getDeptName()); + groupInfo.put("publisherDeptName", + resolveDisplayPublisherDeptName(mainTask, mainTask.getDetailCompleterId(), mainTask.getPublisherDeptId())); } } else { // 普通任务:发起人 = 原始发起人 @@ -1940,7 +1943,8 @@ public class TaskItemService { com.designhub.entity.User publisher = userMapper.selectById(mainTask.getPublisherId()); if (publisher != null) { groupInfo.put("publisherName", publisher.getRealName()); - groupInfo.put("publisherDeptName", publisher.getDeptName()); + groupInfo.put("publisherDeptName", + resolveDisplayPublisherDeptName(mainTask, mainTask.getPublisherId(), mainTask.getPublisherDeptId())); } } } @@ -2042,6 +2046,112 @@ public class TaskItemService { return new java.util.ArrayList<>(groupMap.values()); } + + private String resolveDisplayPublisherDeptName(Task mainTask, Long displayUserId, Long fallbackDeptId) { + if (displayUserId == null) { + return fallbackDeptId != null ? getDepartmentNameById(fallbackDeptId) : null; + } + + com.designhub.entity.Department displayDept = + resolveDemandDepartmentForTaskUser(displayUserId, mainTask != null ? mainTask.getBrandId() : null, fallbackDeptId); + if (displayDept != null) { + return displayDept.getDeptName(); + } + + if (fallbackDeptId != null) { + String fallbackDeptName = getDepartmentNameById(fallbackDeptId); + if (fallbackDeptName != null) { + return fallbackDeptName; + } + } + + com.designhub.entity.User user = userMapper.selectById(displayUserId); + return user != null ? user.getDeptName() : null; + } + + private com.designhub.entity.Department resolveDemandDepartmentForTaskUser(Long userId, Long brandId, Long fallbackDeptId) { + if (userId == null) { + return null; + } + + List userDepartments = userDepartmentMapper.selectList( + new LambdaQueryWrapper() + .eq(com.designhub.entity.UserDepartment::getUserId, userId) + .orderByDesc(com.designhub.entity.UserDepartment::getIsPrimary) + .orderByAsc(com.designhub.entity.UserDepartment::getId) + ); + + if (userDepartments == null || userDepartments.isEmpty()) { + return null; + } + + List demandDepartments = new java.util.ArrayList<>(); + com.designhub.entity.Department primaryDemandDepartment = null; + + for (com.designhub.entity.UserDepartment userDepartment : userDepartments) { + if (userDepartment == null || userDepartment.getDeptId() == null) { + continue; + } + + com.designhub.entity.Department department = departmentMapper.selectById(userDepartment.getDeptId()); + if (!isActiveDemandDepartment(department)) { + continue; + } + + demandDepartments.add(department); + if (primaryDemandDepartment == null && Integer.valueOf(1).equals(userDepartment.getIsPrimary())) { + primaryDemandDepartment = department; + } + } + + if (demandDepartments.isEmpty()) { + return null; + } + + if (brandId != null) { + for (com.designhub.entity.Department department : demandDepartments) { + List brandIds = deptBrandRelationMapper.getBrandIdsByDeptId(department.getId()); + if (brandIds != null && brandIds.contains(brandId)) { + return department; + } + } + } + + if (fallbackDeptId != null) { + for (com.designhub.entity.Department department : demandDepartments) { + if (fallbackDeptId.equals(department.getId())) { + return department; + } + } + } + + if (primaryDemandDepartment != null) { + return primaryDemandDepartment; + } + + return demandDepartments.get(0); + } + + private boolean isActiveDemandDepartment(com.designhub.entity.Department department) { + if (department == null) { + return false; + } + if (department.getStatus() == null || department.getStatus() != 1) { + return false; + } + if (department.getDeleted() != null && department.getDeleted() == 1) { + return false; + } + return "demand".equals(department.getDeptType()) || "primary_demand".equals(department.getDeptType()); + } + + private String getDepartmentNameById(Long deptId) { + if (deptId == null) { + return null; + } + com.designhub.entity.Department department = departmentMapper.selectById(deptId); + return department != null ? department.getDeptName() : null; + } /** * 从子任务编号解析部门序号