Bladeren bron

新增联通无限流量年卡兑换码,序列号同步数据优化代码

zhangdongming 2 jaren geleden
bovenliggende
commit
6fa85cb290

+ 15 - 5
AdminController/UnicomManageController.py

@@ -8,13 +8,14 @@ import hashlib
 import json
 import time
 import uuid
-from Ansjer.config import CONFIG_INFO
+
 import openpyxl
 import requests
 from django.db import transaction, connection
 from django.http import HttpResponse
 from django.views.generic.base import View
 
+from Ansjer.config import CONFIG_INFO
 from Ansjer.config import LOGGER
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrderInfo, Device_User, Order_Model, \
@@ -697,7 +698,7 @@ class UnicomManageControllerView(View):
             combo = combo_qs.first()
             exchange_code_list = []
             now_time = int(time.time())
-            if combo.combo_type == 3:
+            if combo.combo_type == 3:  # 五兴电信
                 for i in range(int(quantity)):
                     # 10位兑换码 后面两位为标识代表五兴电信
                     code = cls.generate_code() + 'WD'
@@ -706,10 +707,19 @@ class UnicomManageControllerView(View):
                                                            expire_time=0,
                                                            created_time=now_time,
                                                            updated_time=now_time))
-                if exchange_code_list:
-                    ExchangeCode.objects.bulk_create(exchange_code_list)
+            elif combo.combo_type == 0:  # 珠海联通
+                for i in range(int(quantity)):
+                    # 10位兑换码 后面两位为标识代表五兴电信
+                    code = cls.generate_code() + 'ZL'
+                    exchange_code_list.append(ExchangeCode(code=code, status=False, is_down=0,
+                                                           package_type=0, package_id=combo.id,
+                                                           expire_time=0,
+                                                           created_time=now_time,
+                                                           updated_time=now_time))
+            if exchange_code_list:
+                ExchangeCode.objects.bulk_create(exchange_code_list)
                 return response.json(0)
-            return response.json(0)
+            return response.json(178)
         except Exception as e:
             LOGGER.info('*****UnicomManageController.create_package_cdk:errLine:{}, errMsg:{}'
                         .format(e.__traceback__.tb_lineno, repr(e)))

+ 18 - 4
Controller/SerialNumberController.py

@@ -397,7 +397,7 @@ class SerialNumberView(View):
                 log['operation'] = operation
                 LogModel.objects.create(**log)
                 return {}
-            # 解析从国内获取的UID数据
+            # 解析从其它服获取的UID数据
             uid_info = results['result']['uidInfo']
             if uid_info:
                 if uid_info['p2p_type'] == 1:  # 尚云UID不进行同步只进行 邮寄警报
@@ -406,9 +406,20 @@ class SerialNumberView(View):
                     send_email.faEmail(email_content, 'servers@ansjer.com')
                 else:
                     # 同步UID数据
-                    uid_vo = UIDModel.objects.create(**uid_info)
+                    uid_id = ''
+                    uid_qs = UIDModel.objects.filter(uid=uid_info['uid'])
+                    if uid_qs.exists():
+                        if uid_qs.first().status == 2:  # 判断uid是否被使用
+                            email_content = '{}序列号已占用且{}已被使用:{}'.format(CONFIG_INFO, uid_info['uid'], serial)
+                            send_email.faEmail(email_content, 'servers@ansjer.com')
+                            return {}
+                        else:
+                            uid_qs.update(status=2, update_time=now_time)
+                            uid_id = uid_qs.first().id
+                    if not uid_id:
+                        uid_id = UIDModel.objects.create(**uid_info).id
                     # 企业序列号关联 uid
-                    UIDCompanySerialModel.objects.create(uid_id=uid_vo.id, company_serial_id=company_serial_id,
+                    UIDCompanySerialModel.objects.create(uid_id=uid_id, company_serial_id=company_serial_id,
                                                          add_time=now_time, update_time=now_time)
                     # 成功后 修改企业序列号状态为2(已分配)
                     CompanySerialModel.objects.filter(id=company_serial_id) \
@@ -872,6 +883,10 @@ class SerialNumberView(View):
         try:
             if not CONFIG_INFO == 'eur':
                 return False
+            serial = serial_number[0:6]
+            device_iot_qs = iotdeviceInfoModel.objects.filter(serial_number=serial)
+            if device_iot_qs.exists():
+                return False
             response = requests.get("https://www.dvema.com/serialNumber/getIoTCoreBySerialNumber",
                                     params={'serialNumber': serial_number}, timeout=3)
             if response.status_code != 200:
@@ -916,4 +931,3 @@ class SerialNumberView(View):
         except Exception as e:
             LOGGER.info('{}判断是否4G设备异常,errLine:{}, errMsg:{}'.format(serial_number, e.__traceback__.tb_lineno, repr(e)))
             return False
-

+ 40 - 18
Controller/UnicomCombo/WXTechController.py

@@ -220,7 +220,7 @@ class WXTechController(View):
                           'store_meal_name': combo_info_vo['combo_name'],
                           'trade_no': trade_no}
             Order_Model.objects.create(**order_dict)
