Bläddra i källkod

订单对账导出功能

peng 2 år sedan
förälder
incheckning
81205cbeaa
1 ändrade filer med 119 tillägg och 81 borttagningar
  1. 119 81
      AdminController/ServeManagementController.py

+ 119 - 81
AdminController/ServeManagementController.py

@@ -9,7 +9,10 @@ import boto3
 import threading
 import logging
 
+import xlrd
 import xlwt
+from django.utils.encoding import escape_uri_path
+from xlutils.copy import copy
 from boto3.session import Session
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
 from django.views.generic.base import View
@@ -80,6 +83,8 @@ class serveManagement(View):
                 return self.downloadCDK(request_dict, response)
             elif operation == 'getDeviceOrderList':
                 return self.getDeviceOrderList(request_dict, response)
+            elif operation == 'vodOrderReconcile':
+                return self.vodOrderReconcile(request, request_dict, response)
             elif operation == 'deleteDeviceOrder':
                 return self.deleteDeviceOrder(userID, request_dict, response)
             elif operation == 'getDevicePackageList':
@@ -116,7 +121,7 @@ class serveManagement(View):
         page = int(pageNo)
         line = int(pageSize)
         try:
-            if bucket or mold or is_free:   # 条件查询
+            if bucket or mold or is_free:  # 条件查询
                 if bucket:
                     vod_bucket_qs = VodBucketModel.objects.filter(
                         bucket=bucket)
@@ -126,7 +131,7 @@ class serveManagement(View):
                 elif is_free:
                     vod_bucket_qs = VodBucketModel.objects.filter(
                         is_free=int(is_free))
-            else:   # 查询全部
+            else:  # 查询全部
                 vod_bucket_qs = VodBucketModel.objects.filter().all()
             total = len(vod_bucket_qs)
             vod_buckets = vod_bucket_qs[(page - 1) * line:page * line]
@@ -157,7 +162,7 @@ class serveManagement(View):
         # 添加/编辑存储桶
         print('request_dict: ', request_dict)
         bucketID = request_dict.get('bucketID', None)
-        bucket = request_dict.get('bucket', '').strip()   # 移除字符串头尾的空格
+        bucket = request_dict.get('bucket', '').strip()  # 移除字符串头尾的空格
         content = request_dict.get('content', '').strip()
         mold = int(request_dict.get('mold', 1))
         area = request_dict.get('area', '').strip()
@@ -233,12 +238,12 @@ class serveManagement(View):
         page = int(pageNo)
         line = int(pageSize)
         try:
-            if bucket:   # 条件查询
+            if bucket:  # 条件查询
                 bucket_id = VodBucketModel.objects.filter(
                     bucket=bucket).values('id')[0]['id']
                 store_meal_qs = Store_Meal.objects.filter(
                     bucket_id=bucket_id)
-            else:   # 查询全部
+            else:  # 查询全部
                 store_meal_qs = Store_Meal.objects.filter()
             store_meal_val = store_meal_qs.values(
                 'id',
@@ -300,7 +305,7 @@ class serveManagement(View):
         commodity_type = int(request_dict.get('commodity_type', 0))
         pay_type = request_dict.get(
             'pay_type', '')[
-            1:-1].split(',')    # '[1,2]' -> ['1','2']
+                   1:-1].split(',')  # '[1,2]' -> ['1','2']
         commodity_code = request_dict.get('commodity_code', '')
         is_discounts = int(request_dict.get('is_discounts', 0))
         discount_price = request_dict.get('discount_price', '')
@@ -372,9 +377,9 @@ class serveManagement(View):
         page = int(pageNo)
         line = int(pageSize)
         try:
-            if storeMealID:   # 条件查询
+            if storeMealID:  # 条件查询
                 store_meal_lang_qs = Store_Meal.objects.filter(id=storeMealID)
