qhfl-7 结算中心
生活随笔
收集整理的這篇文章主要介紹了
qhfl-7 结算中心
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
結(jié)算中心,即從購物車前往支付前的確認(rèn)頁面,這里要開始選擇優(yōu)惠券了
""" 前端傳過來數(shù)據(jù) course_list 課程列表 redis 中將要存放的結(jié)算數(shù)據(jù) {settlement_userid_courseid: {id, 課程id,title,course_img,valid_period_display,price,course_coupon_dict: {? # 課程優(yōu)惠券coupon_id: {優(yōu)惠券信息}coupon_id2: {優(yōu)惠券信息}coupon_id3: {優(yōu)惠券信息}}# 默認(rèn)不給你選 這個(gè)字段只有更新的時(shí)候才添加default_coupon_id: 1}global_coupon_userid: { # 全局優(yōu)惠券coupon_id: {優(yōu)惠券信息}coupon_id2: {優(yōu)惠券信息}coupon_id3: {優(yōu)惠券信息},# 這個(gè)字段只有更新的時(shí)候才添加default_global_coupon_id: 1} } """加入結(jié)算中心接口
加入結(jié)算中心后,放到redis中,同時(shí)將redis中的購物車中課程清除。等待結(jié)算
class SettlementView(APIView):authentication_classes = [LoginAuth, ]def post(self, request):res = BaseResponse()# 1 獲取前端的數(shù)據(jù)以及user_idcourse_list = request.data.get("course_list", "")user_id = request.user.pk# 2 校驗(yàn)數(shù)據(jù)的合法性for course_id in course_list:# 2.1 判斷course_id 是否在購物車中shopping_car_key = SHOPPINGCAR_KEY % (user_id, course_id)if not CONN.exists(shopping_car_key):res.code = 1050res.error = "課程ID不合法"return Response(res.dict)# 3 構(gòu)建數(shù)據(jù)結(jié)構(gòu)# 3.1 獲取用戶的所有合法優(yōu)惠券user_all_coupons = CouponRecord.objects.filter(account_id=user_id,status=0,coupon__valid_begin_date__lte=now(),coupon__valid_end_date__gte=now(),).all()print(user_all_coupons)# 3.2 構(gòu)建優(yōu)惠券dictcourse_coupon_dict = {}global_coupon_dict = {}for coupon_record in user_all_coupons:coupon = coupon_record.couponif coupon.object_id == course_id: # 一門課程只能存在一張優(yōu)惠券course_coupon_dict[coupon.id] = {"id": coupon.id,"name": coupon.name,"coupon_type": coupon.get_coupon_type_display(),"object_id": coupon.object_id,"money_equivalent_value": coupon.money_equivalent_value,"off_percent": coupon.off_percent,"minimum_consume": coupon.minimum_consume}elif coupon.object_id == "":global_coupon_dict[coupon.id] = {"id": coupon.id,"name": coupon.name,"coupon_type": coupon.get_coupon_type_display(),"money_equivalent_value": coupon.money_equivalent_value,"off_percent": coupon.off_percent,"minimum_consume": coupon.minimum_consume}# 3.3 構(gòu)建寫入redis的數(shù)據(jù)結(jié)構(gòu)course_info = CONN.hgetall(shopping_car_key)price_policy_dict = json.loads(course_info["price_policy_dict"])default_policy_id = course_info["default_price_policy_id"]valid_period = price_policy_dict[default_policy_id]["valid_period_display"]price = price_policy_dict[default_policy_id]["price"]settlement_info = {"id": course_info["id"],"title": course_info["title"],"course_img": course_info["course_img"],"valid_period": valid_period,"price": price,"course_coupon_dict": json.dumps(course_coupon_dict, ensure_ascii=False)}# 4 寫入redissettlement_key = SETTLEMENT_KEY % (user_id, course_id)global_coupon_key = GLOBAL_COUPON_KEY % user_idCONN.hmset(settlement_key, settlement_info)if global_coupon_dict:CONN.hmset(global_coupon_key, global_coupon_dict) # 將全局優(yōu)惠券也放到redis中# 5 刪除購物車中的數(shù)據(jù)CONN.delete(shopping_car_key)res.data = "加入結(jié)算中心成功"return Response(res.dict) post加入結(jié)算中心模擬測試接口
查看結(jié)算中心
def get(self, request):res = BaseResponse()# 1, 獲取user_iduser_id = request.user.pk# 2, 拼接所有key# 3, 去redis取數(shù)據(jù)settlement_key = SETTLEMENT_KEY % (user_id, "*")global_coupon_key = GLOBAL_COUPON_KEY % user_idall_keys = CONN.scan_iter(settlement_key)ret = []for key in all_keys:ret.append(CONN.hgetall(key))global_coupon_info = CONN.hgetall(global_coupon_key)res.data = {"settlement_info": ret,"global_coupon_dict": global_coupon_info}return Response(res.dict) 獲取結(jié)算信息更新結(jié)算中心接口
在結(jié)算時(shí),如果有更改課程的優(yōu)惠券,或全局優(yōu)惠券時(shí),需put請求更新結(jié)算中心的數(shù)據(jù)
def put(self, request):# course_id course_coupon_id global_coupon_idres = BaseResponse()# 1, 獲取前端傳過來數(shù)據(jù)course_id = request.data.get("course_id", "")course_coupon_id = request.data.get("course_coupon_id", "")global_coupon_id = request.data.get("global_coupon_id", "")user_id = request.user.pk# 2, 校驗(yàn)數(shù)據(jù)合法性# 2.1 校驗(yàn)course_idkey = SETTLEMENT_KEY % (user_id, course_id)if course_id:if not CONN.exists(key):res.code = 1060res.error = "課程ID不合法"return Response(res.dict)# 2.2 校驗(yàn) course_coupon_idif course_coupon_id:course_coupon_dict = json.loads(CONN.hget(key, "course_coupon_dict"))if str(course_coupon_id) not in course_coupon_dict:res.code = 1061res.error = "課程優(yōu)惠券ID不合法"return Response(res.dict)# 2.3 校驗(yàn)global_coupon_idif global_coupon_id:global_coupon_key = GLOBAL_COUPON_KEY % user_idif not CONN.exists(global_coupon_key):res.code = 1062res.error = "全局優(yōu)惠券ID不合法"return Response(res.dict)CONN.hset(global_coupon_key, "default_global_coupon_id", global_coupon_id)# 3,修改redis中數(shù)據(jù)CONN.hset(key, "default_coupon_id", course_coupon_id)res.data = "更新成功"return Response(res.dict) 更新結(jié)算信息更新后查看結(jié)算的結(jié)果
import json import redis from rest_framework.views import APIView from rest_framework.response import Response from utils.base_response import BaseResponse from utils.redis_pool import POOL from django.utils.timezone import now from utils.my_auth import LoginAuthfrom .views import SHOPPINGCAR_KEY from .models import CouponRecordCONN = redis.Redis(connection_pool=POOL) SETTLEMENT_KEY = "SETTLEMENT_%s_%s" GLOBAL_COUPON_KEY = "GLOBAL_COUPON_%s" """ 前端傳過來數(shù)據(jù) course_listredis 中存的數(shù)據(jù) {settlement_userid_courseid: {id, 課程id,title,course_img,valid_period_display,price,course_coupon_dict: {coupon_id: {優(yōu)惠券信息}coupon_id2: {優(yōu)惠券信息}coupon_id3: {優(yōu)惠券信息}}# 默認(rèn)不給你選 這個(gè)字段只有更新的時(shí)候才添加default_coupon_id: 1}global_coupon_userid: {coupon_id: {優(yōu)惠券信息}coupon_id2: {優(yōu)惠券信息}coupon_id3: {優(yōu)惠券信息},# 這個(gè)字段只有更新的時(shí)候才添加default_global_coupon_id: 1}} """class SettlementView(APIView):authentication_classes = [LoginAuth, ]def post(self, request):res = BaseResponse()# 1 獲取前端的數(shù)據(jù)以及user_idcourse_list = request.data.get("course_list", "")user_id = request.user.pk# 2 校驗(yàn)數(shù)據(jù)的合法性for course_id in course_list:# 2.1 判斷course_id 是否在購物車中shopping_car_key = SHOPPINGCAR_KEY % (user_id, course_id)if not CONN.exists(shopping_car_key):res.code = 1050res.error = "課程ID不合法"return Response(res.dict)# 3 構(gòu)建數(shù)據(jù)結(jié)構(gòu)# 3.1 獲取用戶的所有合法優(yōu)惠券user_all_coupons = CouponRecord.objects.filter(account_id=user_id,status=0,coupon__valid_begin_date__lte=now(),coupon__valid_end_date__gte=now(),).all()print(user_all_coupons)# 3.2 構(gòu)建優(yōu)惠券dictcourse_coupon_dict = {}global_coupon_dict = {}for coupon_record in user_all_coupons:coupon = coupon_record.couponif coupon.object_id == course_id: # 一門課程只能存在一張優(yōu)惠券course_coupon_dict[coupon.id] = {"id": coupon.id,"name": coupon.name,"coupon_type": coupon.get_coupon_type_display(),"object_id": coupon.object_id,"money_equivalent_value": coupon.money_equivalent_value,"off_percent": coupon.off_percent,"minimum_consume": coupon.minimum_consume}elif coupon.object_id == "":global_coupon_dict[coupon.id] = {"id": coupon.id,"name": coupon.name,"coupon_type": coupon.get_coupon_type_display(),"money_equivalent_value": coupon.money_equivalent_value,"off_percent": coupon.off_percent,"minimum_consume": coupon.minimum_consume}# 3.3 構(gòu)建寫入redis的數(shù)據(jù)結(jié)構(gòu)course_info = CONN.hgetall(shopping_car_key)price_policy_dict = json.loads(course_info["price_policy_dict"])default_policy_id = course_info["default_price_policy_id"]valid_period = price_policy_dict[default_policy_id]["valid_period_display"]price = price_policy_dict[default_policy_id]["price"]settlement_info = {"id": course_info["id"],"title": course_info["title"],"course_img": course_info["course_img"],"valid_period": valid_period,"price": price,"course_coupon_dict": json.dumps(course_coupon_dict, ensure_ascii=False)}# 4 寫入redissettlement_key = SETTLEMENT_KEY % (user_id, course_id)global_coupon_key = GLOBAL_COUPON_KEY % user_idCONN.hmset(settlement_key, settlement_info)if global_coupon_dict:CONN.hmset(global_coupon_key, global_coupon_dict) # 將全局優(yōu)惠券也放到redis中# 5 刪除購物車中的數(shù)據(jù)CONN.delete(shopping_car_key)res.data = "加入結(jié)算中心成功"return Response(res.dict)def get(self, request):res = BaseResponse()# 1, 獲取user_iduser_id = request.user.pk# 2, 拼接所有key# 3, 去redis取數(shù)據(jù)settlement_key = SETTLEMENT_KEY % (user_id, "*")global_coupon_key = GLOBAL_COUPON_KEY % user_idall_keys = CONN.scan_iter(settlement_key)ret = []for key in all_keys:ret.append(CONN.hgetall(key))global_coupon_info = CONN.hgetall(global_coupon_key)res.data = {"settlement_info": ret,"global_coupon_dict": global_coupon_info}return Response(res.dict)def put(self, request):# course_id course_coupon_id global_coupon_idres = BaseResponse()# 1, 獲取前端傳過來數(shù)據(jù)course_id = request.data.get("course_id", "")course_coupon_id = request.data.get("course_coupon_id", "")global_coupon_id = request.data.get("global_coupon_id", "")user_id = request.user.pk# 2, 校驗(yàn)數(shù)據(jù)合法性# 2.1 校驗(yàn)course_idkey = SETTLEMENT_KEY % (user_id, course_id)if course_id:if not CONN.exists(key):res.code = 1060res.error = "課程ID不合法"return Response(res.dict)# 2.2 校驗(yàn) course_coupon_idif course_coupon_id:course_coupon_dict = json.loads(CONN.hget(key, "course_coupon_dict"))if str(course_coupon_id) not in course_coupon_dict:res.code = 1061res.error = "課程優(yōu)惠券ID不合法"return Response(res.dict)# 2.3 校驗(yàn)global_coupon_idif global_coupon_id:global_coupon_key = GLOBAL_COUPON_KEY % user_idif not CONN.exists(global_coupon_key):res.code = 1062res.error = "全局優(yōu)惠券ID不合法"return Response(res.dict)CONN.hset(global_coupon_key, "default_global_coupon_id", global_coupon_id)# 3,修改redis中數(shù)據(jù)CONN.hset(key, "default_coupon_id", course_coupon_id)res.data = "更新成功"return Response(res.dict) shopping/settlement_view.py總結(jié)
以上是生活随笔為你收集整理的qhfl-7 结算中心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qhfl-6 购物车
- 下一篇: qhfl-9 微信模板消息推送