补充项目详情风险人员导出能力

This commit is contained in:
wkc
2026-03-30 15:59:06 +08:00
parent b96161ecf4
commit 933214a495
16 changed files with 386 additions and 25 deletions

View File

@@ -0,0 +1,18 @@
# 2026-03-30 项目详情风险人员导出后端实施记录
## 设计文档
- 已核对设计文档路径:`docs/design/2026-03-30-project-detail-risk-people-export-design.md`
## 本次实施内容
-`CcdiProjectOverviewController` 新增 `POST /ccdi/project/overview/risk-people/export` 导出入口,沿用现有 `ccdi:project:query` 权限。
- 新增 `CcdiProjectRiskPeopleOverviewExcel` 导出对象,导出列仅覆盖页面展示字段:姓名、身份证号、所属部门、疑似违规数、风险等级、命中模型数、核心异常点。
-`ICcdiProjectOverviewService` / `CcdiProjectOverviewServiceImpl` 补齐 `exportRiskPeopleOverview(Long projectId)`,服务层先复用 `buildRiskPeopleItem(...)` 统一页面口径,再映射为 Excel 行对象,避免页面与导出出现两套字段拼装逻辑。
-`CcdiProjectOverviewMapper` / `CcdiProjectOverviewMapper.xml` 增加 `selectRiskPeopleOverviewList`,并抽取 `riskPeopleOverviewSelectColumns``riskPeopleOverviewOrderBy` 两个 SQL 片段,让分页查询与导出查询共用同一套列映射与排序规则。
## 约束说明
- 未新增筛选条件。
- 未新增菜单、路由或权限标识。
- 未引入平行接口或补丁式实现,仍走 `Controller -> Service -> Mapper` 既有结果总览链路。

View File

@@ -0,0 +1,22 @@
# 2026-03-30 项目详情风险人员导出前端实施记录
## 设计文档
- 已核对设计文档路径:`docs/design/2026-03-30-project-detail-risk-people-export-design.md`
## 本次实施内容
-`ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue` 直接给“导出”按钮绑定 `handleRiskPeopleExport`
- 组件内直接调用仓库现成的 `this.download(...)` 下载能力,请求路径为 `ccdi/project/overview/risk-people/export`,参数仅传 `projectId`
- 下载文件名口径为 `风险人员总览_${projectId}_${timestamp}.xlsx`,与若依现有导出写法保持一致。
## 为什么采用当前实现
- 直接使用 `this.download(...)` 是仓库内现成模式,改动最小,能够与现有鉴权、二进制下载流程保持一致。
- 未额外新增 `projectOverview.js` 导出封装,是因为本次只需单一导出动作,继续放在 `RiskPeopleSection.vue` 内即可满足需求,避免平行抽象。
- 未新增导出弹窗、加载状态或分页导出参数,保持实现最短路径,确保“导出当前项目全部风险人员”这一业务口径不被分页状态干扰。
## 影响范围
- 本次前端仅修改 `RiskPeopleSection.vue` 与对应静态结构测试。
- 未改动 `loadRiskPeoplePage``handlePageChange``handleViewProject``sectionData -> localRows` 的既有逻辑。

View File

@@ -0,0 +1,63 @@
# 2026-03-30 项目详情风险人员导出后端验证记录
## 设计文档
- 已核对设计文档路径:`docs/design/2026-03-30-project-detail-risk-people-export-design.md`
## 执行命令
```bash
mvn -pl ccdi-project -Dtest=CcdiProjectOverviewControllerTest test
```
## 验证结果
- 本次 Maven 验证未能进入本需求测试断言阶段,编译阶段被仓库内既有无关问题阻塞。
- 阻塞信息为:
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/excel/CcdiIdCardExcelRow.java`
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java`
- 缺少 `com.alibaba.excel` / `com.alibaba.excel.annotation.ExcelProperty`
- 因此当前无法在本地完成计划中的 `CcdiProjectOverviewControllerTest``CcdiProjectOverviewMapperSqlTest``CcdiProjectOverviewServiceImplTest` Maven 回归。
## 已完成的静态核对
- 导出接口路径已接通为 `POST /ccdi/project/overview/risk-people/export`
- Service 已新增 `exportRiskPeopleOverview(Long projectId)`
- 导出查询 `selectRiskPeopleOverviewList` 已与分页查询共用字段片段 `riskPeopleOverviewSelectColumns` 和排序片段 `riskPeopleOverviewOrderBy`
- 导出字段顺序与页面表格字段保持一致:姓名、身份证号、所属部门、疑似违规数、风险等级、命中模型数、核心异常点。
## 结论
- 需求代码已补齐,但后端自动化回归仍受仓库现有 EasyExcel 编译问题影响,待该阻塞解除后需重新执行:
```bash
mvn -pl ccdi-project -Dtest=CcdiProjectOverviewControllerTest,CcdiProjectOverviewMapperSqlTest,CcdiProjectOverviewServiceImplTest test
```
## 2026-03-30 真机接口补充验证
### 执行命令
```bash
./bin/restart_java_backend.sh restart
curl -sS -H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}' \
http://127.0.0.1:62318/login/test
curl -sS -H 'Authorization: Bearer <token>' \
'http://127.0.0.1:62318/ccdi/project/overview/risk-people?projectId=62&pageNum=1&pageSize=5'
curl -sS -D /tmp/risk_people_export_headers.txt \
-o /tmp/risk_people_export.xlsx \
-H 'Authorization: Bearer <token>' \
-X POST 'http://127.0.0.1:62318/ccdi/project/overview/risk-people/export?projectId=62'
```
### 结果
- 后端已成功重启并监听 `62318`
- `POST /login/test` 使用 JSON 请求体可成功返回 token。
- `GET /ccdi/project/overview/risk-people?projectId=62&pageNum=1&pageSize=5` 返回 `200`,分页结果为 `total = 17``pageNum = 1``pageSize = 5`,首行数据为 `郑强`
- `POST /ccdi/project/overview/risk-people/export?projectId=62` 返回 `200`,响应头 `Content-Type``application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8`
- 导出文件 `/tmp/risk_people_export.xlsx` 成功生成sheet 维度为 `A1:G18`,包含 1 行表头 + 17 行数据。
- 抽样核对导出表头为:`姓名``身份证号``所属部门``疑似违规数``风险等级``命中模型数``核心异常点`
- 抽样核对导出首行数据为 `郑强 / 180516198412041355 / 若依科技 / 23 / 高风险 / 8`,与页面列表口径一致。
- 后端日志确认导出请求命中 `selectRiskPeopleOverviewList`,并返回 `17` 条记录。

View File

@@ -0,0 +1,25 @@
# 2026-03-30 项目详情风险人员导出前端验证记录
## 设计文档
- 已核对设计文档路径:`docs/design/2026-03-30-project-detail-risk-people-export-design.md`
## 执行命令
```bash
node ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js
node ruoyi-ui/tests/unit/preliminary-check-risk-people-export.test.js
node ruoyi-ui/tests/unit/preliminary-check-risk-people-pagination.test.js
node ruoyi-ui/tests/unit/preliminary-check-project-analysis-entry.test.js
```
## 通过情况
- 以上 4 条静态结构回归均执行通过。
## 核对结论
- “导出”按钮已绑定 `handleRiskPeopleExport`
- 下载路径为 `ccdi/project/overview/risk-people/export`
- 下载参数仅包含 `projectId`,不会把当前分页参数带入导出。
- `loadRiskPeoplePage`、分页切换和“查看项目”事件发射逻辑未受本次改动影响。