feat: 确保管理员可以看到所有任务

- 待审核任务:管理员可看到所有待审核任务
- 待审核子任务组:管理员可看到所有待审核子任务组
- 进行中子任务:管理员可看到所有进行中子任务
- 已完成子任务:管理员可看到所有已完成子任务
This commit is contained in:
Your Name 2026-01-04 08:19:29 +08:00
parent cd9bb2bde1
commit 3733713e5c
4 changed files with 50 additions and 18 deletions

View File

@ -55,7 +55,13 @@ public class TaskItemController {
String actualToken = token.replace("Bearer ", "");
Long userId = jwtUtil.getUserIdFromToken(actualToken);
IPage<TaskItem> items = taskItemService.getInProgressItems(page, pageSize, userId);
// 检查是否是管理员
com.designhub.entity.User user = userMapper.selectById(userId);
boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin());
// 管理员可以看到所有进行中的子任务
IPage<TaskItem> items = taskItemService.getInProgressItems(page, pageSize, isAdmin ? null : userId);
return Result.success(items);
}
@ -71,7 +77,13 @@ public class TaskItemController {
String actualToken = token.replace("Bearer ", "");
Long userId = jwtUtil.getUserIdFromToken(actualToken);
IPage<TaskItem> items = taskItemService.getCompletedItems(page, pageSize, userId);
// 检查是否是管理员
com.designhub.entity.User user = userMapper.selectById(userId);
boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin());
// 管理员可以看到所有已完成的子任务
IPage<TaskItem> items = taskItemService.getCompletedItems(page, pageSize, isAdmin ? null : userId);
return Result.success(items);
}
@ -227,9 +239,18 @@ public class TaskItemController {
String actualToken = token.replace("Bearer ", "");
Long userId = jwtUtil.getUserIdFromToken(actualToken);
// 检查是否是管理员
com.designhub.entity.User user = userMapper.selectById(userId);
boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin());
// 管理员可以看到所有待审核子任务组
if (isAdmin) {
List<Map<String, Object>> groups = taskItemService.getPendingApprovalGroups(null);
return Result.success(groups);
}
// 如果没有提供部门ID,从用户信息中获取
if (deptId == null) {
com.designhub.entity.User user = userMapper.selectById(userId);
if (user == null || user.getDeptId() == null) {
return Result.success(new java.util.ArrayList<>());
}

View File

@ -58,7 +58,7 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
@Param("keyword") String keyword);
/**
* 查询进行中的子任务列表(按接单人)
* 查询进行中的子任务列表(按接单人,null表示查询所有-管理员)
*/
@Select("<script>" +
"SELECT ti.*, " +
@ -77,16 +77,16 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
"LEFT JOIN platform p ON t.platform_id = p.id " +
"LEFT JOIN demand_type dt ON ti.task_type_id = dt.id " +
"LEFT JOIN sys_user u ON t.publisher_id = u.id " +
"WHERE ti.receiver_id = #{receiverId} " +
" AND ti.status = 'in_progress' " +
"WHERE ti.status = 'in_progress' " +
" AND t.deleted = 0 " +
" <if test='receiverId != null'> AND ti.receiver_id = #{receiverId} </if>" +
"ORDER BY ti.update_time DESC" +
"</script>")
IPage<TaskItem> selectInProgressItems(Page<TaskItem> page,
@Param("receiverId") Long receiverId);
/**
* 查询已完成的子任务列表(按接单人)
* 查询已完成的子任务列表(按接单人,null表示查询所有-管理员)
*/
@Select("<script>" +
"SELECT ti.*, " +
@ -105,9 +105,9 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
"LEFT JOIN platform p ON t.platform_id = p.id " +
"LEFT JOIN demand_type dt ON ti.task_type_id = dt.id " +
"LEFT JOIN sys_user u ON t.publisher_id = u.id " +
"WHERE ti.receiver_id = #{receiverId} " +
" AND ti.status = 'completed' " +
"WHERE ti.status = 'completed' " +
" AND t.deleted = 0 " +
" <if test='receiverId != null'> AND ti.receiver_id = #{receiverId} </if>" +
"ORDER BY ti.complete_time DESC" +
"</script>")
IPage<TaskItem> selectCompletedItems(Page<TaskItem> page,

View File

@ -415,14 +415,24 @@ public class TaskApprovalService {
/**
* 获取待审核任务列表
* 管理员可以看到所有待审核任务
*/
public List<Task> getPendingApprovalTasks(Long userId) {
List<Task> tasks = taskMapper.selectList(
new LambdaQueryWrapper<Task>()
.eq(Task::getCurrentApproverId, userId)
.in(Task::getApprovalStatus, "pending_demand_approval", "pending_receiving_approval")
.orderByDesc(Task::getCreateTime)
);
// 检查用户是否是管理员
User user = userMapper.selectById(userId);
boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin());
LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<>();
wrapper.in(Task::getApprovalStatus, "pending_demand_approval", "pending_receiving_approval");
// 非管理员只能看到分配给自己的待审核任务
if (!isAdmin) {
wrapper.eq(Task::getCurrentApproverId, userId);
}
wrapper.orderByDesc(Task::getCreateTime);
List<Task> tasks = taskMapper.selectList(wrapper);
// 填充关联信息
for (Task task : tasks) {

View File

@ -657,10 +657,10 @@ public class TaskItemService {
/**
* 获取待审核的子任务组列表(按主任务分组)
* @param receiverDeptId 接单部门ID
* @param receiverDeptId 接单部门ID,null表示查询所有(管理员)
*/
public List<Map<String, Object>> getPendingApprovalGroups(Long receiverDeptId) {
// 查询该部门所有有待审核子任务组的主任务
// 查询所有有待审核子任务组的主任务
List<TaskItem> pendingItems = taskItemMapper.selectList(
new LambdaQueryWrapper<TaskItem>()
.eq(TaskItem::getStatus, "pending_approval")
@ -670,7 +670,8 @@ public class TaskItemService {
Map<String, Map<String, Object>> groupMap = new HashMap<>();
for (TaskItem item : pendingItems) {
Task mainTask = taskMapper.selectById(item.getTaskId());
if (mainTask != null && receiverDeptId.equals(mainTask.getReceiverDeptId())) {
// receiverDeptId为null表示管理员,可以看到所有任务
if (mainTask != null && (receiverDeptId == null || receiverDeptId.equals(mainTask.getReceiverDeptId()))) {
String key = item.getTaskId() + "-" + item.getGroupNo();
if (!groupMap.containsKey(key)) {
Map<String, Object> groupInfo = new HashMap<>();