All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 6m53s
统一处理百分比和系数两种折扣输入方式,增加边界保护 在金额计算中使用math.Round进行四舍五入处理 添加相关单元测试确保计算准确性
1.8 KiB
1.8 KiB
问题确认
- 前端以“百分比”形式配置折扣(如 95、95.19),当前后端
getDiscount函数期望“系数(0–1)”,导致折扣未生效。 - 受影响位置:
- 登录下单折扣:
internal/logic/public/order/getDiscount.go - 门户预下单/下单折扣:
internal/logic/public/portal/tool.go:getDiscount
- 登录下单折扣:
改造目标
- 后端折扣计算统一兼容两种输入:
- 系数(0–1):直接使用
- 百分比(>1 且 <=100):自动转换为
值/100再使用
- 对非法值进行边界保护(<0 → 0;>100 → 忽略或按 1 处理),避免异常。
实施步骤
- 修改折扣计算函数:
internal/logic/public/order/getDiscount.go- 若
discount.Discount > 1 && discount.Discount <= 100,转换为discount.Discount/100。 - 保持“取满足阈值的最小折扣”策略,默认
finalDiscount=1.0。
- 若
internal/logic/public/portal/tool.go:getDiscount- 同上逻辑,移除对
*100的中间整数化处理,统一用浮点小数系数比较。
- 同上逻辑,移除对
- 单元测试补充:
- 既测系数(如 0.95),也测百分比输入(如 95、95.19),以及边界(0、100、>100)。
- 验证流程:
- 用你当前 7 天的配置(前端百分比)进行“预下单→下单→订单查询”,确认
Discount与Amount按预期生效。
- 用你当前 7 天的配置(前端百分比)进行“预下单→下单→订单查询”,确认
- 文档与界面提示:
- 在后台/前端表单处增加说明:支持百分比与系数;百分比将自动转换;推荐使用百分比,避免歧义。
交付与保障
- 代码改动仅限折扣计算函数与测试,风险低;保留原有行为的向后兼容。
- 提供测试报告与一次联调记录(数据截图:价格、折扣、总计)。
请确认是否按该兼容方案执行,我将据此修改并验证。