Files
ccdi/openspec/changes/add-project-management/tasks.md

258 lines
8.2 KiB
Markdown
Raw Normal View History

2026-01-27 17:09:32 +08:00
# Tasks: 项目管理模块开发
本文档列出了实现项目管理模块的具体开发任务,按优先级和依赖关系排序。
## 阶段1基础架构搭建
### 1.1 创建数据库表
2026-01-30 14:15:21 +08:00
- [ ] 创建 `ccdi_project`
- [ ] 创建 `ccdi_project_person`
2026-01-27 17:09:32 +08:00
- [ ] 创建索引和外键约束
- [ ] 准备测试数据
2026-01-30 14:15:21 +08:00
**验证**执行SQL脚本表结构创建成功可以使用 `DESC ccdi_project;` 查看表结构
2026-01-27 17:09:32 +08:00
### 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
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiProject.java` 实体类(使用 `@Data` 注解,不继承 BaseEntity
- [ ] 创建 `CcdiProjectPerson.java` 实体类(使用 `@Data` 注解)
- [ ] 创建 `CcdiProjectVO.java` 视图对象
- [ ] 创建 `CcdiProjectQueryVO.java` 查询视图对象
- [ ] 创建 `CcdiProjectDTO.java` 数据传输对象(新增/修改)
- [ ] 创建 `CcdiProjectQueryDTO.java` 查询DTO
- [ ] 创建 `CcdiProjectImportDTO.java` 导入DTO
2026-01-27 17:09:32 +08:00
- [ ] 为审计字段添加 `@TableField` 注解配置自动填充
**验证**实体类和DTO编译通过字段注解正确
### 1.4 创建DTO转换工具类
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiProjectConverter.java` 工具类
- [ ] 实现 `toEntity(CcdiProjectDTO)` 方法
- [ ] 实现 `toVO(CcdiProject)` 方法
- [ ] 实现 `toVOList(List<CcdiProject>)` 方法
2026-01-27 17:09:32 +08:00
**验证**:转换逻辑正确,覆盖所有字段
### 1.5 配置审计字段自动填充
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiMetaObjectHandler.java` 实现 `MetaObjectHandler` 接口
2026-01-27 17:09:32 +08:00
- [ ] 实现 `insertFill` 方法自动填充 `create_by``create_time`
- [ ] 实现 `updateFill` 方法自动填充 `update_by``update_time`
- [ ] 从 Spring Security 上下文获取当前登录用户
- [ ] 将处理器注册为 Spring 组件(`@Component`
**验证**:插入和更新操作时审计字段自动填充
## 阶段2数据访问层开发
### 2.1 创建Mapper接口
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiProjectMapper.java`(使用 MyBatis Plus
- [ ] 创建 `CcdiProjectPersonMapper.java`(使用 MyBatis Plus
2026-01-27 17:09:32 +08:00
### 2.2 创建Mapper XML
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiProjectMapper.xml`
- [ ] 创建 `CcdiProjectPersonMapper.xml`
2026-01-27 17:09:32 +08:00
- [ ] 定义基础CRUD SQLMyBatis Plus 自动生成)
- [ ] 定义关联查询SQL项目+人员)
**验证**可以使用MyBatis Log查看SQL执行正确
## 阶段3服务层开发
### 3.1 创建Service接口
2026-01-30 14:15:21 +08:00
- [ ] 创建 `ICcdiProjectService.java`
2026-01-27 17:09:32 +08:00
- [ ] 定义方法签名:
2026-01-30 14:15:21 +08:00
- `List<CcdiProject> selectProjectList(CcdiProject project)`
- `CcdiProject selectProjectById(Long projectId)`
- `int insertProject(CcdiProject project)`
- `int updateProject(CcdiProject project)`
2026-01-27 17:09:32 +08:00
- `int deleteProjectByIds(Long[] projectIds)`
2026-01-30 14:15:21 +08:00
- `boolean checkProjectNameUnique(CcdiProject project)`
2026-01-27 17:09:32 +08:00
- `void archiveProject(Long projectId)`
- `void reanalyzeProject(Long projectId)`
### 3.2 实现Service
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiProjectServiceImpl.java`
2026-01-27 17:09:32 +08:00
- [ ] 使用 `@Resource` 注入依赖
- [ ] 实现基础CRUD方法
- [ ] 实现项目名称唯一性校验
- [ ] 实现项目归档逻辑状态检查、PDF生成
- [ ] 实现重新分析逻辑(异步任务)
**验证**:单元测试通过,业务逻辑符合需求
## 阶段4控制器层开发
### 4.1 创建Controller
2026-01-30 14:15:21 +08:00
- [ ] 创建 `CcdiProjectController.java`(位于 `ruoyi-dpc` 模块的 `com.ruoyi.dpc.controller` 包中)
2026-01-27 17:09:32 +08:00
- [ ] 实现列表查询接口 `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天** |