完成项目详情风险人员分页改造
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# 项目详情风险总览员工列表分页后端实施记录
|
||||
|
||||
## 1. 实施概述
|
||||
|
||||
- 实施日期:2026-03-29
|
||||
- 实施范围:项目详情“风险总览”员工列表后端分页接口、分页 SQL、服务映射与测试回归
|
||||
- 实施结果:后端代码改造完成,定向回归通过
|
||||
|
||||
本次实施按设计文档完成以下内容:
|
||||
|
||||
- 新增 `CcdiProjectRiskPeopleQueryDTO`,统一承接 `projectId/pageNum/pageSize`
|
||||
- 将 `GET /ccdi/project/overview/risk-people` 改为标准分页返回结构
|
||||
- 将风险人员查询从全量列表改为 MyBatis Plus `Page` 真分页
|
||||
- 为 `risk-people` 单独固定默认分页 `1/5`
|
||||
|
||||
## 2. 实际修改文件
|
||||
|
||||
### 2.1 后端代码
|
||||
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectRiskPeopleQueryDTO.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectRiskPeopleOverviewVO.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java`
|
||||
- `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml`
|
||||
|
||||
### 2.2 测试代码
|
||||
|
||||
- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/CcdiProjectOverviewServiceStructureTest.java`
|
||||
- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewControllerTest.java`
|
||||
- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java`
|
||||
- `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImplTest.java`
|
||||
|
||||
## 3. 关键实施说明
|
||||
|
||||
### 3.1 接口契约调整
|
||||
|
||||
- 控制器 `getRiskPeople` 从接收单个 `projectId` 改为接收 `CcdiProjectRiskPeopleQueryDTO`
|
||||
- 服务接口同步改为 `getRiskPeopleOverview(CcdiProjectRiskPeopleQueryDTO queryDTO)`
|
||||
- 风险人员返回结构从 `overviewList` 迁移为:
|
||||
- `rows`
|
||||
- `total`
|
||||
- `pageNum`
|
||||
- `pageSize`
|
||||
|
||||
### 3.2 分页实现
|
||||
|
||||
- Mapper 新增 `selectRiskPeopleOverviewPage(Page<CcdiProjectEmployeeRiskAggregateVO> page, @Param("query") CcdiProjectRiskPeopleQueryDTO query)`
|
||||
- SQL 数据源保持 `ccdi_project_overview_employee_result` 不变
|
||||
- SQL 排序规则保持:
|
||||
- `risk_level_sort asc`
|
||||
- `result.model_count desc`
|
||||
- `result.rule_count desc`
|
||||
- `result.staff_id_card asc`
|
||||
- 本次未新增补丁接口,也未调整风险口径与标签组装逻辑
|
||||
|
||||
### 3.3 默认值策略
|
||||
|
||||
- `risk-people` 未复用其他列表的 `pageSize = 10`
|
||||
- 在 `CcdiProjectOverviewServiceImpl` 中单独补充:
|
||||
- `defaultRiskPeoplePageNum`
|
||||
- `defaultRiskPeoplePageSize`
|
||||
- 缺省与非法值统一回落为 `1/5`
|
||||
|
||||
## 4. 测试与验证
|
||||
|
||||
执行命令:
|
||||
|
||||
```bash
|
||||
mvn -pl ccdi-project -am -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewControllerTest,CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test
|
||||
```
|
||||
|
||||
验证结果:
|
||||
|
||||
- `CcdiProjectOverviewServiceStructureTest` 通过
|
||||
- `CcdiProjectOverviewControllerTest` 通过
|
||||
- `CcdiProjectOverviewMapperSqlTest` 通过
|
||||
- `CcdiProjectOverviewServiceImplTest` 通过
|
||||
- 共 25 个测试通过,无 failure 或 error
|
||||
|
||||
## 5. 实施结论
|
||||
|
||||
- 项目详情“风险总览”员工列表后端已完成真实分页化改造。
|
||||
- 接口输出已从旧 `overviewList` 收口到标准分页结构 `rows + total + pageNum + pageSize`。
|
||||
- 排序规则保持不变,本次未新增任何兼容性补丁接口。
|
||||
@@ -0,0 +1,88 @@
|
||||
# 项目详情风险总览员工列表分页前端实施记录
|
||||
|
||||
## 1. 实施概述
|
||||
|
||||
- 实施日期:2026-03-29
|
||||
- 实施范围:风险总览员工列表前端分页 API、首屏分页装配、局部分页组件与测试回归
|
||||
- 实施结果:前端代码改造完成,定向回归与真实浏览器翻页回归通过
|
||||
|
||||
本次实施按设计文档完成以下内容:
|
||||
|
||||
- `projectOverview.js` 中的 `getOverviewRiskPeople` 改为参数对象透传
|
||||
- `PreliminaryCheck.vue` 首屏固定拉取风险员工第一页 5 条
|
||||
- `RiskPeopleSection.vue` 接管局部分页状态、局部 loading 与翻页请求
|
||||
- 修复 `Pagination` 与 `.sync` 联动下的翻页误拦截问题,确保点击页码后会真正发起指定页请求
|
||||
|
||||
## 2. 实际修改文件
|
||||
|
||||
### 2.1 前端代码
|
||||
|
||||
- `ruoyi-ui/src/api/ccdi/projectOverview.js`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js`
|
||||
|
||||
### 2.2 测试代码
|
||||
|
||||
- `ruoyi-ui/tests/unit/project-overview-api.test.js`
|
||||
- `ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js`
|
||||
- `ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination-load.test.js`
|
||||
- `ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js`
|
||||
- `ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination.test.js`
|
||||
|
||||
## 3. 关键实施说明
|
||||
|
||||
### 3.1 API 改造
|
||||
|
||||
- `getOverviewRiskPeople` 从 `getOverviewRiskPeople(projectId)` 改为 `getOverviewRiskPeople(params)`
|
||||
- 透传字段固定为:
|
||||
- `projectId`
|
||||
- `pageNum`
|
||||
- `pageSize`
|
||||
|
||||
### 3.2 首屏数据装配
|
||||
|
||||
- `PreliminaryCheck.vue` 在 `Promise.all` 中改为请求:
|
||||
- `getOverviewRiskPeople({ projectId: this.projectId, pageNum: 1, pageSize: 5 })`
|
||||
- `createOverviewLoadedData` 将 `riskPeople` 统一归一为:
|
||||
- `rows`
|
||||
- `total`
|
||||
- `pageNum`
|
||||
- `pageSize`
|
||||
|
||||
### 3.3 局部分页实现
|
||||
|
||||
- `RiskPeopleSection.vue` 新增 `projectId` 入参
|
||||
- 组件内部维护:
|
||||
- `pageNum`
|
||||
- `pageSize`
|
||||
- `total`
|
||||
- `tableLoading`
|
||||
- `localRows`
|
||||
- 翻页时直接调用 `getOverviewRiskPeople` 拉取指定页,并只更新当前表格数据
|
||||
- 去除 `handlePageChange` 中基于同步后 `pageNum` 的提前返回,避免页码样式切换成功但数据未刷新
|
||||
|
||||
## 4. 测试与验证
|
||||
|
||||
执行命令:
|
||||
|
||||
```bash
|
||||
node ruoyi-ui/tests/unit/project-overview-api.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination-load.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination.test.js
|
||||
```
|
||||
|
||||
验证结果:
|
||||
|
||||
- 5 条前端定向测试全部通过
|
||||
- 首屏分页装配、分页条渲染与翻页调用链均通过结构校验
|
||||
- 浏览器实测确认风险人员区点击第 2 页后会发出 `pageNum=2&pageSize=5` 请求,列表由第一页的“郑强、郭瑞、黄伟怡、许琳建、王欣”切换为第二页的“朱磊明、杨磊瑞、邓桂英、郑欣、董杰”
|
||||
|
||||
## 5. 实施结论
|
||||
|
||||
- 项目详情“风险总览”员工列表前端已完成分页化改造。
|
||||
- 本次未改动风险模型区与风险明细区逻辑,仅对风险人员区做分页收口。
|
||||
- 翻页行为已限制为局部刷新,不会再次触发整页结果总览并发请求。
|
||||
- 真实浏览器回归已覆盖到页码点击场景,分页状态与表格数据保持一致。
|
||||
@@ -5,12 +5,16 @@
|
||||
- 新增风险总览员工列表分页后端实施计划 1 份。
|
||||
- 新增风险总览员工列表分页前端实施计划 1 份。
|
||||
- 本次计划按统一接口改造方案收口为:保留 `GET /ccdi/project/overview/risk-people` 路径,改为标准分页返回 `rows + total + pageNum + pageSize`。
|
||||
- 本轮仅完成实施计划沉淀,尚未进入代码实现阶段。
|
||||
- 已按计划完成后端与前端实现,并补齐对应验证记录与实施记录。
|
||||
|
||||
## 新增文件
|
||||
|
||||
- `docs/plans/backend/2026-03-29-project-detail-risk-overview-risk-people-pagination-backend-implementation.md`
|
||||
- `docs/plans/frontend/2026-03-29-project-detail-risk-overview-risk-people-pagination-frontend-implementation.md`
|
||||
- `docs/tests/records/2026-03-29-project-detail-risk-overview-risk-people-pagination-backend-verification.md`
|
||||
- `docs/tests/records/2026-03-29-project-detail-risk-overview-risk-people-pagination-frontend-verification.md`
|
||||
- `docs/reports/implementation/2026-03-29-project-detail-risk-overview-risk-people-pagination-backend-implementation.md`
|
||||
- `docs/reports/implementation/2026-03-29-project-detail-risk-overview-risk-people-pagination-frontend-implementation.md`
|
||||
|
||||
## 计划结论
|
||||
|
||||
@@ -29,4 +33,26 @@
|
||||
|
||||
- 本次按仓库规范,将实施计划分别落到 `docs/plans/backend/` 与 `docs/plans/frontend/`。
|
||||
- 因本仓库协作约定禁止开启 subagent,计划头部已明确执行时应在当前会话使用 `superpowers:executing-plans`。
|
||||
- 本次补充的是计划文档与计划记录,因此同步新增本计划记录作为本次改动的实施文档。
|
||||
- 本次执行阶段同步补充后端与前端的验证记录、实施记录。
|
||||
|
||||
## 执行记录
|
||||
|
||||
### 2026-03-29 后端执行结果
|
||||
|
||||
- 新增 `CcdiProjectRiskPeopleQueryDTO`,将 `risk-people` 接口入参统一为 `projectId/pageNum/pageSize`
|
||||
- 将 `CcdiProjectRiskPeopleOverviewVO` 返回结构从 `overviewList` 调整为 `rows + total + pageNum + pageSize`
|
||||
- 为 `CcdiProjectOverviewMapper` / XML 新增 `selectRiskPeopleOverviewPage`,基于 `ccdi_project_overview_employee_result` 实现数据库真分页
|
||||
- 在 `CcdiProjectOverviewServiceImpl` 中为 `risk-people` 单独固定默认分页 `1/5`
|
||||
- 后端回归命令:`mvn -pl ccdi-project -am -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewControllerTest,CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test`
|
||||
|
||||
### 2026-03-29 前端执行结果
|
||||
|
||||
- `getOverviewRiskPeople` 改为参数对象透传分页参数
|
||||
- `PreliminaryCheck.vue` 首屏固定拉取第一页 5 条风险员工数据,并改用 `rows` 分页结构判断加载结果
|
||||
- `RiskPeopleSection.vue` 接管 `pageNum/pageSize/total/tableLoading/localRows`,翻页时仅刷新当前列表
|
||||
- 前端回归命令:
|
||||
- `node ruoyi-ui/tests/unit/project-overview-api.test.js`
|
||||
- `node ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js`
|
||||
- `node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination-load.test.js`
|
||||
- `node ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js`
|
||||
- `node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination.test.js`
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# 项目详情风险总览员工列表分页后端验证记录
|
||||
|
||||
## 验证范围
|
||||
|
||||
- `risk-people` 分页接口契约
|
||||
- `risk-people` 控制器返回结构
|
||||
- 风险人员分页 SQL 结构与排序
|
||||
- 风险人员分页服务映射与默认值
|
||||
|
||||
## 设计文档检查
|
||||
|
||||
- 已核对设计文档路径:`docs/design/2026-03-29-project-detail-risk-overview-risk-people-pagination-design.md`
|
||||
|
||||
## 验证命令
|
||||
|
||||
```bash
|
||||
mvn -pl ccdi-project -am -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewControllerTest,CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test
|
||||
```
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 验证日期:2026-03-29
|
||||
- 首轮契约测试按计划先失败,失败点为缺少 `CcdiProjectRiskPeopleQueryDTO` 与 `CcdiProjectRiskPeopleOverviewVO` 的分页字段访问器。
|
||||
- 完成分页 DTO、VO、Controller、Service、Mapper 与 XML 改造后,重新执行上述命令,`CcdiProjectOverviewServiceStructureTest`、`CcdiProjectOverviewControllerTest`、`CcdiProjectOverviewMapperSqlTest`、`CcdiProjectOverviewServiceImplTest` 共 25 个测试全部通过。
|
||||
- Maven 过程中仅出现 Mockito 动态 agent 的现有 JDK 警告,无新增 failure 或 error。
|
||||
|
||||
## 结论
|
||||
|
||||
- `GET /ccdi/project/overview/risk-people` 已改为标准分页接口,入参为 `projectId + pageNum + pageSize`。
|
||||
- 接口已稳定返回 `rows + total + pageNum + pageSize`。
|
||||
- 风险人员查询已基于 `ccdi_project_overview_employee_result` 实现数据库真分页,排序规则保持 `risk_level_sort asc, model_count desc, rule_count desc, staff_id_card asc` 不变。
|
||||
- `risk-people` 默认分页已固定回落为 `pageNum = 1`、`pageSize = 5`。
|
||||
@@ -0,0 +1,45 @@
|
||||
# 项目详情风险总览员工列表分页前端验证记录
|
||||
|
||||
## 验证范围
|
||||
|
||||
- 风险人员分页 API 封装
|
||||
- 结果总览首屏风险人员分页数据装配
|
||||
- 风险人员区局部分页与局部刷新
|
||||
|
||||
## 设计文档检查
|
||||
|
||||
- 已核对设计文档路径:`docs/design/2026-03-29-project-detail-risk-overview-risk-people-pagination-design.md`
|
||||
|
||||
## 验证命令
|
||||
|
||||
```bash
|
||||
node ruoyi-ui/tests/unit/project-overview-api.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination-load.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js
|
||||
node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination.test.js
|
||||
```
|
||||
|
||||
浏览器验证补充:
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui && npm run dev -- --port 1026
|
||||
java -jar ruoyi-admin/target/ruoyi-admin.jar --server.port=62319
|
||||
```
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 验证日期:2026-03-29
|
||||
- 首轮 API 测试按计划先失败,失败点为 `getOverviewRiskPeople` 仍保留旧签名 `getOverviewRiskPeople(projectId)`。
|
||||
- 完成 API、`PreliminaryCheck.vue`、`RiskPeopleSection.vue` 与 `preliminaryCheck.mock.js` 改造后,重新执行上述 5 条测试命令,全部通过。
|
||||
- 结构测试确认首屏固定请求第一页 `pageNum = 1`、`pageSize = 5`,风险人员区读取 `rows + total + pageNum + pageSize`,翻页时调用 `getOverviewRiskPeople` 独立刷新当前列表。
|
||||
- 浏览器联调时发现 `RiskPeopleSection.vue` 的 `handlePageChange` 会在 `.sync` 已提前更新 `pageNum` 后错误命中 `if (page === this.pageNum)`,表现为页码高亮切换到第 2 页,但表格仍停留在第一页,且不会发起 `pageNum=2` 请求。
|
||||
- 去除该提前返回后,重新执行前端定向测试全部通过;浏览器实测在项目详情 `http://127.0.0.1:1026/ccdiProject/detail/62?tab=overview` 点击风险人员分页第 2 页后,已发出 `GET /dev-api/ccdi/project/overview/risk-people?projectId=62&pageNum=2&pageSize=5`,列表由“郑强、郭瑞、黄伟怡、许琳建、王欣”切换为“朱磊明、杨磊瑞、邓桂英、郑欣、董杰”。
|
||||
- 由于本机现有 `62318` 后端仍返回旧 `overviewList` 结构,浏览器验证阶段额外启动了 `62319` 端口的新包,并仅将风险人员接口请求转发到该端口完成真机校验。
|
||||
|
||||
## 结论
|
||||
|
||||
- 风险总览员工列表前端已固定为每页 5 条。
|
||||
- 首屏只请求第一页分页数据,不再依赖旧 `overviewList` 结构。
|
||||
- 翻页逻辑已下沉到 `RiskPeopleSection.vue`,仅刷新当前风险人员列表,不重载结果总览其他区块。
|
||||
- 浏览器回归确认分页页码、请求参数与表格内容已保持一致。
|
||||
Reference in New Issue
Block a user