Browse Source

4G业务逻辑兼容鼎芯4G

zhangdongming 1 year ago
parent
commit
f71c66c2b8

+ 13 - 3
AdminController/UnicomManageController.py

@@ -158,12 +158,13 @@ class UnicomManageControllerView(View):
                 if device_info_qs.count() > 1:
                 if device_info_qs.count() > 1:
                     return response.json(177)
                     return response.json(177)
                 iccid = device_info_qs.first().iccid
                 iccid = device_info_qs.first().iccid
+
                 # 根据序列号重置出厂流量套餐
                 # 根据序列号重置出厂流量套餐
                 serial_package_qs = SerialNumberPackage.objects.filter(~Q(status=1), serial_number=serial_number)
                 serial_package_qs = SerialNumberPackage.objects.filter(~Q(status=1), serial_number=serial_number)
                 if serial_package_qs.exists():
                 if serial_package_qs.exists():
                     serial_package_qs.update(status=1, updated_time=now_time, updated_by=user)
                     serial_package_qs.update(status=1, updated_time=now_time, updated_by=user)
 
 
-                if device_info_qs.first().card_type == 1:  # 五兴电信
+                if device_info_qs.first().card_type == 1:  # 五兴电信API删除所有套餐历史
                     data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
                     data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
                     wx_tech = WXTechObject()
                     wx_tech = WXTechObject()
                     res = wx_tech.delete_card_package(**data)
                     res = wx_tech.delete_card_package(**data)
@@ -172,24 +173,31 @@ class UnicomManageControllerView(View):
                         LOGGER.info(f"{serial_number}电信重置流量成功:{json.dumps(res)}")
                         LOGGER.info(f"{serial_number}电信重置流量成功:{json.dumps(res)}")
                         return response.json(0)
                         return response.json(0)
                     return response.json(176)
                     return response.json(176)
+
                 flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_number)
                 flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_number)
                 if flow_push_qs.exists():  # 删除流量预警推送
                 if flow_push_qs.exists():  # 删除流量预警推送
                     flow_push_qs.delete()
                     flow_push_qs.delete()
                 sys_msg_qs = SysMsgModel.objects.filter(uid=serial_number)
                 sys_msg_qs = SysMsgModel.objects.filter(uid=serial_number)
                 if sys_msg_qs.exists():  # 删除有关系统消息数据
                 if sys_msg_qs.exists():  # 删除有关系统消息数据
                     sys_msg_qs.delete()
                     sys_msg_qs.delete()
+
                 # 将4G用户信息状态改为已完成测试状态
                 # 将4G用户信息状态改为已完成测试状态
                 device_info_qs.update(status=2, updated_time=now_time, user_id='')
                 device_info_qs.update(status=2, updated_time=now_time, user_id='')
                 combo_order_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid)
                 combo_order_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid)
                 if combo_order_qs.exists():
                 if combo_order_qs.exists():
                     combo_order_qs.delete()
                     combo_order_qs.delete()
+
+                # 删除免费体验记录
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 if combo_experience_history_qs.exists():
                 if combo_experience_history_qs.exists():
                     combo_experience_history_qs.delete()
                     combo_experience_history_qs.delete()
-                # UnicomObjeect().change_device_to_disable(iccid)  # 重置流量停用设备
+
+                # 重置流量后,恢复测试流量
                 result = UnicomComboView().activate_test_flow_package(serial_number)
                 result = UnicomComboView().activate_test_flow_package(serial_number)
                 ip = CommonService.get_ip_address(request)
                 ip = CommonService.get_ip_address(request)
                 describe = '重置4G流量序列号{},iccid:{},{}'.format(serial_number, iccid, result)
                 describe = '重置4G流量序列号{},iccid:{},{}'.format(serial_number, iccid, result)
+
+                # 当前缓存是客户首次扫序列号,激活赠送测试流量生成的,重置流量所以要清除
                 key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_number}'
                 key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_number}'
                 redis = RedisObject()
                 redis = RedisObject()
                 redis.del_data(key)
                 redis.del_data(key)
