|
|
|
|
from django.http import JsonResponse
|
|
|
|
|
from django.db.models import Q
|
|
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
|
import json
|
|
|
|
|
from ai.models import *
|
|
|
|
|
from ai.utils.show_process import show_main_process
|
|
|
|
|
from ai.utils.show_func import get_cinema_show_result_func
|
|
|
|
|
from ai.utils.basic_func import *
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 手动触发ai排片
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
def manual_general_show(request):
|
|
|
|
|
zz_code = request.GET.dict().get('cinema_code')
|
|
|
|
|
result = show_main_process(zz_code)
|
|
|
|
|
result_dict = {
|
|
|
|
|
'status': 'success' if result else 'fail',
|
|
|
|
|
'message': '生成成功' if result else '生成失败',
|
|
|
|
|
}
|
|
|
|
|
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 更新指定日期的排片
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
def get_cinema_show_result(request):
|
|
|
|
|
zz_code = request.GET.dict().get('cinema_code')
|
|
|
|
|
show_date = request.GET.dict().get('show_date')
|
|
|
|
|
print(zz_code, show_date)
|
|
|
|
|
show, income = get_cinema_show_result_func(zz_code, show_date)
|
|
|
|
|
result_dict = {
|
|
|
|
|
'status': 'success',
|
|
|
|
|
'message': '生成成功',
|
|
|
|
|
'show': show,
|
|
|
|
|
'income': income,
|
|
|
|
|
}
|
|
|
|
|
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 清除redis锁
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
def clear_lock(request):
|
|
|
|
|
clear_lock_func()
|
|
|
|
|
result_dict = {
|
|
|
|
|
'status': 'success',
|
|
|
|
|
'message': '完成',
|
|
|
|
|
}
|
|
|
|
|
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
|
def report(request):
|
|
|
|
|
zz_code = request.GET.dict().get('cinema_code')
|
|
|
|
|
show_date = request.GET.dict().get('show_date')
|
|
|
|
|
force = request.GET.dict().get('force')
|
|
|
|
|
print(zz_code, show_date)
|
|
|
|
|
cinema = TestCinema.objects.filter(zz_code=zz_code).first()
|
|
|
|
|
# 获取真实排片和销售数据
|
|
|
|
|
check_point = datetime.datetime.strftime(
|
|
|
|
|
datetime.datetime.strptime(show_date, '%Y-%m-%d') + datetime.timedelta(hours=30), '%Y-%m-%d %H:%M:%S')
|
|
|
|
|
last_real_data = AiShow.objects.filter(Q(is_ai_show=False) &
|
|
|
|
|
Q(zz_code=zz_code) &
|
|
|
|
|
Q(show_date=show_date) &
|
|
|
|
|
Q(updated_at__gt=check_point)).order_by('-id').first()
|
|
|
|
|
if (not last_real_data) or (force == '1'):
|
|
|
|
|
get_cinema_show_result_func(zz_code, show_date)
|
|
|
|
|
|
|
|
|
|
last_ai_data = AiShow.objects.filter(Q(is_ai_show=True) &
|
|
|
|
|
Q(zz_code=zz_code) &
|
|
|
|
|
Q(show_date=show_date)).order_by('-id').first()
|
|
|
|
|
if not last_ai_data:
|
|
|
|
|
result_dict = {
|
|
|
|
|
'status': 'Failure',
|
|
|
|
|
'message': '没有查询到有效的智能排片数据,请调整日期和影院后再试!'}
|
|
|
|
|
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
|
|
|
|
|
last_real_data = AiShow.objects.filter(Q(is_ai_show=False) &
|
|
|
|
|
Q(zz_code=zz_code) &
|
|
|
|
|
Q(show_date=show_date)).order_by('-id').first()
|
|
|
|
|
ai_dict = csv_to_obj(last_ai_data.show)
|
|
|
|
|
real_dict = csv_to_obj(last_real_data.show)
|
|
|
|
|
temp_dict = csv_to_obj(last_ai_data.template)
|
|
|
|
|
print(ai_dict, real_dict, temp_dict)
|
|
|
|
|
output_list_ai_real, output_csv_ai_real = format_show_data(zz_code, show_date, ai_dict, real_dict)
|
|
|
|
|
output_list_ai_temp, output_csv_ai_temp = format_show_data(zz_code, show_date, ai_dict, temp_dict)
|
|
|
|
|
# 获取影厅制式
|
|
|
|
|
hall_type = get_hall_type(cinema_code=zz_code)
|
|
|
|
|
# 计算排片占比
|
|
|
|
|
ai_count = count_show(ai_dict)
|
|
|
|
|
real_count = count_show(real_dict)
|
|
|
|
|
# 返回
|
|
|
|
|
result_dict = {
|
|
|
|
|
'status': 'success',
|
|
|
|
|
'message': '成功',
|
|
|
|
|
'data': {
|
|
|
|
|
'cinema_name': last_ai_data.cinema,
|
|
|
|
|
'zz_code': last_ai_data.zz_code,
|
|
|
|
|
'hall_type': hall_type,
|
|
|
|
|
'real_sales': last_real_data.sales,
|
|
|
|
|
'ai_sales': last_ai_data.sales,
|
|
|
|
|
'take_times': last_ai_data.take_times,
|
|
|
|
|
'take_tokens': json.loads(last_ai_data.take_tokens)['total_tokens'],
|
|
|
|
|
'csv': list_to_csv(output_csv_ai_real),
|
|
|
|
|
'real_obj': output_list_ai_real,
|
|
|
|
|
'template_obj': output_list_ai_temp,
|
|
|
|
|
'template_date': last_ai_data.temp_date,
|
|
|
|
|
'prompt': last_ai_data.prompt,
|
|
|
|
|
'ai_count': ai_count,
|
|
|
|
|
'real_count': real_count,
|
|
|
|
|
'result': last_ai_data.result,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
print(result_dict)
|
|
|
|
|
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
|