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 datetime
import csv import csv
import json
from ai.models import *
from io import StringIO from io import StringIO
from django_redis import get_redis_connection from django_redis import get_redis_connection
from ai.models import CinemaHall from ai.models import CinemaHall
@ -154,4 +156,14 @@ def count_show(show_data):
show_count = [] show_count = []
for show, count in show_dict.items(): for show, count in show_dict.items():
show_count.append(f"{show}{str(round(count / len(show_data) * 100, 2))}%,共排{str(count)}") 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'] != '': if (req['success'] is True) and req['data']['movieInfo'] != '':
info = req['data']['movieInfo'] info = req['data']['movieInfo']
hot = f"{info['movie_name']}》 - 想看:{info['wish_num']},热度:小红书{info['xiaohongshu']}、视频号{info['shipinhao']}、抖音{info['douyin']}、微博{info['weibo']}" hot = f"{info['movie_name']}》 - 想看:{info['wish_num']},热度:小红书{info['xiaohongshu']}、视频号{info['shipinhao']}、抖音{info['douyin']}、微博{info['weibo']}"
print(hot) # print(hot)
daily = req['data']['movieDailyBox'] daily = req['data']['movieDailyBox']
sales = [f"{daily[n]['businessDate']} {daily[n]['boxRate']}%" for n in range(0, 6)] 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))] 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)}" r = f"\t{hot}过去六天的票房占比:{''.join(sales)};今天到当前时间的票房占比:{daily[6]['boxRate']}%;未来7天的预售票房占比:{''.join(pre_sales)}"
print(r) print('MovieData.get_data', movie_code, r)
return r return r
def sign(self, code): def sign(self, code):
@ -42,4 +42,4 @@ class MovieData:
if __name__ == '__main__': if __name__ == '__main__':
md = MovieData() 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 *
from ai.models import TestCinema from ai.models import TestCinema
from ai.utils.sql import * from ai.utils.sql import *
from ai.utils.basic_func import *
import datetime import datetime
import pandas as pd import pandas as pd
import json import json
@ -83,13 +84,13 @@ class GetData:
start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=29, minutes=59, start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=29, minutes=59,
seconds=59) seconds=59)
end_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=6) 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'] bl_bool, bl_str, bl_list = get_black_list(self.zz_code)
if len(black_list) > 0: if bl_bool:
sql = GET_HANDLE_MOVIE + ','.join(['%s'] * len(black_list)) + ');' sql = GET_HANDLE_MOVIE + bl_str + ');'
self.cur.execute(sql, (start_datetime, end_datetime, *black_list)) self.cur.execute(sql, (start_datetime, end_datetime, *bl_list))
print(self.cur.mogrify(sql, (start_datetime, end_datetime, *black_list))) print(self.cur.mogrify(sql, (start_datetime, end_datetime, *bl_list)))
else: else:
sql = GET_HANDLE_MOVIE + '\' \'' + ');' sql = GET_HANDLE_MOVIE + bl_str + ');'
self.cur.execute(sql, (start_datetime, end_datetime)) self.cur.execute(sql, (start_datetime, end_datetime))
print(self.cur.mogrify(sql, (start_datetime, end_datetime))) print(self.cur.mogrify(sql, (start_datetime, end_datetime)))
available_movie = self.cur.fetchall() 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, start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=29, minutes=59,
seconds=59) seconds=59)
end_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=6) 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() return self.cur.fetchall()

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

@ -124,7 +124,7 @@ FROM cinema_movie_info cmi
WHERE scvm.system_const_sub_module = 'new_media_type' WHERE scvm.system_const_sub_module = 'new_media_type'
AND cmi.cinema_movie_start_datetime <= %s AND cmi.cinema_movie_start_datetime <= %s
AND cmi.cinema_movie_end_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, SELECT cmi.cinema_movie_cn_name,
cmi.cinema_movie_num cmi.cinema_movie_num
FROM cinema_movie_info cmi FROM cinema_movie_info cmi
WHERE cmi.cinema_movie_start_datetime <= %s WHERE cmi.cinema_movie_start_datetime <= %s
AND cmi.cinema_movie_end_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; GROUP BY cmi.cinema_movie_num;
""" """
Loading…
Cancel
Save