更新支持排片黑名单

main
rogersun 2 weeks ago
parent 88db04574b
commit 37fbe462fe
  1. 15
      ai/models.py
  2. 37
      ai/utils/show_database.py
  3. 15
      ai/utils/show_prompt.py
  4. 18
      ai/utils/sql.py
  5. 6
      ai/views.py

@ -57,3 +57,18 @@ class AiShow(models.Model):
verbose_name = 'AI排片数据'
verbose_name_plural = 'AI排片数据'
db_table = 'ai_show_result'
class CinemaHall(models.Model):
id = models.AutoField(primary_key=True)
cinema_code = models.CharField(max_length=50)
hall_id = models.CharField(max_length=50)
hall_name = models.CharField(max_length=50)
def __str__(self):
return self.hall_name
class Meta:
verbose_name = '影厅数据'
verbose_name_plural = '影厅数据'
db_table = 'ai_show_hall'

@ -1,14 +1,18 @@
import pymysql
from pymysql.cursors import DictCursor
from ai.models import *
from ai.models import TestCinema
from ai.utils.sql import *
import datetime
import pandas as pd
import json
class GetData:
def __init__(self, db_config):
self.conn = pymysql.connect(**db_config)
def __init__(self, cinema):
self.conn = pymysql.connect(**json.loads(cinema.db_config))
self.cur = self.conn.cursor(cursor=DictCursor)
self.zz_code = cinema.zz_code
def exit(self):
try:
@ -64,9 +68,9 @@ class GetData:
# 获取指定日期的可放映影片
def get_available_movie(self, date):
start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=6)
end_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)
end_datetime = datetime.datetime.strptime(date, '%Y-%m-%d') + datetime.timedelta(hours=6)
self.cur.execute(GET_AVAILABLE_MOVIE, (start_datetime, end_datetime))
available_movie = self.cur.fetchall()
available_movie_list = [
@ -74,6 +78,19 @@ class GetData:
for m in available_movie]
return '\n'.join(available_movie_list)
# 获取指定日期的可用于排片的影片
def get_handle_movie(self, date):
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']
self.cur.execute(GET_HANDLE_MOVIE, (start_datetime, end_datetime, black_list))
available_movie = self.cur.fetchall()
available_movie_list = [
f"\t{m['cinema_movie_alias']}》 - 影片id:{m['cinema_movie_id']},影片时长:{m['cinema_movie_time']},语言:{m['language']},制式:{m['media_type']}, 最早排片开始时间:{m['cinema_movie_start_datetime']}, 最晚排片截止时间:{m['cinema_movie_end_datetime']}"
for m in available_movie]
return '\n'.join(available_movie_list)
# 获取新上映的影片
def get_new_movie(self, date):
start_datetime = datetime.datetime.strptime(date, '%Y-%m-%d')
@ -122,15 +139,3 @@ class GetData:
def get_media_type(self):
self.cur.execute(GET_HALL_MEDIA_TYPE)
if __name__ == '__main__':
from main import cinema_list
data = GetData(cinema_list[0]['db'])
# print(data.get_show_data('2026-05-28 06:00:00', '2026-06-04 05:59:59'))
# print(data.get_sell_data('2026-05-28 06:00:00', '2026-06-04 05:59:59'))
# print(data.get_available_movie('2026-06-05'))
print(data.get_new_movie('2026-06-05'))
# print(data.get_hall_media_type())
# print(data.get_template_date('2026-05-28 06:00:00', '2026-06-04 05:59:59'))

@ -10,9 +10,10 @@ from openai import OpenAI
class ShowAI:
def __init__(self, cinema_info, show_date):
self.cinema_name = cinema_info.name
self.cinema_zz_code = cinema_info.zz_code
self.cinema_db_config = json.loads(cinema_info.db_config)
self.cinema = cinema_info
# self.cinema_name = cinema_info.name
# self.cinema_zz_code = cinema_info.zz_code
# self.cinema_db_config = json.loads(cinema_info.db_config)
self.user_config = json.loads(cinema_info.user_config)
self.show_date = show_date
self.prompt = ""
@ -23,7 +24,7 @@ class ShowAI:
# 生成提示词
def general_prompt(self):
data = GetData(self.cinema_db_config)
data = GetData(self.cinema)
# 准备各种日期时间
history_start, history_end, target_start, target_end = get_data_datetime(self.show_date)
temp = datetime.datetime.strftime(data.get_template_date(history_start, history_end), '%Y-%m-%d')
@ -54,7 +55,8 @@ class ShowAI:
# 处理影片和影厅信息
movie_hall = PromptTemplate.objects.filter(
Q(del_flag=False) & Q(prompt_type='show') & Q(prompt_key='MovieHall')).first().prompt_val # 获取提示词模板
movie_hall = movie_hall.replace('{available_movie}', data.get_available_movie(self.show_date)) # 处理可排影片
movie_hall = movie_hall.replace('{available_movie}', data.get_available_movie(self.show_date)) # 处理上映影片
movie_hall = movie_hall.replace('{handle_movie}', data.get_handle_movie(self.show_date)) # 处理可排影片
movie_hall = movie_hall.replace('{hall_info}', data.get_hall_media_type()) # 处理影厅信息
free_hall = self.user_config['holiday_date_free_hall'] if target_date_is_holiday else self.user_config[
'holiday_date_free_hall']
@ -74,7 +76,8 @@ class ShowAI:
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)) # 处理新片数据
'\t无新片上映' if len(new_movie_str_list) == 0 else '\n'.join(
new_movie_str_list)) # 处理新片数据
prompt_list.append(rules)
# 处理基本规则

@ -108,6 +108,24 @@ WHERE scvm.system_const_sub_module = 'new_media_type'
AND cmi.cinema_movie_end_datetime > %s;
"""
# 获取指定日期的可用于排片的影片
GET_HANDLE_MOVIE = """
SELECT cmi.cinema_movie_alias,
cmi.cinema_movie_id,
cmi.cinema_movie_time,
cmlt.cinema_movie_lang_type_desc as language,
scvm.system_const_val_desc as media_type,
cmi.cinema_movie_start_datetime,
cmi.cinema_movie_end_datetime
FROM cinema_movie_info cmi
JOIN cinema_movie_lang_type cmlt ON cmi.cinema_movie_lang_id = cmlt.cinema_movie_lang_type_id
JOIN system_const_val_map scvm ON cmi.cinema_movie_media_type = scvm.system_const_val_value
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 (%s);
"""
# 获取新上映的影片
GET_NEW_MOVIE = """SELECT cmi.cinema_movie_alias,
cmi.cinema_movie_id,

@ -38,7 +38,7 @@ def get_cinema_show_result(request):
income = ''
if cinema:
print(cinema)
data = GetData(json.loads(cinema.db_config))
data = GetData(cinema)
show = data.get_show_data(start, end)
income = data.get_total_income(start, end)
print(show, income)
@ -79,3 +79,7 @@ def clear_lock(request):
'message': '完成',
}
return JsonResponse(result_dict, json_dumps_params={'ensure_ascii': False})
# @csrf_exempt
# def show_diff(request):
# #
Loading…
Cancel
Save