1、抽象出获取黑名单的方法

2、黑名单从场次id换成专资编码,已适配世界杯场次变化快的问题
3、修复海象赋值的bug
4、提示词中取消新片指定排片数量的情况,改为根据热度自行排片作为尝试
main
rogersun 1 week ago
parent ccbadcfb00
commit 701a36d9f4
  1. 14
      ai/utils/basic_func.py
  2. 10
      ai/utils/movie_data.py
  3. 24
      ai/utils/show_database.py
  4. 4
      ai/utils/show_func.py
  5. 16
      ai/utils/show_prompt.py
  6. 7
      ai/utils/sql.py

@ -1,5 +1,7 @@
import datetime
import csv
import json
from ai.models import *
from io import StringIO
from django_redis import get_redis_connection
from ai.models import CinemaHall
@ -154,4 +156,14 @@ def count_show(show_data):
show_count = []
for show, count in show_dict.items():
show_count.append(f"{show}{str(round(count / len(show_data) * 100, 2))}%,共排{str(count)}")
return '\n'.join(show_count)
return '\n'.join(show_count)
# 处理黑名单
def get_black_list(cinema_code:str):
black_list = json.loads(TestCinema.objects.filter(zz_code=cinema_code).first().user_config)['movie_black_list']
black_list_bool = False
black_list_str = '\' \''
if len(black_list) > 0:
black_list_bool = True
black_list_str = ','.join(['%s'] * len(black_list))
return black_list_bool, black_list_str, black_list

@ -24,14 +24,14 @@ class MovieData:
if (req['success'] is True) and req['data']['movieInfo'] != '':
info = req['data']['movieInfo']
hot = f"{info['movie_name']}》 - 想看:{info['wish_num']},热度:小红书{info['xiaohongshu']}、视频号{info['shipinhao']}、抖音{info['douyin']}、微博{info['weibo']}"
print(hot)
# print(hot)
daily = req['data']['movieDailyBox']
sales = [f"{daily[n]['businessDate']} {daily[n]['boxRate']}%" for n in range(0, 6)]
print(sales)
# print(sales)
pre_sales = [f"{daily[n]['businessDate']} {daily[n]['boxRate']}%" for n in range(7, len(daily))]
print(pre_sales)
# print(pre_sales)
r = f"\t{hot}过去六天的票房占比:{''.join(sales)};今天到当前时间的票房占比:{daily[6]['boxRate']}%;未来7天的预售票房占比:{''.join(pre_sales)}"
print(r)
print('MovieData.get_data', movie_code, r)
return r
def sign(self, code):
@ -42,4 +42,4 @@ class MovieData:
if __name__ == '__main__':
md = MovieData()
md.get_data('001105582014')
md.get_data('082000852026')

@ -3,6 +3,7 @@ from pymysql.cursors import DictCursor
from ai.models import *
from ai.models import TestCinema
from ai.utils.sql import *
from ai.utils.basic_func import *
import datetime
import pandas as pd
import json
@ -83,13 +84,13 @@ class GetData:
start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=29, minutes=59,
seconds=59)
end_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=6)
black_list = json.loads(TestCinema.objects.filter(zz_code=self.zz_code).first().user_config)['movie_black_list']
if len(black_list) > 0:
sql = GET_HANDLE_MOVIE + ','.join(['%s'] * len(black_list)) + ');'
self.cur.execute(sql, (start_datetime, end_datetime, *black_list))
print(self.cur.mogrify(sql, (start_datetime, end_datetime, *black_list)))
bl_bool, bl_str, bl_list = get_black_list(self.zz_code)
if bl_bool:
sql = GET_HANDLE_MOVIE + bl_str + ');'
self.cur.execute(sql, (start_datetime, end_datetime, *bl_list))
print(self.cur.mogrify(sql, (start_datetime, end_datetime, *bl_list)))
else:
sql = GET_HANDLE_MOVIE + '\' \'' + ');'
sql = GET_HANDLE_MOVIE + bl_str + ');'
self.cur.execute(sql, (start_datetime, end_datetime))
print(self.cur.mogrify(sql, (start_datetime, end_datetime)))
available_movie = self.cur.fetchall()
@ -151,5 +152,14 @@ class GetData:
start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=29, minutes=59,
seconds=59)
end_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=6)
self.cur.execute(GET_MOVIE_INFO, (start_datetime, end_datetime))
bl_bool, bl_str, bl_list = get_black_list(self.zz_code)
if bl_bool:
sql = GET_MOVIE_INFO_1 + bl_str + GET_MOVIE_INFO_2
self.cur.execute(sql, (start_datetime, end_datetime, *bl_list))
print(self.cur.mogrify(sql, (start_datetime, end_datetime, *bl_list)))
else:
sql = GET_MOVIE_INFO_1 + bl_str + GET_MOVIE_INFO_2
self.cur.execute(sql, (start_datetime, end_datetime))
print(self.cur.mogrify(sql, (start_datetime, end_datetime)))
self.cur.execute(sql, (start_datetime, end_datetime, *bl_list))
return self.cur.fetchall()

@ -68,6 +68,8 @@ def get_all_movie_hot_info(cinema, show_date):
movie_info_list = []
for m in movie:
print(m)
if hot:=movie_data.get_data(m['cinema_movie_num']) != '':
if (hot:=movie_data.get_data(m['cinema_movie_num'])) != '':
# print('hot', hot)
movie_info_list.append(hot)
# print(movie_info_list)
return movie_info_list

@ -77,14 +77,14 @@ class ShowAI:
Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='Rules')).first().prompt_val # 获取提示词模板
rules = rules.replace('{template_date}', template_date) # 处理模板日期
# 获取新片
new_movie_str_list = []
new_movie = data.get_new_movie(self.show_date)
for new in new_movie:
new_movie_str_list.append(
f"\t增加{new}的场次,建议排{str(random.randint(2, 4))}场,可根据影片热度和口碑适当增加;")
rules = rules.replace('{new_movie}',
'\t无新片上映' if len(new_movie_str_list) == 0 else '\n'.join(
new_movie_str_list)) # 处理新片数据
# new_movie_str_list = []
# new_movie = data.get_new_movie(self.show_date)
# for new in new_movie:
# new_movie_str_list.append(
# f"\t增加{new}的场次,建议排{str(random.randint(2, 4))}场,可根据影片热度和口碑适当增加;")
# rules = rules.replace('{new_movie}',
# '\t无新片上映' if len(new_movie_str_list) == 0 else '\n'.join(
# new_movie_str_list)) # 处理新片数据
prompt_list.append(rules)
# 处理基本规则

@ -124,7 +124,7 @@ FROM cinema_movie_info cmi
WHERE scvm.system_const_sub_module = 'new_media_type'
AND cmi.cinema_movie_start_datetime <= %s
AND cmi.cinema_movie_end_datetime > %s
AND cmi.cinema_movie_id NOT IN (
AND cmi.cinema_movie_num NOT IN (
"""
# 获取新上映的影片
@ -202,11 +202,14 @@ FROM (
# 获取指定日期的可用于排片的影片
GET_MOVIE_INFO = f"""
GET_MOVIE_INFO_1 = """
SELECT cmi.cinema_movie_cn_name,
cmi.cinema_movie_num
FROM cinema_movie_info cmi
WHERE cmi.cinema_movie_start_datetime <= %s
AND cmi.cinema_movie_end_datetime > %s
AND cmi.cinema_movie_num NOT IN ("""
GET_MOVIE_INFO_2 = """)
GROUP BY cmi.cinema_movie_num;
"""
Loading…
Cancel
Save