zoukankan      html  css  js  c++  java
  • 电商系统促销活动-计算可用的优惠券

    背景:

    一、电商促销方案:

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

      

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

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

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

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


     
  • 相关阅读:
    Flume将A服务器上的日志采集到B服务器上展示
    flume1.8的安装及环境配置
    springboot实现控制层返回二维码,扫描后打开PDF文件
    Eureka添加security验证后客户端无法注册报错
    Elasticsearch系统学习(八)-partial update
    Elasticsearch系统学习(七)-ES并发控制
    Elasticsearch系统学习(六)-document元数据及基本操作
    Elasticsearch系统学习(五)-分布式架构及shard容错原理
    Elasticsearch系统学习(四)-简单查询及聚合函数
    Elasticsearch系统学习(三)-document基本操作
  • 原文地址:https://www.cnblogs.com/jifeng/p/7783197.html
Copyright © 2011-2022 走看看