feat(project): 新增AI项目初始化及数据持久化功能

- 新增ProjectInitResult DTO,定义项目初始化的结构化数据格式
- 实现ProjectServiceImpl,支持从文本或文件生成项目数据并保存
- 集成Spring AI结构化输出能力,解析项目文档生成计划数据
- 实现项目、里程碑、任务、成员、资源、风险、时间节点数据转换及数据库保存
- 支持任务的层级关系和执行依赖关系持久化
- 新增Task实体,完善任务相关字段及数据库映射
- 添加详细日志,支持事务回滚保障数据一致性
- 新增数据库设计SQL文档,定义项目管理相关表结构及索引
This commit is contained in:
2026-03-27 11:57:30 +08:00
parent d49bc443ce
commit 5e698fbb8c
6 changed files with 107 additions and 22 deletions

View File

@@ -405,7 +405,6 @@ CREATE TABLE task (
task_code VARCHAR(50),
project_id BIGINT NOT NULL,
milestone_id BIGINT,
parent_id BIGINT,
task_name VARCHAR(200) NOT NULL,
description TEXT,
task_type VARCHAR(50),
@@ -431,13 +430,11 @@ CREATE TABLE task (
CONSTRAINT fk_task_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE,
CONSTRAINT fk_task_milestone FOREIGN KEY (milestone_id) REFERENCES project_milestone(id) ON DELETE SET NULL,
CONSTRAINT fk_task_parent FOREIGN KEY (parent_id) REFERENCES task(id) ON DELETE SET NULL,
CONSTRAINT fk_task_assignee FOREIGN KEY (assignee_id) REFERENCES sys_user(id) ON DELETE SET NULL
);
CREATE INDEX idx_task_project ON task(project_id);
CREATE INDEX idx_task_milestone ON task(milestone_id);
CREATE INDEX idx_task_parent ON task(parent_id);
CREATE INDEX idx_task_assignee ON task(assignee_id);
CREATE INDEX idx_task_status ON task(status);
@@ -445,7 +442,6 @@ COMMENT ON TABLE task IS '任务表';
COMMENT ON COLUMN task.task_code IS '任务编号';
COMMENT ON COLUMN task.project_id IS '项目ID';
COMMENT ON COLUMN task.milestone_id IS '所属里程碑ID';
COMMENT ON COLUMN task.parent_id IS '父任务ID';
COMMENT ON COLUMN task.task_name IS '任务名称';
COMMENT ON COLUMN task.description IS '任务描述';
COMMENT ON COLUMN task.task_type IS '任务类型';
@@ -475,8 +471,10 @@ CREATE TABLE task_dependency (
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(task_id, depends_on_task_id),
-- 修正了下面的 fk_td_depends 约束
CONSTRAINT fk_td_task FOREIGN KEY (task_id) REFERENCES task(id) ON DELETE CASCADE,
CONSTRAINT fk_td_depends ON DELETE CASCADE
CONSTRAINT fk_td_depends FOREIGN KEY (depends_on_task_id) REFERENCES task(id) ON DELETE CASCADE
);
CREATE INDEX idx_td_depends ON task_dependency(depends_on_task_id);