路飞学城结算中心的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 返回成功