AI学习吧-结算中心
结算中心流程
在结算中心中,主要是对用户添加到购物车商品的结算,由于用户可能添加了多个课程,但是,结算时会选择性的进行支付。在结算时会选中课程id,和对应的价格策略。在后台,首先会对用户进行校验,验证是否登录,接着对课程id进行校验,和之前加入购物车的课程id进行对比,在redis中查看是否存在这个课程,再进行对价格策略进行选择。
加入到结算中心流程:
1、校验课程是否在购物车
2、清空用户结算中心
3、循环要结算的课程id,从购物车汇总获取相关信息
4、从数据库获取当前用户可以用于购买专题课的优惠券
5、循环要结算的课程,给课程添加优惠券
6、将客户未绑定课程的优惠券加入到redis中
数据结构
结算中心数据结构:
根据选中的课程选出对应的优惠券信息,示例对用户id为1的用户、选的课程id为1的课程支付,进行支付: account_car_1_1:{
"course_detail":{"name":"","img":"","price":"","d_price":""}, "course_coupon":{1:{"name":"","coupon_type":"","money_equivalent_value":"","off_percent":"","minimum_consume","object_id"},
2:{...}}
} 接下来判断,当前课程是否存在优惠券,没有就用全局优惠券:
全局优惠券格式:
global_coupon_1:{
3:{}, #里边的形式时普通优惠券的格式
4:{}
}
结算中心具体流程
1、校验课程是否在购物车
# 1 获取课程ID列表
course_id_list =request.data.get('course_id_list')
print(course_id_list) # course_id_list:[1, 2] # 2 获取用户ID
user_pk =request.user.pk for course_id in course_id_list: # 校验数据
course_obj = Course.objects.get(pk=course_id) #其实是在数据库中校验,因为,当直接买时,
就不用加入购物车,直接在数据库中校验即可!
2、清空用户结算中心
# 清除
keys =self.redis.keys("account_car_%s_*" % user_pk)
if keys:
self.redis.delete(*keys)
3、循环要结算的课程id,从购物车汇总获取相关信息
for course_id in course_id_list:
# 结算课程字典的键
account_key =settings.ACCOUNT_KEY %(user_pk ,course_id)
# 结算课程字典的值
course_account ={} # 校验数据
course_obj = Course.objects.get(pk=course_id) shopping_car_key =settings.SHOPPING_CAR_KEY %(user_pk ,course_id)
print("shopping_car_key" ,shopping_car_key)
course_info =self.redis.hgetall(shopping_car_key)
4、从数据库获取当前用户可以用于购买专题课的优惠券
# 查询该用户所有的有效的优惠券信息
import datetime now =datetime.datetime.now()
coupon_record_list =CouponRecord.objects.filter(user=request.user, #筛选未过期的优惠券
status=0,
coupon__valid_begin_date__lt=now,
coupon__valid_end_date__gt=now
) course_coupon_dict ={}
global_coupon_dict ={} for coupon_record in coupon_record_list:
coupon_info ={
"name" :coupon_record.coupon.name,
"coupon_type" :coupon_record.coupon.coupon_type,
"money_equivalent_value" :coupon_record.coupon.money_equivalent_value or "",
"off_percent" :coupon_record.coupon.off_percent or "",
"minimum_consume" :coupon_record.coupon.minimum_consume or "",
"object_id" :coupon_record.coupon.object_id or ""
} object_id =coupon_info.get("object_id")
if object_id: #如果存在就说明课程里有这个优惠券就加入到课程优惠券
course_coupon_dict[coupon_record.pk ] =coupon_info
else: #不存在,就说明时全局的优惠券,加到全局优惠券
global_coupon_dict[coupon_record.pk ] =coupon_info #course_coupon这个字典就是存储的有效优惠券信息:{"course_coupon":"course_coupon_dict"}
course_account["course_coupon" ] =json.dumps(course_coupon_dict)
5、循环要结算的课程,给课程添加优惠券
object_id =coupon_info.get("object_id")
if object_id: #如果存在,就说明课程里有这个优惠券,就加入到课程优惠券
course_coupon_dict[coupon_record.pk ] =coupon_info
else: #不存在,就说明时全局的优惠券,加到全局优惠券
global_coupon_dict[coupon_record.pk ] =coupon_info
#course_coupon这个字典就是存储的有效优惠券信息:{"course_coupon":"course_coupon_dict"}
course_account["course_coupon" ] =json.dumps(course_coupon_dict)
6、在redis写入结算数据 将客户未绑定课程的优惠券加入到redis中
self.redis.hmset(account_key ,course_account)
self.redis.hmset("global_coupon_%s " %(user_pk) ,global_coupon_dict)
AI学习吧-结算中心的更多相关文章
- AI学习吧
一:AI学习吧 项目描述 系统使用前后端分离的模式,前端使用vue框架,后端使用restframework实现. 项目需求 公司开发AI学习吧,由于公司需要一款线上学习平台,要开发具有线上视频学习.支 ...
- python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)
考试第二部分:MySQL数据库 6. MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. 7. MySQL中va ...
- python 全栈开发,Day103(微信消息推送,结算中心业务流程)
昨日内容回顾 第一部分:考试题(Python基础) 第二部分:路飞相关 1. 是否遇到bug?难解决的技术点?印象深刻的事? - orm操作费劲 - 最开始学习路由系统时候,匹配规则: 答案一: 有, ...
- AI学习笔记(02)
AI学习笔记 第一个黑箭头是用于挑选物体和移 动物体.在绘图是选中一个物体,就可以将它自由的移动.和其他的绘图软件相同当你选 中物体的时候物体周围就会出现八个方形的控制点,你可以通过这些控制点对物 ...
- 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络
英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...
- DeepLearning.ai学习笔记汇总
第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...
- DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)
一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...
- AI 学习路线
[导读] 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识.数据分析挖掘.机器学习.深度学习.强化学习.前 ...
- AI - 学习路径(Learning Path)
初见 机器学习图解 错过了这一篇,你学机器学习可能要走很多弯路 这3张脑图,带你清晰人工智能学习路线 一些课程 Andrew Ng的网络课程 HomePage:http://www.deeplearn ...
随机推荐
- 第六天-request response\13-request乱码.avi;
疑问:提交为POST时 ,request为什么不放在Post里面处理呢? 服务器已经启动后,修改html的代码不需要重启服务器就可以生效 :超链接中有中文,也是需要像get那样 通过该配置文件可以解决 ...
- 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法
原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...
- mysql5.7 版本中 timestamp 不能为零日期 以及sql_mode合理设置
---恢复内容开始--- 摘要: mysql5.7版本相比较之前的版本有很多的特性的增加以及默认配置的改变,在使用中难免会遇到与之前的使用习惯或者项目需求不符的情况.就需要调整相应的变量的值,比如sq ...
- ProtonMiner挖矿蠕虫
特征 ProtonMail邮箱地址 利用漏洞 服务 漏洞 Hadoop 未授权访问 Drupal CVE-2018-7600 Redis 未授权访问 Spring Data Commons CVE-2 ...
- js学习笔记--基础部分
自增 自增 ++ 通过自增可以使变量在自身的基础上增加1 对于一个变量自增以后,原变量的值会立即自增1 无论使a++, 还是++a,都会立即使原变量的值自增1. 不同的是a++ 和++a的值不同. a ...
- 设计模式C++学习笔记之三(Singleton单例模式)
单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一个实例,既然这么简单,就直接贴代码了.更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com. 3.1.解释 main ...
- 【转】C++对成员访问运算符->的重载
运算符->的重载比较特别,它只能是非静态的成员函数形式,而且没有参数. 1.如果返回值是一个原始指针,那么就将运算符的右操作数当作这个原始指针所指向类型的成员进行访问: 2.如果返回值是另一个类 ...
- 全系列Unity4.x.x到2017.1.1破解Win&Mac!最新Unity2017.1.1p3&4.7.2f1破解!
Unity官网所有版本下载地址请戳: http://unity3d.com/unity/download/archive 补丁版本请戳: http://unity3d.com/cn/unity/qa/ ...
- vue中更换.ico图标报错路径找不到图片
问题描述: vue项目中,想要更换.ico图片,更换完成后刷新页面报错,找不到路径. 解决: 更换完图片,重新启动下vue项目(npm run dev)就可以啦~ 哈哈哈 补充知识: 网页title旁 ...
- 007grafana监控时间戳转换
一. https://d.jyall.me/dashboard-solo/db/soloview?panelId=1&var-metrics=stats.gauges.zookeeper.mo ...