结算中心流程

在结算中心中,主要是对用户添加到购物车商品的结算,由于用户可能添加了多个课程,但是,结算时会选择性的进行支付。在结算时会选中课程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学习吧-结算中心的更多相关文章

  1. AI学习吧

    一:AI学习吧 项目描述 系统使用前后端分离的模式,前端使用vue框架,后端使用restframework实现. 项目需求 公司开发AI学习吧,由于公司需要一款线上学习平台,要开发具有线上视频学习.支 ...

  2. python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. 7.   MySQL中va ...

  3. python 全栈开发,Day103(微信消息推送,结算中心业务流程)

    昨日内容回顾 第一部分:考试题(Python基础) 第二部分:路飞相关 1. 是否遇到bug?难解决的技术点?印象深刻的事? - orm操作费劲 - 最开始学习路由系统时候,匹配规则: 答案一: 有, ...

  4. AI学习笔记(02)

    AI学习笔记   第一个黑箭头是用于挑选物体和移 动物体.在绘图是选中一个物体,就可以将它自由的移动.和其他的绘图软件相同当你选 中物体的时候物体周围就会出现八个方形的控制点,你可以通过这些控制点对物 ...

  5. 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络

    英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...

  6. DeepLearning.ai学习笔记汇总

    第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...

  7. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  8. AI 学习路线

    [导读] 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识.数据分析挖掘.机器学习.深度学习.强化学习.前 ...

  9. AI - 学习路径(Learning Path)

    初见 机器学习图解 错过了这一篇,你学机器学习可能要走很多弯路 这3张脑图,带你清晰人工智能学习路线 一些课程 Andrew Ng的网络课程 HomePage:http://www.deeplearn ...

随机推荐

  1. python笔记(优化相关)

    1. 列表推导: https://www.cnblogs.com/liu-shuai/p/6098227.html 列表推导的速度比普通循环快一倍左右 2. 尽可能多地使用内置方法: https:// ...

  2. 20165234 《Java程序设计》第十周课下作业

    相关知识点的总结 泛型 Java 泛型的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 可以使用“class 名称<泛型列表>”声明一个类,为了和普通的类有所区别, ...

  3. python,栈的小例子

    ''' 1.首先确认栈的概念,先进后出 2.初始化的时候如果给了一个数组那么就要将数组进栈 ''' class Stack: def __init__(self,start=[]): self.sta ...

  4. DataGrid 查不出数据 注意事项

    总结以下几条:1.SQL文在数据控中查询成功在写入,表内字段名尽量复制,手打太容易错了.写SQL写错了,没有智能提示.2.DataGrid数据源先绑定.3.检查parameter顺序,条件的顺序也要考 ...

  5. gitlab的配置

    一. 管理员配置 gitlab 1. 登录 gitlab 等待 docker 容器启动完成后, 登陆 http://localhost:8080 第一次访问是让我们修改管理员密码.如下所示 初始化 g ...

  6. cartographer 安装

    Debian 8 Jessie 一顿操作梦如虎,最后不知道咋装上的. 参考:https://www.jianshu.com/p/9922a51ce38f https://blog.csdn.net/p ...

  7. [Kubernetes]CentOS7下搭建Harbor仓库

    环境依赖: Harbor仓库需要环境:Python 2.7或以上版本,Docker 1.10或以上,Docker Compose 1.6.0或以上. CentOS7自带Python,所以不需要安装. ...

  8. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  9. RTL8201EL介绍【转】

    转自:https://blog.csdn.net/Firefly_cjd/article/details/79826698 本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...

  10. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境

    在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...