package com.designhub.controller; import com.designhub.common.Result; import com.designhub.entity.Task; import com.designhub.service.AdminTaskService; import com.designhub.util.JwtUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 管理员任务调配Controller */ @Tag(name = "管理员任务管理", description = "管理员任务调配相关API") @RestController @RequestMapping("/api/admin/tasks") @RequiredArgsConstructor public class AdminTaskController { private final AdminTaskService adminTaskService; private final JwtUtil jwtUtil; @Operation(summary = "分配任务") @PostMapping("/{taskId}/assign") public Result assignTask( @PathVariable Long taskId, @RequestParam Long designerId, @RequestHeader("Authorization") String authHeader ) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long adminId = jwtUtil.getUserIdFromToken(token); Task task = adminTaskService.assignTask(taskId, designerId, adminId); return Result.success(task); } @Operation(summary = "转移任务") @PostMapping("/{taskId}/transfer") public Result transferTask( @PathVariable Long taskId, @RequestBody TransferRequest request, @RequestHeader("Authorization") String authHeader ) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long adminId = jwtUtil.getUserIdFromToken(token); Task task = adminTaskService.transferTask( taskId, request.getNewDesignerId(), adminId, request.getReason() ); return Result.success(task); } @Operation(summary = "批量分配任务") @PostMapping("/batch-assign") public Result batchAssignTasks( @RequestBody BatchAssignRequest request, @RequestHeader("Authorization") String authHeader ) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long adminId = jwtUtil.getUserIdFromToken(token); int count = adminTaskService.batchAssignTasks( request.getTaskIds(), request.getDesignerId(), adminId ); return Result.success(count); } @Operation(summary = "调整任务优先级") @PutMapping("/{taskId}/priority") public Result adjustTaskPriority( @PathVariable Long taskId, @RequestParam Integer priority, @RequestHeader("Authorization") String authHeader ) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long adminId = jwtUtil.getUserIdFromToken(token); Task task = adminTaskService.adjustTaskPriority(taskId, priority, adminId); return Result.success(task); } @Operation(summary = "获取任务池列表") @GetMapping("/pool") public Result> getTaskPool() { List tasks = adminTaskService.getTaskPool(); return Result.success(tasks); } @Operation(summary = "获取所有进行中的任务") @GetMapping("/in-progress") public Result> getInProgressTasks() { List tasks = adminTaskService.getInProgressTasks(); return Result.success(tasks); } @Operation(summary = "强制完成任务") @PostMapping("/{taskId}/force-complete") public Result forceCompleteTask( @PathVariable Long taskId, @RequestBody AdminActionRequest request, @RequestHeader("Authorization") String authHeader ) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long adminId = jwtUtil.getUserIdFromToken(token); Task task = adminTaskService.forceCompleteTask(taskId, adminId, request.getReason()); return Result.success(task); } @Operation(summary = "取消任务") @PostMapping("/{taskId}/cancel") public Result cancelTask( @PathVariable Long taskId, @RequestBody AdminActionRequest request, @RequestHeader("Authorization") String authHeader ) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long adminId = jwtUtil.getUserIdFromToken(token); Task task = adminTaskService.cancelTask(taskId, adminId, request.getReason()); return Result.success(task); } // DTO类 public static class TransferRequest { private Long newDesignerId; private String reason; public Long getNewDesignerId() { return newDesignerId; } public void setNewDesignerId(Long newDesignerId) { this.newDesignerId = newDesignerId; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } } public static class BatchAssignRequest { private List taskIds; private Long designerId; public List getTaskIds() { return taskIds; } public void setTaskIds(List taskIds) { this.taskIds = taskIds; } public Long getDesignerId() { return designerId; } public void setDesignerId(Long designerId) { this.designerId = designerId; } } public static class AdminActionRequest { private String reason; public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } } }