acdb441507
系统修复: - fleet_runner.py: Windows UTF-8 编码兼容(reconfigure stdout/stderr) - fleet_runner.py: run 命令自动生成合并清单供导出使用 - fleet_manifest.py: 新增 save_merged_manifest() 保存统一清单 - fleet_config.yml: 修复 YAML keywords 格式(block sequence → flow sequence) - 恢复被误删的知识库文件(payment_flow_cases, marketing_activity_cases) QE Fleet 产物 (安徽运八需求): - 153个测试点 + 53条可执行测试用例 - 需求分析/风险评估/测试策略/质量裁决(PASS) - Excel 导出 + 版本快照 v2 - 确认结论文件已归档
4.3 KiB
4.3 KiB
营销叠加互斥规定--该项目暂时不需要
核心业务规则,生成用例时严禁违反以下逻辑(以
/zanmall_order/order/confirm+/zanmall_order/order/submit当前代码为准):
- 优惠券规则(作用域互斥):
- 同一作用域(同店铺券池 / 平台券池)一次只会生效 1 张券,不可多张叠加。
- 平台券与店铺券可同时生效(前提各自命中可用条件)。
- 套餐商品(
comboId > 0)不参与优惠券分摊。
- 优先级逻辑:
- 用户未手动指定优惠券(
userChangeCoupon != 1)时,系统默认选择优惠金额最大的可用券。 - 用户手动指定(
userChangeCoupon = 1)时,仅按传入couponIds选择;也可手动不使用优惠券。
- 用户未手动指定优惠券(
- 积分与优惠券关系:
- 普通订单中,优惠券可与积分抵现叠加(积分开关开启且
isScorePay = 1)。 - 积分在会员权益阶段之后计算,提交时会单独锁积分。
- 普通订单中,优惠券可与积分抵现叠加(积分开关开启且
- 一口价互斥:
- 命中一口价(
fixedPriceId != null)时,不走平台券、会员折扣、积分抵现链路。 - 一口价会重算店铺金额并覆盖此前店铺侧优惠计算结果,不与常规营销链路叠加。
- 命中一口价(
- 满减送互斥:
- 满减送对以下商品组直接跳过:已命中旧满减、拼团/秒杀/积分类商品、限时折扣、一口价、套餐。
- 会员折扣链路差异(配置项):
- 会员价开关关闭(legacy)时:会员折扣可继续叠加在已优惠商品上。
- 会员价开关开启(hybrid)时:已命中营销活动或已使用优惠券的商品不再叠加会员折扣。
- 运费规则:
- 运费按“店铺 + 运费模板(含供应商维度)”计算后累加。
- 包邮只作用于命中的模板或模板条件,不是“只要有一件包邮就全单免邮”。
- 确认单链路顺序(普通路径):
- 先计算店铺侧营销(折扣/套餐、满减、店铺券等),再处理平台券,再处理会员与积分,再汇总运费。
- 若命中一口价,直接进入一口价分支并覆盖店铺金额,不再进入平台券+会员+积分常规链路。
- 提交单锁定规则:
- 提交单阶段不会重新“试算”营销组合,按确认单结果执行资源锁定。
- 优惠券、积分分别在提交阶段单独锁定,确保与确认单结果一致。
关系速查(按当前接口逻辑)
| 活动A | 活动B | 关系 | 条件说明 |
|---|---|---|---|
| 优惠券 | 优惠券(同作用域) | ❌ | 同一券池仅生效 1 张 |
| 平台券 | 店铺券 | ✅ | 分池计算,可同时生效 |
| 优惠券 | 套餐商品 | ⬇️ | 套餐商品不参与券分摊,非套餐可用券 |
| 优惠券 | 积分抵现 | ✅ | 积分开关开启且 isScorePay=1 时可叠加 |
| 会员折扣 | 优惠券 | ⬇️ | legacy 可叠加;hybrid 对已用券商品不叠加 |
| 满减送 | 旧满减/限时折扣/套餐/一口价/拼团秒杀积分类 | ❌(同商品组) | 命中互斥条件即跳过满减送 |
| 一口价 | 平台券 | ❌ | 一口价分支跳过平台券链路 |
| 一口价 | 会员折扣 | ❌ | 一口价分支跳过会员链路 |
| 一口价 | 积分抵现 | ❌ | 积分在会员链路内计算,一口价整体跳过 |
| 一口价 | 店铺侧营销结果(满减/店铺券/套餐) | ❌(覆盖) | 一口价重算并覆盖此前店铺优惠汇总 |
| 提交阶段 | 优惠券锁定 | 执行 | 按确认单结果锁券 |
| 提交阶段 | 积分锁定 | 执行 | 按确认单结果锁积分 |
| 运费 | 包邮模板 | ⬇️ | 按店铺+模板累加;仅命中模板免运费 |
符号定义
✅:可叠加(同一条 confirm 链路会连续生效,且无显式跳过/覆盖)❌:互斥(代码显式跳过,或后置计算覆盖前置结果)⬇️:条件叠加(依赖配置开关、活动命中、商品类型、券作用域等)
可配置项(影响叠加结果)
memberPriceSwitchConfig(enabled/failOpenLegacy):控制会员折扣走 legacy 还是 hybrid。SCORE_CONFIG(shoppingScoreSwitch/useRatioLimit/shoppingUseScoreRatio):控制积分抵现开关、比例与上限。会员权益 rightsType/freeFeeType:控制会员包邮是否命中。userChangeCoupon + couponIds:控制是否手动指定优惠券。