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.
55 lines
2.0 KiB
55 lines
2.0 KiB
from ai.models import * |
|
from ai.utils.show_prompt import * |
|
import datetime |
|
from django_redis import get_redis_connection |
|
import re |
|
|
|
# ai排片主流程 |
|
def show_main_process(): |
|
# 查看状态 |
|
redis_conn = get_redis_connection() |
|
redis_key = f'ai_show{datetime.date.today().strftime("%Y%m%d")}' |
|
if redis_conn.exists(redis_key): |
|
return False |
|
# 获取影院列表 |
|
redis_conn.set(redis_key, 1, ex=60*60*20) |
|
test_cinema_list = TestCinema.objects.filter(is_active=True).all() |
|
# 生成目标日期 |
|
show_date = datetime.date.strftime(datetime.date.today() + datetime.timedelta(days=3), '%Y-%m-%d') |
|
for cinema in test_cinema_list: |
|
print(cinema.name) |
|
show_ai = ShowAI(cinema, show_date) |
|
prompt = show_ai.general_prompt() |
|
start = datetime.datetime.now() |
|
result, message, tokens = show_ai.get_show_result_ai() |
|
end = datetime.datetime.now() |
|
print('prompt:', prompt) |
|
print('result:', result) |
|
print('message:', message) |
|
print('tokens:', tokens) |
|
# 获取排片数据 |
|
_show = next((s for s in result.split('------') if s.startswith('\n影厅别名,影厅id')), '') |
|
_show = _show.strip() |
|
print('_show:', _show) |
|
# 获取销售额 |
|
_sales = next((s for s in result.split('\n') if re.search('预估销售数据', s)), '') |
|
_sales = str(re.findall(r'\d+\.?\d*', _sales)[0]) |
|
print('_sales:', _sales) |
|
# 处理返回结果 |
|
try: |
|
AiShow.objects.create( |
|
cinema=cinema.name, |
|
zz_code=cinema.zz_code, |
|
show_date=show_date, |
|
is_ai_show=True, |
|
show=_show, |
|
sales=_sales, |
|
prompt=prompt, |
|
result=result, |
|
message=message, |
|
take_times=int((end - start).seconds), |
|
take_tokens=tokens |
|
) |
|
except Exception as e: |
|
print(e) |
|
return True
|
|
|