qhfl-7 结算中心
生活随笔
收集整理的這篇文章主要介紹了
qhfl-7 结算中心
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
結算中心,即從購物車前往支付前的確認頁面,這里要開始選擇優惠券了
""" 前端傳過來數據 course_list 課程列表 redis 中將要存放的結算數據 {settlement_userid_courseid: {id, 課程id,title,course_img,valid_period_display,price,course_coupon_dict: {? # 課程優惠券coupon_id: {優惠券信息}coupon_id2: {優惠券信息}coupon_id3: {優惠券信息}}# 默認不給你選 這個字段只有更新的時候才添加default_coupon_id: 1}global_coupon_userid: { # 全局優惠券coupon_id: {優惠券信息}coupon_id2: {優惠券信息}coupon_id3: {優惠券信息},# 這個字段只有更新的時候才添加default_global_coupon_id: 1} } """加入結算中心接口
加入結算中心后,放到redis中,同時將redis中的購物車中課程清除。等待結算
class SettlementView(APIView):authentication_classes = [LoginAuth, ]def post(self, request):res = BaseResponse()# 1 獲取前端的數據以及user_idcourse_list = request.data.get("course_list", "")user_id = request.user.pk# 2 校驗數據的合法性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 構建數據結構# 3.1 獲取用戶的所有合法優惠券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 構建優惠券dictcourse_coupon_dict = {}global_coupon_dict = {}for coupon_record in user_all_coupons:coupon = coupon_record.couponif coupon.object_id == course_id: # 一門課程只能存在一張優惠券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 構建寫入redis的數據結構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) # 將全局優惠券也放到redis中# 5 刪除購物車中的數據CONN.delete(shopping_car_key)res.data = "加入結算中心成功"return Response(res.dict) post加入結算中心模擬測試接口
查看結算中心
def get(self, request):res = BaseResponse()# 1, 獲取user_iduser_id = request.user.pk# 2, 拼接所有key# 3, 去redis取數據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) 獲取結算信息更新結算中心接口
在結算時,如果有更改課程的優惠券,或全局優惠券時,需put請求更新結算中心的數據
def put(self, request):# course_id course_coupon_id global_coupon_idres = BaseResponse()# 1, 獲取前端傳過來數據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, 校驗數據合法性# 2.1 校驗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 校驗 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 = "課程優惠券ID不合法"return Response(res.dict)# 2.3 校驗global_coupon_idif global_coupon_id:global_coupon_key = GLOBAL_COUPON_KEY % user_idif not CONN.exists(global_coupon_key):res.code = 1062res.error = "全局優惠券ID不合法"return Response(res.dict)CONN.hset(global_coupon_key, "default_global_coupon_id", global_coupon_id)# 3,修改redis中數據CONN.hset(key, "default_coupon_id", course_coupon_id)res.data = "更新成功"return Response(res.dict) 更新結算信息更新后查看結算的結果
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" """ 前端傳過來數據 course_listredis 中存的數據 {settlement_userid_courseid: {id, 課程id,title,course_img,valid_period_display,price,course_coupon_dict: {coupon_id: {優惠券信息}coupon_id2: {優惠券信息}coupon_id3: {優惠券信息}}# 默認不給你選 這個字段只有更新的時候才添加default_coupon_id: 1}global_coupon_userid: {coupon_id: {優惠券信息}coupon_id2: {優惠券信息}coupon_id3: {優惠券信息},# 這個字段只有更新的時候才添加default_global_coupon_id: 1}} """class SettlementView(APIView):authentication_classes = [LoginAuth, ]def post(self, request):res = BaseResponse()# 1 獲取前端的數據以及user_idcourse_list = request.data.get("course_list", "")user_id = request.user.pk# 2 校驗數據的合法性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 構建數據結構# 3.1 獲取用戶的所有合法優惠券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 構建優惠券dictcourse_coupon_dict = {}global_coupon_dict = {}for coupon_record in user_all_coupons:coupon = coupon_record.couponif coupon.object_id == course_id: # 一門課程只能存在一張優惠券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 構建寫入redis的數據結構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) # 將全局優惠券也放到redis中# 5 刪除購物車中的數據CONN.delete(shopping_car_key)res.data = "加入結算中心成功"return Response(res.dict)def get(self, request):res = BaseResponse()# 1, 獲取user_iduser_id = request.user.pk# 2, 拼接所有key# 3, 去redis取數據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, 獲取前端傳過來數據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, 校驗數據合法性# 2.1 校驗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 校驗 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 = "課程優惠券ID不合法"return Response(res.dict)# 2.3 校驗global_coupon_idif global_coupon_id:global_coupon_key = GLOBAL_COUPON_KEY % user_idif not CONN.exists(global_coupon_key):res.code = 1062res.error = "全局優惠券ID不合法"return Response(res.dict)CONN.hset(global_coupon_key, "default_global_coupon_id", global_coupon_id)# 3,修改redis中數據CONN.hset(key, "default_coupon_id", course_coupon_id)res.data = "更新成功"return Response(res.dict) shopping/settlement_view.py總結
以上是生活随笔為你收集整理的qhfl-7 结算中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qhfl-6 购物车
- 下一篇: qhfl-9 微信模板消息推送