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