-            else:   # 查询全部
+            else:  # 查询全部
                 store_meal_lang_qs = Store_Meal.objects.filter(
                     lang__isnull=False)
             store_meal_lang_val = store_meal_lang_qs.values(
@@ -387,7 +392,7 @@ class serveManagement(View):
             )
             total = len(store_meal_lang_val)
             store_meal_langs = store_meal_lang_val[(
-                page - 1) * line:page * line]
+                                                           page - 1) * line:page * line]
             store_meal_lang_list = []
             for store_meal_lang in store_meal_langs:
                 store_meal_lang_list.append({
@@ -433,7 +438,7 @@ class serveManagement(View):
                     title=title,
                     content=content,
                     discount_content=discount_content)
-            else:   # 添加
+            else:  # 添加
                 lang_obj = Lang.objects.filter(
                     lang=lang,
                     title=title,
@@ -576,11 +581,13 @@ class serveManagement(View):
         if region == 'cn':
             # 下载国内未使用激活码
             content += '激活码(国内)\n'
-            cdk_inactivate_qs = CDKcontextModel.objects.filter(is_down=0, is_activate=0, rank__bucket__mold=0, rank__is_show=0).values('cdk')
+            cdk_inactivate_qs = CDKcontextModel.objects.filter(is_down=0, is_activate=0, rank__bucket__mold=0,
+                                                               rank__is_show=0).values('cdk')
         else:
             # 下载国外未使用激活码
             content += '激活码(国外)\n'
-            cdk_inactivate_qs = CDKcontextModel.objects.filter(is_down=0, is_activate=0, rank__bucket__mold=1, rank__is_show=0).values('cdk')
+            cdk_inactivate_qs = CDKcontextModel.objects.filter(is_down=0, is_activate=0, rank__bucket__mold=1,
+                                                               rank__is_show=0).values('cdk')
         for cdk_inactivate in cdk_inactivate_qs:
             content += cdk_inactivate['cdk'] + '\n'
         # print(content)
@@ -653,8 +660,7 @@ class serveManagement(View):
                 "payType",
                 "rank__day",
                 "rank__price",
-                "status",
-                "order_type")
+                "status")
             order_ql = order_ql.order_by('-addTime')  # 根据CDK创建时间降序排序
             order_ql = order_ql[(page - 1) * line:page * line]
             return response.json(
@@ -663,6 +669,36 @@ class serveManagement(View):
             print(e)
             return response.json(500, repr(e))
 
+    def vodOrderReconcile(self, request, request_dict, response):
+
+        file = request.FILES.get('file', None)
+        if not file:
+            return response.json(444)
+
+        try:
+            rd_book = xlrd.open_workbook(filename=None, file_contents=file.read())
+            wt_book = copy(rd_book)
+            wt_sheet = wt_book.get_sheet(0)
+            rd_sheet = rd_book.sheet_by_index(2)
+            for row in range(1, rd_sheet.nrows):
+                transaction_id = rd_sheet.cell_value(row, 9)
+                order_qs = Order_Model.objects.filter(trade_no=transaction_id)
+                if not order_qs.exists():
+                    temp_row = row + 8
+                    wt_sheet.write(temp_row, 0, '否')
+                    for col in range(rd_sheet.ncols):
+                        value = rd_sheet.cell_value(row, col)
+                        temp_col = col + 1
+                        wt_sheet.write(temp_row, temp_col, value)
+
+            res = HttpResponse(content_type='application/octet-stream')
+            res['Content-Disposition'] = 'attachment; filename={}'.format(escape_uri_path(file.name))
+            wt_book.save(res)
+            return res
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
     def deleteDeviceOrder(self, userID, request_dict, response):
         orderID = request_dict.get('orderID', None)
 
@@ -846,16 +882,16 @@ class serveManagement(View):
             for uid_bucket in uid_bucket_qs:
                 for order in order_qs.filter(
                         uid_bucket_id=uid_bucket.id).values(
-                        'uid_bucket_id',
-                        'desc',
-                        'userID__userID',
-                        'UID',
-                        'price',
-                        'payType',
-                        'userID__username',
-                        'userID__phone',
-                        'userID__userEmail',
-                        'userID__data_joined'):
+                    'uid_bucket_id',
+                    'desc',
+                    'userID__userID',
+                    'UID',
+                    'price',
+                    'payType',
+                    'userID__username',
+                    'userID__phone',
+                    'userID__userEmail',
+                    'userID__data_joined'):
                     # 套餐到期时间累加未使用套餐
                     unused_qs = Unused_Uid_Meal.objects.filter(uid=uid_bucket.uid).values('num', 'expire')
                     if unused_qs.exists():
@@ -913,7 +949,7 @@ class serveManagement(View):
         userEmail = request_dict.get('userEmail', None)
         payType = request_dict.get('payType', None)
 
-        #uid_set 表查询
+        # uid_set 表查询
         ucode = request_dict.getlist('ucode', None)
         version = request_dict.getlist('version', None)
 
@@ -1007,16 +1043,16 @@ class serveManagement(View):
 
                 for order in order_qs.filter(
                         uid_bucket_id=uid_bucket.id).values(
-                        'uid_bucket_id',
-                        'desc',
-                        'userID__userID',
-                        'UID',
-                        'price',
-                        'payType',
-                        'userID__username',
-                        'userID__phone',
-                        'userID__userEmail',
-                        'userID__data_joined'):
+                    'uid_bucket_id',
+                    'desc',
+                    'userID__userID',
+                    'UID',
+                    'price',
+                    'payType',
+                    'userID__username',
+                    'userID__phone',
+                    'userID__userEmail',
+                    'userID__data_joined'):
                     data['desc'] = order['desc']
                     data['payType'] = order['payType']
                     data['price'] = order['price']
@@ -1030,8 +1066,8 @@ class serveManagement(View):
 
                 for uidset in uidset_qs.filter(
                         uid=uid_bucket.uid).values(
-                        'ucode',
-                        'version'):
+                    'ucode',
+                    'version'):
                     data['ucode'] = uidset['ucode']
                     data['version'] = uidset['version']
 
