Forráskód Böngészése

批量生成兑换码&导出兑换码到excel接口

zhangdongming 2 éve
szülő
commit
bc29d890a3
2 módosított fájl, 91 hozzáadás és 3 törlés
  1. 90 2
      AdminController/UnicomManageController.py
  2. 1 1
      Model/models.py

+ 90 - 2
AdminController/UnicomManageController.py

@@ -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

+ 1 - 1
Model/models.py

@@ -2881,7 +2881,7 @@ class SceneLog(models.Model):
 
 class UnicomCombo(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记Id')
-    package_id = models.CharField(default='', max_length=32, verbose_name=u'联通套餐id')
+    package_id = models.CharField(default='', max_length=128, verbose_name=u'第三方套餐包id')
     combo_name = models.CharField(default='', max_length=32, verbose_name=u'套餐名称')
     status = models.SmallIntegerField(default=0, verbose_name='状态{0:开启,1:停用}')
     # 套餐类型 0:联通商用,1:联通初始化赠送,2:联通赠送套餐,3:五兴电信