结算中心流程

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

    https://blog.csdn.net/ice_actor/article/details/78648780

  2. Linux C++ TCP Socket传输文件或图片实例

    环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服 ...

  3. css3 特效拓展 画个安卓机器人

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. P5270 无论怎样神树大人都会删库跑路

    题目地址:P5270 无论怎样神树大人都会删库跑路 第一眼看上去是模拟,似乎是 \(O(n)\) 的 水题 信心满满的写完: #include <bits/stdc++.h> using ...

  5. Contains Duplicate I & III

    Contains Duplicate I Given an array of integers, find if the array contains any duplicates. Your fun ...

  6. MySQL报错总结

    错误一: MySQL从cmd使用命令“mysql -u root -p”启动报错,显示“不能连接到端口xxx”(实际端口为3306),这里的问题实际是由于我没有设置mysql开机自启动,所以解决方案就 ...

  7. shell 在手分析服务器日志【转】

    自己的小网站跑在阿里云的 ECS 上面, 偶尔也去分析分析自己网站服务器日志,看看网站的访问量.看看有没有黑阔搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试! awk '{print $1 ...

  8. 在Visual Studio里配置及查看IL

    原文地址:http://www.myext.cn/other/a_25162.html 在之前的版本VS2010中,在Tools下有IL Disassembler(IL中间语言查看器),但是我想直接集 ...

  9. 利用 ffmpeg 的 maskedmerge 滤镜, 从视频中提取移动对象

    ffmpeg \ -i background.png \ -i video.mkv \ -filter_complex \ " color=#00ff00:size=1280x720 [ma ...

  10. VS2013中编译openssl的步骤和使用设置

    一.VS2013中编译openssl的步骤 版本号:openssl-1.0.1e 1.下载 OpenSSL http://www.openssl.org/,并解压到d:\openssl-1.0.1e目 ...