156 lines
5.4 KiB
Java

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<Task> 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<Task> 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<Integer> 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<Task> 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<List<Task>> getTaskPool() {
List<Task> tasks = adminTaskService.getTaskPool();
return Result.success(tasks);
}
@Operation(summary = "获取所有进行中的任务")
@GetMapping("/in-progress")
public Result<List<Task>> getInProgressTasks() {
List<Task> tasks = adminTaskService.getInProgressTasks();
return Result.success(tasks);
}
@Operation(summary = "强制完成任务")
@PostMapping("/{taskId}/force-complete")
public Result<Task> 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<Task> 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<Long> taskIds;
private Long designerId;
public List<Long> getTaskIds() { return taskIds; }
public void setTaskIds(List<Long> 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; }
}
}