- 待审核任务:管理员可看到所有待审核任务 - 待审核子任务组:管理员可看到所有待审核子任务组 - 进行中子任务:管理员可看到所有进行中子任务 - 已完成子任务:管理员可看到所有已完成子任务
264 lines
10 KiB
Java
264 lines
10 KiB
Java
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);
|
||
}
|
||
}
|