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