5.4 KiB
5.4 KiB
REV004 未销违约金减免批量契约补齐实施记录(2026-04-14)
目标
补齐 unsold-late-fee-reduce-batch-submit 的批量 outer 契约,使其能够承接前端页面公共表单字段,并把字段真实透传到后端执行主链,而不是只停留在 controller VO。
本次实现
1. 批量 outer 契约补齐
文件:
sw-business/sw-business-server/src/main/java/cn/com/emsoft/sw/business/controller/admin/accountingadjust/accountProcess/vo/AccountingAdjustUnsoldLateFeeReduceBatchSubmitReqVO.javasw-business/sw-business-server/src/main/java/cn/com/emsoft/sw/business/controller/admin/accountingadjust/accountProcess/vo/AccountingAdjustUnsoldLateFeeReduceBatchItemReqVO.java
新增 outer 字段:
lateFeeTypeapplicantcontactMobileapplyReasonremarkattachmentRefs
明细 item 独立为专用 VO:
chargeIdadjustmentNoapplyReason(兼容旧逐项提交)remark(兼容旧逐项提交)attachmentRefs(兼容旧逐项提交)lateFeeReduceAmountstartDateendDate
2. 共享 batch 主链承接 outer 字段
文件:
.../AccountingAdjustBatchSubmitReqVO.java.../AccountingAdjustActionController.java.../AccountingAdjustProcessServiceImpl.java
处理方式:
- controller 先把 late-fee batch outer 字段规范化映射到 generic batch DTO
- process 主链在
executeBatchSubmit中统一执行 outer -> item 合并 - 统一 batch 主链承接字段:
reasonCodereasonapplicantcontactMobileattachmentRefslateFeeType
这避免了“专用 VO 上有字段,但 generic batch 主链吃不到”的伪完成。
3. amount / date 模式校验补齐
文件:
.../AccountingAdjustProcessServiceImpl.java.../AccountingAdjustReqVO.java.../ChargeServiceImpl.java
规则:
lateFeeType=1(按金额)- 要求
lateFeeReduceAmount > 0 - 不允许同时传
startDate/endDate
- 要求
lateFeeType=2(按日期)- 要求
startDate/endDate同时存在,且endDate >= startDate - 不允许同时传
lateFeeReduceAmount
- 要求
- 未显式传
lateFeeType时:- 若存在日期字段,推导为
2 - 否则默认
1
- 若存在日期字段,推导为
4. 执行日志落地字段补齐
文件:
.../AccountingAdjustReqVO.java.../ChargeServiceImpl.java
新增写入 operat log detail 的字段:
lateFeeTypeapplicantcontactMobilestartDateendDate
验证结果
编译
命令:
mvn -pl sw-business/sw-business-server -DskipTests compile
结果:PASS
定向单测
命令:
mvn -pl sw-business/sw-business-server \
-Dtest=AccountingAdjustActionControllerTest#batchCreateUnsoldLateFeeReduce_shouldReturnWrappedSuccess,AccountingAdjustProcessServiceImplTest#createUnsoldLateFeeReduce_shouldPassDateModeFieldsToUnifiedChargeService+createUnsoldLateFeeReduce_shouldRejectMixedAmountAndDateMode+batchCreateUnsoldLateFeeReduce_shouldMergeBatchOuterFieldsIntoItems \
test
结果:PASS(4 tests, 0 fail, 0 error)
真实 DB 定向集成
命令:
REV004_IT_DB_URL=jdbc:postgresql://192.168.10.130:5436/sw_system \
REV004_IT_DB_USERNAME=sw_system \
REV004_IT_DB_PASSWORD='Em@123456' \
mvn -pl sw-business/sw-business-server \
-Dtest=Rev004AccountProcessCanaryQueryIntegrationTest#unsoldLateFeeReduceBatchSubmit_shouldAcceptOuterFieldsAndDateModeContract \
test
结果:PASS(1 test, 0 fail, 0 error)
集成验证确认:
- batch outer 字段可提交
lateFeeType=2date-mode 契约可进入主链- operat log detail 中可看到:
lateFeeType=2applicantcontactMobilestartDateendDateattachmentRefs
当前边界与剩余风险
- 本轮重点是“提交契约 + 主链承接 + 日志落地”。
lateFeeType=2的“按日期执行态/审批回写态”尚未展开为完整金额计算逻辑;当前已确保申请态与提交链路可用。- 由于仓库当前还存在其他在制改动,本轮只做了定向验证,没有把整个相关测试类全部拉绿。
结论
本轮已完成 REV004 未销违约金减免批量提交接口的主契约补齐,并把前端页面公共字段正式落到共享 batch 主链与日志记录中;可以支撑前端继续联调“按金额/按日期”两种提交形态。
追加收口(读模型展示字段)
本轮补齐
AccountingAdjustDetailRespVO新增:lateFeeTypeapplicantcontactMobilestartDateendDate
AccountingAdjustLogDetailRespVO新增同名字段AccountingAdjustProcessRespVO新增:reasonCodeattachmentRefslateFeeTypeapplicantcontactMobilestartDateendDate
读取链路
AccountingAdjustQueryServiceImpl:从 operat log detail 读取 late-fee 扩展字段并映射到 detail responseAccountingAdjustLogProcessServiceImpl:从 request/action log detail 读取 late-fee 扩展字段并映射到 log-detail responseAccountingAdjustProcessServiceImpl#getProcess:从 unified snapshot 读取并投影到 process response
追加验证
定向读模型单测
mvn -pl sw-business/sw-business-server \
-Dtest=AccountingAdjustQueryServiceImplTest,AccountingAdjustLogProcessServiceImplTest,AccountingAdjustProcessServiceImplTest#getProcess_shouldExposeLateFeeDisplayFieldsFromUnifiedSnapshot \
test
结果:PASS(7 tests, 0 fail, 0 error)