@@ -1131,9 +1139,11 @@ class UnicomManageControllerView(View):
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 if combo_experience_history_qs.exists():  # 删除免费体验流量记录
                 if combo_experience_history_qs.exists():  # 删除免费体验流量记录
                     combo_experience_history_qs.delete()
                     combo_experience_history_qs.delete()
-                result = UnicomComboView().activate_test_flow_package(serial_number)  # 订购新的100M测试流量
 
 
+                result = UnicomComboView().activate_test_flow_package(serial_number)  # 订购新的100M测试流量
                 describe = '批量重置4G流量序列号{},iccid:{},{}'.format(serial_number, iccid, result)
                 describe = '批量重置4G流量序列号{},iccid:{},{}'.format(serial_number, iccid, result)
+
+                # 当前缓存是客户首次扫序列号,激活赠送测试流量生成的,重置流量所以要清除
                 key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_number}'
                 key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_number}'
                 redis = RedisObject()
                 redis = RedisObject()
                 redis.del_data(key)
                 redis.del_data(key)

+ 10 - 2
Controller/UnicomCombo/UnicomComboController.py

@@ -1076,7 +1076,8 @@ class UnicomComboView(View):
         @return: True | False
         @return: True | False
         """
         """
         try:
         try:
-            u_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number, card_type=0)
+            # 查询珠海联通与鼎芯电信4G卡
+            u_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number, card_type__in=[0, 3])
             if not u_device_info_qs.exists():
             if not u_device_info_qs.exists():
                 LOGGER.info(f'{serial_number}生成联通流量套餐iccid未绑定')
                 LOGGER.info(f'{serial_number}生成联通流量套餐iccid未绑定')
                 return False
                 return False
@@ -1085,6 +1086,8 @@ class UnicomComboView(View):
             if not combo_qs.exists():
             if not combo_qs.exists():
                 LOGGER.info(f'{serial_number}生成联通流量套餐不存在')
                 LOGGER.info(f'{serial_number}生成联通流量套餐不存在')
                 return False
                 return False
+
+            # 创建订单信息记录
             now_time = int(time.time())
             now_time = int(time.time())
             combo_info_vo = combo_qs[0]
             combo_info_vo = combo_qs[0]
             u_device_info = u_device_info_qs.first()
             u_device_info = u_device_info_qs.first()
@@ -1093,19 +1096,24 @@ class UnicomComboView(View):
             if u_device_info.user_id:
             if u_device_info.user_id:
                 user_id = u_device_info.user_id
                 user_id = u_device_info.user_id
             order_id = CommonService.createOrderID()
             order_id = CommonService.createOrderID()
+            order_type = 2 if u_device_info.card_type == 0 else 5
+
             order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
             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,
                           'userID_id': user_id, 'desc': combo_info_vo['combo_name'], 'payType': 10,
                           'payTime': now_time, 'price': combo_info_vo['price'], 'addTime': now_time,
                           'payTime': now_time, 'price': combo_info_vo['price'], 'addTime': now_time,
                           'updTime': now_time, 'status': 1,
                           'updTime': now_time, 'status': 1,
-                          'unify_combo_id': str(combo_info_vo['id']), 'order_type': 2,
+                          'unify_combo_id': str(combo_info_vo['id']), 'order_type': order_type,
                           'store_meal_name': combo_info_vo['combo_name']
                           'store_meal_name': combo_info_vo['combo_name']
                           }
                           }
             Order_Model.objects.create(**order_dict)
             Order_Model.objects.create(**order_dict)
+
+            # 创建4G套餐信息记录
             UnicomComboView.create_combo_order_info(order_id, 0, u_device_info.iccid, package_id)
             UnicomComboView.create_combo_order_info(order_id, 0, u_device_info.iccid, package_id)
             if u_device_info.status != 2:
             if u_device_info.status != 2:
                 UnicomDeviceInfo.objects.filter(iccid=u_device_info.iccid).update(status=2, updated_time=now_time)
                 UnicomDeviceInfo.objects.filter(iccid=u_device_info.iccid).update(status=2, updated_time=now_time)
             LOGGER.info(f'{serial_number}生成流量套餐包成功,createdBy:{user_id}')
             LOGGER.info(f'{serial_number}生成流量套餐包成功,createdBy:{user_id}')
             return True
             return True
