校验上传流水文件名身份证信息

This commit is contained in:
wkc
2026-07-03 17:38:46 +08:00
parent bb41fd7e89
commit b7e9a8da03
6 changed files with 277 additions and 46 deletions

View File

@@ -0,0 +1,27 @@
# 上传流水文件名校验后端实施计划
## 目标
上传流水文件时,后端统一过滤文件名中的空白字符,并要求过滤后的文件名主干包含 18 位身份证号片段。任一文件不满足规则时整批拦截,不创建上传记录、不保存临时文件、不调用流水分析平台。
## 实施内容
- `CcdiFileUploadController.batchUpload` 只保留项目 ID、文件数量、空文件和文件大小校验文件名业务校验统一下沉到服务层。
- `CcdiFileUploadServiceImpl.batchUploadFiles` 在保存临时文件前完成整批文件名归一化和校验。
- 文件名归一化规则为:`originalFilename == null` 时按空字符串处理,再移除半角空白与全角空格。
- 扩展名校验、身份证号片段校验、上传记录 `fileName` 和流水平台 multipart filename 均使用归一化后的文件名。
- 身份证号片段校验使用 `(?<!\d)\d{17}[0-9Xx](?!\d)` 在文件名主干中查找,不做校验位算法。
## 测试计划
- 覆盖含空格文件名归一化后写入上传记录,并用于临时文件名。
- 覆盖无身份证号片段、空白文件名在保存临时文件前拦截。
- 覆盖 Controller 不再按原始文件名提前拦截,能把文件名业务规则交给 Service。
- 执行 `mvn -pl ccdi-project -am -Dtest=CcdiFileUploadServiceImplTest,CcdiFileUploadControllerTest -Dsurefire.failIfNoSpecifiedTests=false test`
- 执行 `mvn -pl ccdi-project -am -DskipTests compile`
## 范围说明
- 本次不修改前端页面。
- 本次不修改流水平台返回 DTO。
- 本次不修改 `CcdiBankStatement.fromResponse``ccdi_bank_statement` 落库逻辑。

View File

@@ -0,0 +1,44 @@
# 上传流水文件名校验实施记录
## 基本信息
- 实施日期2026-07-03
- 实施范围:项目详情上传数据页对应的后端批量上传接口 `/ccdi/file-upload/batch`
- 需求范围:过滤上传流水文件名中的空白字符;文件名主干缺少 18 位身份证号片段时拦截上传
## 修改内容
- `CcdiFileUploadController`
- 批量上传入口只保留项目 ID、文件数量、空文件和文件大小校验。
- 文件名、扩展名和身份证号片段校验统一交给 Service避免 controller 与 service 规则不一致。
- `CcdiFileUploadServiceImpl`
- 新增上传文件名归一化:空文件名按空字符串处理,移除半角空白与全角空格。
- 在保存临时文件和创建上传记录前,先完成整批文件名校验。
- 归一化后的文件名用于上传记录 `fileName`、临时文件名后缀和流水平台 multipart filename。
- 文件名主干必须包含 `(?<!\d)\d{17}[0-9Xx](?!\d)` 命中的身份证号片段。
- `CcdiFileUploadServiceImplTest``CcdiFileUploadControllerTest`
- 新增文件名去空格、无身份证号拦截、空白文件名拦截和 controller 下沉校验测试。
- 将 controller 测试从 static mock 调整为真实 `SecurityContextHolder` 登录用户。
- 对齐当前“上传数据删除不调用流水分析平台删除接口”的既有实现断言。
## 验证情况
```bash
mvn -pl ccdi-project -am -Dtest=CcdiFileUploadServiceImplTest,CcdiFileUploadControllerTest -Dsurefire.failIfNoSpecifiedTests=false test
```
- 结果BUILD SUCCESS
- 覆盖Controller 批量上传入口、Service 文件名归一化与保存前拦截、既有上传/删除相关单元测试。
```bash
mvn -pl ccdi-project -am -DskipTests compile
```
- 结果BUILD SUCCESS
- 覆盖:`ccdi-project` 及依赖模块编译通过。
## 范围说明
- 未修改前端页面。
- 未修改流水平台响应 DTO。
- 未修改 `CcdiBankStatement.fromResponse``ccdi_bank_statement` 落库逻辑。