Bläddra i källkod

后台新增4G兑换码接口、优化设备影子异常打印、增加查询4G设备有效套餐接口

zhangdongming 1 år sedan
förälder
incheckning
785bd83133

+ 94 - 1
AdminController/UnicomManageController.py

@@ -85,12 +85,18 @@ class UnicomManageControllerView(View):
                 return self.get_iccid_info(request_dict, response)
             elif operation == 'batchGenerateCDK':  # 批量生成兑换码
                 return self.create_package_cdk(request_dict, response)
+            elif operation == 'getExchangeCodePage':  # 分页获取兑换码
+                return self.get_exchange_code_page(request_dict, response)
+            elif operation == 'updateExchangeCode':  # 修改兑换码
+                return self.update_exchange_code(request_dict, response)
             elif operation == 'resetCardPackage':
                 return self.reset_card_package(request, request_dict, response)
             elif operation == 'getPackageDetails':
                 return self.get_package_details(request_dict, response)
             elif operation == 'asyncUpdateStatus':
                 return self.async_update_status(request_dict, response)
+            elif operation == 'getFlowComboList':  # 获取流量套餐列表
+                return self.get_flow_combo_list(request_dict, response)
             else:
                 return response.json(404)
 
@@ -129,7 +135,6 @@ class UnicomManageControllerView(View):
                 UnicomObjeect().change_device_to_disable(iccid)  # 重置流量停用设备
                 ip = CommonService.get_ip_address(request)
                 describe = '重置4G流量序列号{},iccid:{}'.format(serial_number, iccid)
-                cls.generate_card_package_order(iccid, serial_number)
                 cls.create_operation_log('unicom/manage/resetCardPackage', ip, request_dict, describe)
                 return response.json(0)
             return response.json(173)
@@ -871,3 +876,91 @@ class UnicomManageControllerView(View):
             unicom_service.change_device_to_disable(iccid)
             return response.json(0)
         return response.json(902)
+
+    @classmethod
+    def get_exchange_code_page(cls, request_dict, response):
+        """
+        分页获取兑换码
+        @return: 分页数据
+        """
+        pageSize = request_dict.get('pageSize', None)
+        pageNo = request_dict.get('pageNo', None)
+        code = request_dict.get('code', None)
+        is_down = request_dict.get('isDown', None)
+        if not all({pageNo, pageSize}):
+            return response.json(444)
+        page = int(pageNo)
+        line = int(pageSize)
+        try:
+            code_qs = ExchangeCode.objects.all()
+            if code:
+                code_qs = code_qs.filter(code__icontains=code)
+            if is_down:
+                code_qs = code_qs.filter(is_down=int(is_down))
+            code_list = []
+            total = code_qs.count()
+            result = {'total': total, 'data': code_list}
+            code_qs = code_qs.order_by('-created_time')[(page - 1) * line:page * line]
+            if not code_qs.exists():
+                return response.json(0, result)
+            for item in code_qs:
+                combo_name = UnicomCombo.objects.filter(id=item.package_id)[0].combo_name
+                code_list.append({
+                    'id': item.id,
+                    'code': item.code,
+                    'status': item.status,
+                    'isDown': item.is_down,
+                    'packageType': item.package_type,
+                    'comboName': combo_name,
+                    'expireTime': item.expire_time,
+                    'createdTime': item.created_time,
+                    'updatedTime': item.updated_time
+                })
+            result['data'] = code_list
+            return response.json(0, result)
+        except Exception as e:
+            LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500)
+
+    @classmethod
+    def update_exchange_code(cls, request_dict, response):
+        """
+        修改兑换码数据
+        """
+        code_id = request_dict.get('id', None)
+        is_down = request_dict.get('isDown', None)
+        status = request_dict.get('status', None)
+        expire_time = request_dict.get('expireTime', None)
+        if not code_id:
+            return response.json(444)
+        try:
+            code_qs = ExchangeCode.objects.filter(id=int(code_id))
+            if not code_qs.exists():
+                return response.json(173)
+            params = {}
+            if is_down:
+                params['is_down'] = int(is_down)
+            if status:
+                params['status'] = int(status)
+            if expire_time:
+                params['expire_time'] = int(expire_time)
+            if not params:
+                return response.json(0)
+            code_qs.update(**params)
+            return response.json(0)
+        except Exception as e:
+            LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500)
+
+    @classmethod
+    def get_flow_combo_list(cls, request_dict, response):
+        """
+        获取4G流量套餐列表
+        @return: 套餐列表
+        """
+        combo_qs = UnicomCombo.objects.filter(is_del=False)
+        if not combo_qs.exists():
+            return response.json(173)
+        combo_qs = combo_qs.values('id', 'combo_name').order_by('-created_time')
+        flow_combo_list = list(combo_qs)
+        return response.json(0, flow_combo_list)

