Files
OperatorSchedule/main.py
ki.sagidullin 5d2b665fa6 Выполнены этапы 2, 3, 4
Дополнен план работ этапом 7 (покрытие тестами)
2026-04-07 00:59:57 +05:00

81 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
main.py - Основной скрипт для создания графика смен
Использует модуль models.py для создания и решения модели
"""
from models import create_model, solve_model, get_solution
from config import YEAR, MONTH, SHIFTS, OPERATORS
import csv
def generate_csv_report(schedule: dict, filename: str = 'shift_schedule.csv'):
"""
Генерирует CSV-отчет на основе расписания.
Аргументы:
schedule: словарь расписания из get_solution()
filename: имя файла для вывода CSV
Возвращает:
True если файл создан успешно
"""
with open(filename, 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
# Заголовок
writer.writerow(['День'] + [f'Смена {i+1}' for i in range(len(SHIFTS))])
for day, day_shifts in schedule.items():
row = [day]
for shift_idx in range(len(SHIFTS)):
op = None
for op_name in OPERATORS:
if schedule[day][shift_idx].get(op_name, False):
op = op_name
break
row.append(op)
writer.writerow(row)
print(f"График успешно составлен и сохранен в '{filename}'")
return True
def main():
"""
Главная функция: создает и решает модель, затем генерирует CSV-отчет.
"""
print("=" * 60)
print("Создание графика смен")
print("=" * 60)
# Шаг 1: Создаем модель
print("\n[1] Создание модели. ..")
model, variables, operators_set = create_model()
print(f" Модель создана с {len(variables)} переменными")
print(f" Операторы: {', '.join(operators_set)}")
# Шаг 2: Решаем модель
print("\n[2] Решение модели. ..")
success = solve_model()
if success:
print(" ✅ Модель решена успешно!")
# Шаг 3: Получаем решение
print("\n[3] Получение решения. ..")
schedule = get_solution()
print(f" Решение получено для {len(schedule)} дней")
# Шаг 4: Генерируем CSV-отчет
print("\n[4] Генерация CSV-отчета. ..")
generate_csv_report(schedule, 'shift_schedule.csv')
else:
print("Не удалось составить график!")
print(" Проверьте ограничения и предпочтения операторов.")
return False
print("\n" + "=" * 60)
print("Готово!")
print("=" * 60)
return True
if __name__ == '__main__':
main()