from django.db.models import Q import datetime from ai.models import * from ai.utils.show_database import GetData from ai.utils.datetime_format import * from ai.utils.movie_data import * from ai.utils.basic_func import * def get_cinema_show_result_func(_zz_code, _show_date): cinema = TestCinema.objects.filter(zz_code=_zz_code).first() start = datetime.datetime.strftime(datetime.datetime.strptime(_show_date, '%Y-%m-%d') + datetime.timedelta(hours=6), '%Y-%m-%d %H:%M:%S') end = datetime.datetime.strftime( datetime.datetime.strptime(_show_date, '%Y-%m-%d') + datetime.timedelta(hours=29, minutes=59, seconds=59), '%Y-%m-%d %H:%M:%S') show = '' income = '0' if cinema: print(cinema) data = GetData(cinema) show = data.get_show_data(start, end) income = data.get_total_income(start, end) print(show, income) show_db = AiShow.objects.filter(Q(is_ai_show=False) & Q(zz_code=_zz_code) & Q(show_date=_show_date)).order_by( '-id').first() if show is False: show = ('影厅别名,影厅id,影片别名,本地影片id,语言,放映日期,开始时间,结束时间,片长,场间') income = '0' if income is None: income = '0' if show_db: print('show_db', show_db) show_db.show = show show_db.sales = income show_db.save() else: try: AiShow.objects.create( cinema=cinema.name, zz_code=cinema.zz_code, show_date=_show_date, is_ai_show=False, show=show, sales=income, prompt='', result='', message='', take_times=0, take_tokens='0' ) except Exception as e: print(e) return show, income # 获取模板日期排片数据 def get_template_show(cinema, show_date): history_start, history_end, target_start, target_end = get_data_datetime(show_date) data = GetData(cinema) temp_date_obj = data.get_template_date(history_start, history_end) temp_date = datetime.datetime.strftime(temp_date_obj, '%Y-%m-%d') temp_start = datetime.datetime.strftime(temp_date_obj + datetime.timedelta(hours=6), '%Y-%m-%d %H:%M:%S') temp_end = datetime.datetime.strftime(temp_date_obj + datetime.timedelta(hours=29, minutes=59, seconds=59), '%Y-%m-%d %H:%M:%S') temp_show = data.get_show_data(temp_start, temp_end) return temp_show, temp_date # 获取模板日期排片数据, 从昨天开始找一天有排片的数据做为模板,如果没有则返回None def get_template_show_tomorrow(cinema): i = -1 temp_show = False while temp_show is False or i >= -3: tomorrow = datetime.datetime.combine(datetime.date.today() + datetime.timedelta(days=i), datetime.time()) tomorrow_start = datetime.datetime.strftime(tomorrow + datetime.timedelta(hours=6), '%Y-%m-%d %H:%M:%S') tomorrow_end = datetime.datetime.strftime(tomorrow + datetime.timedelta(hours=29, minutes=59, seconds=59), '%Y-%m-%d %H:%M:%S') tomorrow_str = datetime.datetime.strftime(tomorrow, '%Y-%m-%d') data = GetData(cinema) temp_show = data.get_show_data(tomorrow_start, tomorrow_end) if temp_show is not False: return temp_show, tomorrow_str else: i -= 1 return temp_show, '' # 获取目标日期排片数据 def get_target_show(cinema, show_date): history_start, history_end, target_start, target_end = get_data_datetime(show_date) data = GetData(cinema) target_date_show = data.get_show_data(target_start, target_end) if not target_date_show: target_date_show = '影厅别名,影厅id,影片别名,本地影片id,语言,放映日期,开始时间,结束时间,片长,场间' return target_date_show # 从BI接口获取影片热度信息 def get_movie_hot_info_from_bi(cinema, show_date): data = GetData(cinema) show_type_list = ['old', 'new'] for show_type in show_type_list: print('get_movie_hot_info_from_bi', show_type) movie = data.get_movie_info(show_date, show_type) movie_data = MovieData() for m in movie: name, title, hot = movie_data.get_data_from_bi(m['cinema_movie_num'], show_type) 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): 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] if hot_data: print('if hot_data') title = f"\t{hot_data[0].title}" data_list = [title] else: return [] for hot in hot_data: print(f"\t{hot.movie_name},{hot.wants},{hot.hots},{','.join([d['value'] for d in json.loads(hot.day_data)])}") 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 # 模拟用户设置的新片推荐数量 def get_new_suggestion(cinema, show_date): data = GetData(cinema) tomorrow = datetime.datetime.today() + datetime.timedelta(days=-1) show_date_obj = datetime.datetime.strptime(show_date, '%Y-%m-%d') delta = (show_date_obj - tomorrow).days date_list = [datetime.datetime.strftime(tomorrow + datetime.timedelta(days=i), "%Y-%m-%d") for i in range(0, delta + 2)] print('get_new_suggestion-date_list', date_list) new_movie_list = [] for date in date_list: movie = data.get_movie_info(date, 'new') for m in movie: print(m['cinema_movie_cn_name']) new_movie = NewMovieSuggestion.objects.filter( Q(movie_name=m['cinema_movie_cn_name']) & Q(zz_code=cinema.zz_code) & Q(delete_flag=False)).first() if new_movie is not None: if new_movie.suggestion == '0': text = f"\t{m['cinema_movie_cn_name']} 建议排一些场次;" else: text = f"\t{m['cinema_movie_cn_name']} 的不同制式版本总计建议排片占比为{new_movie.suggestion}%;" new_movie_list.append(text) if len(new_movie_list) > 0: return '\n'.join(new_movie_list) return None def get_new_movie(start_date=None): cinema_list = TestCinema.objects.all() start_date_obj = datetime.datetime.today() if start_date is not None: try: start_date_obj = datetime.datetime.strptime(start_date, '%Y-%m-%d') except ValueError: print(start_date) return False date_list = [datetime.datetime.strftime(start_date_obj + datetime.timedelta(days=i), '%Y-%m-%d') for i in range(1, 8)] new_dict = dict() new_data = False for cinema in cinema_list: data = GetData(cinema) new_dict[cinema.name] = dict() for date_val in date_list: new_list = data.get_movie_info(date_val, 'new') new_dict[cinema.name][date_val] = [] for new in new_list: print(new) if NewMovieSuggestion.objects.filter( Q(movie_zz_code=new['cinema_movie_num']) & Q(zz_code=cinema.zz_code)).first() is None: NewMovieSuggestion.objects.create( cinema=cinema.name, zz_code=cinema.zz_code, movie_zz_code=new['cinema_movie_num'], movie_name=new['cinema_movie_cn_name'], suggestion=0, delete_flag=True) new_dict[cinema.name][date_val].append( {'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: if m.type == 'rate': movie_list.append(f"\t{m.movie_name} 强制排片占比必须大于{m.guidance}%") else: movie_list.append(f"\t{m.movie_name} 强制排片至少{m.guidance}场") return '\n'.join(movie_list) return '\t无' def get_test_date_from_db(cinema_code: str, show_date: str) -> list: test_data = AiShow.objects.filter( Q(zz_code=cinema_code) & Q(show_date=show_date) & Q(is_ai_show=True) & Q(is_manual_test=True)).all() return [test.prompt_version for test in test_data]