|
@@ -6,11 +6,15 @@
|
|
|
@Email : zhangdongming@asj6.wecom.work
|
|
|
@Software: PyCharm
|
|
|
"""
|
|
|
+import json
|
|
|
import time
|
|
|
|
|
|
from django.views import View
|
|
|
|
|
|
+from Ansjer.config import LOGGER
|
|
|
from Model.models import CouponCombo, CouponModel
|
|
|
+from Object.Enums.RedisKeyConstant import RedisKeyConstant
|
|
|
+from Object.RedisObject import RedisObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Object.TokenObject import TokenObject
|
|
|
|
|
@@ -63,34 +67,62 @@ class CloudServiceController(View):
|
|
|
def get_user_coupon_list(cls, user_id):
|
|
|
"""
|
|
|
获取用户未使用优惠券配置ID列表
|
|
|
- @param user_id:用户id
|
|
|
- @return: coupon_qs
|
|
|
+ @param user_id: 用户id
|
|
|
+ @return: coupon_ids 列表,可能为空
|
|
|
+ 如果没有未使用的优惠券,返回空列表 []
|
|
|
"""
|
|
|
- now_time = int(time.time())
|
|
|
- coupon_qs = CouponModel.objects.filter(
|
|
|
- userID=user_id,
|
|
|
- use_status=0,
|
|
|
- distribute_time__lte=now_time,
|
|
|
- valid_time__gt=now_time
|
|
|
- ).values('coupon_config__id')
|
|
|
- return coupon_qs
|
|
|
+ try:
|
|
|
+ now_time = int(time.time())
|
|
|
+ coupon_conf_ids = CouponModel.objects.filter(
|
|
|
+ userID=user_id,
|
|
|
+ use_status=0,
|
|
|
+ distribute_time__lte=now_time,
|
|
|
+ valid_time__gt=now_time
|
|
|
+ ).values_list('coupon_config__id', flat=True) # 使用 values_list 获取 ID 列表
|
|
|
+
|
|
|
+ return list(coupon_conf_ids) # 可能为空
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.error('获取用户优惠券异常:userID:{}, error_line:{}, error_msg:{}'
|
|
|
+ .format(user_id, e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return []
|
|
|
|
|
|
@classmethod
|
|
|
def get_combo_list(cls, coupon_type, coupon_id):
|
|
|
"""
|
|
|
根据优惠券类型与优惠券ID,获取关联套餐列表
|
|
|
- @param coupon_type: 优惠券类型
|
|
|
- @param coupon_id: 套餐id
|
|
|
- @return: coupon_list
|
|
|
+ :param coupon_type: 优惠券类型
|
|
|
+ :param coupon_id: 优惠券ID
|
|
|
+ :return: 关联的套餐ID列表
|
|
|
"""
|
|
|
- combo_qs = CouponCombo.objects.filter(coupon_type=coupon_type, coupon_id=coupon_id) \
|
|
|
- .values('combo_id')
|
|
|
- combo_list = []
|
|
|
- if not combo_qs.exists():
|
|
|
- return combo_list
|
|
|
- for item in combo_qs:
|
|
|
- combo_list.append(item['combo_id'])
|
|
|
- return combo_list
|
|
|
+ try:
|
|
|
+ redis_obj = RedisObject() # 创建 Redis 对象以访问缓存
|
|
|
+ # 构建 Redis 缓存键
|
|
|
+ conf_key = f'{RedisKeyConstant.BASIC_CLOUD_COUPON.value}{coupon_type}:{coupon_id}'
|
|
|
+
|
|
|
+ # 尝试从 Redis 获取数据
|
|
|
+ conf_data = redis_obj.get_data(conf_key)
|
|
|
+ if conf_data: # 如果缓存中存在数据,则直接返回
|
|
|
+ return json.loads(conf_data)
|
|
|
+
|
|
|
+ # 从数据库中查询关联的套餐ID
|
|
|
+ combo_qs = CouponCombo.objects.filter(coupon_type=coupon_type, coupon_id=coupon_id).values('combo_id')
|
|
|
+
|
|
|
+ # 初始化套餐ID列表
|
|
|
+ combo_list = []
|
|
|
+ if combo_qs.exists(): # 检查查询集是否存在数据
|
|
|
+ for item in combo_qs:
|
|
|
+ combo_list.append(item['combo_id']) # 逐个添加套餐ID
|
|
|
+
|
|
|
+ # 将查询结果存入 Redis 缓存
|
|
|
+ redis_obj.set_data(conf_key, json.dumps(combo_list), expire=RedisKeyConstant.EXPIRE_TIME_24_HOURS)
|
|
|
+
|
|
|
+ return combo_list # 返回套餐ID列表
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ # 记录异常信息和相关上下文
|
|
|
+ LOGGER.error('获取优惠券套餐异常: couponID: {}, error_line: {}, error_msg: {}'
|
|
|
+ .format(coupon_id, e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return [] # 返回空列表以表示失败
|
|
|
|
|
|
@classmethod
|
|
|
def get_coupon_list(cls, coupon_type, combo_id):
|