فهرست منبع

发放云存优惠券

locky 8 ماه پیش
والد
کامیت
32cf086eee
2فایلهای تغییر یافته به همراه80 افزوده شده و 9 حذف شده
  1. 2 8
      Controller/CouponController.py
  2. 78 1
      Controller/SysManage.py

+ 2 - 8
Controller/CouponController.py

@@ -1,9 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 import time
-from datetime import datetime
-
-
 from django.db.models import F
 from django.http import HttpResponse
 from django.views.generic.base import View
@@ -13,7 +10,7 @@ from Model.models import CouponModel, Device_User
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
-from Ansjer.config import LOGGER, CONFIG_INFO, CONFIG_TEST
+from Ansjer.config import LOGGER
 
 
 # 优惠券
@@ -131,10 +128,7 @@ class CouponView(View):
         @return: True | False
         """
         try:
-            # 创建指定的日期和时间
-            end_dt = datetime(2024, 12, 29, 23, 59, 59)
-            end_timestamp = int(end_dt.timestamp())  # 圣诞节活动时间戳
-
+            end_timestamp = 1735534799  # 活动时间结束: 东部时间2024-12-29 23:59:59
             now_time = int(time.time())
             if now_time >= end_timestamp:
                 LOGGER.info('活动已结束,无法赠送优惠券')

+ 78 - 1
Controller/SysManage.py

@@ -12,6 +12,7 @@
 @Contact: chanjunkai@163.com
 """
 import os
+import threading
 import time
 
 from django.http import HttpResponse
@@ -19,9 +20,14 @@ from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 
 from Ansjer.config import BASE_DIR
-from Model.models import SysMsgModel, Device_Info, Ai_Push_Info
+from Controller.CouponController import CouponView
+from Model.models import SysMsgModel, Device_Info, Ai_Push_Info, UidSetModel, ExperienceContextModel, Order_Model, \
+    UID_Bucket
+from Object.Enums.RedisKeyConstant import RedisKeyConstant
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 
 
@@ -130,4 +136,75 @@ def initMsgFunc(request):
         'ai_count': ai_count,  # AI消息总数
         'uid_reset_count': uid_reset_count,  # 复位的设备数量
     }
+    # 如果没有发放过云存优惠券,异步发放
+    now_time = int(time.time())
+    # 活动时间: 东部时间2024-12-23 00:00:00 - 2024-12-29 23:59:59
+    start_time, end_time = 1734930000, 1735534799
+    # 缓存过期时间
+    expire = end_time - now_time
+    if expire > 0:
+        redis_obj = RedisObject()
+        distribute_key = RedisKeyConstant.CLOUD_STORAGE_COUPONS.value + userID
+        is_distributed = redis_obj.get_data(distribute_key)
+        if not is_distributed:
+            thread_kwargs = {
+                'user_id': userID,
+                'distribute_key': distribute_key,
+                'expire': expire
+            }
+            del_push_info_thread = threading.Thread(
+                target=distribute_cloud_storage_coupons,
+                kwargs=thread_kwargs)
+            del_push_info_thread.start()
     return response.json(0, res)
+
+
+def distribute_cloud_storage_coupons(user_id, redis_obj, distribute_key, expire, end_time):
+    """
+    发放云存优惠券
+    满足条件,用户存在以下三种类型的设备:
+    1. 未体验云存设备
+    2. 体验过未购买过
+    3. 购买过且已过期
+    @param user_id: 用户id
+    @param redis_obj: redis对象
+    @param distribute_key: 发放优惠券缓存key
+    @param expire: distribute_key过期时间
+    @param end_time: 活动结束时间
+    @return:
+    """
+    try:
+        generate_success = False
+        uid_list = Device_Info.objects.filter(userID_id=user_id).values_list('uid', flat=True)
+        if uid_list:
+            uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'ucode', 'device_type')
+            if uid_set_qs.exists():
+                for uid_set in uid_set_qs:
+                    uid = uid_set['uid']
+                    # 判断设备是否支持云存
+                    is_cloud_vod = CommonService.is_cloud_device(uid_set['ucode'], uid_set['device_type'])
+                    if is_cloud_vod:
+                        # 未体验云存
+                        experience_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
+                        if not experience_qs.exists():
+                            # 发放
+                            generate_success = CouponView.generate_coupon_by_user(user_id)
+                        else:
+                            # 体验过未购买过
+                            orders_qs = Order_Model.objects.filter(UID=uid, status=1, payType__in=[1, 4, 5])
+                            if not orders_qs.exists():
+                                # 发放
+                                generate_success = CouponView.generate_coupon_by_user(user_id)
+                            else:
+                                # 购买过且已过期
+                                # 没有未使用套餐,且过期时间在2024-12-29前
+                                vod_uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, has_unused=0, endTime__lte=end_time)
+                                if vod_uid_bucket_qs.exists():
+                                    # 发放
+                                    generate_success = CouponView.generate_coupon_by_user(user_id)
+        if generate_success:
+            redis_obj.set_data(distribute_key, '1', expire)
+        else:
+            redis_obj.set_data(distribute_key, '0', expire)
+    except Exception as e:
+        return