• 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)
  • 相关阅读:
    视频输入 范例
    视频输出 范例
    开启VI视频输入设备 范例
    初始化MMP系统 范例
    Git 的使用
    DVS/DVR/NVR/XVR
    shell命令中 && 和 || 的区别
    码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
    DNS与DSN
    ob_start()失效与phpunit的非正常结束
  • 原文地址:https://www.cnblogs.com/djfboai/p/10115238.html
Copyright © 2020-2023  润新知