All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 6m53s
统一处理百分比和系数两种折扣输入方式,增加边界保护 在金额计算中使用math.Round进行四舍五入处理 添加相关单元测试确保计算准确性
31 lines
1.8 KiB
Markdown
31 lines
1.8 KiB
Markdown
## 问题确认
|
||
- 前端以“百分比”形式配置折扣(如 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 处理),避免异常。
|
||
|
||
## 实施步骤
|
||
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` 的中间整数化处理,统一用浮点小数系数比较。
|
||
2. 单元测试补充:
|
||
- 既测系数(如 0.95),也测百分比输入(如 95、95.19),以及边界(0、100、>100)。
|
||
3. 验证流程:
|
||
- 用你当前 7 天的配置(前端百分比)进行“预下单→下单→订单查询”,确认 `Discount` 与 `Amount` 按预期生效。
|
||
4. 文档与界面提示:
|
||
- 在后台/前端表单处增加说明:支持百分比与系数;百分比将自动转换;推荐使用百分比,避免歧义。
|
||
|
||
## 交付与保障
|
||
- 代码改动仅限折扣计算函数与测试,风险低;保留原有行为的向后兼容。
|
||
- 提供测试报告与一次联调记录(数据截图:价格、折扣、总计)。
|
||
|
||
请确认是否按该兼容方案执行,我将据此修改并验证。 |