路飞学城结算中心的POST接口, 其他请求方式同理

2018-12-29  本文已影响0人  aq_wzj

请求格式

{"course_list":[{"course_id":"1","policy_id":"1"},{"course_id":"2","policy_id":"2"}]}

存储格式(结算中心和全局优惠券格式)

结算中心
{
    "1":{  #课程id
        "coupon":{ # 可用课程优惠券
            "7":{ # 可用课程优惠券id
                "coupon_type":0,
                "coupon_display":"立减券",
                "money_equivalent_value":10
            },
            "8":{
                "coupon_type":1,
                "coupon_display":"满减券",
                "money_equivalent_value":10,
                "minimum_consume":100
            },
            "9":{
                "coupon_type":2,
                "coupon_display":"折扣券",
                "off_percent":90
            }
        },
        "title":"Django从入门到放弃",
        "img":"django.png",
        "default_policy":"3",
         "default_coupon":"0", # 默认课程优惠券id
        "policy":{
            "1":{
                "period":3,
                "period_display":"3天",
                "price":200
            },
            "3":{
                "period":60,
                "period_display":"2个月",
                "price":1000
            },
            "4":{
                "period":30,
                "period_display":"1个月",
                "price":500
            }
        }
    },
    "2":{
        "coupon":{

        },
        "title":"Git操作",
        "img":"git.png",
        "default_policy":"2",
        "policy":{
            "2":{
                "period":30,
                "period_display":"1个月",
                "price":60
            },
            "5":{
                "period":1,
                "period_display":"1天",
                "price":0
            },
            "6":{
                "period":90,
                "period_display":"3个月",
                "price":50
            }
        }
    }
}

全局优惠券格式
{
    "coupon":{
        "4":{ # 全站优惠券id
            "coupon_type":1,
            "coupon_display":"满减券",
            "money_equivalent_value":10,
            "minimum_consume":100
        },
        "5":{
            "coupon_type":0,
            "coupon_display":"立减券",
            "money_equivalent_value":10
        },
        "6":{
            "coupon_type":2,
            "coupon_display":"折扣券",
            "off_percent":80
        }
    },
    "default_coupon":0 # 默认全站优惠券id
}

结算中心逻辑分析:

添加到结算中心--post---
{"course_list":[{"course_id":"1","policy_id":"1"},{"course_id":"2","policy_id":"2"}]}
1 定义结算中心的字典,定义全局优惠券的字典
        payment_dict_userid={}
        global_coupon_dict = {
            "coupon": {},
            "default_coupon": 0
        }
2 拿到购物车,循环取出传入的课程id,判断是否在购物车中,不在直接抛异常
3 构造单个课程详情的字典,把购物车中的当前课程,update到该字典中
   
4 将该课程详情,加入到结算中心(现在里面没有优惠券相关信息)(为了效率,不在for循环中查询数据库,查出优惠券)
    
5 一次性查出当前用户的所有优惠券信息(用户为当前用户,状态为未使用,优惠券起始时间小于当前时间,优惠券结束时间大于当前时间)

6 循环所有优惠券
7 构造出单个优惠券的空字典,拿到优惠券类型(0立减 1满减 2折扣),拿到优惠券id,拿到该优惠券绑定的课程id(有可能为空)

8 构造单个优惠券字典,将数据填充进去,格式如下:

9 判断是全站优惠券还是课程优惠券

10 讲结算中心字典和全局优惠券字典,放入redis中
                        elf.conn.set('payment_dict_%s'%request.user.id,json.dumps(payment_dict_userid))
                        self.conn.set('global_coupon_dict_%s'%request.user.id,json.dumps(global_coupon_dict))
11 返回成功


上一篇下一篇

猜你喜欢

热点阅读