diff --git a/docs/evidence/counter-settle-unsettled-filter-bugfix-2026-06-09.md b/docs/evidence/counter-settle-unsettled-filter-bugfix-2026-06-09.md new file mode 100644 index 0000000..58328d1 --- /dev/null +++ b/docs/evidence/counter-settle-unsettled-filter-bugfix-2026-06-09.md @@ -0,0 +1,137 @@ +# 柜台结清列表过滤字段对齐修复验证记录 + +日期:2026-06-09 + +## 问题现象 + +`GET /admin-api/business/charge/counter-settle/unsettled-page` 前端传入 `custCode`、`chargeWay` 后,待结清分页结果未按客户编号和收费方式过滤。 + +追加核对 `charge` 系列前端接口口径后,又发现: + +- 前端 `CounterUnsettledPageReqVO` 还声明了 `deptId`,后端待结清请求对象未接收,服务层未按站点过滤。 +- 前端已结清列表传入 `settleNo`,后端 `CounterSettledPageReqVO` 未接收,`SettleRecordMapper#selectSettledPage` 未按结清单号过滤。 + +示例参数: + +```text +pageNo=1&pageSize=10&custCode=15980151657&cashierId=&chargeWay= +``` + +## 根因 + +- 后端 `CounterUnsettledPageReqVO` 仅定义了 `cashierId`,未定义 `deptId`、`custCode`、`chargeWay`,Spring MVC 绑定查询参数时会忽略这些字段。 +- `CounterSettleApplicationServiceImpl#queryUnsettledItems` 只按收费员查询待结清支付主单,未继续应用客户编号、收费方式、营业站点过滤。 +- 后端 `CounterSettledPageReqVO` 未定义 `settleNo`,已结清 Mapper 查询条件也未包含 `settle_no`。 + +## 修复范围 + +仓库:`../water-backend` + +分支:`develop` + +修复前基线:`86203127e` + +修改文件: + +- `sw-business/sw-business-server/src/main/java/cn/com/emsoft/sw/business/controller/admin/charge/vo/CounterUnsettledPageReqVO.java` +- `sw-business/sw-business-server/src/main/java/cn/com/emsoft/sw/business/controller/admin/charge/vo/CounterSettledPageReqVO.java` +- `sw-business/sw-business-server/src/main/java/cn/com/emsoft/sw/business/dal/mysql/settlerecord/SettleRecordMapper.java` +- `sw-business/sw-business-server/src/main/java/cn/com/emsoft/sw/business/service/countersettle/CounterSettleApplicationServiceImpl.java` +- `sw-business/sw-business-server/src/test/java/cn/com/emsoft/sw/business/service/countersettle/CounterSettleApplicationServiceImplTest.java` +- `sw-business/sw-business-server/src/test/java/cn/com/emsoft/sw/business/integration/countersettle/CounterSettleIntegrationTest.java` + +## 修复内容 + +- `CounterUnsettledPageReqVO` 新增 `deptId`、`custCode`、`chargeWay` 查询字段。 +- 待结清列表在按收费员取得候选支付主单后,继续按 `custCode` 精确匹配、按 `chargeWay` 精确匹配、按账单 `deptId` 精确匹配。 +- 待结清导出复用同一查询逻辑,因此同步支持相同过滤条件。 +- `CounterSettledPageReqVO` 新增 `settleNo` 查询字段。 +- `SettleRecordMapper#selectSettledPage` 新增 `settleNo` 精确过滤,已结清导出复用同一查询逻辑。 +- 增加服务层单测覆盖 `custCode + chargeWay + deptId` 过滤、`settleNo` 参数传递和 Mapper 源码契约。 +- 增加接口集成测试断言,覆盖未结账匹配、不匹配客户编号、不匹配收费方式、不匹配站点,以及已结账匹配/不匹配结清单号;该集成测试受 `REV004_IT_DB_URL` 环境变量控制。 + +## 验证命令与结果 + +### RED 验证 + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -Dtest=CounterSettleApplicationServiceImplTest#getUnsettledPage_shouldFilterByCustCodeAndChargeWay test +``` + +结果:失败,符合预期。 + +- 失败点:`CounterUnsettledPageReqVO` 缺少 `setCustCode(String)`、`setChargeWay(int)`。 +- 说明:证明后端请求对象没有承接过滤参数。 + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -Dtest=CounterSettleApplicationServiceImplTest#getSettledPage_shouldUseMapperPagedResult+getUnsettledPage_shouldFilterByCustCodeChargeWayAndDeptId test +``` + +结果:失败,符合预期。 + +- 失败点:`CounterSettledPageReqVO` 缺少 `setSettleNo(String)` / `getSettleNo()`,`CounterUnsettledPageReqVO` 缺少 `setDeptId(long)`。 +- 说明:证明后端请求对象未完整对齐前端 `charge` 系列列表筛选字段。 + +### 服务层回归 + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -Dtest=CounterSettleApplicationServiceImplTest#getUnsettledPage_shouldFilterByCustCodeAndChargeWay test +``` + +结果:通过。 + +- Surefire 汇总:`Tests run: 1, Failures: 0, Errors: 0, Skipped: 0` +- Maven 结果:`BUILD SUCCESS` + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -Dtest=CounterSettleApplicationServiceImplTest#getSettledPage_shouldUseMapperPagedResult+getUnsettledPage_shouldFilterByCustCodeChargeWayAndDeptId test +``` + +结果:通过。 + +- Surefire 汇总:`Tests run: 2, Failures: 0, Errors: 0, Skipped: 0` +- Maven 结果:`BUILD SUCCESS` + +### 相关服务单测 + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -Dtest=CounterSettleApplicationServiceImplTest test +``` + +结果:通过。 + +- Surefire 汇总:`Tests run: 22, Failures: 0, Errors: 0, Skipped: 0` +- Maven 结果:`BUILD SUCCESS` + +### 编译验证 + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -DskipTests compile +``` + +结果:通过。 + +- Maven 结果:`BUILD SUCCESS` + +### 接口集成测试 + +```bash +cd /Volumes/Dpan/github/water-workspace/water-backend +mvn -pl sw-business/sw-business-server -Dtest=CounterSettleIntegrationTest#counterSettleApis_shouldSupportUnsettledConfirmSettledAndDetails test +``` + +结果:未执行,不作为通过项。 + +- Surefire 汇总:`Tests run: 1, Failures: 0, Errors: 0, Skipped: 1` +- 原因:`CounterSettleIntegrationTest` 标注 `@EnabledIfEnvironmentVariable(named = "REV004_IT_DB_URL", matches = ".+")`,当前环境未提供该变量。 + +## 备注 + +- 本次验证期间存在既有 Maven model warning、Mockito dynamic-agent warning、`MockBean` deprecation warning,未导致编译或已执行单测失败。 +- `cashierId` 为空时仍沿用既有逻辑:优先使用当前登录用户 ID 作为收费员过滤值。