|
@@ -4,17 +4,23 @@
|
|
|
# @Email : Guanhailogn@asj6.wecom.work
|
|
|
# @File : UnicomManageController.py
|
|
|
# @Software: PyCharm
|
|
|
+import hashlib
|
|
|
import time
|
|
|
+import uuid
|
|
|
|
|
|
+import openpyxl
|
|
|
from django.db import transaction, connection
|
|
|
+from django.http import HttpResponse
|
|
|
from django.views.generic.base import View
|
|
|
|
|
|
+from Ansjer.config import LOGGER
|
|
|
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, \
|
|
|
+ ExchangeCode
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
+from Object.TokenObject import TokenObject
|
|
|
from Object.UnicomObject import UnicomObjeect
|
|
|
from Service.CommonService import CommonService
|
|
|
-from Object.TokenObject import TokenObject
|
|
|
|
|
|
|
|
|
class UnicomManageControllerView(View):
|
|
@@ -37,6 +43,8 @@ class UnicomManageControllerView(View):
|
|
|
# 获取套餐类型
|
|
|
elif operation == 'combo/type':
|
|
|
return self.get_unicom_combo_type(response)
|
|
|
+ elif operation == 'downloadCDK': # 下载兑换码
|
|
|
+ return self.package_cdk_export_excel(response)
|
|
|
else:
|
|
|
tko = TokenObject(
|
|
|
request.META.get('HTTP_AUTHORIZATION'),
|
|
@@ -68,6 +76,8 @@ class UnicomManageControllerView(View):
|
|
|
return self.query_4G_user_order(request_dict, response)
|
|
|
elif operation == 'sim-info':
|
|
|
return self.get_iccid_info(request_dict, response)
|
|
|
+ elif operation == 'batchGenerateCDK': # 批量生成兑换码
|
|
|
+ return self.create_package_cdk(request_dict, response)
|
|
|
else:
|
|
|
return response.json(404)
|
|
|
|
|
@@ -533,3 +543,81 @@ class UnicomManageControllerView(View):
|
|
|
except Exception as e:
|
|
|
print(e)
|
|
|
return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def package_cdk_export_excel(cls, response):
|
|
|
+ """
|
|
|
+ 流量包兑换码导出excel
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ # 创建一个新的excel文档
|
|
|
+ wb = openpyxl.Workbook()
|
|
|
+ # 获取默认的工作表
|
|
|
+ sheet = wb.active
|
|
|
+ sheet.title = '周视国内流量年卡兑换码'
|
|
|
+ sheet.column_dimensions['A'].width = 20
|
|
|
+ exchange_code = ExchangeCode.objects.filter(status=False, is_down=False)
|
|
|
+ if not exchange_code.exists():
|
|
|
+ return response.json(173)
|
|
|
+ # 将兑换码写入到excel表
|
|
|
+ for i, vo in enumerate(list(exchange_code)):
|
|
|
+ sheet.cell(row=i + 1, column=1, value=vo.code)
|
|
|
+ filename = '国内流量年卡兑换码-{}.xlsx'.format(exchange_code.count())
|
|
|
+ # 创建一个http响应
|
|
|
+ res = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
|
|
|
+ # 设置响应头,告诉浏览器文件要下载而不是直接打开
|
|
|
+ res['Content-Disposition'] = f'attachment; filename="{filename}"'
|
|
|
+ # 将excel文档保存到http响应中
|
|
|
+ wb.save(res)
|
|
|
+ exchange_code.update(is_down=True, updated_time=int(time.time()))
|
|
|
+ return res
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('*****UnicomManageController.package_cdk_export_excel:errLine:{}, errMsg:{}'
|
|
|
+ .format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def create_package_cdk(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 批量生成兑换码
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ LOGGER.info('*****UnicomManageController.create_package_cdk,params:{}'.format(request_dict))
|
|
|
+ quantity = request_dict.get('quantity', None)
|
|
|
+ package_id = request_dict.get('packageId', None)
|
|
|
+ if not all([quantity, package_id]):
|
|
|
+ return response.json(444)
|
|
|
+ combo_qs = UnicomCombo.objects.filter(id=int(package_id))
|
|
|
+ if not combo_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+ combo = combo_qs.first()
|
|
|
+ exchange_code_list = []
|
|
|
+ now_time = int(time.time())
|
|
|
+ if combo.combo_type == 3:
|
|
|
+ for i in range(int(quantity)):
|
|
|
+ code = cls.generate_code()
|
|
|
+ exchange_code_list.append(ExchangeCode(code=code, status=False, is_down=0,
|
|
|
+ package_type=1, 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)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('*****UnicomManageController.create_package_cdk:errLine:{}, errMsg:{}'
|
|
|
+ .format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def generate_code(cls):
|
|
|
+ # 生成uuid并移除-
|
|
|
+ uuid_str = str(uuid.uuid4()).replace('-', '')
|
|
|
+ now_time = int(time.time())
|
|
|
+ uuid_str += str(now_time)
|
|
|
+ # 使用SHA1算法生成哈希值
|
|
|
+ sha1 = hashlib.sha1(uuid_str.encode('utf-8'))
|
|
|
+ # 取哈希值的前8位,并将其转换为大写字母
|
|
|
+ code = sha1.hexdigest()[:16].upper()
|
|
|
+ return code
|