|  | @@ -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):
 |