@@ -1043,49 +1079,49 @@ class serveManagement(View):
             sheet1 = workbook.add_sheet('UID')
 
             headtitle = [
-              'id',
-              '用户账号',
-              '用户手机号',
-              '用户邮箱',
-              '注册时间',
-              '设备UID',
-              '设备通道',
-              '云存状态',
-              '添加时间',
-              '到期时间',
-              '使用状态',
-              '是否有未使用套餐',
-              '套餐描述',
-              '支付方式',
-              '价格',
-              '播放次数',
-              '产品编码',
-              '版本'
+                'id',
+                '用户账号',
+                '用户手机号',
+                '用户邮箱',
+                '注册时间',
+                '设备UID',
+                '设备通道',
+                '云存状态',
+                '添加时间',
+                '到期时间',
+                '使用状态',
+                '是否有未使用套餐',
+                '套餐描述',
+                '支付方式',
+                '价格',
+                '播放次数',
+                '产品编码',
+                '版本'
             ]
             headnum = 0
             for title in headtitle:
                 sheet1.write(0, headnum, title)
-                headnum= headnum+1
+                headnum = headnum + 1
 
             fields = [
-              'id',
-              'username',
-              'phone',
-              'userEmail',
-              'data_joined',
-              'uid',
-              'channel',
-              'status',
-              'addTime',
-              'endTime',
-              'use_status',
-              'has_unused',
-              'desc',
-              'payType',
-              'price',
-              'playcount',
-              'ucode',
-              'version'
+                'id',
+                'username',
+                'phone',
+                'userEmail',
+                'data_joined',
+                'uid',
+                'channel',
+                'status',
+                'addTime',
+                'endTime',
+                'use_status',
+                'has_unused',
+                'desc',
+                'payType',
+                'price',
+                'playcount',
+                'ucode',
+                'version'
             ]
             num = 1
             for item in list_data:
@@ -1105,8 +1141,8 @@ class serveManagement(View):
                             val = '激活码'
 
                     sheet1.write(num, fieldnum, val)
-                    fieldnum = fieldnum+1
-                num =num+1
+                    fieldnum = fieldnum + 1
+                num = num + 1
             workbook.save(response)
             return response
         except Exception as e:
@@ -1127,7 +1163,7 @@ class serveManagement(View):
         Oct = int(time.mktime(time.strptime(year + '-10-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
         Nov = int(time.mktime(time.strptime(year + '-11-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
         Dec = int(time.mktime(time.strptime(year + '-12-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
-        Jan_next = int(time.mktime(time.strptime(str(int(year)+1) + '-1-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
+        Jan_next = int(time.mktime(time.strptime(str(int(year) + 1) + '-1-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
 
         list_data = []
         vod_bucket_qs = VodBucketModel.objects.filter()
@@ -1136,10 +1172,11 @@ class serveManagement(View):
         try:
             for vod_bucket in vod_bucket_qs:
                 vod_bucket_id = vod_bucket.id
-                store_meal = Store_Meal.objects.filter(bucket_id=vod_bucket_id, lang__lang='cn').values('lang__title', 'lang__content')
+                store_meal = Store_Meal.objects.filter(bucket_id=vod_bucket_id, lang__lang='cn').values('lang__title',
+                                                                                                        'lang__content')
                 if not store_meal.exists():
                     continue
-                name = store_meal[0]['lang__title']+'-'+store_meal[0]['lang__content']
+                name = store_meal[0]['lang__title'] + '-' + store_meal[0]['lang__content']
                 order = Order_Model.objects.filter(rank__bucket_id=vod_bucket_id)
                 Jan_count = order.filter(status=1, addTime__range=[Jan, Feb]).count()
                 Feb_count = order.filter(status=1, addTime__range=[Feb, Mar]).count()
@@ -1153,7 +1190,8 @@ class serveManagement(View):
                 Oct_count = order.filter(status=1, addTime__range=[Oct, Nov]).count()
                 Nov_count = order.filter(status=1, addTime__range=[Nov, Dec]).count()
                 Dec_count = order.filter(status=1, addTime__range=[Dec, Jan_next]).count()
-                data = [Jan_count, Feb_count, Mar_count, Apr_count, May_count, Jun_count, Jul_count, Aug_count, Sep_count,
+                data = [Jan_count, Feb_count, Mar_count, Apr_count, May_count, Jun_count, Jul_count, Aug_count,
+                        Sep_count,
                         Oct_count, Nov_count, Dec_count]
 
                 cloud_data = {
@@ -1166,4 +1204,4 @@ class serveManagement(View):
             return response.json(0, {'list': list_data})
         except Exception as e:
             print(e)
-            return response.json(500, repr(e))
+            return response.json(500, repr(e))