Intershop中如何排除特定customer segment的促销、支付等资源适用权限
Intershop 平台资源排除客户段功能实现建议
方案核心思路
在不改动原生核心流程的基础上扩展模型和判定逻辑,保证存量业务不受影响,同时实现排除规则优先级高于分配规则的效果。
具体实现步骤
1. 扩展业务对象模型
- 给promotion、include、payment method对应的业务对象新增
excludedCustomerSegments多值关联属性,类型与原生的assignedCustomerSegments保持一致,用于存储需要排除的客户段ID集合 - 后台管理页面对应新增「排除客户段」选择模块,和现有分配客户段的选择控件逻辑对齐,支持多选、关键词筛选、已选批量删除操作
2. 重写资源适用校验逻辑
Intershop原生的资源适用判定逻辑为:如果资源没有配置分配客户段,默认对所有客户生效;如果配置了分配客户段,客户属于其中任意一个即可生效
- 重写对应资源的适用判定方法,调整判定顺序,排除规则优先级高于分配规则:
- 先校验当前登录客户是否属于
excludedCustomerSegments中的任意一个,是则直接返回不适用 - 再走原生的
assignedCustomerSegments校验逻辑,符合规则则返回适用,否则返回不适用
- 先校验当前登录客户是否属于
- 代码层面无需修改核心包源码,直接继承对应业务对象的实现类重写方法即可,例如促销逻辑重写
PromotionBOImpl类的isApplicableToCustomer()方法,支付方式逻辑重写PaymentMethodBOImpl类的对应校验方法即可
3. 兼容存量业务与权限控制
- 数据迁移阶段,所有存量资源的
excludedCustomerSegments默认设为空集合,保证原有已配置的分配规则不受任何影响 - 后台权限配置上,「排除客户段」的编辑权限和原有「分配客户段」的权限保持一致,避免越权操作
- 测试阶段重点覆盖以下场景:
- 资源同时配置了分配客户段和排除客户段,客户同时属于两个集合时,优先触发排除规则
- 资源没有配置任何分配客户段(默认全量开放),仅配置排除客户段时,排除范围内的客户无法使用该资源
- 排除客户段为空时,功能表现与原生逻辑完全一致
内容的提问来源于stack exchange,提问作者Manitra
相关产品推荐
相关产品推荐

