# Tasks: 项目管理模块开发

本文档列出了实现项目管理模块的具体开发任务，按优先级和依赖关系排序。

## 阶段1：基础架构搭建

### 1.1 创建数据库表
- [ ] 创建 `ccdi_project` 表
- [ ] 创建 `ccdi_project_person` 表
- [ ] 创建索引和外键约束
- [ ] 准备测试数据

**验证**：执行SQL脚本，表结构创建成功，可以使用 `DESC ccdi_project;` 查看表结构

### 1.2 创建后端模块结构
- [ ] 创建 `ruoyi-dpc` 新模块
- [ ] 配置模块 `pom.xml` 依赖
- [ ] 在根 `pom.xml` 中添加模块引用
- [ ] 在 `ruoyi-admin` 的 `pom.xml` 中添加对 `ruoyi-dpc` 的依赖
- [ ] 配置 Spring 扫描 `com.ruoyi.dpc.controller` 包
- [ ] 创建包结构：`com.ruoyi.dpc.controller`, `com.ruoyi.dpc.domain`, `com.ruoyi.dpc.mapper`, `com.ruoyi.dpc.service`

**验证**：项目可以正常编译启动

### 1.3 创建实体类和DTO
- [ ] 创建 `CcdiProject.java` 实体类（使用 `@Data` 注解，不继承 BaseEntity）
- [ ] 创建 `CcdiProjectPerson.java` 实体类（使用 `@Data` 注解）
- [ ] 创建 `CcdiProjectVO.java` 视图对象
- [ ] 创建 `CcdiProjectQueryVO.java` 查询视图对象
- [ ] 创建 `CcdiProjectDTO.java` 数据传输对象（新增/修改）
- [ ] 创建 `CcdiProjectQueryDTO.java` 查询DTO
- [ ] 创建 `CcdiProjectImportDTO.java` 导入DTO
- [ ] 为审计字段添加 `@TableField` 注解配置自动填充

**验证**：实体类和DTO编译通过，字段注解正确

### 1.4 创建DTO转换工具类
- [ ] 创建 `CcdiProjectConverter.java` 工具类
- [ ] 实现 `toEntity(CcdiProjectDTO)` 方法
- [ ] 实现 `toVO(CcdiProject)` 方法
- [ ] 实现 `toVOList(List<CcdiProject>)` 方法

**验证**：转换逻辑正确，覆盖所有字段

### 1.5 配置审计字段自动填充
- [ ] 创建 `CcdiMetaObjectHandler.java` 实现 `MetaObjectHandler` 接口
- [ ] 实现 `insertFill` 方法自动填充 `create_by` 和 `create_time`
- [ ] 实现 `updateFill` 方法自动填充 `update_by` 和 `update_time`
- [ ] 从 Spring Security 上下文获取当前登录用户
- [ ] 将处理器注册为 Spring 组件（`@Component`）

**验证**：插入和更新操作时审计字段自动填充

## 阶段2：数据访问层开发

### 2.1 创建Mapper接口
- [ ] 创建 `CcdiProjectMapper.java`（使用 MyBatis Plus）
- [ ] 创建 `CcdiProjectPersonMapper.java`（使用 MyBatis Plus）

### 2.2 创建Mapper XML
- [ ] 创建 `CcdiProjectMapper.xml`
- [ ] 创建 `CcdiProjectPersonMapper.xml`
- [ ] 定义基础CRUD SQL（MyBatis Plus 自动生成）
- [ ] 定义关联查询SQL（项目+人员）

**验证**：可以使用MyBatis Log查看SQL执行正确

## 阶段3：服务层开发

### 3.1 创建Service接口
- [ ] 创建 `ICcdiProjectService.java`
- [ ] 定义方法签名：
  - `List<CcdiProject> selectProjectList(CcdiProject project)`
  - `CcdiProject selectProjectById(Long projectId)`
  - `int insertProject(CcdiProject project)`
  - `int updateProject(CcdiProject project)`
  - `int deleteProjectByIds(Long[] projectIds)`
  - `boolean checkProjectNameUnique(CcdiProject project)`
  - `void archiveProject(Long projectId)`
  - `void reanalyzeProject(Long projectId)`

### 3.2 实现Service
- [ ] 创建 `CcdiProjectServiceImpl.java`
- [ ] 使用 `@Resource` 注入依赖
- [ ] 实现基础CRUD方法
- [ ] 实现项目名称唯一性校验
- [ ] 实现项目归档逻辑（状态检查、PDF生成）
- [ ] 实现重新分析逻辑（异步任务）

**验证**：单元测试通过，业务逻辑符合需求

## 阶段4：控制器层开发

### 4.1 创建Controller
- [ ] 创建 `CcdiProjectController.java`（位于 `ruoyi-dpc` 模块的 `com.ruoyi.dpc.controller` 包中）
- [ ] 实现列表查询接口 `GET /dpc/project/list`
- [ ] 实现详情查询接口 `GET /dpc/project/{id}`
- [ ] 实现新增接口 `POST /dpc/project`
- [ ] 实现修改接口 `PUT /dpc/project`
- [ ] 实现删除接口 `DELETE /dpc/project/{ids}`
- [ ] 实现归档接口 `POST /dpc/project/archive/{id}`
- [ ] 实现重新分析接口 `POST /dpc/project/reanalyze/{id}`
- [ ] 实现导入历史项目接口 `POST /dpc/project/import`

