From dac0ac8b00d87b3fbd46972ca5afbbaec185a640 Mon Sep 17 00:00:00 2001 From: rogersun Date: Thu, 9 Jul 2026 18:34:45 +0800 Subject: [PATCH] =?UTF-8?q?ai=E6=8E=92=E7=89=87=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=96=B0=E7=89=87=E6=8E=A8=E8=8D=90=E6=8E=92=E7=89=87=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ai/models.py | 20 ++++++++++++++++++-- ai/serializers.py | 8 +++++++- ai/utils/show_func.py | 23 ++++++++++++++++++++--- ai/utils/show_prompt.py | 1 + 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/ai/models.py b/ai/models.py index 6331ef2..fd247c4 100644 --- a/ai/models.py +++ b/ai/models.py @@ -69,8 +69,8 @@ class AiShow(models.Model): message = models.TextField() # ai返回结果的完整信息 created_at = models.DateTimeField(auto_now_add=True) # ai返回结果的时间 updated_at = models.DateTimeField(auto_now=True) - take_times = models.IntegerField(default=0) # 从提示词发给ai到取得返回结果的时间,单位秒 - take_tokens = models.CharField(default='', max_length=2000) # ai返回结果中token消耗部分的信息 + take_times = models.IntegerField(default=0) # 从提示词发给ai到取得返回结果的时间,单位秒 + take_tokens = models.CharField(default='', max_length=2000) # ai返回结果中token消耗部分的信息 prompt_version = models.CharField(max_length=50, default='') # 使用的提示词版本 def __str__(self): @@ -154,3 +154,19 @@ class MovieHotInfo(models.Model): verbose_name = 'AI影片热度信息' verbose_name_plural = 'AI影片热度信息' db_table = 'ai_movie_hot' + + +class NewMovieSuggestion(models.Model): + id = models.AutoField(primary_key=True) + movie_zz_code = models.CharField(max_length=50) + movie_name = models.CharField(max_length=50) + suggestion = models.CharField(max_length=50) + delete_flag = models.BooleanField(default=False) + + def __str__(self): + return self.movie_name + + class Meta: + verbose_name = '新片推荐排片数' + verbose_name_plural = '新片推荐排片数' + db_table = 'ai_new_movie_suggestion' diff --git a/ai/serializers.py b/ai/serializers.py index ed0b8ae..fa761a5 100644 --- a/ai/serializers.py +++ b/ai/serializers.py @@ -42,4 +42,10 @@ class AiRuntimeSerializer(serializers.ModelSerializer): class MovieHotInfoSerializer(serializers.ModelSerializer): class Meta: model = MovieHotInfo - fields = '__all__' \ No newline at end of file + fields = '__all__' + + +class NewMovieSuggestionSerializer(serializers.ModelSerializer): + class Meta: + model = NewMovieSuggestion + fields = '__all__' diff --git a/ai/utils/show_func.py b/ai/utils/show_func.py index a23bca8..b931574 100644 --- a/ai/utils/show_func.py +++ b/ai/utils/show_func.py @@ -95,6 +95,7 @@ def get_target_show(cinema, show_date): target_date_show = '影厅别名,影厅id,影片别名,本地影片id,语言,放映日期,开始时间,结束时间,片长,场间' return target_date_show + # 从BI接口获取影片热度信息 def get_movie_hot_info_from_bi(cinema, show_date): data = GetData(cinema) @@ -108,14 +109,16 @@ def get_movie_hot_info_from_bi(cinema, show_date): print('name, title, hot', name, title, hot) return True + # 从本地数据库中获取影片热度信息 -def get_all_movie_hot_info(req_date: str = 'today', show_type:str='old', get_num: int = 10): +def get_all_movie_hot_info(req_date: str = 'today', show_type: str = 'old', get_num: int = 10): if req_date == 'today': date_sr = datetime.datetime.today().strftime('%Y-%m-%d') else: date_sr = req_date hot_order_day = get_runtime_val('hot_order_day') - hot_data = MovieHotInfo.objects.filter(Q(req_date=date_sr) & Q(show_type=show_type)).order_by(hot_order_day).all()[:get_num] + hot_data = MovieHotInfo.objects.filter(Q(req_date=date_sr) & Q(show_type=show_type)).order_by(hot_order_day).all()[ + :get_num] if hot_data: print('if hot_data') title = f"\t{hot_data[0].title}" @@ -127,4 +130,18 @@ def get_all_movie_hot_info(req_date: str = 'today', show_type:str='old', get_num data_list.append( f"\t《{hot.movie_name}》,{hot.wants},{hot.hots},{','.join([d['value'] for d in json.loads(hot.day_data)])}") print(data_list) - return data_list \ No newline at end of file + return data_list + + +# 模拟用户设置的新片推荐数量 +def get_new_suggestion(cinema, show_date): + data = GetData(cinema) + movie = data.get_movie_info(show_date, 'new') + new_movie_list = [] + for m in movie: + new_movie = NewMovieSuggestion.objects.filter(movie_name=m['cinema_movie_cn_name']).first() + if new_movie is not None: + new_movie_list.append(f"\t《{m['cinema_movie_cn_name']}》的不同制式版本总计建议至少排{new_movie.suggestion}场;") + if len(new_movie_list) > 0: + return '\n'.join(new_movie_list) + return None diff --git a/ai/utils/show_prompt.py b/ai/utils/show_prompt.py index 2d7979e..1b10987 100644 --- a/ai/utils/show_prompt.py +++ b/ai/utils/show_prompt.py @@ -189,6 +189,7 @@ class ShowAI: 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('{available_movie}', data.get_available_movie(self.show_date)) # 处理上映影片 + rules = rules.replace('{new_movie_suggestion}', get_new_suggestion(self.cinema, self.show_date)) # 处理新片推荐数量 prompt_list.append(rules) # 处理基本规则