|
@@ -94,15 +94,15 @@ class SerialNumberView(View):
|
|
|
|
|
|
def do_attach_uid(self, request_dict, response, request):
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
|
- token = request_dict.get('token', None)
|
|
|
- time_stamp = request_dict.get('time_stamp', None)
|
|
|
-
|
|
|
- if not all([serial_number, token, time_stamp]):
|
|
|
- return response.json(444)
|
|
|
-
|
|
|
- # 时间戳token校验
|
|
|
- if not CommonService.check_time_stamp_token(token, time_stamp):
|
|
|
- return response.json(13)
|
|
|
+ # token = request_dict.get('token', None)
|
|
|
+ # time_stamp = request_dict.get('time_stamp', None)
|
|
|
+ #
|
|
|
+ # if not all([serial_number, token, time_stamp]):
|
|
|
+ # return response.json(444)
|
|
|
+ #
|
|
|
+ # # 时间戳token校验
|
|
|
+ # if not CommonService.check_time_stamp_token(token, time_stamp):
|
|
|
+ # return response.json(13)
|
|
|
|
|
|
now_time = int(time.time())
|
|
|
serial = serial_number[0:6]
|
|
@@ -218,31 +218,41 @@ class SerialNumberView(View):
|
|
|
return response.json(0, res)
|
|
|
return response.json(5)
|
|
|
elif company_serial.status == 2: # 返回uid
|
|
|
- uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial.id)
|
|
|
- if not uid_qs.exists():
|
|
|
- return response.json(173)
|
|
|
- uid = uid_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__full_uid_code',
|
|
|
- 'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
|
|
|
- full_uid_code = uid['uid__full_uid_code']
|
|
|
- if uid['uid__platform'] in CRCKey.keys():
|
|
|
- full_uid_code += ':' + CRCKey[uid['uid__platform']]
|
|
|
- res = {
|
|
|
- 'full_uid_code': CommonService.encode_data(full_uid_code),
|
|
|
- 'uid': CommonService.encode_data(uid['uid__uid']),
|
|
|
- 'extra': uid['uid__uid_extra'],
|
|
|
- 'platform': uid['uid__platform'],
|
|
|
- 'initString': uid['uid__init_string'],
|
|
|
- 'initStringApp': uid['uid__init_string_app'],
|
|
|
- }
|
|
|
+ res = self.get_uid_info_by_serial(company_serial.id)
|
|
|
return response.json(0, res)
|
|
|
elif company_serial.status == 3: # 已占用
|
|
|
- self.log_and_send_email(request, serial, now_time)
|
|
|
- return response.json(10042)
|
|
|
+ res = self.log_and_send_email(request, company_serial.id, serial_number, now_time)
|
|
|
+ if not res:
|
|
|
+ return response.json(10042)
|
|
|
+ return response.json(0, self.get_uid_info_by_serial(company_serial.id))
|
|
|
except Exception as e:
|
|
|
djangoLogger = logging.getLogger('django')
|
|
|
djangoLogger.exception(repr(e))
|
|
|
return response.json(176, str(e))
|
|
|
|
|
|
+ @classmethod
|
|
|
+ def get_uid_info_by_serial(cls, company_serial_id):
|
|
|
+ """
|
|
|
+ 根据企业关联序列号ID返回UID信息
|
|
|
+ """
|
|
|
+ uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id)
|
|
|
+ if not uid_qs.exists():
|
|
|
+ return {}
|
|
|
+ uid = uid_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__full_uid_code',
|
|
|
+ 'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
|
|
|
+ full_uid_code = uid['uid__full_uid_code']
|
|
|
+ if uid['uid__platform'] in CRCKey.keys():
|
|
|
+ full_uid_code += ':' + CRCKey[uid['uid__platform']]
|
|
|
+ res = {
|
|
|
+ 'full_uid_code': CommonService.encode_data(full_uid_code),
|
|
|
+ 'uid': CommonService.encode_data(uid['uid__uid']),
|
|
|
+ 'extra': uid['uid__uid_extra'],
|
|
|
+ 'platform': uid['uid__platform'],
|
|
|
+ 'initString': uid['uid__init_string'],
|
|
|
+ 'initStringApp': uid['uid__init_string_app'],
|
|
|
+ }
|
|
|
+ return res
|
|
|
+
|
|
|
@classmethod
|
|
|
def check_serial_status(cls, request_dict, response):
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
@@ -281,7 +291,7 @@ class SerialNumberView(View):
|
|
|
uid_info['p2p_type'] = uid_company_qs[0]['uid__p2p_type']
|
|
|
uid_info['full_uid_code'] = uid_company_qs[0]['uid__full_uid_code']
|
|
|
uid_info['platform'] = uid_company_qs[0]['uid__platform']
|
|
|
- uid_info['uid_init_string'] = uid_company_qs[0]['uid__init_string']
|
|
|
+ uid_info['init_string'] = uid_company_qs[0]['uid__init_string']
|
|
|
uid_info['init_string_app'] = uid_company_qs[0]['uid__init_string_app']
|
|
|
results = {'serial': company_serial.serial_number, 'status': company_serial.status,
|
|
|
'uidInfo': uid_info}
|
|
@@ -290,7 +300,6 @@ class SerialNumberView(View):
|
|
|
LOGGER.info('查询序列号异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
return response.json(176, str(e))
|
|
|
|
|
|
-
|
|
|
@staticmethod
|
|
|
def rpush_serial_and_count_uid(serial, p2p_type, redis_obj):
|
|
|
"""
|
|
@@ -320,35 +329,88 @@ class SerialNumberView(View):
|
|
|
S3Email().faEmail(email_content, 'servers@ansjer.com')
|
|
|
|
|
|
@staticmethod
|
|
|
- def log_and_send_email(request, serial, now_time):
|
|
|
+ def log_and_send_email(request, company_serial_id, serial, now_time):
|
|
|
"""
|
|
|
- 记录占用操作日志及发送邮件通知
|
|
|
- @param request:
|
|
|
- @param serial:
|
|
|
- @param now_time:
|
|
|
- @return:
|
|
|
+ 记录序列号占用操作日志及发送邮件通知
|
|
|
+ @param company_serial_id: 企业关联序列号 ID
|
|
|
+ @param request: 请求
|
|
|
+ @param serial: 序列号
|
|
|
+ @param now_time: 当前时间
|
|
|
"""
|
|
|
- if CONFIG_INFO == CONFIG_US:
|
|
|
- # 不为国内ip记录日志
|
|
|
+ send_email = S3Email()
|
|
|
+ try:
|
|
|
+ if CONFIG_INFO == 'cn':
|
|
|
+ return {}
|
|
|
+ # 判断当前序列号是否绑定UID
|
|
|
+ uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id)
|
|
|
+ if uid_serial_qs.exists():
|
|
|
+ email_content = '序列号已占用当前数据库已绑定UID: {}'.format(serial)
|
|
|
+ send_email.faEmail(email_content, 'servers@ansjer.com')
|
|
|
+ send_email.faEmail(email_content, 'antony@ansjer.com')
|
|
|
+ return {}
|
|
|
+ # 请求国内服获取UID数据
|
|
|
+ response = requests.post("https://www.zositechc.cn/serialNumber/get-status",
|
|
|
+ data={'serial_number': serial}, timeout=3)
|
|
|
ip = CommonService.get_ip_address(request)
|
|
|
- ip_info = CommonService.getIpIpInfo(ip, 'CN')
|
|
|
- country_code = ip_info['country_code']
|
|
|
- if country_code != 'CN':
|
|
|
- operation = '序列号占用:{}'.format(serial)
|
|
|
- log_qs = LogModel.objects.filter(operation=operation)
|
|
|
- if not log_qs.exists():
|
|
|
- log = {
|
|
|
- 'ip': ip,
|
|
|
- 'user_id': 1,
|
|
|
- 'status': 200,
|
|
|
- 'time': now_time,
|
|
|
- 'operation': operation,
|
|
|
- 'url': 'serialNumber/attachUID',
|
|
|
- }
|
|
|
- LogModel.objects.create(**log)
|
|
|
+ operation = '序列号占用:{}'.format(serial)
|
|
|
+ log = {
|
|
|
+ 'ip': ip,
|
|
|
+ 'user_id': 1,
|
|
|
+ 'status': 200,
|
|
|
+ 'time': now_time,
|
|
|
+ 'operation': operation,
|
|
|
+ 'url': 'serialNumber/attachUID',
|
|
|
+ }
|
|
|
+ if not response.status_code == 200:
|
|
|
+ operation += '国内UID数据异常响应状态:{}'.format(response.status_code)
|
|
|
+ log['operation'] = operation
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ return {}
|
|
|
+ results = json.loads(response.text)
|
|
|
+ if not results:
|
|
|
+ operation += '查询UID数据解析为空'
|
|
|
+ log['operation'] = operation
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ return {}
|
|
|
+ if not results['result_code'] == 0:
|
|
|
+ operation += '国内绑定UID数据result_code: {}'.format(results['result_code'])
|
|
|
+ log['operation'] = operation
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ return {}
|
|
|
+ # 解析从国内获取的UID数据
|
|
|
+ uid_info = results['result']['uidInfo']
|
|
|
+ if uid_info:
|
|
|
+ if uid_info['p2p_type'] == 1: # 尚云UID不进行同步只进行 邮寄警报
|
|
|
# 邮件通知
|
|
|
- email_content = '国外服发现序列号占用操作: {]'.format(serial)
|
|
|
- S3Email().faEmail(email_content, 'servers@ansjer.com')
|
|
|
+ email_content = '国内uid同步国外服类型为尚云不操作: {}'.format(serial)
|
|
|
+ send_email.faEmail(email_content, 'servers@ansjer.com')
|
|
|
+ send_email.faEmail(email_content, 'antony@ansjer.com')
|
|
|
+ else:
|
|
|
+ # 同步UID数据
|
|
|
+ uid_vo = UIDModel.objects.create(**uid_info)
|
|
|
+ # 企业序列号关联 uid
|
|
|
+ UIDCompanySerialModel.objects.create(uid_id=uid_vo.id, company_serial_id=company_serial_id,
|
|
|
+ add_time=now_time, update_time=now_time)
|
|
|
+ # 成功后 修改企业序列号状态为2(已分配)
|
|
|
+ CompanySerialModel.objects.filter(id=company_serial_id) \
|
|
|
+ .update(status=2, update_time=now_time)
|
|
|
+ email_content = '序列号已占用已将国内UID数据同步完成: {}'.format(serial)
|
|
|
+ send_email.faEmail(email_content, 'servers@ansjer.com')
|
|
|
+ send_email.faEmail(email_content, 'antony@ansjer.com')
|
|
|
+ operation += '同步成功'
|
|
|
+ log['operation'] = operation
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ return 'success'
|
|
|
+ email_content = '序列号已占用国内没有绑定UID: {}'.format(serial)
|
|
|
+ send_email.faEmail(email_content, 'servers@ansjer.com')
|
|
|
+ send_email.faEmail(email_content, 'antony@ansjer.com')
|
|
|
+ return {}
|
|
|
+ except Exception as e:
|
|
|
+ email_content = '序列号占用同步数据异常: {},errLine:{}, errMsg:{}' \
|
|
|
+ .format(serial, e.__traceback__.tb_lineno, repr(e))
|
|
|
+ send_email.faEmail(email_content, 'servers@ansjer.com')
|
|
|
+ send_email.faEmail(email_content, 'antony@ansjer.com')
|
|
|
+ return {}
|
|
|
|
|
|
def do_get_uid(self, request_dict, response):
|
|
|
serial_number = request_dict.get('serial_number', None)
|