|
@@ -1,5 +1,6 @@
|
|
#!/usr/bin/env python3
|
|
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
# -*- coding: utf-8 -*-
|
|
|
|
+import json
|
|
import logging
|
|
import logging
|
|
import random
|
|
import random
|
|
import time
|
|
import time
|
|
@@ -7,15 +8,18 @@ import time
|
|
from django.db import transaction
|
|
from django.db import transaction
|
|
from django.views import View
|
|
from django.views import View
|
|
|
|
|
|
|
|
+from Controller.DetectController import DetectControllerView
|
|
from Controller.DeviceConfirmRegion import Device_Region
|
|
from Controller.DeviceConfirmRegion import Device_Region
|
|
from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, CompanyModel, RegionModel, \
|
|
from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, CompanyModel, RegionModel, \
|
|
- CountryModel, UIDModel, Device_Info, iotdeviceInfoModel
|
|
|
|
|
|
+ CountryModel, UIDModel, Device_Info, iotdeviceInfoModel, UidPushModel, LogModel, MacModel
|
|
from Object.RedisObject import RedisObject
|
|
from Object.RedisObject import RedisObject
|
|
from Object.uidManageResponseObject import uidManageResponseObject
|
|
from Object.uidManageResponseObject import uidManageResponseObject
|
|
from Object.TokenObject import TokenObject
|
|
from Object.TokenObject import TokenObject
|
|
from Service.AlgorithmService import AlgorithmBaseOn35
|
|
from Service.AlgorithmService import AlgorithmBaseOn35
|
|
from Service.CommonService import CommonService
|
|
from Service.CommonService import CommonService
|
|
|
|
+from Ansjer.config import CRCKey
|
|
from Service.ModelService import ModelService
|
|
from Service.ModelService import ModelService
|
|
|
|
+from Object.AWS.S3Email import S3Email
|
|
|
|
|
|
|
|
|
|
class SerialNumberView(View):
|
|
class SerialNumberView(View):
|
|
@@ -38,12 +42,10 @@ class SerialNumberView(View):
|
|
|
|
|
|
if operation == 'getUID':
|
|
if operation == 'getUID':
|
|
return self.do_get_uid(request_dict, response)
|
|
return self.do_get_uid(request_dict, response)
|
|
- elif operation == 'getSerial':
|
|
|
|
- return self.do_get_serial_number(request_dict, response)
|
|
|
|
elif operation == 'attachUID':
|
|
elif operation == 'attachUID':
|
|
return self.do_attach_uid(request_dict, response, request)
|
|
return self.do_attach_uid(request_dict, response, request)
|
|
elif operation == 'detachUID':
|
|
elif operation == 'detachUID':
|
|
- return self.do_detach_uid(request_dict, response)
|
|
|
|
|
|
+ return self.do_detach_uid(request, request_dict, response)
|
|
elif operation == 'create':
|
|
elif operation == 'create':
|
|
return self.do_create(request_dict, response)
|
|
return self.do_create(request_dict, response)
|
|
else:
|
|
else:
|
|
@@ -61,7 +63,6 @@ class SerialNumberView(View):
|
|
|
|
|
|
def do_create(self, request_dict, response):
|
|
def do_create(self, request_dict, response):
|
|
quantity = int(request_dict.get('quantity', 0))
|
|
quantity = int(request_dict.get('quantity', 0))
|
|
- p2p = int(request_dict.get('p2p', 0))
|
|
|
|
|
|
|
|
if not quantity:
|
|
if not quantity:
|
|
return response.json(444)
|
|
return response.json(444)
|
|
@@ -76,10 +77,10 @@ class SerialNumberView(View):
|
|
algorithm = AlgorithmBaseOn35()
|
|
algorithm = AlgorithmBaseOn35()
|
|
for i in range(quantity):
|
|
for i in range(quantity):
|
|
serial_number = algorithm.getLetter(sum)
|
|
serial_number = algorithm.getLetter(sum)
|
|
- sum += 1 # sum每次递增1
|
|
|
|
|
|
+ sum += 1 # sum每次递增1
|
|
# 前面补0至六位
|
|
# 前面补0至六位
|
|
- serial_number = (6-len(serial_number))*'0' + serial_number
|
|
|
|
- serial_number_bulk.append(SerialNumberModel(serial_number=serial_number, add_time=now_time, p2p=p2p))
|
|
|
|
|
|
+ serial_number = (6 - len(serial_number)) * '0' + serial_number
|
|
|
|
+ serial_number_bulk.append(SerialNumberModel(serial_number=serial_number, add_time=now_time))
|
|
# 开启事务写入
|
|
# 开启事务写入
|
|
with transaction.atomic():
|
|
with transaction.atomic():
|
|
SerialNumberModel.objects.bulk_create(serial_number_bulk)
|
|
SerialNumberModel.objects.bulk_create(serial_number_bulk)
|
|
@@ -88,59 +89,6 @@ class SerialNumberView(View):
|
|
print(e)
|
|
print(e)
|
|
return response.json(500, repr(e))
|
|
return response.json(500, repr(e))
|
|
|
|
|
|
- # 提供给pc端获取序列号
|
|
|
|
- def do_get_serial_number(self, request_dict, response):
|
|
|
|
- quantity = request_dict.get('quantity', None)
|
|
|
|
- company_id = request_dict.get('company_id', None)
|
|
|
|
- token = request_dict.get('token', None)
|
|
|
|
- time_stamp = request_dict.get('time_stamp', None)
|
|
|
|
- p2p_type = request_dict.get('p2p_type', None)
|
|
|
|
-
|
|
|
|
- if token and time_stamp and quantity and company_id:
|
|
|
|
-
|
|
|
|
- token = int(CommonService.decode_data(token))
|
|
|
|
- time_stamp = int(time_stamp)
|
|
|
|
-
|
|
|
|
- now_time = int(time.time())
|
|
|
|
- distance = now_time - time_stamp
|
|
|
|
-
|
|
|
|
- if token != time_stamp or distance > 60000 or distance < -60000: #为了全球化时间控制在一天内
|
|
|
|
- return response.json(404)
|
|
|
|
-
|
|
|
|
- redisObject = RedisObject()
|
|
|
|
- key = 'serial_lock'
|
|
|
|
- value = redisObject.lpop(key)
|
|
|
|
- count = 0
|
|
|
|
- while value is False and count < 5:
|
|
|
|
- time.sleep(1)
|
|
|
|
- value = redisObject.lpop(key)
|
|
|
|
- count += 1
|
|
|
|
-
|
|
|
|
- if count == 5 and value is False: #暂时注释
|
|
|
|
- return response.json(5)
|
|
|
|
-
|
|
|
|
- quantity = int(quantity)
|
|
|
|
-
|
|
|
|
- company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id, status=0, p2p=p2p_type)
|
|
|
|
- if not company_serial_qs.exists():
|
|
|
|
- redisObject.rpush(key, value)
|
|
|
|
- return response.json(373)
|
|
|
|
-
|
|
|
|
- # 存在对应的企业
|
|
|
|
- company_serial_qs = company_serial_qs[0:quantity]
|
|
|
|
-
|
|
|
|
- #company_serial_qs = company_serial_qs.values('id', 'serial_number__serial_number', 'company__mark')
|
|
|
|
- data = []
|
|
|
|
- ids = []
|
|
|
|
- for serial in company_serial_qs:
|
|
|
|
- ids.append(serial.id)
|
|
|
|
- data.append(serial.serial_number + serial.company.mark)
|
|
|
|
- CompanySerialModel.objects.filter(id__in=ids).update(status=1)
|
|
|
|
- redisObject.rpush(key, value)
|
|
|
|
- return response.json(0, data)
|
|
|
|
- else:
|
|
|
|
- return response.json(444)
|
|
|
|
-
|
|
|
|
def do_list(self, userID, request_dict, response):
|
|
def do_list(self, userID, request_dict, response):
|
|
# perm = ModelService.check_perm_uid_manage(userID, 0)
|
|
# perm = ModelService.check_perm_uid_manage(userID, 0)
|
|
# if not perm:
|
|
# if not perm:
|
|
@@ -178,134 +126,165 @@ class SerialNumberView(View):
|
|
else:
|
|
else:
|
|
return response.json(444)
|
|
return response.json(444)
|
|
|
|
|
|
- @transaction.atomic
|
|
|
|
def do_attach_uid(self, request_dict, response, request):
|
|
def do_attach_uid(self, request_dict, response, request):
|
|
serial_number = request_dict.get('serial_number', None)
|
|
serial_number = request_dict.get('serial_number', None)
|
|
country_id = request_dict.get('country_id', None)
|
|
country_id = request_dict.get('country_id', None)
|
|
company_id = request_dict.get('company_id', None)
|
|
company_id = request_dict.get('company_id', None)
|
|
token = request_dict.get('token', None)
|
|
token = request_dict.get('token', None)
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
|
|
+ DeviceSubType = request_dict.get('DeviceSubType', None)
|
|
|
|
+ p2ptype = request_dict.get('p2ptype', 1)
|
|
|
|
+ if not all([serial_number, company_id, token, time_stamp]):
|
|
|
|
+ return response.json(444)
|
|
|
|
|
|
- if serial_number and len(serial_number) == 9 and company_id:
|
|
|
|
|
|
+ token = int(CommonService.decode_data(token))
|
|
|
|
+ time_stamp = int(time_stamp)
|
|
|
|
|
|
- token = int(CommonService.decode_data(token))
|
|
|
|
- time_stamp = int(time_stamp)
|
|
|
|
|
|
+ now_time = int(time.time())
|
|
|
|
+ distance = now_time - time_stamp
|
|
|
|
|
|
- now_time = int(time.time())
|
|
|
|
- distance = now_time - time_stamp
|
|
|
|
-
|
|
|
|
- if token != time_stamp or distance > 60000 or distance < -60000: #为了全球化时间控制在一天内
|
|
|
|
- return response.json(404)
|
|
|
|
|
|
+ if token != time_stamp or distance > 60000 or distance < -60000: # 为了全球化时间控制在一天内
|
|
|
|
+ return response.json(404)
|
|
|
|
|
|
- mark = serial_number[6:9]
|
|
|
|
- serial = serial_number[0:6]
|
|
|
|
|
|
+ serial = serial_number[0:6]
|
|
|
|
+ full_serial = serial_number[0:9]
|
|
|
|
|
|
- savePoint = transaction.savepoint()
|
|
|
|
- try:
|
|
|
|
- try:
|
|
|
|
- if not country_id :
|
|
|
|
- ip = CommonService.get_ip_address(request)
|
|
|
|
- country_id = Device_Region().get_device_region(ip)
|
|
|
|
|
|
+ if serial_number[9:10]:
|
|
|
|
+ p2ptype = serial_number[9:10]
|
|
|
|
+ try:
|
|
|
|
+ if not country_id:
|
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
|
+ country_id = Device_Region().get_device_region(ip)
|
|
|
|
|
|
- # 判断序列号是否已和企业关联
|
|
|
|
- company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id,
|
|
|
|
- serial_number=serial)
|
|
|
|
- if not company_serial_qs.exists():
|
|
|
|
- return response.json(173)
|
|
|
|
|
|
+ # 判断序列号是否已和企业关联
|
|
|
|
+ company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id, serial_number=serial)
|
|
|
|
+ if not company_serial_qs.exists():
|
|
|
|
+ return response.json(173)
|
|
|
|
|
|
- # 当序列号已关联UID
|
|
|
|
- company_serial = company_serial_qs[0]
|
|
|
|
|
|
+ # 当序列号已关联UID
|
|
|
|
+ company_serial = company_serial_qs[0]
|
|
|
|
|
|
- if company_serial.status == 0:
|
|
|
|
- # 该序列号未绑定企业
|
|
|
|
- return response.json(173)
|
|
|
|
- elif company_serial.status == 1:
|
|
|
|
- # 确定所在区域
|
|
|
|
- country_qs = CountryModel.objects.filter(number=country_id)
|
|
|
|
- if not country_qs.exists():
|
|
|
|
- return response.json(374)
|
|
|
|
-
|
|
|
|
- region = country_qs.values('region_id')[0]
|
|
|
|
-
|
|
|
|
- count = 0
|
|
|
|
- while count < 3:
|
|
|
|
- p2p = SerialNumberModel.objects.filter(serial_number=serial).values('p2p')
|
|
|
|
- print('此序列号的p2p类型:', p2p[0]['p2p'])
|
|
|
|
- uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id, vpg__region_id=region['region_id'],
|
|
|
|
- status=0, p2p_type=p2p[0]['p2p']).order_by('id')[0:10]
|
|
|
|
- # uid_qs:未进行绑定的uid列表
|
|
|
|
- if uid_qs.exists():
|
|
|
|
- uid = uid_qs[0]
|
|
|
|
- # uid.status = 2
|
|
|
|
- # uid.update_time = int(time.time())
|
|
|
|
- result = UIDModel.objects.filter(id=uid.id, status=0).update(**{
|
|
|
|
- 'status': 2, 'update_time': int(time.time())
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- if int(result) <= 0:
|
|
|
|
- count += 1
|
|
|
|
- continue
|
|
|
|
-
|
|
|
|
- now_time = int(time.time())
|
|
|
|
- uid_serial = UIDCompanySerialModel(uid_id=uid.id, company_serial_id=company_serial.id,
|
|
|
|
- add_time=now_time, update_time=now_time)
|
|
|
|
- uid_serial.save()
|
|
|
|
-
|
|
|
|
- company_serial.status = 2
|
|
|
|
- company_serial.save()
|
|
|
|
-
|
|
|
|
- dev = Device_Info.objects.filter(UID=uid.uid)
|
|
|
|
- if dev.exists():
|
|
|
|
- dev.update(serial_number=serial_number)
|
|
|
|
-
|
|
|
|
- res = {
|
|
|
|
- 'full_uid_code': CommonService.encode_data(uid.full_uid_code),
|
|
|
|
- 'uid': CommonService.encode_data(uid.uid),
|
|
|
|
- 'mac': CommonService.encode_data(uid.mac),
|
|
|
|
- 'extra': uid.uid_extra
|
|
|
|
- }
|
|
|
|
- return response.json(0, res)
|
|
|
|
- else:
|
|
|
|
- return response.json(375)
|
|
|
|
-
|
|
|
|
- return response.json(5)
|
|
|
|
- else:
|
|
|
|
- uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial.id)
|
|
|
|
- if uid_qs.exists():
|
|
|
|
- uid = uid_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__full_uid_code')[0]
|
|
|
|
- res = {
|
|
|
|
- 'full_uid_code': CommonService.encode_data(uid['uid__full_uid_code']),
|
|
|
|
- 'uid': CommonService.encode_data(uid['uid__uid']),
|
|
|
|
- 'mac': CommonService.encode_data(uid['uid__mac']),
|
|
|
|
- 'extra': uid['uid__uid_extra']
|
|
|
|
- }
|
|
|
|
- return response.json(0, res)
|
|
|
|
- else:
|
|
|
|
|
|
+ if company_serial.status == 0: # 该序列号未绑定企业
|
|
|
|
+ return response.json(173)
|
|
|
|
+ elif company_serial.status == 1: # 绑定uid
|
|
|
|
+ with transaction.atomic():
|
|
|
|
+ count = 0
|
|
|
|
+ while count < 3:
|
|
|
|
+ # 查询是否存在未绑定序列号的uid
|
|
|
|
+ uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id,
|
|
|
|
+ vpg__region_id=country_id, status=0, p2p_type=p2ptype). \
|
|
|
|
+ order_by('id')
|
|
|
|
+ if not uid_qs.exists():
|
|
return response.json(173)
|
|
return response.json(173)
|
|
- except Exception as e:
|
|
|
|
- # print('--------------------------error 5000')
|
|
|
|
- # print(repr(e))
|
|
|
|
- if savePoint:
|
|
|
|
- transaction.rollback(savePoint)
|
|
|
|
- djangoLogger = logging.getLogger('django')
|
|
|
|
- djangoLogger.exception(repr(e))
|
|
|
|
- return response.json(176, str(e))
|
|
|
|
- except Exception as e:
|
|
|
|
- # print('--------------------------error 5001')
|
|
|
|
- # print(repr(e))
|
|
|
|
- djangoLogger = logging.getLogger('django')
|
|
|
|
- djangoLogger.exception(repr(e))
|
|
|
|
- return response.json(176, str(e))
|
|
|
|
|
|
|
|
- else:
|
|
|
|
- return response.json(444)
|
|
|
|
|
|
+ uid = uid_qs[0]
|
|
|
|
+
|
|
|
|
+ if DeviceSubType:
|
|
|
|
+ # 获取最新的mac,判断分配到哪里,且进行绑定
|
|
|
|
+ mac = MacModel.objects.filter().values('id', 'value', 'is_active')[0]
|
|
|
|
+ current_mac = mac['value']
|
|
|
|
+ username = 'cspublic@ansjer.com'
|
|
|
|
+ if current_mac[-8:] == '1F:42:40': # 一组一共1048576个,此mac是第100w个时
|
|
|
|
+ sys_msg_text = "当前国外uid管理系统mac地址已分配到" + current_mac + ",此mac地址是当前组的第100w个,还剩下48576个可分配,mac地址即将用完。"
|
|
|
|
+ S3Email().faEmail(sys_msg_text, username)
|
|
|
|
+ elif current_mac[-8:] == '1F:90:60': # 此mac是第102w个时
|
|
|
|
+ sys_msg_text = "当前国外uid管理系统mac地址已分配到" + current_mac + ",此mac地址是当前组的第102w个,还剩下28576个可分配,mac地址即将用完。"
|
|
|
|
+ S3Email().faEmail(sys_msg_text, username)
|
|
|
|
+ elif not mac['is_active']:
|
|
|
|
+ return response.json(175)
|
|
|
|
+ elif current_mac[-8:] == '1F:FF:FF':
|
|
|
|
+ MacModel.objects.filter().update(is_active=False) # 更改mac可使用的状态,当再此调用接口时使用上面条件进行阻止
|
|
|
|
+ sys_msg_text = "当前国外uid管理系统mac地址已分配到" + current_mac + ",mac地址已分配使用完,请更换分组。"
|
|
|
|
+ S3Email().faEmail(sys_msg_text, username)
|
|
|
|
+ return response.json(175)
|
|
|
|
+ UIDModel.objects.filter(id=uid.id).update(mac=current_mac) # 更新绑定uid的mac值
|
|
|
|
+ # 绑定mac地址成功后更新mac表
|
|
|
|
+ temp_mac = CommonService.updateMac(current_mac) # mac地址值+1;后3个字节为FF时返回None
|
|
|
|
+ if temp_mac:
|
|
|
|
+ current_mac = temp_mac # 更新赋值写入uid表
|
|
|
|
+ else:
|
|
|
|
+ temp_mac = current_mac # 赋值为FF写入mac表
|
|
|
|
+ MacModel.objects.filter().update(value=temp_mac, add_time=now_time,
|
|
|
|
+ update_time=now_time) # 更新mac表的mac地址值
|
|
|
|
+
|
|
|
|
+ result = UIDModel.objects.filter(id=uid.id, status=0).\
|
|
|
|
+ update(status=2, update_time=now_time)
|
|
|
|
+
|
|
|
|
+ if int(result) <= 0: # 更新失败
|
|
|
|
+ count += 1
|
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ # UID关联【企业关联序列号】表创建数据
|
|
|
|
+ UIDCompanySerialModel.objects.create(uid_id=uid.id, company_serial_id=company_serial.id,
|
|
|
|
+ add_time=now_time, update_time=now_time)
|
|
|
|
+
|
|
|
|
+ company_serial.status = 2
|
|
|
|
+ company_serial.save()
|
|
|
|
+
|
|
|
|
+ dev = Device_Info.objects.filter(UID=uid.uid)
|
|
|
|
+ if dev.exists():
|
|
|
|
+ dev.update(serial_number=full_serial)
|
|
|
|
+
|
|
|
|
+ full_uid_code = uid.full_uid_code
|
|
|
|
+ if uid.platform in CRCKey.keys():
|
|
|
|
+ full_uid_code += ':'+CRCKey[uid.platform]
|
|
|
|
+
|
|
|
|
+ res = {
|
|
|
|
+ 'full_uid_code': CommonService.encode_data(full_uid_code),
|
|
|
|
+ 'uid': CommonService.encode_data(uid.uid),
|
|
|
|
+ 'mac': CommonService.encode_data(uid.mac),
|
|
|
|
+ 'extra': uid.uid_extra,
|
|
|
|
+ 'platform': uid.platform,
|
|
|
|
+ 'initString': uid.init_string,
|
|
|
|
+ 'initStringApp': uid.init_string_app,
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 记录操作日志
|
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
|
+ content = json.loads(json.dumps(request_dict))
|
|
|
|
+ log = {
|
|
|
|
+ 'ip': ip,
|
|
|
|
+ 'user_id': 1,
|
|
|
|
+ 'status': 200,
|
|
|
|
+ 'time': now_time,
|
|
|
|
+ 'content': json.dumps(content),
|
|
|
|
+ 'url': 'serialNumber/attachUID',
|
|
|
|
+ 'operation': '序列号{}绑定uid: {}'.format(serial, uid.uid),
|
|
|
|
+ }
|
|
|
|
+ LogModel.objects.create(**log)
|
|
|
|
+ return response.json(0, res)
|
|
|
|
+
|
|
|
|
+ return response.json(5)
|
|
|
|
+ else: # 返回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']),
|
|
|
|
+ 'mac': CommonService.encode_data(uid['uid__mac']),
|
|
|
|
+ 'extra': uid['uid__uid_extra'],
|
|
|
|
+ 'platform': uid['uid__platform'],
|
|
|
|
+ 'initString': uid['uid__init_string'],
|
|
|
|
+ 'initStringApp': uid['uid__init_string_app'],
|
|
|
|
+ }
|
|
|
|
+ return response.json(0, res)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ djangoLogger = logging.getLogger('django')
|
|
|
|
+ djangoLogger.exception(repr(e))
|
|
|
|
+ return response.json(176, str(e))
|
|
|
|
|
|
def do_get_uid(self, request_dict, response):
|
|
def do_get_uid(self, request_dict, response):
|
|
serial_number = request_dict.get('serial_number', None)
|
|
serial_number = request_dict.get('serial_number', None)
|
|
token = request_dict.get('token', None)
|
|
token = request_dict.get('token', None)
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
|
|
|
|
- if token and time_stamp and serial_number and len(serial_number) == 9:
|
|
|
|
|
|
+ if token and time_stamp and serial_number :
|
|
|
|
|
|
token = int(CommonService.decode_data(token))
|
|
token = int(CommonService.decode_data(token))
|
|
time_stamp = int(time_stamp)
|
|
time_stamp = int(time_stamp)
|
|
@@ -313,12 +292,13 @@ class SerialNumberView(View):
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
distance = now_time - time_stamp
|
|
distance = now_time - time_stamp
|
|
|
|
|
|
- if token != time_stamp or distance > 60000 or distance < -60000: #为了全球化时间控制在一天内
|
|
|
|
|
|
+ if token != time_stamp or distance > 60000 or distance < -60000: # 为了全球化时间控制在一天内
|
|
return response.json(404)
|
|
return response.json(404)
|
|
|
|
|
|
mark = serial_number[6:9]
|
|
mark = serial_number[6:9]
|
|
serial = serial_number[0:6]
|
|
serial = serial_number[0:6]
|
|
- uid_company_serial_qs = UIDCompanySerialModel.objects.filter(company_serial__company__mark=mark, company_serial__serial_number__serial_number=serial)
|
|
|
|
|
|
+ uid_company_serial_qs = UIDCompanySerialModel.objects.filter(company_serial__company__mark=mark,
|
|
|
|
+ company_serial__serial_number__serial_number=serial)
|
|
|
|
|
|
if uid_company_serial_qs.exists():
|
|
if uid_company_serial_qs.exists():
|
|
uid = uid_company_serial_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra')[0]
|
|
uid = uid_company_serial_qs.values('uid__uid', 'uid__mac', 'uid__uid_extra')[0]
|
|
@@ -328,60 +308,80 @@ class SerialNumberView(View):
|
|
'mac': CommonService.encode_data(uid['uid__mac']),
|
|
'mac': CommonService.encode_data(uid['uid__mac']),
|
|
'extra': uid['uid__uid_extra']
|
|
'extra': uid['uid__uid_extra']
|
|
}
|
|
}
|
|
-
|
|
|
|
return response.json(0, res)
|
|
return response.json(0, res)
|
|
else:
|
|
else:
|
|
return response.json(173)
|
|
return response.json(173)
|
|
else:
|
|
else:
|
|
return response.json(444)
|
|
return response.json(444)
|
|
|
|
|
|
- def do_detach_uid(self, request_dict, response):
|
|
|
|
- serial_number = request_dict.get('serial_number', None)
|
|
|
|
|
|
+ def do_detach_uid(self, request, request_dict, response):
|
|
token = request_dict.get('token', None)
|
|
token = request_dict.get('token', None)
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
|
|
+ serial_number = request_dict.get('serial_number', None)
|
|
|
|
|
|
- if token and time_stamp and serial_number:
|
|
|
|
- token = int(CommonService.decode_data(token))
|
|
|
|
- time_stamp = int(time_stamp)
|
|
|
|
-
|
|
|
|
- now_time = int(time.time())
|
|
|
|
- distance = now_time - time_stamp
|
|
|
|
|
|
+ if not all([token, time_stamp, serial_number]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+ token = int(CommonService.decode_data(token))
|
|
|
|
+ time_stamp = int(time_stamp)
|
|
|
|
|
|
- if token != time_stamp or distance > 60000 or distance < -60000: # 为了全球化时间控制在一天内
|
|
|
|
- return response.json(404)
|
|
|
|
|
|
+ now_time = int(time.time())
|
|
|
|
+ distance = now_time - time_stamp
|
|
|
|
|
|
- serial = serial_number[0:6]
|
|
|
|
|
|
+ if token != time_stamp or distance > 60000 or distance < -60000: # 为了全球化时间控制在一天内
|
|
|
|
+ return response.json(404)
|
|
|
|
|
|
- uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial__serial_number=serial)
|
|
|
|
- if uid_serial_qs.exists():
|
|
|
|
- uid_serial = uid_serial_qs[0]
|
|
|
|
|
|
+ serial = serial_number[0:6]
|
|
|
|
+ uid_serial_qs = UIDCompanySerialModel.objects.filter(company_serial__serial_number=serial)
|
|
|
|
+ if not uid_serial_qs.exists():
|
|
|
|
+ return response.json(173)
|
|
|
|
+ uid_serial = uid_serial_qs[0]
|
|
|
|
|
|
- #iot = iotdeviceInfoModel.objects.filter(serial_number__serial_number=serial)
|
|
|
|
- iot = iotdeviceInfoModel.objects.filter(thing_name="Ansjer_Device_" + serial_number)
|
|
|
|
|
|
+ try:
|
|
|
|
+ with transaction.atomic():
|
|
|
|
+ # 删除iot设备信息表数据
|
|
|
|
+ iot = iotdeviceInfoModel.objects.filter(serial_number=serial)
|
|
if iot.exists():
|
|
if iot.exists():
|
|
iot.delete()
|
|
iot.delete()
|
|
|
|
|
|
|
|
+ uid = uid_serial.uid.uid
|
|
company_serial_qs = CompanySerialModel.objects.filter(id=uid_serial.company_serial.id)
|
|
company_serial_qs = CompanySerialModel.objects.filter(id=uid_serial.company_serial.id)
|
|
if company_serial_qs.exists():
|
|
if company_serial_qs.exists():
|
|
company_serial = company_serial_qs[0]
|
|
company_serial = company_serial_qs[0]
|
|
company_serial.status = 1
|
|
company_serial.status = 1
|
|
company_serial.save()
|
|
company_serial.save()
|
|
|
|
+ dv_qs = Device_Info.objects.filter(UID=uid)
|
|
|
|
+ if dv_qs.exists():
|
|
|
|
+ # 删除设备
|
|
|
|
+ dv_qs.delete()
|
|
|
|
+ # 删除设备影子信息uid_set 外键关联删除设备推送配置信息 uid_push
|
|
|
|
+ up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
|
|
|
|
+ DetectControllerView().do_delete_redis(uid)
|
|
|
|
+ if up_qs.count() > 1:
|
|
|
|
+ UidPushModel.objects.filter(uid_set__uid=uid).delete()
|
|
|
|
+ else:
|
|
|
|
+ up_qs.delete()
|
|
|
|
|
|
- uid_qs = UIDModel.objects.filter(uid=uid_serial.uid.uid)
|
|
|
|
- if uid_qs.exists():
|
|
|
|
- uid = uid_qs[0]
|
|
|
|
- uid.status = 0
|
|
|
|
- uid.save()
|
|
|
|
|
|
+ UIDModel.objects.filter(uid=uid).update(status=0, mac='') # 重置uid的使用状态为未分配
|
|
uid_serial.delete()
|
|
uid_serial.delete()
|
|
|
|
|
|
- dev = Device_Info.objects.filter(serial_number=serial_number)
|
|
|
|
- if dev.exists():
|
|
|
|
- dev.update(serial_number='')
|
|
|
|
- return response.json(0)
|
|
|
|
- else:
|
|
|
|
- return response.json(173)
|
|
|
|
- else:
|
|
|
|
- return response.json(444)
|
|
|
|
|
|
+ # 记录操作日志
|
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
|
+ content = json.loads(json.dumps(request_dict))
|
|
|
|
+ log = {
|
|
|
|
+ 'ip': ip,
|
|
|
|
+ 'user_id': 1,
|
|
|
|
+ 'status': 200,
|
|
|
|
+ 'time': now_time,
|
|
|
|
+ 'content': json.dumps(content),
|
|
|
|
+ 'url': 'serialNumber/detachUID',
|
|
|
|
+ 'operation': '序列号{}解绑uid: {}'.format(serial, uid),
|
|
|
|
+ }
|
|
|
|
+ LogModel.objects.create(**log)
|
|
|
|
+ return response.json(0)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ djangoLogger = logging.getLogger('django')
|
|
|
|
+ djangoLogger.exception(repr(e))
|
|
|
|
+ return response.json(176, str(e))
|
|
|
|
|
|
def do_update(self, userID, request_dict, response):
|
|
def do_update(self, userID, request_dict, response):
|
|
# perm = ModelService.check_perm_uid_manage(userID, 0)
|
|
# perm = ModelService.check_perm_uid_manage(userID, 0)
|
|
@@ -390,14 +390,13 @@ class SerialNumberView(View):
|
|
|
|
|
|
id = request_dict.get('id', None)
|
|
id = request_dict.get('id', None)
|
|
status = request_dict.get('status', None)
|
|
status = request_dict.get('status', None)
|
|
- p2p = request_dict.get('p2p', None)
|
|
|
|
|
|
|
|
if id and status:
|
|
if id and status:
|
|
serial_number_qs = SerialNumberModel.objects.filter(id=id)
|
|
serial_number_qs = SerialNumberModel.objects.filter(id=id)
|
|
if serial_number_qs.exists():
|
|
if serial_number_qs.exists():
|
|
- serial_number_qs.update(**{'status': status, 'p2p': p2p})
|
|
|
|
|
|
+ serial_number_qs.update(**{'status': status})
|
|
return response.json(0)
|
|
return response.json(0)
|
|
else:
|
|
else:
|
|
return response.json(173)
|
|
return response.json(173)
|
|
else:
|
|
else:
|
|
- return response.json(444)
|
|
|
|
|
|
+ return response.json(444)
|