|
@@ -20,8 +20,8 @@ from django.views.generic.base import View
|
|
|
|
|
|
from Ansjer.config import LOGGER
|
|
|
from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, Order_Model, Store_Meal, AiStoreMeal, \
|
|
|
- UnicomComboOrderInfo, UnicomComboExperienceHistory, UnicomDeviceStatusChangePush, SysMsgModel, UnicomFlowPush, \
|
|
|
- LogModel, DeviceLiveRestrict, SerialNumberPackage
|
|
|
+ UnicomComboOrderInfo, UnicomComboExperienceHistory, UnicomDeviceStatusChangePush, SysMsgModel, LogModel, \
|
|
|
+ DeviceLiveRestrict
|
|
|
from Object.EIoTClubObject import EIoTClubObject
|
|
|
from Object.Enums.WXOperatorEnum import WXOperatorEnum
|
|
|
from Object.RedisObject import RedisObject
|
|
@@ -285,56 +285,12 @@ class UnicomComboView(View):
|
|
|
return response.json(444)
|
|
|
logger.info('PC工具进入重置SIM卡{}'.format(serial_no))
|
|
|
try:
|
|
|
- if not CommonService.check_time_stamp_token(sign, time_stamp):
|
|
|
- return response.json(13)
|
|
|
- now_time = int(time.time())
|
|
|
- redis = RedisObject()
|
|
|
- with transaction.atomic():
|
|
|
- device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no)
|
|
|
- if not device_info_qs.exists(): # 首先查询SIM卡绑定信息是否存在
|
|
|
- return response.json(173)
|
|
|
- iccid = device_info_qs.first().iccid
|
|
|
- if device_info_qs.first().card_type == 1:
|
|
|
- cls.reset_telecom_user(serial_no)
|
|
|
- device_info_qs.update(updated_time=now_time, user_id='')
|
|
|
- return response.json(0)
|
|
|
- # 根据序列号重置出厂流量套餐
|
|
|
- serial_package_qs = SerialNumberPackage.objects.filter(~Q(status=1), serial_number=serial_no)
|
|
|
- if serial_package_qs.exists():
|
|
|
- serial_package_qs.update(status=1, updated_time=now_time, updated_by='operator')
|
|
|
-
|
|
|
- flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_no)
|
|
|
- if flow_push_qs.exists(): # 删除流量预警推送
|
|
|
- flow_push_qs.delete()
|
|
|
- sys_msg_qs = SysMsgModel.objects.filter(uid=serial_no)
|
|
|
- if sys_msg_qs.exists(): # 删除有关系统消息数据
|
|
|
- sys_msg_qs.delete()
|
|
|
-
|
|
|
- device_info_qs.update(status=1, updated_time=now_time, user_id='')
|
|
|
- combo_order_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid)
|
|
|
- order_list = []
|
|
|
- if combo_order_qs.exists():
|
|
|
- for item in combo_order_qs:
|
|
|
- if item.order_id:
|
|
|
- order_list.append(item.order_id)
|
|
|
- combo_order_qs.delete()
|
|
|
- combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
|
|
|
- if combo_experience_history_qs.exists():
|
|
|
- combo_experience_history_qs.delete()
|
|
|
-
|
|
|
- UnicomObjeect().change_device_to_disable(iccid)
|
|
|
- logger.info('4GResetFlow相关订单号:{}'.format(order_list))
|
|
|
- describe = '重置4G流量序列号{},iccid:{}'.format(serial_no, iccid)
|
|
|
- key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_no}'
|
|
|
- redis.del_data(key)
|
|
|
- ip = CommonService.get_ip_address(request)
|
|
|
- cls.create_operation_log('unicom/api/device-status', ip, request_dict, describe)
|
|
|
- return response.json(0)
|
|
|
+ return response.json(10072)
|
|
|
except Exception as e:
|
|
|
print(e.args)
|
|
|
ex = traceback.format_exc()
|
|
|
print(ex)
|
|
|
- logger.info('PC工具重置异常ICCID{},msg={}'.format(iccid, ex))
|
|
|
+ logger.info('PC工具重置异常ICCID{},msg={}'.format(serial_no, ex))
|
|
|
return response.json(177, ex)
|
|
|
|
|
|
@staticmethod
|
|
@@ -413,44 +369,52 @@ class UnicomComboView(View):
|
|
|
n_time = int(time.time())
|
|
|
try:
|
|
|
logger.info('--->参数验证通过,sign验证通过')
|
|
|
- with transaction.atomic():
|
|
|
- ip = CommonService.get_ip_address(request)
|
|
|
- # 待完善代码 根据uid与用户id验证系统设备mdcmd
|
|
|
- unicom_device_qs = UnicomDeviceInfo.objects.filter(iccid=iccid)
|
|
|
- if unicom_device_qs.exists():
|
|
|
- if unicom_device_qs.first().serial_no != serial_no:
|
|
|
- unicom_device_qs.update(main_card=sim, updated_time=n_time, serial_no=serial_no)
|
|
|
- cls.create_operation_log('unicom/api/device-bind',
|
|
|
- ip, request_dict, '4G序列号{}新绑定{}'.format(serial_no, iccid))
|
|
|
- elif unicom_device_qs.first().main_card != sim:
|
|
|
- unicom_device_qs.update(main_card=sim, updated_time=n_time)
|
|
|
- return response.json(0)
|
|
|
- if sim == 0:
|
|
|
- return response.json(0, '外置卡不保存相关信息{}'.format(serial_no))
|
|
|
- params = {'iccid': iccid, 'serial_no': serial_no, 'updated_time': n_time,
|
|
|
- 'created_time': n_time, 'main_card': sim}
|
|
|
- if cls.is_unicom_sim(iccid): # 联通卡
|
|
|
- UnicomDeviceInfo.objects.create(**params)
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
+ # 待完善代码 根据uid与用户id验证系统设备mdcmd
|
|
|
+ unicom_device_qs = UnicomDeviceInfo.objects.filter(iccid=iccid)
|
|
|
+ if unicom_device_qs.exists():
|
|
|
+ if unicom_device_qs.first().serial_no != serial_no:
|
|
|
+ unicom_device_qs.update(main_card=sim, updated_time=n_time, serial_no=serial_no)
|
|
|
cls.create_operation_log('unicom/api/device-bind',
|
|
|
- ip, request_dict, '4G序列号{}绑定{}'.format(serial_no, iccid))
|
|
|
- return response.json(0)
|
|
|
- elif cls.is_dingxin_iot(iccid): # 鼎芯物联卡
|
|
|
- params['card_type'] = 5 # 国际
|
|
|
- params['status'] = 2
|
|
|
- UnicomDeviceInfo.objects.create(**params)
|
|
|
- return response.json(0)
|
|
|
- elif cls.check_iccid(iccid): # 五兴物联卡
|
|
|
- params['card_type'] = 1
|
|
|
+ ip, request_dict, '4G序列号{}新绑定{}'.format(serial_no, iccid))
|
|
|
+ elif unicom_device_qs.first().main_card != sim:
|
|
|
+ unicom_device_qs.update(main_card=sim, updated_time=n_time)
|
|
|
+ return response.json(0)
|
|
|
+ params = {'iccid': iccid, 'serial_no': serial_no, 'updated_time': n_time,
|
|
|
+ 'created_time': n_time, 'main_card': sim}
|
|
|
+ if sim == 0:
|
|
|
+ if cls.is_dingxin_iot(iccid): # 鼎芯物联卡
|
|
|
+ params['card_type'] = 5
|
|
|
params['status'] = 2
|
|
|
UnicomDeviceInfo.objects.create(**params)
|
|
|
- return response.json(0)
|
|
|
- else:
|
|
|
- logger.info('--->设备请求绑定{}验证失败'.format(iccid))
|
|
|
- return response.json(173)
|
|
|
+ cls.create_operation_log('unicom/api/device-bind',
|
|
|
+ ip, request_dict, '4G序列号{}新绑定鼎芯{}'.format(serial_no, iccid))
|
|
|
+ return response.json(0, '外置卡不保存相关信息{}'.format(serial_no))
|
|
|
+
|
|
|
+ if cls.is_unicom_sim(iccid): # 联通卡
|
|
|
+ UnicomDeviceInfo.objects.create(**params)
|
|
|
+ result = cls.activate_test_flow_package(serial_no)
|
|
|
+ cls.create_operation_log('unicom/api/device-bind',
|
|
|
+ ip, request_dict,
|
|
|
+ '4G序列号{}绑定{},testFlowPackage{}'.format(serial_no, iccid, result))
|
|
|
+ return response.json(0)
|
|
|
+ elif cls.is_dingxin_iot(iccid): # 鼎芯物联卡
|
|
|
+ params['card_type'] = 5 # 国际
|
|
|
+ params['status'] = 2
|
|
|
+ UnicomDeviceInfo.objects.create(**params)
|
|
|
+ return response.json(0)
|
|
|
+ elif cls.check_iccid(iccid): # 五兴物联卡
|
|
|
+ params['card_type'] = 1
|
|
|
+ params['status'] = 2
|
|
|
+ UnicomDeviceInfo.objects.create(**params)
|
|
|
+ return response.json(0)
|
|
|
+ else:
|
|
|
+ logger.info('--->设备请求绑定{}验证失败'.format(iccid))
|
|
|
+ return response.json(173)
|
|
|
except Exception as e:
|
|
|
print(e)
|
|
|
ex = traceback.format_exc()
|
|
|
- logger.info('--->设备调用4G注册接口异常:{}'.format(ex))
|
|
|
+ logger.info('UnicomComboView.iccid_bind_serial_no error{}'.format(ex))
|
|
|
return response.json(177, repr(e))
|
|
|
|
|
|
@classmethod
|
|
@@ -1036,3 +1000,104 @@ class UnicomComboView(View):
|
|
|
except Exception as e:
|
|
|
print('日志异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
return response.json(0)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def activate_test_flow_package(cls, serial_number):
|
|
|
+ """
|
|
|
+ 激活测试流量套餐(100M)
|
|
|
+ @return: 成功 | 失败
|
|
|
+ """
|
|
|
+ flow_combo_qs = UnicomCombo.objects.filter(combo_type=4, is_del=False)
|
|
|
+ if not flow_combo_qs:
|
|
|
+ return False
|
|
|
+ package_id = flow_combo_qs.first().id
|
|
|
+ return cls.generate_flow_package(serial_number, package_id, '151564262337939513800138001')
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def generate_flow_package(cls, serial_number, package_id, user_id):
|
|
|
+ """
|
|
|
+ 生成联通流量套餐包
|
|
|
+ @param serial_number: 序列号
|
|
|
+ @param package_id: 套餐id
|
|
|
+ @param user_id: 用户id
|
|
|
+ @return: True | False
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ u_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number, card_type=0)
|
|
|
+ if not u_device_info_qs.exists():
|
|
|
+ LOGGER.info(f'{serial_number}生成联通流量套餐iccid未绑定')
|
|
|
+ return False
|
|
|
+ combo_qs = UnicomCombo.objects.filter(id=package_id) \
|
|
|
+ .values('id', 'combo_name', 'price', 'virtual_price', 'remark').order_by('sort')
|
|
|
+ if not combo_qs.exists():
|
|
|
+ LOGGER.info(f'{serial_number}生成联通流量套餐不存在')
|
|
|
+ return False
|
|
|
+ now_time = int(time.time())
|
|
|
+ combo_info_vo = combo_qs[0]
|
|
|
+ u_device_info = u_device_info_qs.first()
|
|
|
+ rank_id, ai_rank_id = UnicomComboView.get_cloud_or_ai_combo() # 生成订单必须添加该字段
|
|
|
+ uid = CommonService.get_uid_by_serial_number(serial_number)
|
|
|
+ if u_device_info.user_id:
|
|
|
+ user_id = u_device_info.user_id
|
|
|
+ order_id = CommonService.createOrderID()
|
|
|
+ order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
|
|
|
+ 'userID_id': user_id, 'desc': combo_info_vo['combo_name'], 'payType': 10,
|
|
|
+ 'payTime': now_time, 'price': combo_info_vo['price'], 'addTime': now_time,
|
|
|
+ 'updTime': now_time, 'status': 1,
|
|
|
+ 'unify_combo_id': str(combo_info_vo['id']), 'order_type': 2,
|
|
|
+ 'store_meal_name': combo_info_vo['combo_name']
|
|
|
+ }
|
|
|
+ Order_Model.objects.create(**order_dict)
|
|
|
+ UnicomComboView.create_combo_order_info(order_id, 0, u_device_info.iccid, package_id)
|
|
|
+ if u_device_info.status != 2:
|
|
|
+ UnicomDeviceInfo.objects.filter(iccid=u_device_info.iccid).update(status=2, updated_time=now_time)
|
|
|
+ LOGGER.info(f'{serial_number}生成流量套餐包成功,createdBy:{user_id}')
|
|
|
+ return True
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('UnicomManageControllerView.order_flow_package,{}errLine:{}, errMsg:{}'
|
|
|
+ .format(serial_number, e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return False
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def is_4g_device(serial_number, request_dict, request):
|
|
|
+ """
|
|
|
+ 序列号未绑定UID时调用
|
|
|
+ 判断是否4G设备(如卡停用,判断是否符合激活测试流量)
|
|
|
+ 为了解决序列号解绑UID后,测试流量用完客户出现无法添加
|
|
|
+ 增加赠送5M测试流量
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ serial_no = serial_number[0:9]
|
|
|
+ key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_no}'
|
|
|
+ redis = RedisObject()
|
|
|
+ LOGGER.info(f'UnicomComboView.is_4g_device:{serial_no}')
|
|
|
+ if redis.get_data(key):
|
|
|
+ return True
|
|
|
+ # 根据序列号查询联通iccid
|
|
|
+ unicom_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no, card_type=0) \
|
|
|
+ .values('iccid', 'status')
|
|
|
+ if not unicom_qs.exists():
|
|
|
+ return False
|
|
|
+ # 针对库存设备,此步骤激活测试流量
|
|
|
+ unicom_qs = unicom_qs[0]
|
|
|
+
|
|
|
+ order_package = UnicomComboOrderInfo.objects.filter(iccid=unicom_qs['iccid'], status=1)
|
|
|
+ if not order_package: # 当前iccid不存在正在使用的套餐
|
|
|
+ # 查询出厂其它测试流量(特殊套餐5M为了解决客户停卡添加设备)
|
|
|
+ flow_combo_qs = UnicomCombo.objects.filter(combo_type=5, is_del=False)
|
|
|
+ if not flow_combo_qs:
|
|
|
+ return False
|
|
|
+
|
|
|
+ package_id = flow_combo_qs.first().id
|
|
|
+ UnicomComboView().generate_flow_package(serial_no, package_id, '151564262337939513800138001')
|
|
|
+ redis.CONN.setnx(key, str(unicom_qs['iccid']))
|
|
|
+ redis.CONN.expire(key, 3600) # 当天赠送过测试流量的设备缓存24小时
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
+ describe = '{}获取uid请求激活4G卡,{}'.format(serial_no, unicom_qs['iccid'])
|
|
|
+ UnicomComboView().create_operation_log('serialNumber/get-uid', ip, request_dict, describe)
|
|
|
+ return True
|
|
|
+ LOGGER.info(f'{serial_no}有正在使用的套餐')
|
|
|
+ return True
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('{}判断是否4G设备异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return False
|