|
@@ -182,7 +182,6 @@ class SerialNumberView(View):
|
|
|
else:
|
|
|
return response.json(444)
|
|
|
|
|
|
- @transaction.atomic
|
|
|
def do_attach_uid(self, request_dict, response, request):
|
|
|
serial_number = request_dict.get('serial_number', None)
|
|
|
country_id = request_dict.get('country_id', None)
|
|
@@ -203,7 +202,6 @@ class SerialNumberView(View):
|
|
|
if token != time_stamp or distance > 60000 or distance < -60000: # 为了全球化时间控制在一天内
|
|
|
return response.json(404)
|
|
|
|
|
|
- mark = serial_number[6:9]
|
|
|
serial = serial_number[0:6]
|
|
|
|
|
|
try:
|
|
@@ -222,98 +220,97 @@ class SerialNumberView(View):
|
|
|
if company_serial.status == 0: # 该序列号未绑定企业
|
|
|
return response.json(173)
|
|
|
elif company_serial.status == 1: # 绑定uid
|
|
|
- save_point = transaction.savepoint() # 设置事务保存点
|
|
|
- count = 0
|
|
|
- # 获取序列号的p2p类型
|
|
|
- p2p = SerialNumberModel.objects.filter(serial_number=serial).values('p2p')[0]['p2p']
|
|
|
- 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=p2p). \
|
|
|
- order_by('id')
|
|
|
- if not uid_qs.exists():
|
|
|
- return response.json(173)
|
|
|
-
|
|
|
- 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=serial_number)
|
|
|
-
|
|
|
- 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)
|
|
|
-
|
|
|
- transaction.savepoint_commit(save_point) # 提交事务
|
|
|
- return response.json(0, res)
|
|
|
- return response.json(5)
|
|
|
- else:
|
|
|
+ with transaction.atomic():
|
|
|
+ count = 0
|
|
|
+ # 获取序列号的p2p类型
|
|
|
+ p2p = SerialNumberModel.objects.filter(serial_number=serial).values('p2p')[0]['p2p']
|
|
|
+ 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=p2p). \
|
|
|
+ order_by('id')
|
|
|
+ if not uid_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+
|
|
|
+ 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=serial_number)
|
|
|
+
|
|
|
+ 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)
|
|
@@ -333,8 +330,6 @@ class SerialNumberView(View):
|
|
|
}
|
|
|
return response.json(0, res)
|
|
|
except Exception as e:
|
|
|
- if save_point:
|
|
|
- transaction.savepoint_rollback(save_point) # 事务回滚
|
|
|
djangoLogger = logging.getLogger('django')
|
|
|
djangoLogger.exception(repr(e))
|
|
|
return response.json(176, str(e))
|
|
@@ -374,7 +369,6 @@ class SerialNumberView(View):
|
|
|
else:
|
|
|
return response.json(444)
|
|
|
|
|
|
- @transaction.atomic
|
|
|
def do_detach_uid(self, request, request_dict, response):
|
|
|
token = request_dict.get('token', None)
|
|
|
time_stamp = request_dict.get('time_stamp', None)
|
|
@@ -398,51 +392,48 @@ class SerialNumberView(View):
|
|
|
uid_serial = uid_serial_qs[0]
|
|
|
|
|
|
try:
|
|
|
- save_point = transaction.savepoint() # 设置事务保存点
|
|
|
- # 删除iot设备信息表数据
|
|
|
- iot = iotdeviceInfoModel.objects.filter(serial_number=serial)
|
|
|
- if iot.exists():
|
|
|
- iot.delete()
|
|
|
-
|
|
|
- uid = uid_serial.uid.uid
|
|
|
- company_serial_qs = CompanySerialModel.objects.filter(id=uid_serial.company_serial.id)
|
|
|
- if company_serial_qs.exists():
|
|
|
- company_serial = company_serial_qs[0]
|
|
|
- company_serial.status = 1
|
|
|
- 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()
|
|
|
-
|
|
|
- UIDModel.objects.filter(uid=uid).update(status=0, mac='') # 重置uid的使用状态为未分配
|
|
|
- uid_serial.delete()
|
|
|
-
|
|
|
- # 记录操作日志
|
|
|
- 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)
|
|
|
- transaction.savepoint_commit(save_point) # 提交事务
|
|
|
+ with transaction.atomic():
|
|
|
+ # 删除iot设备信息表数据
|
|
|
+ iot = iotdeviceInfoModel.objects.filter(serial_number=serial)
|
|
|
+ if iot.exists():
|
|
|
+ iot.delete()
|
|
|
+
|
|
|
+ uid = uid_serial.uid.uid
|
|
|
+ company_serial_qs = CompanySerialModel.objects.filter(id=uid_serial.company_serial.id)
|
|
|
+ if company_serial_qs.exists():
|
|
|
+ company_serial = company_serial_qs[0]
|
|
|
+ company_serial.status = 1
|
|
|
+ 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()
|
|
|
+
|
|
|
+ UIDModel.objects.filter(uid=uid).update(status=0, mac='') # 重置uid的使用状态为未分配
|
|
|
+ uid_serial.delete()
|
|
|
+
|
|
|
+ # 记录操作日志
|
|
|
+ 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:
|
|
|
- if save_point:
|
|
|
- transaction.savepoint_rollback(save_point) # 事务回滚
|
|
|
djangoLogger = logging.getLogger('django')
|
|
|
djangoLogger.exception(repr(e))
|
|
|
return response.json(176, str(e))
|