diff --git a/ai/utils/basic_func.py b/ai/utils/basic_func.py index 871d35c..d75fd12 100644 --- a/ai/utils/basic_func.py +++ b/ai/utils/basic_func.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) \ No newline at end of file + 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 \ No newline at end of file diff --git a/ai/utils/movie_data.py b/ai/utils/movie_data.py index d6bf1ab..d7598d6 100644 --- a/ai/utils/movie_data.py +++ b/ai/utils/movie_data.py @@ -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') diff --git a/ai/utils/show_database.py b/ai/utils/show_database.py index 3f181bf..a968971 100644 --- a/ai/utils/show_database.py +++ b/ai/utils/show_database.py @@ -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() diff --git a/ai/utils/show_func.py b/ai/utils/show_func.py index eb45077..166a595 100644 --- a/ai/utils/show_func.py +++ b/ai/utils/show_func.py @@ -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 diff --git a/ai/utils/show_prompt.py b/ai/utils/show_prompt.py index 1ae288e..5c65f94 100644 --- a/ai/utils/show_prompt.py +++ b/ai/utils/show_prompt.py @@ -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) # 处理基本规则 diff --git a/ai/utils/sql.py b/ai/utils/sql.py index 80da21c..15601d2 100644 --- a/ai/utils/sql.py +++ b/ai/utils/sql.py @@ -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; """ \ No newline at end of file