电商系统促销活动-计算可用的优惠券

背景:

一、电商促销方案:

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;
                }
                //指定全场卷验证
            }
        }

  

从结构上来说分三个部分:限制条件,促销范围,促销结果。然后从每个维度上都有若干玩法,例如:

限制条件:时间,订单金额,购买数量,购买人数,支付方式,收货地址,运输方式,用户类型,积分等等
促销范围:单个商品,一组商品,品类,整单,以及例外品
促销结果:折扣,扣减,返券,买搭,买赠等等

然后,把三个维度再做一下组合。。。有的玩呢~

还需要有一个促销效果汇总的功能,用来记录分析每一个促销活动的实际花费、带来的销售、毛利、转化率等等。用于持续调整促销活动的效果。


 
原文地址:https://www.cnblogs.com/jifeng/p/7783197.html