### 4.2 添加权限注解
- [ ] 为所有接口添加 `@PreAuthorize` 注解
- [ ] 配置权限字符串：
  - `dpc:project:list`
  - `dpc:project:query`
  - `dpc:project:add`
  - `dpc:project:edit`
  - `dpc:project:remove`
  - `dpc:project:archive`
  - `dpc:project:reanalyze`

### 4.3 添加操作日志
- [ ] 为关键操作添加 `@Log` 注解
- [ ] 配置业务类型

**验证**：使用Postman测试所有接口，返回正确

## 阶段4.5：生成API文档

### 4.5.1 生成接口文档
- [ ] 使用 SpringDoc/Knife4j 生成 API 文档
- [ ] 在项目文件目录下导出 API 文档

**验证**：API 文档生成成功，包含所有接口

## 阶段5：前端API开发

### 5.1 创建API文件
- [ ] 创建 `ruoyi-ui/src/api/dpcProject.js`
- [ ] 封装所有API请求方法：
  - `listProject(query)`
  - `getProject(projectId)`
  - `addProject(data)`
  - `updateProject(data)`
  - `delProject(projectIds)`
  - `archiveProject(projectId)`
  - `reanalyzeProject(projectId)`
  - `importProject(data)`

**验证**：API方法可以正常调用

## 阶段6：前端页面开发

### 6.1 创建项目列表页
- [ ] 创建 `ruoyi-ui/src/views/dpcProject/index.vue`
- [ ] 实现搜索区域（项目名称输入框、搜索按钮）
- [ ] 实现操作按钮（新建、导入历史项目）
- [ ] 实现数据表格（项目信息展示）
- [ ] 实现状态标签（进行中/已完成/已归档）
- [ ] 实现操作列（进入项目、查看结果、重新分析、归档）

### 6.2 创建新增/编辑弹窗
- [ ] 创建 `ruoyi-ui/src/views/dpcProject/add-or-edit.vue`
- [ ] 实现项目基本信息表单（项目名称、描述、时间范围）
- [ ] 实现人员选择器（多选）
- [ ] 实现表单验证

### 6.3 创建导入历史项目弹窗
- [ ] 创建 `ruoyi-ui/src/views/dpcProject/import-history.vue`
- [ ] 实现历史项目列表（只显示已完成项目）
- [ ] 实现项目详情预览
- [ ] 实现新项目配置

**验证**：页面显示正常，交互流畅

## 阶段7：菜单与权限配置

### 7.1 创建系统菜单
- [ ] 在系统管理 > 菜单管理中创建"项目管理"菜单
- [ ] 配置菜单图标和路由（路径：`dpcProject`）
- [ ] 创建子菜单/按钮权限

### 7.2 配置角色权限
- [ ] 为管理员角色分配项目管理权限
- [ ] 为其他角色配置适当权限

**验证**：登录后可以看到项目管理菜单

## 阶段8：测试与优化

### 8.1 功能测试
- [ ] 测试项目创建流程
- [ ] 测试项目搜索功能
- [ ] 测试项目状态流转
- [ ] 测试项目归档功能
- [ ] 测试重新分析功能
- [ ] 测试导入历史项目功能

### 8.2 边界测试
- [ ] 测试必填字段验证
- [ ] 测试项目名称唯一性
- [ ] 测试状态权限控制
- [ ] 测试数据权限

### 8.3 性能优化
- [ ] 优化SQL查询
- [ ] 添加必要的数据库索引
- [ ] 优化大数据量列表加载

**验证**：所有测试用例通过，无明显性能问题

## 阶段9：文档与交付

### 9.1 代码注释
- [ ] 为所有公开方法添加JavaDoc注释
- [ ] 为复杂逻辑添加行内注释

### 9.2 更新系统文档
- [ ] 更新数据库设计文档
- [ ] 更新API接口文档
- [ ] 更新用户操作手册

**验证**：文档完整、准确

## 任务依赖关系

```
阶段1 (基础架构)
  ↓
阶段2 (数据访问层) → 阶段3 (服务层) → 阶段4 (控制器层) → 阶段4.5 (API文档)
                                                                     ↓
阶段5 (前端API) ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ←
  ↓
阶段6 (前端页面)
  ↓
阶段7 (菜单权限)
  ↓
阶段8 (测试优化)
  ↓
阶段9 (文档交付)
```

## 可并行开发任务

以下任务可以并行开发：
- 阶段2和阶段3（后端不同层级）
- 阶段5和阶段6的前端页面组件
- 阶段7的菜单配置可以在后端开发完成后进行

## 预计工作量

| 阶段 | 预计工时 |
|-----|---------|
| 阶段1 | 0.5天 |
| 阶段2 | 0.5天 |
| 阶段3 | 1天 |
| 阶段4 | 1天 |
| 阶段5 | 0.5天 |
| 阶段6 | 2天 |
| 阶段7 | 0.5天 |
| 阶段8 | 1天 |
| 阶段9 | 0.5天 |
| **总计** | **7.5天** |
