Browse Source

订单对账导出功能

peng 2 years ago
parent
commit
81205cbeaa
1 changed files with 119 additions and 81 deletions
  1. 119 81
      AdminController/ServeManagementController.py

+ 119 - 81
AdminController/ServeManagementController.py

@@ -9,7 +9,10 @@ import boto3
 import threading
 import threading
 import logging
 import logging
 
 
+import xlrd
 import xlwt
 import xlwt
+from django.utils.encoding import escape_uri_path
+from xlutils.copy import copy
 from boto3.session import Session
 from boto3.session import Session
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
 from django.views.generic.base import View
 from django.views.generic.base import View
@@ -80,6 +83,8 @@ class serveManagement(View):
                 return self.downloadCDK(request_dict, response)
                 return self.downloadCDK(request_dict, response)
             elif operation == 'getDeviceOrderList':
             elif operation == 'getDeviceOrderList':
                 return self.getDeviceOrderList(request_dict, response)
                 return self.getDeviceOrderList(request_dict, response)
+            elif operation == 'vodOrderReconcile':
+                return self.vodOrderReconcile(request, request_dict, response)
             elif operation == 'deleteDeviceOrder':
             elif operation == 'deleteDeviceOrder':
                 return self.deleteDeviceOrder(userID, request_dict, response)
                 return self.deleteDeviceOrder(userID, request_dict, response)
             elif operation == 'getDevicePackageList':
             elif operation == 'getDevicePackageList':
@@ -116,7 +121,7 @@ class serveManagement(View):
         page = int(pageNo)
         page = int(pageNo)
         line = int(pageSize)
         line = int(pageSize)
         try:
         try:
-            if bucket or mold or is_free:   # 条件查询
+            if bucket or mold or is_free:  # 条件查询
                 if bucket:
                 if bucket:
                     vod_bucket_qs = VodBucketModel.objects.filter(
                     vod_bucket_qs = VodBucketModel.objects.filter(
                         bucket=bucket)
                         bucket=bucket)
@@ -126,7 +131,7 @@ class serveManagement(View):
                 elif is_free:
                 elif is_free:
                     vod_bucket_qs = VodBucketModel.objects.filter(
                     vod_bucket_qs = VodBucketModel.objects.filter(
                         is_free=int(is_free))
                         is_free=int(is_free))
-            else:   # 查询全部
+            else:  # 查询全部
                 vod_bucket_qs = VodBucketModel.objects.filter().all()
                 vod_bucket_qs = VodBucketModel.objects.filter().all()
             total = len(vod_bucket_qs)
             total = len(vod_bucket_qs)
             vod_buckets = vod_bucket_qs[(page - 1) * line:page * line]
             vod_buckets = vod_bucket_qs[(page - 1) * line:page * line]
@@ -157,7 +162,7 @@ class serveManagement(View):
         # 添加/编辑存储桶
         # 添加/编辑存储桶
         print('request_dict: ', request_dict)
         print('request_dict: ', request_dict)
         bucketID = request_dict.get('bucketID', None)
         bucketID = request_dict.get('bucketID', None)
-        bucket = request_dict.get('bucket', '').strip()   # 移除字符串头尾的空格
+        bucket = request_dict.get('bucket', '').strip()  # 移除字符串头尾的空格
         content = request_dict.get('content', '').strip()
         content = request_dict.get('content', '').strip()
         mold = int(request_dict.get('mold', 1))
         mold = int(request_dict.get('mold', 1))
         area = request_dict.get('area', '').strip()
         area = request_dict.get('area', '').strip()
@@ -233,12 +238,12 @@ class serveManagement(View):
         page = int(pageNo)
         page = int(pageNo)
         line = int(pageSize)
         line = int(pageSize)
         try:
         try:
-            if bucket:   # 条件查询
+            if bucket:  # 条件查询
                 bucket_id = VodBucketModel.objects.filter(
                 bucket_id = VodBucketModel.objects.filter(
                     bucket=bucket).values('id')[0]['id']
                     bucket=bucket).values('id')[0]['id']
                 store_meal_qs = Store_Meal.objects.filter(
                 store_meal_qs = Store_Meal.objects.filter(
                     bucket_id=bucket_id)
                     bucket_id=bucket_id)
