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 生产构建:✅ 成功
120 lines
6.4 KiB
SQL
120 lines
6.4 KiB
SQL
-- =============================================
|
|
-- DataMate 任务协调模块 - 初始化脚本
|
|
-- 说明:
|
|
-- 1) 创建 t_task_meta 表(任务拆分与分配元数据)
|
|
-- 2) 创建 t_task_assignment_log 表(分配操作日志)
|
|
-- 3) 在 t_auth_permissions 中插入任务协调权限
|
|
-- 4) 将权限绑定到 ROLE_ADMIN 和 ROLE_DATA_EDITOR
|
|
-- 5) 本脚本按"幂等"方式编写,可重复执行
|
|
-- =============================================
|
|
|
|
USE datamate;
|
|
|
|
-- =============================================
|
|
-- 1) t_task_meta - 任务拆分与分配元数据表
|
|
-- =============================================
|
|
CREATE TABLE IF NOT EXISTS t_task_meta
|
|
(
|
|
id VARCHAR(36) PRIMARY KEY COMMENT '任务元ID (UUID)',
|
|
parent_id VARCHAR(36) NULL COMMENT '父任务ID,顶层任务为NULL',
|
|
module VARCHAR(50) NOT NULL COMMENT '所属模块: ANNOTATION/CLEANING/EVALUATION/SYNTHESIS/COLLECTION/RATIO',
|
|
ref_task_id VARCHAR(64) NOT NULL COMMENT '关联的业务任务ID(各模块自己的task表ID)',
|
|
task_name VARCHAR(255) NOT NULL COMMENT '任务名称',
|
|
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '状态: PENDING/IN_PROGRESS/COMPLETED/FAILED/STOPPED/CANCELLED',
|
|
assigned_to BIGINT NULL COMMENT '分配给的用户ID (users.id)',
|
|
created_by VARCHAR(255) NOT NULL COMMENT '创建者用户名',
|
|
|
|
-- 进度字段
|
|
progress INT NOT NULL DEFAULT 0 COMMENT '进度百分比 0-100',
|
|
total_items INT NOT NULL DEFAULT 0 COMMENT '总条目数',
|
|
completed_items INT NOT NULL DEFAULT 0 COMMENT '已完成条目数',
|
|
failed_items INT NOT NULL DEFAULT 0 COMMENT '失败条目数',
|
|
|
|
-- 拆分配置
|
|
split_strategy VARCHAR(50) NULL COMMENT '拆分策略: BY_COUNT/BY_FILE/BY_PERCENTAGE/MANUAL',
|
|
split_config JSON NULL COMMENT '拆分配置参数',
|
|
|
|
-- 调度
|
|
priority INT NOT NULL DEFAULT 0 COMMENT '优先级 0=普通 1=高 2=紧急',
|
|
deadline TIMESTAMP NULL COMMENT '截止时间',
|
|
|
|
-- 时间戳
|
|
started_at TIMESTAMP NULL COMMENT '开始时间',
|
|
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
deleted_at TIMESTAMP NULL COMMENT '删除时间(软删除)',
|
|
|
|
-- 外键
|
|
CONSTRAINT fk_task_meta_parent FOREIGN KEY (parent_id) REFERENCES t_task_meta (id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_task_meta_assignee FOREIGN KEY (assigned_to) REFERENCES users (id) ON DELETE SET NULL,
|
|
|
|
-- 索引
|
|
INDEX idx_task_meta_parent_id (parent_id),
|
|
INDEX idx_task_meta_module_ref (module, ref_task_id),
|
|
INDEX idx_task_meta_assigned_to (assigned_to),
|
|
INDEX idx_task_meta_status (status),
|
|
INDEX idx_task_meta_created_by (created_by)
|
|
) ENGINE = InnoDB
|
|
DEFAULT CHARSET = utf8mb4
|
|
COMMENT = '任务拆分与分配元数据表';
|
|
|
|
|
|
-- =============================================
|
|
-- 2) t_task_assignment_log - 分配操作日志表
|
|
-- =============================================
|
|
CREATE TABLE IF NOT EXISTS t_task_assignment_log
|
|
(
|
|
id VARCHAR(36) PRIMARY KEY COMMENT '日志ID (UUID)',
|
|
task_meta_id VARCHAR(36) NOT NULL COMMENT '任务元ID',
|
|
action VARCHAR(20) NOT NULL COMMENT '操作类型: ASSIGN/REASSIGN/REVOKE',
|
|
from_user_id BIGINT NULL COMMENT '原分配用户ID',
|
|
to_user_id BIGINT NULL COMMENT '新分配用户ID',
|
|
operated_by VARCHAR(255) NOT NULL COMMENT '操作者用户名',
|
|
remark VARCHAR(500) NULL COMMENT '备注',
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
-- 外键
|
|
CONSTRAINT fk_assignment_log_task FOREIGN KEY (task_meta_id) REFERENCES t_task_meta (id) ON DELETE CASCADE,
|
|
|
|
-- 索引
|
|
INDEX idx_assignment_log_task_meta_id (task_meta_id)
|
|
) ENGINE = InnoDB
|
|
DEFAULT CHARSET = utf8mb4
|
|
COMMENT = '任务分配操作日志';
|
|
|
|
|
|
-- =============================================
|
|
-- 3) 任务协调权限初始化
|
|
-- =============================================
|
|
INSERT IGNORE INTO t_auth_permissions (id, permission_code, permission_name, module, action, path_pattern, method, enabled, is_built_in)
|
|
VALUES ('perm-tc-read', 'module:task-coordination:read', '任务协调读取', 'task-coordination', 'read', '/api/task-meta/**', 'GET', 1, 1),
|
|
('perm-tc-write', 'module:task-coordination:write', '任务协调写入', 'task-coordination', 'write', '/api/task-meta/**', 'POST,PUT,PATCH,DELETE', 1, 1),
|
|
('perm-tc-assign', 'module:task-coordination:assign', '任务分配', 'task-coordination', 'assign', '/api/task-meta/*/assign', 'POST', 1, 1);
|
|
|
|
|
|
-- =============================================
|
|
-- 4) 绑定权限到角色
|
|
-- =============================================
|
|
|
|
-- 管理员获得全部任务协调权限
|
|
INSERT IGNORE INTO t_auth_role_permissions (role_id, permission_id)
|
|
SELECT 'role-admin', p.id
|
|
FROM t_auth_permissions p
|
|
WHERE p.permission_code IN (
|
|
'module:task-coordination:read',
|
|
'module:task-coordination:write',
|
|
'module:task-coordination:assign'
|
|
);
|
|
|
|
-- 数据运营获得任务协调读写和分配权限
|
|
INSERT IGNORE INTO t_auth_role_permissions (role_id, permission_id)
|
|
SELECT 'role-data-editor', p.id
|
|
FROM t_auth_permissions p
|
|
WHERE p.permission_code IN (
|
|
'module:task-coordination:read',
|
|
'module:task-coordination:write',
|
|
'module:task-coordination:assign'
|
|
);
|