You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
4.1 KiB
104 lines
4.1 KiB
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) |
|
# 返回 |
|
result_dict = { |
|
'status': 'success', |
|
'message': '成功', |
|
'data': { |
|
'cinema_name': last_ai_data.cinema, |
|
'zz_code': last_ai_data.zz_code, |
|
'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, |
|
'result': last_ai_data.result, |
|
} |
|
} |
|
print(result_dict) |
|
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
|
|
|