+
         except Exception as e:
         except Exception as e:
             LOGGER.info('UnicomManageControllerView.order_flow_package,{}errLine:{}, errMsg:{}'
             LOGGER.info('UnicomManageControllerView.order_flow_package,{}errLine:{}, errMsg:{}'
                         .format(serial_number, e.__traceback__.tb_lineno, repr(e)))
                         .format(serial_number, e.__traceback__.tb_lineno, repr(e)))

+ 74 - 1
Controller/UnicomCombo/UnicomComboTaskController.py

@@ -7,6 +7,7 @@
 @Software: PyCharm
 @Software: PyCharm
 """
 """
 import datetime
 import datetime
+import json
 import logging
 import logging
 import threading
 import threading
 import time
 import time
@@ -17,9 +18,10 @@ from django.db.models import Q
 from django.views import View
 from django.views import View
 
 
 from Model.models import UnicomComboOrderInfo, UnicomCombo, Order_Model, UnicomDeviceInfo, UnicomFlowPush, \
 from Model.models import UnicomComboOrderInfo, UnicomCombo, Order_Model, UnicomDeviceInfo, UnicomFlowPush, \
-    IotCardUsageHistory
+    IotCardUsageHistory, AccessNumberTaskQueue
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
+from Object.TelecomObject import TelecomObject
 from Object.UnicomObject import UnicomObjeect
 from Object.UnicomObject import UnicomObjeect
 from Service.TelecomService import TelecomService
 from Service.TelecomService import TelecomService
 
 
@@ -64,6 +66,8 @@ class UnicomComboTaskView(View):
             return self.get_device_usage_history(response)
             return self.get_device_usage_history(response)
         elif operation == 'updateCardCycleFlow':
         elif operation == 'updateCardCycleFlow':
             return self.update_device_cycle_flow(response)
             return self.update_device_cycle_flow(response)
