liuwenxin
|
e6c2c71d1b
|
fix(business): 行金额乘积显式两位固化,计提比例对负天数钳制
- 明细行金额(数量2位×单价4位可产 6 位小数)直写 DECIMAL(14,2) 被
MySQL 静默舍入且回显漂移(创建响应读内存值、复查读库值不一致);
显式 quantize HALF_UP 固化,舍入方向与 MySQL 一致(业务/发货同改)
- 先款后货回款(payment_days 为负)线性外插会算出高于起始值的计提
比例(多算绩效);钳制到 0 天按起始比例计提,payment_days 出参仍
照实输出负值(口径:2026-10-14 用户裁决)
- 新增 formula 负天数钳制单测与 quantize 回显/库值一致性集成用例
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:58:30 +08:00 |
|
liuwenxin
|
a0086554b1
|
refactor(core): 1062 唯一键冲突判定收口至 core/db_errors
六个 service 各自复制的 _is_duplicate_entry(口径已漂移:rating/product
用 _ERR_DUP_ENTRY 常量、其余四处写字面量 1062)收敛为共享函数;
is_duplicate_entry 语义与文案注释各处保留,非 1062 完整性错误仍原样
上抛由全局处理器收敛。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 15:17:00 +08:00 |
|
liuwenxin
|
5a3778a424
|
fix(business): 唯一键冲突重试改为审计上下文内循环,单条审计无递归
三处 create(业务/发货/回款)的 return _retry_create 是吞异常后正常
退出:外层审计把已回滚的首次尝试记成 success(假成功),重入整个
create_* 违反 audit_service「不支持嵌套」约定,且 _NO_RETRY 死常量
导致持续冲突时无界递归至 RecursionError。改为 audit 内 for 循环
(上限 _NO_RETRY),rollback 后重新锁行与取号,成功/最终失败各恰好
一条审计。新增集成用例锁定两条路径的日志增量。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 15:09:05 +08:00 |
|
liuwenxin
|
4aea2be103
|
feat(business): 发货管理接口(发货单/明细/运费/汇总回写/删除保护)
- FOR UPDATE 锁业务行防发货/回款并发丢失更新;终态业务禁新发货
- 行金额服务层按数量×单价固化;明细行 remark 按设计定稿移除(冒烟修复)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:25:33 +08:00 |
|