+ 1 - 1
Controller/ShadowController.py

@@ -172,7 +172,7 @@ def update_device_shadow(request):
         LOGGER.info('***设备影子保存成功{}'.format(uid))
         return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
     except Exception as e:
-        LOGGER.info('更新设备影子异常: {}'.format(repr(e)))
+        LOGGER.info('更新设备影子异常: errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
         return JsonResponse(status=200, data={'code': 1000001, 'update_shadow_error': repr(e)})
 
 

+ 38 - 0
Controller/UnicomCombo/UnicomComboController.py

@@ -18,14 +18,17 @@ from django.db.models import Q
 from django.http import HttpResponse, JsonResponse
 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
 from Object.EIoTClubObject import EIoTClubObject
+from Object.Enums.WXOperatorEnum import WXOperatorEnum
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.UnicomObject import UnicomObjeect
+from Object.WXTechObject import WXTechObject
 from Object.utils import LocalDateTimeUtil
 from Object.utils.PayUtil import PayService
 from Service.CommonService import CommonService
@@ -86,6 +89,8 @@ class UnicomComboView(View):
                 return self.user_combo_query(user_id, request_dict, response)
             elif operation == 'getDeviceLiveRestrictList':
                 return self.get_device_live_restrict_list(request_dict, response)
+            elif operation == 'getDevice4GPackage':
+                return self.get_device_4G_package(request_dict, response)
             else:
                 return response.json(0)
 
@@ -991,3 +996,36 @@ class UnicomComboView(View):
         except Exception as e:
             print('日志异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return False
+
+    @classmethod
+    def get_device_4G_package(cls, request_dict, response):
+        """
+        获取设备流量套餐
+        """
+        try:
+            serial_number = request_dict.get('serialNumber')
+            if not serial_number:
+                return response.json(0)
+            card_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number)
+            if not card_qs.exists():
+                return response.json(0)
+            card_info = card_qs.first()
+            if card_info.card_type == 0:  # 联通
+                card_order_qs = UnicomComboOrderInfo.objects.filter(iccid=card_info.iccid, status=1)
+                if not card_order_qs:
+                    LOGGER.info(f'error{card_info.serial_no}该设备没有有效套餐')
+                    return response.json(10069)
+                return response.json(0)
+            elif card_info.card_type == 1:  # 电信
+                wx_tech = WXTechObject()
+                data = {'iccid': card_info.iccid, 'operator': WXOperatorEnum.TELECOM}
+                result = wx_tech.get_package_order_record(**data)
+                if not result:
+                    return response.json(0)
+                data = result['data']
+                status = any(item['state'] == 1 for item in data)
+                return response.json(10069) if not status else response.json(0)
+            return response.json(0)
+        except Exception as e:
+            print('日志异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(0)

+ 4 - 2
Object/ResponseObject.py

@@ -139,7 +139,8 @@ class ResponseObject(object):
             10065: 'The redemption is successful and can be viewed in Settings-4G-My Package',
             10066: 'This code has been redeemed and can be viewed in Settings-4G-My Package',
             10067: 'Invalid redemption code',
-            10068: 'This device does not support redemption, please contact customer service'
+            10068: 'This device does not support redemption, please contact customer service',
+            10069: 'If the traffic is abnormal, check the data plan or contact customer service'
         }
         data_cn = {
             0: '成功',
@@ -265,7 +266,8 @@ class ResponseObject(object):
             10065: '\t兑换成功\n可在设置-4G-我的套餐中查看',
             10066: '\t此码已兑换\n可在设置-4G-我的套餐中查看',
             10067: '无效兑换码',
-            10068: '兑换失败,请联系客服'
+            10068: '兑换失败,请联系客服',
+            10069: '流量异常,请查看流量套餐情况或联系客服'
         }
 
         msg = data_cn if self.lang == 'cn' or self.lang == 'zh-Hans' or self.lang == 'zh-Hant' else data_en