Your Name 3733713e5c feat: 确保管理员可以看到所有任务
- 待审核任务:管理员可看到所有待审核任务
- 待审核子任务组:管理员可看到所有待审核子任务组
- 进行中子任务:管理员可看到所有进行中子任务
- 已完成子任务:管理员可看到所有已完成子任务
2026-01-04 08:19:29 +08:00

264 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.designhub.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.designhub.common.Result;
import com.designhub.entity.TaskItem;
import com.designhub.service.TaskItemService;
import com.designhub.mapper.UserMapper;
import com.designhub.util.JwtUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 任务子项控制器(流水线任务)
*/
@Tag(name = "流水线任务管理", description = "流水线任务子项相关接口")
@RestController
@RequestMapping("/api/tasks/items")
@RequiredArgsConstructor
public class TaskItemController {
private final TaskItemService taskItemService;
private final UserMapper userMapper;
private final JwtUtil jwtUtil;
/**
* 获取可接单的子任务列表
*/
@Operation(summary = "获取可接单的子任务列表")
@GetMapping("/available")
public Result<IPage<TaskItem>> getAvailableItems(
@Parameter(description = "页码") @RequestParam(defaultValue = "1") Integer page,
@Parameter(description = "每页数量") @RequestParam(defaultValue = "10") Integer pageSize,
@Parameter(description = "任务类型ID") @RequestParam(required = false) Long taskTypeId,
@Parameter(description = "搜索关键词") @RequestParam(required = false) String keyword) {
IPage<TaskItem> items = taskItemService.getAvailableItems(page, pageSize, taskTypeId, keyword);
return Result.success(items);
}
/**
* 获取进行中的子任务列表
*/
@Operation(summary = "获取进行中的子任务列表")
@GetMapping("/in-progress")
public Result<IPage<TaskItem>> getInProgressItems(
@Parameter(description = "页码") @RequestParam(defaultValue = "1") Integer page,
@Parameter(description = "每页数量") @RequestParam(defaultValue = "10") Integer pageSize,
@RequestHeader("Authorization") String token) {
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());
// 管理员可以看到所有进行中的子任务
IPage<TaskItem> items = taskItemService.getInProgressItems(page, pageSize, isAdmin ? null : userId);
return Result.success(items);
}
/**
* 获取已完成的子任务列表
*/
@Operation(summary = "获取已完成的子任务列表")
@GetMapping("/completed")
public Result<IPage<TaskItem>> getCompletedItems(
@Parameter(description = "页码") @RequestParam(defaultValue = "1") Integer page,
@Parameter(description = "每页数量") @RequestParam(defaultValue = "10") Integer pageSize,
@RequestHeader("Authorization") String token) {
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());
// 管理员可以看到所有已完成的子任务
IPage<TaskItem> items = taskItemService.getCompletedItems(page, pageSize, isAdmin ? null : userId);
return Result.success(items);
}
/**
* 根据主任务ID获取所有子任务
*/
@Operation(summary = "根据主任务ID获取所有子任务")
@GetMapping("/task/{taskId}")
public Result<List<TaskItem>> getItemsByTaskId(
@Parameter(description = "主任务ID") @PathVariable Long taskId) {
List<TaskItem> items = taskItemService.getItemsByTaskId(taskId);
return Result.success(items);
}
/**
* 获取子任务详情
*/
@Operation(summary = "获取子任务详情")
@GetMapping("/{itemId}")
public Result<TaskItem> getItemById(
@Parameter(description = "子任务ID") @PathVariable Long itemId) {
TaskItem item = taskItemService.getItemById(itemId);
return Result.success(item);
}
/**
* 抢单子任务
*/
@Operation(summary = "抢单子任务")
@PostMapping("/{itemId}/grab")
public Result<String> grabItem(
@Parameter(description = "子任务ID") @PathVariable Long itemId,
@RequestHeader("Authorization") String token) {
String actualToken = token.replace("Bearer ", "");
Long userId = jwtUtil.getUserIdFromToken(actualToken);
taskItemService.grabItem(itemId, userId);
return Result.success("抢单成功");
}
/**
* 更新子任务进度
*/
@Operation(summary = "更新子任务进度")
@PostMapping("/{itemId}/progress")
public Result<String> updateProgress(
@Parameter(description = "子任务ID") @PathVariable Long itemId,
@Parameter(description = "进度(0-100)") @RequestParam Integer progress,
@RequestHeader("Authorization") String token) {
String actualToken = token.replace("Bearer ", "");
Long userId = jwtUtil.getUserIdFromToken(actualToken);
taskItemService.updateProgress(itemId, userId, progress);
return Result.success("进度更新成功");
}
/**
* 完结子任务
*/
@Operation(summary = "完结子任务")
@PostMapping("/{itemId}/complete")
public Result<Map<String, Object>> completeItem(
@Parameter(description = "子任务ID") @PathVariable Long itemId,
@Parameter(description = "交付路径") @RequestBody Map<String, String> request,
@RequestHeader("Authorization") String token) {
String actualToken = token.replace("Bearer ", "");
Long userId = jwtUtil.getUserIdFromToken(actualToken);
String deliveryPath = request.get("deliveryPath");
Map<String, Object> result = taskItemService.completeItem(itemId, userId, deliveryPath);
return Result.success("子任务完成成功", result);
}
/**
* 驳回子任务
*/
@Operation(summary = "驳回子任务")
@PostMapping("/{itemId}/reject")
public Result<String> rejectItem(
@Parameter(description = "子任务ID") @PathVariable Long itemId,
@Parameter(description = "驳回原因") @RequestBody Map<String, String> request) {
String reason = request.get("reason");
taskItemService.rejectItem(itemId, reason);
return Result.success("子任务已驳回");
}
/**
* 获取主任务进度统计
*/
@Operation(summary = "获取主任务进度统计")
@GetMapping("/task/{taskId}/progress")
public Result<Map<String, Object>> getTaskProgress(
@Parameter(description = "主任务ID") @PathVariable Long taskId) {
Map<String, Object> progress = taskItemService.getTaskProgress(taskId);
return Result.success(progress);
}
/**
* 审核子任务组(接单部门负责人)
*/
@Operation(summary = "审核子任务组")
@PostMapping("/groups/approve")
public Result<String> approveTaskItemGroup(
@RequestBody Map<String, Object> request,
@RequestHeader("Authorization") String token) {
String actualToken = token.replace("Bearer ", "");
Long approverId = jwtUtil.getUserIdFromToken(actualToken);
Long taskId = Long.valueOf(request.get("taskId").toString());
Integer groupNo = Integer.valueOf(request.get("groupNo").toString());
Long assignedReceiverId = request.get("assignedReceiverId") != null ?
Long.valueOf(request.get("assignedReceiverId").toString()) : null;
taskItemService.approveTaskItemGroup(taskId, groupNo, approverId, assignedReceiverId);
return Result.success(assignedReceiverId != null ? "子任务组已指派" : "子任务组已发布到大厅");
}
/**
* 驳回子任务组
*/
@Operation(summary = "驳回子任务组")
@PostMapping("/groups/reject")
public Result<String> rejectTaskGroup(
@RequestBody Map<String, Object> request,
@RequestHeader("Authorization") String token) {
String actualToken = token.replace("Bearer ", "");
Long rejectorId = jwtUtil.getUserIdFromToken(actualToken);
Long taskId = Long.valueOf(request.get("taskId").toString());
Integer groupNo = Integer.valueOf(request.get("groupNo").toString());
String reason = (String) request.get("reason");
taskItemService.rejectTaskGroup(taskId, groupNo, rejectorId, reason);
return Result.success("子任务组已驳回");
}
/**
* 获取待审核的子任务组列表
*/
@Operation(summary = "获取待审核的子任务组列表")
@GetMapping("/groups/pending-approval")
public Result<List<Map<String, Object>>> getPendingApprovalGroups(
@Parameter(description = "部门ID") @RequestParam(required = false) Long deptId,
@RequestHeader("Authorization") String token) {
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) {
if (user == null || user.getDeptId() == null) {
return Result.success(new java.util.ArrayList<>());
}
deptId = user.getDeptId();
}
List<Map<String, Object>> groups = taskItemService.getPendingApprovalGroups(deptId);
return Result.success(groups);
}
}