-            return True
+            return order_id
 
         @classmethod
         def delete_card_package(cls, request_dict, response):
@@ -267,14 +267,13 @@ class WXTechController(View):
                 # 校验兑换码格式是否正确
                 if not (code.isalnum() and len(code) == 10):
                     return response.json(10040)  # 兑换码格式错误
-                card_type = 1
-                device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number, card_type=card_type) \
+                device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number) \
                     .values('iccid')
                 if not device_info_qs.exists():
                     return response.json(173)  # 设备信息不存在
                 #  查询兑换码信息
-                exchange_code_qs = ExchangeCode.objects.filter(code=code, status=False, package_type=card_type) \
-                    .values('package_id', 'expire_time')
+                exchange_code_qs = ExchangeCode.objects.filter(code=code, status=False) \
+                    .values('package_id', 'expire_time', 'package_type')
                 if not exchange_code_qs.exists():
                     return response.json(10040)  # 兑换码无效
                 combo_id = exchange_code_qs[0]['package_id']
@@ -285,19 +284,29 @@ class WXTechController(View):
                     return response.json(173)
                 package_code = package_info_qs[0]['package_id']
                 iccid = device_info_qs[0]['iccid']
-                # 五兴订购流量包请求参数
-                data = {'iccid': iccid, 'operator': WXOperatorEnum.TELECOM.value,
-                        'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': package_code}
-                wx_tech = WXTechObject()
-                # 请求五兴API订购套餐接口
-                res = wx_tech.create_order_package(**data)
-                LOGGER.info('*****五兴订购年卡套餐结果:{}'.format(res))
-                if res['code'] == '0':
-                    trade_no = res['data']['orderNumber']
-                    cls.created_order(serial_number, user_id, trade_no, combo_id, 11)
-                    exchange_code_qs.update(status=True, updated_time=int(time.time()))
-                    cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
-                    return response.json(0)
+                # 兑换码套餐类型
+                package_type = exchange_code_qs[0]['package_type']
+                if package_type == 0:  # 联通无限流量兑换码
+                    result = cls.exchange_unicom_package(serial_number, iccid,
+                                                         user_id, combo_id)
+                    if result:
+                        exchange_code_qs.update(status=True, updated_time=int(time.time()))
+                        cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
+                        return response.json(0)
+                elif package_type == 1:  # 五兴电信无限流量兑换码
+                    # 五兴订购流量包请求参数
+                    data = {'iccid': iccid, 'operator': WXOperatorEnum.TELECOM.value,
+                            'startType': str(WXStartTypeEnum.EFFECTIVE_IMMEDIATELY.value), 'packageCode': package_code}
+                    wx_tech = WXTechObject()
+                    # 请求五兴API订购套餐接口
+                    res = wx_tech.create_order_package(**data)
+                    LOGGER.info('*****五兴订购年卡套餐结果:{}'.format(res))
+                    if res['code'] == '0':
+                        trade_no = res['data']['orderNumber']
+                        cls.created_order(serial_number, user_id, trade_no, combo_id, 11)
+                        exchange_code_qs.update(status=True, updated_time=int(time.time()))
+                        cls.save_log(ip, 200, '兑换成功{},{}'.format(serial_number, code))
+                        return response.json(0)
                 cls.save_log(ip, 10040, '兑换失败{},{}'.format(serial_number, code))
                 return response.json(10040)
             except Exception as e:
@@ -306,6 +315,19 @@ class WXTechController(View):
                 cls.save_log(ip, 500, '兑换内部错误')
                 return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
+        @classmethod
+        def exchange_unicom_package(cls, serial_number, iccid, user_id, combo_id):
+            try:
+                # 通过兑换码创建订单记录
+                order_id = cls.created_order(serial_number, user_id, 'ansjer', combo_id, 11)
+                # 根据订单信息创建流量套餐包
+                UnicomComboView.create_combo_order_info(order_id, 0, iccid, combo_id)
+                return True
+            except Exception as e:
+                LOGGER.info('*****WXTechController.exchange_unicom_package:errLine:{}, errMsg:{}'
+                            .format(e.__traceback__.tb_lineno, repr(e)))
+                return False
+
         @staticmethod
         def save_log(ip, code, operation):
             """