背景:
一、电商促销方案:
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; } //指定全场卷验证 } }
从结构上来说分三个部分:限制条件,促销范围,促销结果。然后从每个维度上都有若干玩法,例如:
限制条件:时间,订单金额,购买数量,购买人数,支付方式,收货地址,运输方式,用户类型,积分等等
促销范围:单个商品,一组商品,品类,整单,以及例外品
促销结果:折扣,扣减,返券,买搭,买赠等等
然后,把三个维度再做一下组合。。。有的玩呢~
还需要有一个促销效果汇总的功能,用来记录分析每一个促销活动的实际花费、带来的销售、毛利、转化率等等。用于持续调整促销活动的效果。