背景:
一、电商促销方案:
1、满减-指定专区商品
例如:300元减30元,500元减60元
2、X件Y元-指定专区商品
例如:A区2件398元,B区2件199元
3、直降-指定商品
4、限时特卖
二、优惠券:
1、全场卷
2、专场卷
3、指定商品卷
4、秒杀卷
分析:
假设:一个商品只可以属于一个促销活动,即一个专区。
计算哪些优惠券是很烦的以一件事情,而且卷的金额还要均摊给可以用卷的商品,退货后会扣除相应的价格。
突然发现和权限系统特别像:
A、购物车的每件商品=用户,一个用户可以属于一个角色(上面的假设)
B、优惠券就想时被授权的功能
C、功能可以直接对用户授权,也可以直接对角色授权。
那我们可以用二进制表示
// 专场 combination
int c = 1;// ...00001
// 商品 good
int g = 2;// ...00010
// 特卖 sale
int s = 4;// ...00100
// 秒杀 Seckill
int k = 8;// ...01000
//全场 all
int a = 16;//...10000
购物车
G1:专场006
A1
A2
A3
A4
G2:专场007
B1
B2
B3
B4
G3:未参加活动
C1
C2
C3
货号 权限 价格 专题 类型
组
A1 a|g 199 0
A1 a|g 199
A2 a|g 199
A3 a|g 199
A4 a|g 199
B1 a|g 199
B2 a|g 199
B3 a|g 199
C1 a|g 199
C2 a|g 199
C3 a|g 199
G1 c 799 6
G2 c 699 4
G3 a 399
CouponSelect couponSelect=new CouponSelect();
//我的优惠券列表
List<Coupon> myCoupons=couponSelect.getMyCoupon();
//我的购物车
List<Good> cardGoods=couponSelect.getCartGoods();
//可用卷
List<Coupon> availableCoupons=new ArrayList<Coupon>();
for (Coupon coupon:myCoupons){
for (Good good:cardGoods){
//优惠券类型
int coupon_type= coupon.get_type();
int good_auth=good.getAuthorized();
//优惠券能用
if ((good_auth & coupon_type)!=coupon_type){
//优惠券不能用
continue;
}
switch (coupon_type){
case 2: //商品卷
//货号匹配 && 价格大于门槛
if (coupon.getItemNo().equals(good.getItemNo()) && coupon.getThreshold()<=good.getPrice())
availableCoupons.add(coupon);
break;
}
//指定全场卷验证
}
}
从结构上来说分三个部分:限制条件,促销范围,促销结果。然后从每个维度上都有若干玩法,例如:
限制条件:时间,订单金额,购买数量,购买人数,支付方式,收货地址,运输方式,用户类型,积分等等
促销范围:单个商品,一组商品,品类,整单,以及例外品
促销结果:折扣,扣减,返券,买搭,买赠等等
然后,把三个维度再做一下组合。。。有的玩呢~
还需要有一个促销效果汇总的功能,用来记录分析每一个促销活动的实际花费、带来的销售、毛利、转化率等等。用于持续调整促销活动的效果。