You've already forked DataMate
## 功能概述 实现完整的任务拆分、分配和进度跟踪功能,支持将任务拆分为子任务并分配给不同用户。 ## Phase 1: 数据库层 - 新增 t_task_meta 表(任务元数据协调表) - 新增 t_task_assignment_log 表(分配日志表) - 新增 3 个权限条目(read/write/assign) - 新增 SQLAlchemy ORM 模型 ## Phase 2: 后端 API (Java) - 新增 task-coordination-service 模块(32 个文件) - 实现 11 个 API 端点: - 任务查询(列表、子任务、我的任务) - 任务拆分(支持 4 种策略) - 任务分配(单个、批量、重新分配、撤回) - 进度管理(查询、更新、聚合) - 分配日志 - 集成权限控制和路由规则 ## Phase 3: 前端 UI (React + TypeScript) - 新增 10 个文件(模型、API、组件、页面) - 实现 5 个核心组件: - SplitTaskDialog - 任务拆分对话框 - AssignTaskDialog - 任务分配对话框 - BatchAssignDialog - 批量分配对话框 - TaskProgressPanel - 进度面板 - AssignmentLogDrawer - 分配记录 - 实现 2 个页面: - TaskCoordination - 任务管理主页 - MyTasks - 我的任务页面 - 集成侧边栏菜单和路由 ## 问题修复 - 修复 getMyTasks 分页参数缺失 - 修复子任务 assignee 信息缺失(批量查询优化) - 修复 proportion 精度计算(余量分配) ## 技术亮点 - 零侵入设计:通过独立协调表实现,不修改现有模块 - 批量查询优化:避免 N+1 查询问题 - 4 种拆分策略:按比例/数量/文件/手动 - 进度自动聚合:子任务更新自动聚合到父任务 - 权限细粒度控制:read/write/assign 三级权限 ## 验证 - Maven 编译:✅ 零错误 - TypeScript 编译:✅ 零错误 - Vite 生产构建:✅ 成功
156 lines
3.3 KiB
TypeScript
156 lines
3.3 KiB
TypeScript
// ── Enums ────────────────────────────────────────────────
|
|
|
|
export enum TaskMetaStatus {
|
|
PENDING = "PENDING",
|
|
IN_PROGRESS = "IN_PROGRESS",
|
|
COMPLETED = "COMPLETED",
|
|
FAILED = "FAILED",
|
|
STOPPED = "STOPPED",
|
|
CANCELLED = "CANCELLED",
|
|
}
|
|
|
|
export enum SplitStrategy {
|
|
BY_COUNT = "BY_COUNT",
|
|
BY_FILE = "BY_FILE",
|
|
BY_PERCENTAGE = "BY_PERCENTAGE",
|
|
MANUAL = "MANUAL",
|
|
}
|
|
|
|
export enum TaskModule {
|
|
ANNOTATION = "ANNOTATION",
|
|
CLEANING = "CLEANING",
|
|
EVALUATION = "EVALUATION",
|
|
SYNTHESIS = "SYNTHESIS",
|
|
COLLECTION = "COLLECTION",
|
|
RATIO = "RATIO",
|
|
}
|
|
|
|
export enum AssignmentAction {
|
|
ASSIGN = "ASSIGN",
|
|
REASSIGN = "REASSIGN",
|
|
REVOKE = "REVOKE",
|
|
}
|
|
|
|
// ── Response Interfaces ──────────────────────────────────
|
|
|
|
export interface AssigneeInfo {
|
|
id: number;
|
|
username: string;
|
|
fullName?: string;
|
|
}
|
|
|
|
export interface TaskMetaDto {
|
|
id: string;
|
|
parentId?: string;
|
|
module: string;
|
|
refTaskId: string;
|
|
taskName: string;
|
|
status: TaskMetaStatus;
|
|
assignedTo?: number;
|
|
assigneeName?: string;
|
|
progress: number;
|
|
totalItems: number;
|
|
completedItems: number;
|
|
failedItems: number;
|
|
splitStrategy?: string;
|
|
splitConfig?: string;
|
|
priority: number;
|
|
deadline?: string;
|
|
remark?: string;
|
|
createdBy?: number;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
childCount: number;
|
|
assignee?: AssigneeInfo;
|
|
}
|
|
|
|
export interface TaskAssignmentLogDto {
|
|
id: number;
|
|
taskMetaId: string;
|
|
action: AssignmentAction;
|
|
userId?: number;
|
|
userName?: string;
|
|
remark?: string;
|
|
operatorId?: number;
|
|
operatorName?: string;
|
|
createdAt: string;
|
|
}
|
|
|
|
export interface ChildTaskProgressDto {
|
|
taskId: string;
|
|
taskName: string;
|
|
assignee?: AssigneeInfo;
|
|
progress: number;
|
|
totalItems: number;
|
|
completedItems: number;
|
|
failedItems: number;
|
|
status: TaskMetaStatus;
|
|
}
|
|
|
|
export interface TaskProgressResponse {
|
|
taskId: string;
|
|
taskName: string;
|
|
overallProgress: number;
|
|
totalItems: number;
|
|
completedItems: number;
|
|
failedItems: number;
|
|
status: TaskMetaStatus;
|
|
children: ChildTaskProgressDto[];
|
|
}
|
|
|
|
// ── Request Interfaces ───────────────────────────────────
|
|
|
|
export interface CreateTaskMetaRequest {
|
|
module: string;
|
|
refTaskId: string;
|
|
taskName: string;
|
|
assignedTo?: number;
|
|
totalItems?: number;
|
|
priority?: number;
|
|
deadline?: string;
|
|
}
|
|
|
|
export interface SplitAssignment {
|
|
userId?: number;
|
|
proportion?: number;
|
|
itemCount?: number;
|
|
taskName?: string;
|
|
}
|
|
|
|
export interface SplitTaskRequest {
|
|
strategy: SplitStrategy;
|
|
splitConfig?: Record<string, unknown>;
|
|
assignments: SplitAssignment[];
|
|
}
|
|
|
|
export interface AssignTaskRequest {
|
|
userId: number;
|
|
remark?: string;
|
|
}
|
|
|
|
export interface BatchTaskAssignment {
|
|
taskMetaId: string;
|
|
userId: number;
|
|
remark?: string;
|
|
}
|
|
|
|
export interface BatchAssignRequest {
|
|
assignments: BatchTaskAssignment[];
|
|
}
|
|
|
|
export interface UpdateProgressRequest {
|
|
progress?: number;
|
|
totalItems?: number;
|
|
completedItems?: number;
|
|
failedItems?: number;
|
|
status?: TaskMetaStatus;
|
|
}
|
|
|
|
// ── User (for assignment selectors) ──────────────────────
|
|
|
|
export interface UserOption {
|
|
id: number;
|
|
username: string;
|
|
fullName?: string;
|
|
}
|