diff --git a/db_edit.py b/db_edit.py index 8b41a39..ee2217e 100644 --- a/db_edit.py +++ b/db_edit.py @@ -24,7 +24,7 @@ from tg_publish import publish_to_tg_all, publish_to_tg from db_update_shortname import ai_shortname_all, generate_ai_shortname from evtg_publish import tg_post_event_by_id, tg_post_all_events from zk_load import load_json_all -from volk_load import load_categories +from volk_load import load_categories, load_all_events # Загружаем настройки из .env load_dotenv() @@ -1092,6 +1092,26 @@ def api_load_categories(): log_event(error_msg) return jsonify({'success': False, 'error': error_msg}), 500 +@bp.route('/api/run_volk_rescan', methods=['POST']) +@login_required +def api_run_volk_rescan(): + try: + # Проверка режима работы + workmode = os.getenv('WORKMODE', 'ZILANT') + if workmode != 'VOLK': + error_msg = "Рескан ВОЛК доступен только в режиме VOLK" + log_event(error_msg) + return jsonify({'success': False, 'error': error_msg}), 403 + + log_event("Запуск рескана ВОЛК...") + load_all_events() + log_event("Рескан ВОЛК выполнен успешно") + return jsonify({'success': True}) + except Exception as e: + error_msg = f"Ошибка при рескане ВОЛК: {str(e)}" + log_event(error_msg) + return jsonify({'success': False, 'error': error_msg}), 500 + @bp.route('/api/publish_event/', methods=['POST']) @login_required def api_publish_event(event_id): diff --git a/templates/index.html b/templates/index.html index 3c112a7..c9b0e95 100644 --- a/templates/index.html +++ b/templates/index.html @@ -557,6 +557,11 @@
+ {% if g.workmode == 'VOLK' %} + + {% endif %} @@ -862,6 +867,12 @@ }, 50); }); // Новые обработчики для кнопок событий + {% if g.workmode == 'VOLK' %} + const volkRescanBtn = document.getElementById('volk-rescan-btn'); + if (volkRescanBtn) { + volkRescanBtn.addEventListener('click', runVolkRescan); + } + {% endif %} {% if g.workmode == 'ZILANT' %} const zkRescanBtn = document.getElementById('zk-rescan-btn'); if (zkRescanBtn) { @@ -962,6 +973,32 @@ alert('Произошла ошибка при рескане Зилант-сервера'); }); } + // Рескан ВОЛК + function runVolkRescan() { + showProcessingMessage("Рескан ВОЛК..."); + fetch(`${PREFIX}/api/run_volk_rescan`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest' + } + }) + .then(response => response.json()) + .then(data => { + hideProcessingMessage(); + if (data.success) { + alert('Рескан ВОЛК выполнен успешно!'); + loadEvents(); + } else { + alert('Ошибка рескана ВОЛК: ' + (data.error || 'неизвестная ошибка')); + } + }) + .catch(error => { + hideProcessingMessage(); + console.error('Ошибка рескана ВОЛК:', error); + alert('Произошла ошибка при рескане ВОЛК'); + }); + } // Функция для публикации всех событий function publishAllEvents() { const currentEventId = selectedEventId; diff --git a/volk_load.py b/volk_load.py index 0791f63..440675d 100644 --- a/volk_load.py +++ b/volk_load.py @@ -378,6 +378,64 @@ def load_events_by_category(category_id): cursor.close() connection.close() +def load_all_events(): + """Экспортируемая функция для загрузки всех событий по всем категориям""" + try: + log_message("Начало загрузки всех событий по всем категориям") + + # Подключение к базе данных + connection = mysql.connector.connect( + host=MDB_HOST, + user=MDB_USER, + password=MDB_PW, + database=MDBASE + ) + + cursor = connection.cursor(dictionary=True) + + # Получаем список всех категорий + cursor.execute("SELECT ID FROM categories ORDER BY ID") + categories = cursor.fetchall() + + if not categories: + log_message("В базе данных нет категорий для загрузки событий", "WARNING") + cursor.close() + connection.close() + return + + log_message(f"Найдено {len(categories)} категорий для обработки") + + # Закрываем соединение перед вызовами load_events_by_category + # (так как она создает свое соединение) + cursor.close() + connection.close() + + # Загружаем события для каждой категории + processed_count = 0 + for category in categories: + category_id = category['ID'] + try: + log_message(f"Обработка категории {category_id} ({processed_count + 1}/{len(categories)})") + load_events_by_category(category_id) + processed_count += 1 + except Exception as e: + error_msg = f"Ошибка при загрузке событий для категории {category_id}: {e}" + log_message(error_msg, "ERROR") + print(error_msg) + # Продолжаем обработку других категорий + continue + + log_message(f"Завершение загрузки всех событий. Обработано категорий: {processed_count}/{len(categories)}") + + except Error as e: + error_msg = f"Ошибка базы данных при загрузке всех событий: {e}" + log_message(error_msg, "ERROR") + print(error_msg) + except Exception as e: + error_msg = f"Общая ошибка при загрузке всех событий: {e}" + log_message(error_msg, "ERROR") + print(error_msg) + if __name__ == "__main__": load_categories()