Pārlūkot izejas kodu

新增批量重置4G流量接口

zhangdongming 1 gadu atpakaļ
vecāks
revīzija
8f5752983b

+ 73 - 2
AdminController/UnicomManageController.py

@@ -14,6 +14,7 @@ from decimal import Decimal
 import openpyxl
 import requests
 from django.db import transaction, connection
+from django.db.models import Q
 from django.http import HttpResponse
 from django.views.generic.base import View
 
@@ -89,7 +90,7 @@ class UnicomManageControllerView(View):
             elif operation == 'updateExchangeCode':  # 修改兑换码
                 return self.update_exchange_code(request_dict, response)
             elif operation == 'resetCardPackage':
-                return self.reset_card_package(request, request_dict, response)
+                return self.reset_card_package(request, request_dict, response, tko.user)
             elif operation == 'getPackageDetails':
                 return self.get_package_details(request_dict, response)
             elif operation == 'asyncUpdateStatus':
@@ -100,11 +101,13 @@ class UnicomManageControllerView(View):
                 return self.package_cdk_export_excel(response)
             elif operation == 'uploadSerialNumberFile':  # 上传序列号文件绑定4G套餐
                 return self.upload_file(tko.user, request, request_dict, response)
+            elif operation == 'iccidBatchReset':  # 上传序列号文件绑定4G套餐
+                return self.iccid_batch_reset(tko.user, request, request_dict, response)
             else:
                 return response.json(404)
 
     @classmethod
-    def reset_card_package(cls, request, request_dict, response):
+    def reset_card_package(cls, request, request_dict, response, user):
         try:
             serial_number = request_dict.get('serialNumber', None)
             if not serial_number:
@@ -113,6 +116,11 @@ class UnicomManageControllerView(View):
             now_time = int(time.time())
             if device_info_qs.exists():  # 首先查询SIM卡绑定信息是否存在
                 iccid = device_info_qs.first().iccid
+                # 根据序列号重置出厂流量套餐
+                serial_package_qs = SerialNumberPackage.objects.filter(~Q(status=1), serial_number=serial_number)
+                if serial_package_qs.exists():
+                    serial_package_qs.update(status=1, updated_time=now_time, updated_by=user)
+
                 if device_info_qs.first().card_type == 1:  # 五兴电信
                     data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
                     wx_tech = WXTechObject()
@@ -1010,3 +1018,66 @@ class UnicomManageControllerView(View):
         if sn_list:
             SerialNumberPackage.objects.bulk_create(sn_list)
         return response.json(0, {'total': len(serial_list), 'errData': error_list})
+
+    @classmethod
+    def iccid_batch_reset(cls, user, request, request_dict, response):
+        """
+        iccid批量重置流量
+        """
+        file = request.FILES['file']
+        if not file:
+            return response.json(444)
+        err_data = []
+        for line in file:
+            serial_number = line.decode().strip()[0:9]
+            try:
+                device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number)
+                now_time = int(time.time())
+                if not device_info_qs.exists():
+                    err_data.append({'serialNumber': serial_number, 'msg': '数据不存在'})
+                    continue
+
+                iccid = device_info_qs.first().iccid
+                # 根据序列号重置出厂流量套餐
+                serial_package_qs = SerialNumberPackage.objects.filter(~Q(status=1), serial_number=serial_number)
+                if serial_package_qs.exists():
+                    serial_package_qs.update(status=1, updated_time=now_time, updated_by=user)
+
+                if device_info_qs.first().card_type == 1:  # 五兴电信
+                    data = {'iccids': iccid, 'operator': WXOperatorEnum.TELECOM.value}
+                    wx_tech = WXTechObject()
+                    res = wx_tech.delete_card_package(**data)
+                    if res['code'] == '0':
+                        UnicomComboExperienceHistory.objects.filter(iccid=iccid).delete()
+                        continue
+                    err_data.append({'serialNumber': serial_number, 'msg': '电信重置流量异常:{}'.format(res['code'])})
+                    continue
+                # 联通
+                flow_push_qs = UnicomFlowPush.objects.filter(serial_no=serial_number)
+                if flow_push_qs.exists():  # 删除流量预警推送
+                    flow_push_qs.delete()
+                sys_msg_qs = SysMsgModel.objects.filter(uid=serial_number)
+                if sys_msg_qs.exists():  # 删除有关系统消息数据
+                    sys_msg_qs.delete()
+                # 将4G用户信息状态改为已完成测试状态
+                device_info_qs.update(status=1, updated_time=now_time, user_id='')
+
+                combo_order_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid)
+                if combo_order_qs.exists():
+                    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)  # 重置流量停用设备
+                # 记录日志,清除缓存
+                ip = CommonService.get_ip_address(request)
+                describe = '重置4G流量序列号{},iccid:{}'.format(serial_number, iccid)
+                key = f'ASJ:UNICOM:CARD:ACTIVATE:{serial_number}'
+                redis = RedisObject()
+                redis.del_data(key)
+                cls.create_operation_log('unicom/manage/iccidBatchReset', ip, request_dict, describe)
+                continue
+            except Exception as e:
+                err_data.append({'serialNumber': serial_number, 'msg': '重置流量异常:{}'.format(repr(e))})
+        return response.json(0, err_data)

+ 8 - 3
Controller/UnicomCombo/UnicomComboController.py

@@ -21,7 +21,7 @@ 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
+    LogModel, DeviceLiveRestrict, SerialNumberPackage
 from Object.EIoTClubObject import EIoTClubObject
 from Object.Enums.WXOperatorEnum import WXOperatorEnum
 from Object.RedisObject import RedisObject
@@ -298,13 +298,18 @@ class UnicomComboView(View):
                     cls.reset_telecom_user(serial_no)
                     device_info_qs.update(updated_time=now_time, user_id='')
                     return response.json(0)
-                key = 'ASJ:UNICOM:RESET:{}'.format(serial_no)
+                # 根据序列号重置出厂流量套餐
+                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 = []
@@ -316,7 +321,7 @@ class UnicomComboView(View):
                 combo_experience_history_qs = UnicomComboExperienceHistory.objects.filter(iccid=iccid)
                 if combo_experience_history_qs.exists():
                     combo_experience_history_qs.delete()
-                redis.set_data(key, iccid, 60 * 30)  # 缓存当前SIM卡,记录为半个小时内无法赠送免费流量套餐。
+
                 UnicomObjeect().change_device_to_disable(iccid)
                 logger.info('4GResetFlow相关订单号:{}'.format(order_list))
                 describe = '重置4G流量序列号{},iccid:{}'.format(serial_no, iccid)