浏览代码

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

zhangdongming 2 年之前
父节点
当前提交
6fa85cb290

+ 15 - 5
AdminController/UnicomManageController.py

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

+ 18 - 4
Controller/SerialNumberController.py

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

+ 40 - 18
Controller/UnicomCombo/WXTechController.py

@@ -220,7 +220,7 @@ class WXTechController(View):
                           'store_meal_name': combo_info_vo['combo_name'],
                           'store_meal_name': combo_info_vo['combo_name'],
                           'trade_no': trade_no}
                           'trade_no': trade_no}
             Order_Model.objects.create(**order_dict)
             Order_Model.objects.create(**order_dict)
-            return True
+            return order_id
 
 
         @classmethod
         @classmethod
         def delete_card_package(cls, request_dict, response):
         def delete_card_package(cls, request_dict, response):
@@ -267,14 +267,13 @@ class WXTechController(View):
                 # 校验兑换码格式是否正确
                 # 校验兑换码格式是否正确
                 if not (code.isalnum() and len(code) == 10):
                 if not (code.isalnum() and len(code) == 10):
                     return response.json(10040)  # 兑换码格式错误
                     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')
                     .values('iccid')
                 if not device_info_qs.exists():
                 if not device_info_qs.exists():
                     return response.json(173)  # 设备信息不存在
                     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():
                 if not exchange_code_qs.exists():
                     return response.json(10040)  # 兑换码无效
                     return response.json(10040)  # 兑换码无效
                 combo_id = exchange_code_qs[0]['package_id']
                 combo_id = exchange_code_qs[0]['package_id']
@@ -285,19 +284,29 @@ class WXTechController(View):
                     return response.json(173)
                     return response.json(173)
                 package_code = package_info_qs[0]['package_id']
                 package_code = package_info_qs[0]['package_id']
                 iccid = device_info_qs[0]['iccid']
                 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))
                 cls.save_log(ip, 10040, '兑换失败{},{}'.format(serial_number, code))
                 return response.json(10040)
                 return response.json(10040)
             except Exception as e:
             except Exception as e:
@@ -306,6 +315,19 @@ class WXTechController(View):
                 cls.save_log(ip, 500, '兑换内部错误')
                 cls.save_log(ip, 500, '兑换内部错误')
                 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
+        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
         @staticmethod
         def save_log(ip, code, operation):
         def save_log(ip, code, operation):
             """
             """