|
@@ -1,5 +1,3 @@
|
|
|
-#!/usr/bin/env python3
|
|
|
-# -*- coding: utf-8 -*-
|
|
|
import json
|
|
|
import logging
|
|
|
import time
|
|
@@ -8,12 +6,12 @@ import requests
|
|
|
from django.db import transaction
|
|
|
from django.views import View
|
|
|
|
|
|
-from Ansjer.config import CRCKey, SERVER_DOMAIN_US, SERVER_DOMAIN_CN, CONFIG_INFO, CONFIG_TEST, CONFIG_US, \
|
|
|
- CONFIG_CN, USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST
|
|
|
+from Ansjer.config import CRCKey, CONFIG_INFO, CONFIG_TEST, CONFIG_US, \
|
|
|
+ CONFIG_CN, USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, SERVER_DOMAIN_US
|
|
|
from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
|
|
|
iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
|
|
|
Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
|
|
|
- AiService
|
|
|
+ AiService, DeviceDomainRegionModel, RegionModel
|
|
|
from Object.RedisObject import RedisObject
|
|
|
from Object.TokenObject import TokenObject
|
|
|
from Object.uidManageResponseObject import uidManageResponseObject
|
|
@@ -37,35 +35,27 @@ class SerialNumberView(View):
|
|
|
return self.validate(request_dict, operation, request)
|
|
|
|
|
|
def validate(self, request_dict, operation, request):
|
|
|
- token = TokenObject(request_dict.get('token', None))
|
|
|
response = uidManageResponseObject()
|
|
|
|
|
|
- if operation == 'getUID':
|
|
|
- return self.do_get_uid(request_dict, response)
|
|
|
- elif operation == 'attachUID': # 绑定uid
|
|
|
+ if operation == 'attachUID': # 绑定uid
|
|
|
return self.do_attach_uid(request_dict, response, request)
|
|
|
elif operation == 'detachUID': # 解绑uid
|
|
|
return self.do_detach_uid(request, request_dict, response)
|
|
|
- elif operation == 'create':
|
|
|
+ elif operation == 'create': # 创建序列号
|
|
|
return self.do_create(request_dict, response)
|
|
|
- elif operation == 'changeSerialNumberStatus':
|
|
|
- return self.changeSerialNumberStatus(request_dict, response)
|
|
|
- elif operation == 'getRegionInfo':
|
|
|
+ elif operation == 'getUID': # 根据序列号获取uid
|
|
|
+ return self.do_get_uid(request_dict, response)
|
|
|
+ elif operation == 'getRegionInfo': # 根据序列号状态确认uid地区(PC工具使用)
|
|
|
return self.get_region_info(request_dict, response)
|
|
|
+ elif operation == 'saveRegion': # 保存设备地区信息(app使用)
|
|
|
+ return self.save_region(request, request_dict, response)
|
|
|
+ elif operation == 'getDomain': # 获取域名(设备使用)
|
|
|
+ return self.get_domain(request_dict, response)
|
|
|
else:
|
|
|
- if token.code != 0:
|
|
|
- return response.json(token.code)
|
|
|
-
|
|
|
- # if operation == 'create':
|
|
|
- # return self.do_create(request_dict, response)
|
|
|
- elif operation == 'list':
|
|
|
- return self.do_list(token.userID, request_dict, response)
|
|
|
- elif operation == 'update':
|
|
|
- return self.do_update(token.userID, request_dict, response)
|
|
|
- else:
|
|
|
- return response.json(404)
|
|
|
+ return response.json(414)
|
|
|
|
|
|
- def do_create(self, request_dict, response):
|
|
|
+ @staticmethod
|
|
|
+ def do_create(request_dict, response):
|
|
|
quantity = int(request_dict.get('quantity', 0))
|
|
|
|
|
|
if not quantity:
|
|
@@ -73,15 +63,15 @@ class SerialNumberView(View):
|
|
|
|
|
|
try:
|
|
|
try:
|
|
|
- sum = SerialNumberModel.objects.last().id
|
|
|
+ number = SerialNumberModel.objects.last().id
|
|
|
except:
|
|
|
- sum = 0
|
|
|
+ number = 0
|
|
|
serial_number_bulk = []
|
|
|
now_time = int(time.time())
|
|
|
algorithm = AlgorithmBaseOn35()
|
|
|
for i in range(quantity):
|
|
|
- serial_number = algorithm.getLetter(sum)
|
|
|
- sum += 1 # sum每次递增1
|
|
|
+ serial_number = algorithm.getLetter(number)
|
|
|
+ number += 1 # sum每次递增1
|
|
|
# 前面补0至六位
|
|
|
serial_number = (6 - len(serial_number)) * '0' + serial_number
|
|
|
serial_number_bulk.append(SerialNumberModel(serial_number=serial_number, add_time=now_time))
|
|
@@ -93,43 +83,6 @@ class SerialNumberView(View):
|
|
|
print(e)
|
|
|
return response.json(500, repr(e))
|
|
|
|
|
|
- def do_list(self, userID, request_dict, response):
|
|
|
- # perm = ModelService.check_perm_uid_manage(userID, 0)
|
|
|
- # if not perm:
|
|
|
- # return response.json(309)
|
|
|
-
|
|
|
- page = request_dict.get('page', None)
|
|
|
- line = request_dict.get('limit', None)
|
|
|
- serial_number = request_dict.get('serial_number', None)
|
|
|
- status = request_dict.get('status', None)
|
|
|
-
|
|
|
- if page and line:
|
|
|
- page = int(page)
|
|
|
- line = int(line)
|
|
|
-
|
|
|
- serial_qs = SerialNumberModel.objects.filter().order_by('-id')
|
|
|
-
|
|
|
- if serial_number:
|
|
|
- serial_qs = serial_qs.filter(serial_number__contains=serial_number)
|
|
|
-
|
|
|
- if status:
|
|
|
- serial_qs = serial_qs.filter(status=status)
|
|
|
-
|
|
|
- count = serial_qs.count()
|
|
|
-
|
|
|
- start = (page - 1) * line
|
|
|
- end = start + line
|
|
|
-
|
|
|
- serial_qs = serial_qs[start: end].values()
|
|
|
- res = {
|
|
|
- 'count': count,
|
|
|
- 'data': list(serial_qs)
|
|
|
- }
|
|
|
-
|
|
|
- return response.json(0, res)
|
|
|
- else:
|
|
|
- return response.json(444)
|
|
|
-
|
|
|
def do_attach_uid(self, request_dict, response, request):
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
|
token = request_dict.get('token', None)
|
|
@@ -378,69 +331,13 @@ class SerialNumberView(View):
|
|
|
djangoLogger.exception(repr(e))
|
|
|
return response.json(176, str(e))
|
|
|
|
|
|
- @staticmethod
|
|
|
- def update_serial_status(serial, status):
|
|
|
- if CONFIG_INFO == CONFIG_TEST: # 测试服不处理
|
|
|
- return True
|
|
|
- server_domain = SERVER_DOMAIN_CN
|
|
|
- if CONFIG_INFO == CONFIG_US:
|
|
|
- server_domain = SERVER_DOMAIN_CN
|
|
|
- elif CONFIG_INFO == CONFIG_CN:
|
|
|
- server_domain = SERVER_DOMAIN_US
|
|
|
- url = server_domain + 'serialNumber/changeSerialNumberStatus'
|
|
|
- data = {'serial': serial, 'status': status}
|
|
|
- req_res = requests.post(url=url, data=data, timeout=2)
|
|
|
- if req_res.status_code != 200:
|
|
|
- return False
|
|
|
- req_res = req_res.json()
|
|
|
- if req_res['result_code'] != 0:
|
|
|
- return False
|
|
|
- return True
|
|
|
-
|
|
|
- def do_update(self, userID, request_dict, response):
|
|
|
- # perm = ModelService.check_perm_uid_manage(userID, 0)
|
|
|
- # if not perm:
|
|
|
- # return response.json(309)
|
|
|
-
|
|
|
- id = request_dict.get('id', None)
|
|
|
- status = request_dict.get('status', None)
|
|
|
-
|
|
|
- if id and status:
|
|
|
- serial_number_qs = SerialNumberModel.objects.filter(id=id)
|
|
|
- if serial_number_qs.exists():
|
|
|
- serial_number_qs.update(**{'status': status})
|
|
|
- return response.json(0)
|
|
|
- else:
|
|
|
- return response.json(173)
|
|
|
- else:
|
|
|
- return response.json(444)
|
|
|
-
|
|
|
- # 序列号绑定和解绑uid时修改其他数据库序列号的使用状态
|
|
|
- def changeSerialNumberStatus(self, request_dict, response):
|
|
|
- serial = request_dict.get('serial', None)
|
|
|
- status = request_dict.get('status', None)
|
|
|
- if not all([serial, status]):
|
|
|
- return response(444)
|
|
|
-
|
|
|
- try:
|
|
|
- # 更新CompanySerialModel表的序列号使用状态
|
|
|
- update = CompanySerialModel.objects.filter(serial_number=serial).update(status=int(status))
|
|
|
- if update:
|
|
|
- return response.json(0)
|
|
|
- else:
|
|
|
- return response.json(378)
|
|
|
- except Exception as e:
|
|
|
- djangoLogger = logging.getLogger('django')
|
|
|
- djangoLogger.exception(repr(e))
|
|
|
- return response.json(500, str(e))
|
|
|
-
|
|
|
@staticmethod
|
|
|
def get_region_info(request_dict, response):
|
|
|
"""
|
|
|
根据序列号状态确认uid地区
|
|
|
@param request_dict: 请求参数
|
|
|
@param response: 响应对象
|
|
|
- @request_dict endTime: 结束时间
|
|
|
+ @request_dict serial_number: 序列号
|
|
|
@return: response
|
|
|
"""
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
@@ -461,3 +358,104 @@ class SerialNumberView(View):
|
|
|
elif CONFIG_INFO == CONFIG_US:
|
|
|
return response.json(0, {'region': 1})
|
|
|
return response.json(0)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def save_region(request, request_dict, response):
|
|
|
+ """
|
|
|
+ 保存设备地区信息
|
|
|
+ @param request: 请求体
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @param response: 响应对象
|
|
|
+ @request_dict token: 令牌
|
|
|
+ @request_dict time_stamp: 时间戳
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ serial_number = request_dict.get('serial_number', None)
|
|
|
+ if not all([serial_number, token]):
|
|
|
+ return response(444)
|
|
|
+
|
|
|
+ try:
|
|
|
+ token_obj = TokenObject(token)
|
|
|
+ if token_obj.code != 0:
|
|
|
+ return response.json(token_obj.code)
|
|
|
+ response.lang = token_obj.lang
|
|
|
+
|
|
|
+ serial_number = serial_number[:9]
|
|
|
+
|
|
|
+ # 不是美洲服,请求美洲域名保存数据
|
|
|
+ if CONFIG_INFO != CONFIG_US:
|
|
|
+ url = SERVER_DOMAIN_US + 'serialNumber/saveRegion'
|
|
|
+ data = request_dict.dict()
|
|
|
+ data['ip'] = CommonService.get_ip_address(request)
|
|
|
+ data['region_id'] = CommonService.confirm_region_id()
|
|
|
+ try:
|
|
|
+ r = requests.post(url=url, data=data, timeout=3)
|
|
|
+ assert r.status_code == 200
|
|
|
+ res = r.json()
|
|
|
+ assert res['result_code'] == 0
|
|
|
+ except (TimeoutError, AssertionError):
|
|
|
+ return response.json(5)
|
|
|
+ else:
|
|
|
+ data = {}
|
|
|
+
|
|
|
+ # 处理其他服务器发起请求的情况
|
|
|
+ region_id = request_dict.get('region_id', None)
|
|
|
+ if region_id is not None:
|
|
|
+ region_id = int(region_id)
|
|
|
+ data['region_id'] = region_id
|
|
|
+ data['ip'] = request_dict.get('ip', '')
|
|
|
+ else:
|
|
|
+ region_id = CommonService.confirm_region_id()
|
|
|
+ data['region_id'] = region_id
|
|
|
+ data['ip'] = CommonService.get_ip_address(request)
|
|
|
+
|
|
|
+ # 写入数据
|
|
|
+ device_domain_region_qs = DeviceDomainRegionModel.objects.filter(serial_number=serial_number).\
|
|
|
+ values('region_id')
|
|
|
+ if not device_domain_region_qs.exists():
|
|
|
+ data['serial_number'] = serial_number
|
|
|
+ DeviceDomainRegionModel.objects.create(**data)
|
|
|
+ else:
|
|
|
+ # 设备解绑过uid,更新region_id
|
|
|
+ if device_domain_region_qs[0]['region_id'] == 0:
|
|
|
+ device_domain_region_qs.update(**data)
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def get_domain(request_dict, response):
|
|
|
+ """
|
|
|
+ 获取域名
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @param response: 响应对象
|
|
|
+ @request_dict serial_number: 序列号
|
|
|
+ @request_dict time_stamp_token: 时间戳token
|
|
|
+ @request_dict time_stamp: 时间戳
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ serial_number = request_dict.get('serial_number', None)
|
|
|
+ time_stamp_token = request_dict.get('time_stamp_token', None)
|
|
|
+ time_stamp = request_dict.get('time_stamp', None)
|
|
|
+ if not all([serial_number, time_stamp_token, time_stamp]):
|
|
|
+ return response(444)
|
|
|
+ # 时间戳token校验
|
|
|
+ if not CommonService.check_time_stamp_token(time_stamp_token, time_stamp):
|
|
|
+ return response.json(13)
|
|
|
+
|
|
|
+ try:
|
|
|
+ serial_number = serial_number[:9]
|
|
|
+
|
|
|
+ device_domain_region_qs = DeviceDomainRegionModel.objects.filter(serial_number=serial_number).values(
|
|
|
+ 'region_id')
|
|
|
+ if not device_domain_region_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ region_id = device_domain_region_qs[0]['region_id']
|
|
|
+ region_qs = RegionModel.objects.filter(id=region_id).values('api')
|
|
|
+ res = {
|
|
|
+ 'api': region_qs[0]['api']
|
|
|
+ }
|
|
|
+ return response.json(0, res)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, repr(e))
|