From 39fc8272bafa94142d59894c1b8dae57fdb13e59 Mon Sep 17 00:00:00 2001 From: rogersun Date: Fri, 10 Jul 2026 15:07:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=92=E7=89=87=E6=8C=87?= =?UTF-8?q?=E5=AF=BC=E6=8F=90=E7=A4=BA=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ai/migrations/0023_movieguidance.py | 31 +++++++++++++++++++++++++++++ ai/models.py | 19 ++++++++++++++++++ ai/serializers.py | 5 +++++ ai/utils/show_func.py | 11 ++++++++++ ai/utils/show_prompt.py | 7 +++++++ 5 files changed, 73 insertions(+) create mode 100644 ai/migrations/0023_movieguidance.py diff --git a/ai/migrations/0023_movieguidance.py b/ai/migrations/0023_movieguidance.py new file mode 100644 index 0000000..3bc3fc4 --- /dev/null +++ b/ai/migrations/0023_movieguidance.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.7 on 2026-07-10 06:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ai', '0022_newmoviesuggestion_cinema_newmoviesuggestion_zz_code_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='MovieGuidance', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('cinema', models.CharField(default='', max_length=50)), + ('zz_code', models.CharField(default='', max_length=50)), + ('show_date', models.CharField(default='', max_length=50)), + ('movie_zz_code', models.CharField(default='', max_length=50)), + ('movie_name', models.CharField(default='', max_length=50)), + ('guidance', models.CharField(default='', max_length=50)), + ('delete_flag', models.BooleanField(default=False)), + ], + options={ + 'verbose_name': '集团排片指导', + 'verbose_name_plural': '集团排片指导', + 'db_table': 'ai_movie_guidance', + }, + ), + ] diff --git a/ai/models.py b/ai/models.py index 141be97..f888955 100644 --- a/ai/models.py +++ b/ai/models.py @@ -172,3 +172,22 @@ class NewMovieSuggestion(models.Model): verbose_name = '新片推荐排片数' verbose_name_plural = '新片推荐排片数' db_table = 'ai_new_movie_suggestion' + + +class MovieGuidance(models.Model): + id = models.AutoField(primary_key=True) + cinema = models.CharField(max_length=50, default='') + zz_code = models.CharField(max_length=50, default='') + show_date = models.CharField(max_length=50, default='') + movie_zz_code = models.CharField(max_length=50, default='') + movie_name = models.CharField(max_length=50, default='') + guidance = models.CharField(max_length=50, default='') + delete_flag = models.BooleanField(default=False) + + def __str__(self): + return self.movie_name + + class Meta: + verbose_name = '集团排片指导' + verbose_name_plural = '集团排片指导' + db_table = 'ai_movie_guidance' diff --git a/ai/serializers.py b/ai/serializers.py index fa761a5..24e5407 100644 --- a/ai/serializers.py +++ b/ai/serializers.py @@ -49,3 +49,8 @@ class NewMovieSuggestionSerializer(serializers.ModelSerializer): class Meta: model = NewMovieSuggestion fields = '__all__' + +class MovieGuidanceSerializer(serializers.ModelSerializer): + class Meta: + model = MovieGuidance + fields = '__all__' diff --git a/ai/utils/show_func.py b/ai/utils/show_func.py index 352fe7d..33cac6c 100644 --- a/ai/utils/show_func.py +++ b/ai/utils/show_func.py @@ -183,3 +183,14 @@ def get_new_movie(start_date): {'movie_zz_code': new['cinema_movie_num'], 'movie_name': new['cinema_movie_cn_name']}) new_data = True return None if new_data == False else new_dict + + +# 模拟用户设置的新片推荐数量 +def get_movie_guidance(cinema, show_date): + movie_guidance = MovieGuidance.objects.filter(Q(zz_code=cinema.zz_code) & Q(show_date=show_date) & Q(delete_flag=False)).all() + if movie_guidance: + movie_list = [] + for m in movie_guidance: + movie_list.append(f"\t《{m.movie_name}》强制排片占比为{m.guidance}%;") + return '\n'.join(movie_list) + return '\t无' \ No newline at end of file diff --git a/ai/utils/show_prompt.py b/ai/utils/show_prompt.py index cf45164..0f04a36 100644 --- a/ai/utils/show_prompt.py +++ b/ai/utils/show_prompt.py @@ -203,6 +203,13 @@ class ShowAI: basic = basic.replace('{end}', end) prompt_list.append(basic) + # 处理集团排片指导 + movie_guidance = PromptTemplate.objects.filter( + Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='Guide')).first().prompt_val # 获取提示词模板 + guidance = get_movie_guidance(self.cinema, self.show_date) + movie_guidance = movie_guidance.replace('{movie_guidance}', guidance) + prompt_list.append(movie_guidance) + # 处理增减场次规则 add_reduce = PromptTemplate.objects.filter( Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='AddReduce')).first().prompt_val # 获取提示词模板