+        elif operation == 'executeAccessTask':
+            return self.get_access_number_change_task(response)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -535,3 +539,72 @@ class UnicomComboTaskView(View):
         except Exception as e:
         except Exception as e:
             logger.info('更新账期流量异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             logger.info('更新账期流量异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return None
             return None
+
+    @staticmethod
+    def get_access_number_change_task(response):
+        """
+        获取接入号码变更任务
+        """
+        task_qs = AccessNumberTaskQueue.objects.exclude(status=1).filter(count__lt=4).order_by('-created_time')
+        if not task_qs.exists():
+            return response.json(0)
+        logger.info('接入卡号变更任务总数:{}'.format(task_qs.count()))
+        asy = threading.Thread(target=UnicomComboTaskView.async_update_access_number_status, args=(task_qs,))
+        asy.start()
+        return response.json(0)
+
+    @staticmethod
+    def async_update_access_number_status(qs):
+        """
+        异步更新设备账期流量
+        """
+        try:
+            logger.info('进入异步更新接入卡号网络状态~~~~')
+            redis = RedisObject()
+
+            iccid_list = []
+            for item in qs:
+                try:
+                    key = f'ASJ:TELECOM:CHANGE:{item.iccid}'
+                    change_data = redis.get_data(key)
+                    if change_data:
+                        iccid_list.append(item.iccid)
+                        continue
+                    if item.iccid in iccid_list:  # 避免同一ICCID多次执行
+                        continue
+
+                    action_value = 'DEL' if item.action == 2 else 'ADD'
+
+                    result = TelecomObject().single_cut_net(item.access_number, action_value)  # 变更网络状态
+                    now_time = int(time.time())
+                    count = item.count + 1
+
+                    cache_data = {'iccid': item.iccid, 'actionValue': action_value}
+                    if not result:  # 失败修改执行次数
+                        iccid_list.append(item.iccid)
+
+                        data = {'status': 2, 'count': count, 'updated_time': now_time}
+                        AccessNumberTaskQueue.objects.filter(id=item.id).update(**data)
+
+                        redis.CONN.setnx(key, json.dumps(cache_data))
+                        redis.CONN.expire(key, 130)  # 130 秒不再变更当前ICCID网络状态
+                        continue
+
+                    data = {'status': 1, 'count': count, 'completion_time': now_time, 'updated_time': now_time}
+                    if result == '-5':  # 已符合变更后状态
+                        data['result'] = {'-5': '该号码未订购单独断网功能!;流水号:1000000190202402201640359500'}
+                    else:
+                        data['result'] = result
+
+                    iccid_list.append(item.iccid)
+
+                    AccessNumberTaskQueue.objects.filter(id=item.id).update(**data)  # 成功后修改任务记录状态
+
+                    redis.CONN.setnx(key, json.dumps(cache_data))
+                    redis.CONN.expire(key, 130)  # 130 秒不再变更当前ICCID网络状态
+
+                except Exception as e:
+                    print(repr(e))
+                    continue
+        except Exception as e:
+            logger.info('异步变更卡网络状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 15 - 10
Controller/UnicomCombo/WXTechController.py

@@ -157,7 +157,7 @@ class WXTechControllerView(View):
     @classmethod
     @classmethod
     def create_order_package(cls, user_id, request_dict, response, request):
     def create_order_package(cls, user_id, request_dict, response, request):
         """
         """
-        五兴电信领取1G15天流量体验包
+        珠海联通、鼎芯电信、五兴电信 领取1G15天流量体验包
         """
         """
         try:
         try:
             LOGGER.info('*****WXTechController.create_order_package:params:{}'.format(request_dict))
             LOGGER.info('*****WXTechController.create_order_package:params:{}'.format(request_dict))
@@ -165,12 +165,14 @@ class WXTechControllerView(View):
             operator = request_dict.get('operator', None)
             operator = request_dict.get('operator', None)
             if not all([operator, serial_no]):
             if not all([operator, serial_no]):
                 return response.json(444)
                 return response.json(444)
+
             serial_no = serial_no[0:9]
             serial_no = serial_no[0:9]
             unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
             unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no) \
                 .values('serial_no', 'user_id', 'iccid', 'card_type')
                 .values('serial_no', 'user_id', 'iccid', 'card_type')
             if not unicom_device_qs.exists():
             if not unicom_device_qs.exists():
                 return response.json(173)
                 return response.json(173)
             unicom_device_qs = unicom_device_qs.first()
             unicom_device_qs = unicom_device_qs.first()
+
             iccid = unicom_device_qs['iccid']
             iccid = unicom_device_qs['iccid']
             # 查看是否体验过免费套餐
             # 查看是否体验过免费套餐
             experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
             experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
@@ -179,7 +181,7 @@ class WXTechControllerView(View):
             ip = CommonService.get_ip_address(request)
             ip = CommonService.get_ip_address(request)
             experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
             experience_history_vo = {'iccid': iccid, 'experience_type': 0, 'do_time': int(time.time())}
             app_user_id = unicom_device_qs['user_id'] if unicom_device_qs['user_id'] else user_id
             app_user_id = unicom_device_qs['user_id'] if unicom_device_qs['user_id'] else user_id
-            if unicom_device_qs['card_type'] == 0:  # 珠海联通
+            if unicom_device_qs['card_type'] == 0 or unicom_device_qs['card_type'] == 3:  # 珠海联通 鼎芯电信
 
 
                 flow_combo_qs = UnicomCombo.objects.filter(combo_type=1, is_del=False, status=0).order_by('sort')
                 flow_combo_qs = UnicomCombo.objects.filter(combo_type=1, is_del=False, status=0).order_by('sort')
 
 
@@ -313,9 +315,10 @@ class WXTechControllerView(View):
             iccid = device_info_qs[0]['iccid']
             iccid = device_info_qs[0]['iccid']
             # 兑换码套餐类型
             # 兑换码套餐类型
             card_type = device_info_qs[0]['card_type']
             card_type = device_info_qs[0]['card_type']
-            if card_type == 0:  # 联通无限流量兑换码
+            if card_type == 0 or card_type == 3:  # 联通联通和鼎芯电信无限流量兑换码
+                order_type = 2 if card_type == 0 else 5
                 result = cls.exchange_unicom_package(serial_number, iccid,
                 result = cls.exchange_unicom_package(serial_number, iccid,
-                                                     user_id, combo_id)
+                                                     user_id, combo_id, order_type)
                 if result:
                 if result:
                     exchange_code_qs.update(status=True, updated_time=int(time.time()))
                     exchange_code_qs.update(status=True, updated_time=int(time.time()))
                     # 校验是否两个重叠无限流量套餐 修改套餐数据
                     # 校验是否两个重叠无限流量套餐 修改套餐数据
@@ -345,10 +348,10 @@ class WXTechControllerView(View):
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
     @classmethod
     @classmethod
-    def exchange_unicom_package(cls, serial_number, iccid, user_id, combo_id):
+    def exchange_unicom_package(cls, serial_number, iccid, user_id, combo_id, order_type=2):
         try:
         try:
             # 通过兑换码创建订单记录
             # 通过兑换码创建订单记录
-            order_id = cls.created_order(serial_number, user_id, 'ansjer', combo_id, 11, 2)
+            order_id = cls.created_order(serial_number, user_id, 'ansjer', combo_id, 11, order_type)
             # 根据订单信息创建流量套餐包
             # 根据订单信息创建流量套餐包
             UnicomComboView.create_combo_order_info(order_id, 0, iccid, combo_id)
             UnicomComboView.create_combo_order_info(order_id, 0, iccid, combo_id)
             return True
             return True
@@ -441,9 +444,10 @@ class WXTechControllerView(View):
             n_time = int(time.time())
             n_time = int(time.time())
             # 兑换码套餐类型
             # 兑换码套餐类型
             card_type = device_info_qs[0]['card_type']
             card_type = device_info_qs[0]['card_type']
-            if card_type == 0:  # 订购联通流量套餐
+            if card_type == 0 or card_type == 3:  # 订购联通流量套餐
+                order_type = 2 if card_type == 0 else 5
                 result = cls.exchange_unicom_package(serial_number, iccid,
                 result = cls.exchange_unicom_package(serial_number, iccid,
-                                                     user_id, combo_id)
+                                                     user_id, combo_id, order_type)
                 serial_package_qs.update(status=2, updated_time=n_time, updated_by=user_id)
                 serial_package_qs.update(status=2, updated_time=n_time, updated_by=user_id)
                 if result:
                 if result:
                     cls.save_log(ip, 10071, '{}领取{}成功{}'.format(serial_number, combo_name, user_id))
                     cls.save_log(ip, 10071, '{}领取{}成功{}'.format(serial_number, combo_name, user_id))
@@ -505,9 +509,10 @@ class WXTechControllerView(View):
 
 
             # 兑换码套餐类型
             # 兑换码套餐类型
             card_type = device_info_qs[0]['card_type']
             card_type = device_info_qs[0]['card_type']
-            if card_type == 0:  # 订购联通流量套餐
+            if card_type == 0 or card_type == 3:  # 订购联通流量套餐
+                order_type = 2 if card_type == 0 else 5
                 result = cls.exchange_unicom_package(serial_number, iccid,
                 result = cls.exchange_unicom_package(serial_number, iccid,
-                                                     user_id, combo_id)
+                                                     user_id, combo_id, order_type)
                 serial_package_qs.update(status=2, updated_time=n_time, updated_by=user_id)
                 serial_package_qs.update(status=2, updated_time=n_time, updated_by=user_id)
                 if result:
                 if result:
                     cls.save_log(ip, 10071, '{}领取{}成功{}'.format(serial_number, combo_name, user_id))
                     cls.save_log(ip, 10071, '{}领取{}成功{}'.format(serial_number, combo_name, user_id))