# 流水明细异常标签后端实施记录

## 修改内容
- 流水列表/详情返回异常标签
- 导出流水返回异常标签列
- 流水标签结果批量查询能力
- 后端单元测试补充

## 实施说明
- 新增 `CcdiBankStatementHitTagVO`，统一承载流水命中的异常标签编码、名称、风险等级和命中原因。
- 在 `CcdiBankStatementListVO`、`CcdiBankStatementDetailVO` 中新增 `hitTags` 字段，作为流水列表页和详情弹窗的统一返回结构。
- 在 `CcdiBankStatementExcel` 中新增“异常标签”导出列，导出时将命中的标签名称按顺序拼接为文本。
- 在 `CcdiBankTagResultMapper` 中新增按 `projectId + bankStatementIds` 批量查询命中标签的方法，并在 XML 中补充对应 SQL。
- 在 `CcdiBankStatementServiceImpl` 中补充标签挂载逻辑：
  - 列表查询完成后，按当前页流水 ID 批量回查标签并分组挂载到每条记录。
  - 详情查询完成后，按当前流水 ID 回查标签并挂载到详情对象。
- 导出查询完成后，复用同一套标签回查逻辑，将命中标签名称写入 Excel 导出对象。
- 本次未改动流水标签判定规则，只修复“标签结果已入库但接口未返回”的数据链路缺口。

## 问题定位结论
- 数据库中 `project_id = 43`、摘要为 `ATM现金存款` 的流水记录已存在 `LARGE_CASH_DEPOSIT` 等命中结果。
- 原因是 `ccdi_bank_statement` 列表接口与详情接口此前未将 `ccdi_bank_statement_tag_result` 的命中标签组装到返回 VO 中，导致前端无法展示。

## 验证执行
- 执行 `mvn -pl ccdi-project test -Dtest=CcdiBankTagResultMapperXmlTest,CcdiBankStatementHitTagsContractTest,CcdiBankStatementServiceImplTest`，结果通过。
- 执行 `mvn -pl ccdi-project test -Dtest=CcdiBankStatementHitTagsContractTest,CcdiBankStatementServiceImplTest,CcdiBankStatementControllerTest`，结果通过。
