营销活动互斥业务场景

红酒花生 发布于 2017/03/01 13:31
阅读 194
收藏 0

由于公司的发展,运营的发展,各种各样的营销活动扑面而来,然后就会出现以下的场景。

活动暂先用 A,B,C,D ... Z 表示。

1. 参与了A活动的,不参与B活动;

2. 参与了A活动的,同时可以参与C活动;

3. 参与了D活动的,其他活动都不参与;

 

业务上,有 优先级交叉

原来硬编码方式解决:

比如说,购买商品之后,A活动一个函数,如果返回true(参与了A活动),后边再加上一个判断,如果返回值为true,就不跑B活动的代码,现在活动有10+个了,久而久之代码越来越混乱。

现在需要重构营销活动这一块,方便以后营销活动扩展。

可以增加后台配置营销活动方式,有过来人,指指路吗?

想法:

1. 要有一个活动配方表,具体这个表怎么存活动配方,不清楚;

2. 优先级,一般按照什么默认 ...

加载中
1
烟雨三月
烟雨三月

大概有这几个方面:

一、活动类型(或称活动模板)

有以下几个属性:

1. 活动类型名称

如活动类型A、活动类型B……

2. 与哪些活动互斥

2.1 与所有其他活动互斥

2.2 与部分活动互斥,需指定互斥的活动

二、具体的活动

有以下属性:

1. 它是哪个活动类型

2. 时间范围

3. 参与该活动的商品

三、活动判断器

可以是一个工具类,该工具根据活动类型判断活动是否冲突、指定商品当前哪些活动有效等等。

红酒花生
红酒花生
回复 @烟雨三月 : 嗯,我自己想想,回头整理一个demo出来分享。
烟雨三月
烟雨三月
回复 @PHP-程斌 : 不好意思,没有资料。
红酒花生
红酒花生
嗯,我咨询了做电商的同事,也大概是你这样子说的,所有一个活动,“根据购物车商品查询所有参与了的活动,然后根据活动找出所有工具,按优先级由高到低排序”,说是还有一个优先级的东西。你这边有相关的文章或者开源项目推荐吗?
0
阳光test
阳光test

设计这种的模型,一定要考虑扩展性,所以存储层泛化,然后业务层解析规则,优先级、交叉啥的都不是什么问题。

赵传喜
赵传喜
回复 @阳光test : 你的意思是活动一个表,A,B,C,规则一个表,只能A不能B之类的?存储两部分,一部分基础信息,一部分逻辑?
阳光test
阳光test
回复 @赵传喜 : 就是存储层只是用来做存储的,设计这个模型的时候不要带太多业务,比如活动规则可能解决的问题是:XX时间到XX时间内,本规则解决的问题是XXX,那么需要有:startTime、endTime、ruleType,ruleDetail,然后规则详情泛化,交给业务去解析,那么业务层只需要拿到所有符合条件的规则,然后就可以随便玩了,当然,这里只是举个例子哈,真实的还是比较复杂的。
赵传喜
赵传喜
你可以说的详细点,你这么说我也不明白。
0
乌龟壳
乌龟壳

table activity ( id int auto increment primary key, name varchar uniq)

table include ( id int references activity (id), inc_id int references activity (id) check (id <> inc_id), primary key (id, inc_id) )

table exclude ( id int references activity (id), exc_id int references activity (id) check (id <> exc_id), primary key (id, exc_id) )

以上定义了互斥和包含的关系,比如参加了id是1的活动后,得出具体还有哪些活动的id可用差集运算,如果数据库不支持可用join代替

select inc_id id from include where id = 1

except

select exc_id from exclude where id = 1

返回顶部
顶部