-            else:   # 查询全部
+            else:  # 查询全部
                 store_meal_qs = Store_Meal.objects.filter()
                 store_meal_qs = Store_Meal.objects.filter()
             store_meal_val = store_meal_qs.values(
             store_meal_val = store_meal_qs.values(
                 'id',
                 'id',
@@ -300,7 +305,7 @@ class serveManagement(View):
         commodity_type = int(request_dict.get('commodity_type', 0))
         commodity_type = int(request_dict.get('commodity_type', 0))
         pay_type = request_dict.get(
         pay_type = request_dict.get(
             'pay_type', '')[
             'pay_type', '')[
-            1:-1].split(',')    # '[1,2]' -> ['1','2']
+                   1:-1].split(',')  # '[1,2]' -> ['1','2']
         commodity_code = request_dict.get('commodity_code', '')
         commodity_code = request_dict.get('commodity_code', '')
         is_discounts = int(request_dict.get('is_discounts', 0))
         is_discounts = int(request_dict.get('is_discounts', 0))
         discount_price = request_dict.get('discount_price', '')
         discount_price = request_dict.get('discount_price', '')
@@ -372,9 +377,9 @@ class serveManagement(View):
         page = int(pageNo)
         page = int(pageNo)
         line = int(pageSize)
         line = int(pageSize)
         try:
         try:
-            if storeMealID:   # 条件查询
+            if storeMealID:  # 条件查询
                 store_meal_lang_qs = Store_Meal.objects.filter(id=storeMealID)
                 store_meal_lang_qs = Store_Meal.objects.filter(id=storeMealID)
-            else:   # 查询全部
+            else:  # 查询全部
                 store_meal_lang_qs = Store_Meal.objects.filter(
                 store_meal_lang_qs = Store_Meal.objects.filter(
                     lang__isnull=False)
                     lang__isnull=False)
             store_meal_lang_val = store_meal_lang_qs.values(
             store_meal_lang_val = store_meal_lang_qs.values(
@@ -387,7 +392,7 @@ class serveManagement(View):
             )
             )
             total = len(store_meal_lang_val)
             total = len(store_meal_lang_val)
             store_meal_langs = 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 = []
             store_meal_lang_list = []
             for store_meal_lang in store_meal_langs:
             for store_meal_lang in store_meal_langs:
                 store_meal_lang_list.append({
                 store_meal_lang_list.append({
@@ -433,7 +438,7 @@ class serveManagement(View):
                     title=title,
                     title=title,
                     content=content,
                     content=content,
                     discount_content=discount_content)
                     discount_content=discount_content)
-            else:   # 添加
+            else:  # 添加
                 lang_obj = Lang.objects.filter(
                 lang_obj = Lang.objects.filter(
                     lang=lang,
                     lang=lang,
                     title=title,
                     title=title,
@@ -576,11 +581,13 @@ class serveManagement(View):
         if region == 'cn':
         if region == 'cn':
             # 下载国内未使用激活码
             # 下载国内未使用激活码
             content += '激活码(国内)\n'
             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:
         else:
             # 下载国外未使用激活码
             # 下载国外未使用激活码
             content += '激活码(国外)\n'
             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:
         for cdk_inactivate in cdk_inactivate_qs:
             content += cdk_inactivate['cdk'] + '\n'
             content += cdk_inactivate['cdk'] + '\n'
         # print(content)
         # print(content)
@@ -653,8 +660,7 @@ class serveManagement(View):
                 "payType",
                 "payType",
                 "rank__day",
                 "rank__day",
                 "rank__price",
                 "rank__price",
-                "status",
-                "order_type")
+                "status")
             order_ql = order_ql.order_by('-addTime')  # 根据CDK创建时间降序排序
             order_ql = order_ql.order_by('-addTime')  # 根据CDK创建时间降序排序
             order_ql = order_ql[(page - 1) * line:page * line]
             order_ql = order_ql[(page - 1) * line:page * line]
             return response.json(
             return response.json(
@@ -663,6 +669,36 @@ class serveManagement(View):
             print(e)
             print(e)
             return response.json(500, repr(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):
     def deleteDeviceOrder(self, userID, request_dict, response):
         orderID = request_dict.get('orderID', None)
         orderID = request_dict.get('orderID', None)
 
 
@@ -846,16 +882,16 @@ class serveManagement(View):
             for uid_bucket in uid_bucket_qs:
             for uid_bucket in uid_bucket_qs:
                 for order in order_qs.filter(
                 for order in order_qs.filter(
                         uid_bucket_id=uid_bucket.id).values(
                         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')
                     unused_qs = Unused_Uid_Meal.objects.filter(uid=uid_bucket.uid).values('num', 'expire')
                     if unused_qs.exists():
                     if unused_qs.exists():
@@ -913,7 +949,7 @@ class serveManagement(View):
         userEmail = request_dict.get('userEmail', None)
         userEmail = request_dict.get('userEmail', None)
         payType = request_dict.get('payType', None)
         payType = request_dict.get('payType', None)
 
 
-        #uid_set 表查询
+        # uid_set 表查询
         ucode = request_dict.getlist('ucode', None)
         ucode = request_dict.getlist('ucode', None)
         version = request_dict.getlist('version', None)
         version = request_dict.getlist('version', None)
 
 
@@ -1007,16 +1043,16 @@ class serveManagement(View):
 
 
                 for order in order_qs.filter(
                 for order in order_qs.filter(
                         uid_bucket_id=uid_bucket.id).values(
                         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['desc'] = order['desc']
                     data['payType'] = order['payType']
                     data['payType'] = order['payType']
                     data['price'] = order['price']
                     data['price'] = order['price']
@@ -1030,8 +1066,8 @@ class serveManagement(View):
 
 
                 for uidset in uidset_qs.filter(
                 for uidset in uidset_qs.filter(
                         uid=uid_bucket.uid).values(
                         uid=uid_bucket.uid).values(
-                        'ucode',
-                        'version'):
+                    'ucode',
+                    'version'):
                     data['ucode'] = uidset['ucode']
                     data['ucode'] = uidset['ucode']
                     data['version'] = uidset['version']
                     data['version'] = uidset['version']
 
 
@@ -1043,49 +1079,49 @@ class serveManagement(View):
             sheet1 = workbook.add_sheet('UID')
             sheet1 = workbook.add_sheet('UID')
 
 
             headtitle = [
             headtitle = [
-              'id',
-              '用户账号',
-              '用户手机号',
-              '用户邮箱',
-              '注册时间',
-              '设备UID',
-              '设备通道',
-              '云存状态',
-              '添加时间',
-              '到期时间',
-              '使用状态',
-              '是否有未使用套餐',
-              '套餐描述',
-              '支付方式',
-              '价格',
-              '播放次数',
-              '产品编码',
-              '版本'
+                'id',
+                '用户账号',
+                '用户手机号',
+                '用户邮箱',
+                '注册时间',
+                '设备UID',
+                '设备通道',
+                '云存状态',
+                '添加时间',
+                '到期时间',
+                '使用状态',
+                '是否有未使用套餐',
+                '套餐描述',
+                '支付方式',
+                '价格',
+                '播放次数',
+                '产品编码',
+                '版本'
             ]
             ]
             headnum = 0
             headnum = 0
             for title in headtitle:
             for title in headtitle:
                 sheet1.write(0, headnum, title)
                 sheet1.write(0, headnum, title)
-                headnum= headnum+1
+                headnum = headnum + 1
 
 
             fields = [
             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
             num = 1
             for item in list_data:
             for item in list_data:
@@ -1105,8 +1141,8 @@ class serveManagement(View):
                             val = '激活码'
                             val = '激活码'
 
 
                     sheet1.write(num, fieldnum, val)
                     sheet1.write(num, fieldnum, val)
-                    fieldnum = fieldnum+1
-                num =num+1
+                    fieldnum = fieldnum + 1
+                num = num + 1
             workbook.save(response)
             workbook.save(response)
             return response
             return response
         except Exception as e:
         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")))
         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")))
         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")))
         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 = []
         list_data = []
         vod_bucket_qs = VodBucketModel.objects.filter()
         vod_bucket_qs = VodBucketModel.objects.filter()
@@ -1136,10 +1172,11 @@ class serveManagement(View):
         try:
         try:
             for vod_bucket in vod_bucket_qs:
             for vod_bucket in vod_bucket_qs:
                 vod_bucket_id = vod_bucket.id
                 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():
                 if not store_meal.exists():
                     continue
                     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)
                 order = Order_Model.objects.filter(rank__bucket_id=vod_bucket_id)
                 Jan_count = order.filter(status=1, addTime__range=[Jan, Feb]).count()
                 Jan_count = order.filter(status=1, addTime__range=[Jan, Feb]).count()
                 Feb_count = order.filter(status=1, addTime__range=[Feb, Mar]).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()
                 Oct_count = order.filter(status=1, addTime__range=[Oct, Nov]).count()
                 Nov_count = order.filter(status=1, addTime__range=[Nov, Dec]).count()
                 Nov_count = order.filter(status=1, addTime__range=[Nov, Dec]).count()
                 Dec_count = order.filter(status=1, addTime__range=[Dec, Jan_next]).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]
                         Oct_count, Nov_count, Dec_count]
 
 
                 cloud_data = {
                 cloud_data = {
@@ -1166,4 +1204,4 @@ class serveManagement(View):
             return response.json(0, {'list': list_data})
             return response.json(0, {'list': list_data})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)
-            return response.json(500, repr(e))
+            return response.json(500, repr(e))