|
@@ -8,18 +8,22 @@
|
|
|
# @File : CronTaskController.py
|
|
|
# @Software: PyCharm
|
|
|
import datetime
|
|
|
+import threading
|
|
|
import time
|
|
|
|
|
|
+import requests
|
|
|
from django.db import connection, connections, transaction
|
|
|
from django.db.models import Q, Sum, Count
|
|
|
from django.views import View
|
|
|
|
|
|
from Model.models import Device_User, Device_Info, UidSetModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
|
|
|
VodHlsModel, ExperienceContextModel, AiService, VodHlsSummary, VideoPlaybackTimeModel, DeviceUserSummary, \
|
|
|
- CountryModel, DeviceTypeModel, Lang, UnicomCombo, OrdersSummary, DeviceInfoSummary
|
|
|
+ CountryModel, DeviceTypeModel, Lang, UnicomCombo, OrdersSummary, DeviceInfoSummary, CompanySerialModel
|
|
|
+from Object.RedisObject import RedisObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Object.utils import LocalDateTimeUtil
|
|
|
from Service.CommonService import CommonService
|
|
|
+from Ansjer.config import USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST
|
|
|
|
|
|
|
|
|
class CronDelDataView(View):
|
|
@@ -203,6 +207,10 @@ class CronUpdateDataView(View):
|
|
|
return self.updateUnusedUidBucket(response)
|
|
|
elif operation == 'updateUnusedAiService': # 定时更新过期ai关联的未使用套餐状态
|
|
|
return self.updateUnusedAiService(response)
|
|
|
+ elif operation == 'reqUpdateSerialStatus': # 定时请求更新序列号状态
|
|
|
+ return self.reqUpdateSerialStatus(response)
|
|
|
+ elif operation == 'updateSerialStatus': # 更新序列号状态
|
|
|
+ return self.updateSerialStatus(request_dict, response)
|
|
|
else:
|
|
|
return response.json(404)
|
|
|
|
|
@@ -291,6 +299,52 @@ class CronUpdateDataView(View):
|
|
|
continue
|
|
|
return response.json(0)
|
|
|
|
|
|
+ @classmethod
|
|
|
+ def reqUpdateSerialStatus(cls, response):
|
|
|
+ redis_obj = RedisObject()
|
|
|
+ # 更新已使用序列号其他服务器的状态
|
|
|
+ used_serial_redis_list_len = redis_obj.llen(USED_SERIAL_REDIS_LIST)
|
|
|
+ if used_serial_redis_list_len > 0:
|
|
|
+ used_serial_redis_list = []
|
|
|
+ for i in range(used_serial_redis_list_len):
|
|
|
+ used_serial_redis_list.append(redis_obj.lpop(USED_SERIAL_REDIS_LIST))
|
|
|
+ request_thread = threading.Thread(target=cls.do_request_thread, args=(used_serial_redis_list, 3))
|
|
|
+ request_thread.start()
|
|
|
+ # 更新未使用序列号其他服务器的状态
|
|
|
+ unused_serial_redis_list_len = redis_obj.llen(UNUSED_SERIAL_REDIS_LIST)
|
|
|
+ if unused_serial_redis_list_len > 0:
|
|
|
+ unused_serial_redis_list = []
|
|
|
+ for i in range(unused_serial_redis_list_len):
|
|
|
+ unused_serial_redis_list.append(redis_obj.lpop(UNUSED_SERIAL_REDIS_LIST))
|
|
|
+ request_thread = threading.Thread(target=cls.do_request_thread, args=(used_serial_redis_list, 1))
|
|
|
+ request_thread.start()
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def do_request_thread(serial_redis_list, status):
|
|
|
+ """
|
|
|
+ 请求更新序列号线程
|
|
|
+ @param serial_redis_list: 序列号redis列表
|
|
|
+ @param status: 状态, 1: 未使用, 3: 已占用
|
|
|
+ """
|
|
|
+ data = {
|
|
|
+ 'serial_redis_list': serial_redis_list,
|
|
|
+ 'status': status
|
|
|
+ }
|
|
|
+ # 确认域名列表
|
|
|
+ orders_domain_name_list = CommonService.get_orders_domain_name_list()
|
|
|
+ for domain_name in orders_domain_name_list:
|
|
|
+ url = '{}cron/update/updateSerialStatus'.format(domain_name)
|
|
|
+ requests.post(url=url, data=data, timeout=2)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def updateSerialStatus(request_dict, response):
|
|
|
+ serial_redis_list = request_dict.get('serial_redis_list', None)
|
|
|
+ status = request_dict.get('status', None)
|
|
|
+ if not all([serial_redis_list, status]):
|
|
|
+ return response.json(444)
|
|
|
+ serial_redis_list = eval(serial_redis_list)
|
|
|
+ CompanySerialModel.objects.filter(serial_number__in=serial_redis_list).update(status=int(status))
|
|
|
|
|
|
class CronCollectDataView(View):
|
|
|
def get(self, request, *args, **kwargs):
|