|
@@ -2,6 +2,7 @@ import json
|
|
|
import logging
|
|
|
import threading
|
|
|
import time
|
|
|
+from datetime import datetime
|
|
|
|
|
|
import requests
|
|
|
from django.db import transaction
|
|
@@ -13,7 +14,7 @@ from Ansjer.config import CRCKey, CONFIG_INFO, CONFIG_US, CONFIG_EUR, \
|
|
|
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, DeviceDomainRegionModel, RegionModel
|
|
|
+ AiService, DeviceDomainRegionModel, RegionModel, UidPushModel
|
|
|
from Object.AWS.S3Email import S3Email
|
|
|
from Object.RedisObject import RedisObject
|
|
|
from Object.TokenObject import TokenObject
|
|
@@ -59,12 +60,14 @@ class SerialNumberView(View):
|
|
|
return self.get_domain(request_dict, response)
|
|
|
elif operation == 'resetRegionId': # 重置地区id
|
|
|
return self.reset_region_id(request_dict, response)
|
|
|
- elif operation == 'get-status': # 重置地区id
|
|
|
+ elif operation == 'get-status': # 获取序列号绑定信息
|
|
|
return self.check_serial_status(request_dict, response)
|
|
|
elif operation == 'getUidRegion': # 根据序列号获取uid地区
|
|
|
return self.get_uid_region(request_dict, response)
|
|
|
elif operation == 'getGlobalUidRegion': # 获取序列号在全球服绑定uid的地区
|
|
|
return self.get_global_uid_region(request_dict, response)
|
|
|
+ elif operation == 'getIoTCoreBySerialNumber': # 根据序列号获取iot core
|
|
|
+ return self.get_iot_core_by_serial_number(request_dict, response)
|
|
|
else:
|
|
|
return response.json(414)
|
|
|
|
|
@@ -95,7 +98,7 @@ class SerialNumberView(View):
|
|
|
return response.json(0)
|
|
|
except Exception as e:
|
|
|
print(e)
|
|
|
- return response.json(500, repr(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
def do_attach_uid(self, request_dict, response, request):
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
@@ -339,17 +342,17 @@ class SerialNumberView(View):
|
|
|
warning_count = 2000
|
|
|
if unused_uid_count < warning_count:
|
|
|
# 限制一天提醒一次
|
|
|
- redis_obj.set_data('uid_count_warning_time_limit', 1, 60*60*24)
|
|
|
+ redis_obj.set_data('uid_count_warning_time_limit', 1, 60 * 60 * 24)
|
|
|
platform = '尚云' if p2p_type == 1 else 'tutk'
|
|
|
email_content = '{}服{}的uid数量少于{}个,请及时处理'.format(CONFIG_INFO, platform, warning_count)
|
|
|
S3Email().faEmail(email_content, 'servers@ansjer.com')
|
|
|
except Exception as e:
|
|
|
- LOGGER.info('发送提醒邮件异常: error_ine:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ LOGGER.info('发送提醒邮件异常: error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
@staticmethod
|
|
|
def log_and_send_email(request, company_serial_id, serial, now_time):
|
|
|
"""
|
|
|
- 记录序列号占用操作日志及发送邮件通知
|
|
|
+ 记录序列号占用操作日志及发送邮件通知,(美服、欧服已占用序列号将执行数据同步)
|
|
|
@param company_serial_id: 企业关联序列号 ID
|
|
|
@param request: 请求
|
|
|
@param serial: 序列号
|
|
@@ -357,18 +360,20 @@ class SerialNumberView(View):
|
|
|
"""
|
|
|
send_email = S3Email()
|
|
|
try:
|
|
|
- if CONFIG_INFO != 'us':
|
|
|
+ if CONFIG_INFO == 'cn' or CONFIG_INFO == 'test':
|
|
|
return {}
|
|
|
# 判断当前序列号是否绑定UID
|
|
|
uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial_id)
|
|
|
if uid_serial_qs.exists():
|
|
|
email_content = '{}序列号已占用当前数据库已绑定UID: {}'.format(CONFIG_INFO, 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)
|
|
|
+ if CONFIG_INFO == 'eur': # 查美服
|
|
|
+ response = requests.get("https://www.dvema.com/serialNumber/get-status",
|
|
|
+ params={'serial_number': serial}, timeout=3)
|
|
|
+ else: # 查国服
|
|
|
+ response = requests.get("https://www.zositechc.cn/serialNumber/get-status",
|
|
|
+ params={'serial_number': serial}, timeout=3)
|
|
|
ip = CommonService.get_ip_address(request)
|
|
|
operation = '{}序列号占用:{}'.format(CONFIG_INFO, serial)
|
|
|
log = {
|
|
@@ -380,18 +385,13 @@ class SerialNumberView(View):
|
|
|
'url': 'serialNumber/attachUID',
|
|
|
}
|
|
|
if not response.status_code == 200:
|
|
|
- operation += '国内UID数据异常响应状态:{}'.format(response.status_code)
|
|
|
+ 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'])
|
|
|
+ operation += '其它服绑定UID数据result_code: {}'.format(results['result_code'])
|
|
|
log['operation'] = operation
|
|
|
LogModel.objects.create(**log)
|
|
|
return {}
|
|
@@ -402,7 +402,6 @@ class SerialNumberView(View):
|
|
|
# 邮件通知
|
|
|
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)
|
|
@@ -412,16 +411,15 @@ class SerialNumberView(View):
|
|
|
# 成功后 修改企业序列号状态为2(已分配)
|
|
|
CompanySerialModel.objects.filter(id=company_serial_id) \
|
|
|
.update(status=2, update_time=now_time)
|
|
|
- email_content = '{}序列号已占用已将国内UID数据同步完成: {}'.format(CONFIG_INFO, serial)
|
|
|
+ SerialNumberView.sync_iot_core_data(serial)
|
|
|
+ email_content = '{}序列号已占用已将其它服UID数据同步完成: {}'.format(CONFIG_INFO, 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)
|
|
|
+ email_content = '{}序列号已占用其它服没有绑定UID: {}'.format(CONFIG_INFO, 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:{}' \
|
|
@@ -501,6 +499,7 @@ class SerialNumberView(View):
|
|
|
Device_Info.objects.filter(UID=uid).delete()
|
|
|
UidSetModel.objects.filter(uid=uid).delete()
|
|
|
UidUserModel.objects.filter(UID=uid).delete()
|
|
|
+ UidPushModel.objects.filter(uid_set__uid=uid).delete()
|
|
|
iotdeviceInfoModel.objects.filter(serial_number=serial).delete()
|
|
|
# 删除推送消息
|
|
|
for val in range(1, 8):
|
|
@@ -708,7 +707,7 @@ class SerialNumberView(View):
|
|
|
device_domain_region_qs.update(**data)
|
|
|
return response.json(0)
|
|
|
except Exception as e:
|
|
|
- return response.json(500, repr(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
@staticmethod
|
|
|
def get_domain(request_dict, response):
|
|
@@ -725,7 +724,7 @@ class SerialNumberView(View):
|
|
|
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)
|
|
|
+ return response.json(444)
|
|
|
# 时间戳token校验
|
|
|
if not CommonService.check_time_stamp_token(time_stamp_token, time_stamp):
|
|
|
return response.json(13)
|
|
@@ -747,7 +746,7 @@ class SerialNumberView(View):
|
|
|
}
|
|
|
return response.json(0, res)
|
|
|
except Exception as e:
|
|
|
- return response.json(500, repr(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
@staticmethod
|
|
|
def reset_region_id(request_dict, response):
|
|
@@ -766,7 +765,7 @@ class SerialNumberView(View):
|
|
|
DeviceDomainRegionModel.objects.filter(serial_number=serial_number).update(region_id=0)
|
|
|
return response.json(0)
|
|
|
except Exception as e:
|
|
|
- return response.json(500, repr(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
@staticmethod
|
|
|
def get_uid_region(request_dict, response):
|
|
@@ -789,7 +788,7 @@ class SerialNumberView(View):
|
|
|
res.append({'uid': item['uid__uid']})
|
|
|
return response.json(0, res)
|
|
|
except Exception as e:
|
|
|
- return response.json(500, repr(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
@staticmethod
|
|
|
def get_global_uid_region(request_dict, response):
|
|
@@ -825,4 +824,63 @@ class SerialNumberView(View):
|
|
|
uid_list.append(item)
|
|
|
return response.json(0, uid_list)
|
|
|
except Exception as e:
|
|
|
- return response.json(500, repr(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_iot_core_by_serial_number(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 根据序列号查询iot core
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ serial_number = request_dict.get('serialNumber', None)
|
|
|
+ if not serial_number:
|
|
|
+ return response.json(444)
|
|
|
+ serial = serial_number[0:6]
|
|
|
+ LOGGER.info('根据序列号查询IoTC:{}'.format(serial_number))
|
|
|
+ device_iot_qs = iotdeviceInfoModel.objects.filter(serial_number=serial)
|
|
|
+ if not device_iot_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ iot_vo = device_iot_qs.first()
|
|
|
+ iot_dto = {
|
|
|
+ 'serial_number': iot_vo.serial_number,
|
|
|
+ 'uid': iot_vo.uid,
|
|
|
+ 'certificate_id': iot_vo.certificate_id,
|
|
|
+ 'certificate_pem': iot_vo.certificate_pem,
|
|
|
+ 'public_key': iot_vo.public_key,
|
|
|
+ 'private_key': iot_vo.private_key,
|
|
|
+ 'thing_name': iot_vo.thing_name,
|
|
|
+ 'thing_groups': iot_vo.thing_groups,
|
|
|
+ 'endpoint': iot_vo.endpoint,
|
|
|
+ 'token_iot_number': iot_vo.token_iot_number,
|
|
|
+ 'add_time': iot_vo.add_time.strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
+ 'update_time': iot_vo.update_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
+ }
|
|
|
+ return response.json(0, {'iotInfo': iot_dto})
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('查询序列号异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(176, str(e))
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def sync_iot_core_data(serial_number):
|
|
|
+ """
|
|
|
+ 同步iot core 数据,目前只同步美服到欧服
|
|
|
+ @param serial_number: 序列号
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ if not CONFIG_INFO == 'eur':
|
|
|
+ return False
|
|
|
+ response = requests.get("https://www.dvema.com/serialNumber/getIoTCoreBySerialNumber",
|
|
|
+ params={'serialNumber': serial_number}, timeout=3)
|
|
|
+ if response.status_code != 200:
|
|
|
+ return False
|
|
|
+ results = json.loads(response.text)
|
|
|
+ if results['result_code'] != 0:
|
|
|
+ return False
|
|
|
+ iot_vo = results['result']['iotInfo']
|
|
|
+ iot_vo['add_time'] = datetime.strptime(iot_vo['add_time'], "%Y-%m-%d %H:%M:%S")
|
|
|
+ iot_vo['update_time'] = datetime.strptime(iot_vo['update_time'], "%Y-%m-%d %H:%M:%S")
|
|
|
+ iotdeviceInfoModel.objects.create(**iot_vo)
|
|
|
+ return True
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('{}同步iot异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return False
|