Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 сем / 2 / мисприс-2.2_1374_Наволоцкий_Зырянов_Харитонов.docx
Скачиваний:
19
Добавлен:
29.03.2025
Размер:
1.7 Mб
Скачать

2.7.11 Процедура поиска tm, сортируя их по приоритету (порядок формируется приоритетом операции при ее создании / вставке в началу/середину/конец)

функция: find_obj_operation_by_object - получение подробной информации о ТМ по id продукции

-- вход:

-- 1. prod_id - id продукции

-- выход: получение подробной информации о ТМ по id продукции

-- эффекты:

-- нет

-- требования:

-- 1. передаваемые id должно существовать

def find_obj_operation_by_object(prod_id):

cursor.execute("SELECT id FROM prod_operation WHERE prod_id = ?", (prod_id,))

operations_IDs_raw = cursor.fetchall()

operations_IDs = []

for oper in operations_IDs_raw:

operations_IDs.append(oper[0])

operations_total_info = []

for iter in operations_IDs:

operations_total_info.append(find_obj_operation(iter))

sorted_operations = sorted(operations_total_info, key=lambda x: x[-1])

return sorted_operations

2.7.12 Поиск затрат ресурсов на тм на партию объектов

функция: find_input_resources_by_obj_operation_with_batch - рассчет ресурсов для ТМ для партии продукции

-- вход:

-- 1. prod_id - id продукции.

-- 2. batch_size - размер партии.

-- выход: ресурсы

-- эффекты:

-- нет

-- требования:

-- 1. передаваемые аргументы должны существовать

def find_input_resources_by_obj_operation_with_batch(prod_id, batch_size):

try:

# Проверка существования продукта

cursor.execute("SELECT COUNT(*) FROM product WHERE id = ?", (prod_id,))

if cursor.fetchone()[0] == 0:

print(f"Product with ID {prod_id} does not exist")

return

# Получение операций для продукта

cursor.execute("""

SELECT id_operation_type, operation_name, time_per_obj

FROM prod_operation

WHERE prod_id = ?

""", (prod_id,))

operations = cursor.fetchall()

if not operations:

print(f"No operations found for product with ID {prod_id}")

return

# Подготовка для подсчета затрат ресурсов

total_resources = {}

total_time = 0.0

for id_operation_type, operation_name, time_per_obj in operations:

# Учет временных затрат

if time_per_obj:

total_time += time_per_obj

# Получение ресурсов для текущей операции

cursor.execute("""

SELECT resource_name, unit_id, quantity

FROM input_resources

WHERE operation_id = ? AND prod_id = ?

""", (id_operation_type, prod_id))

resources = cursor.fetchall()

# Суммирование ресурсов

for resource_name, unit_id, quantity in resources:

resource_key = (resource_name, unit_id)

total_resources[resource_key] = total_resources.get(resource_key, 0) + (quantity or 0)

# Масштабирование результатов по размеру партии

total_resources = {key: value * batch_size for key, value in total_resources.items()}

total_time *= batch_size

# Вывод результатов

print(f"Total resources required for product {prod_id} with batch size {batch_size}:")

for (resource_name, unit_id), total_quantity in total_resources.items():

print(f"Resource: {resource_name}, Unit ID: {unit_id}, Total Quantity: {total_quantity}")

print(f"Total time required: {total_time:.2f} hours\n\n")

# Возвращение результатов

return total_resources, total_time

except Exception as e:

print(f"Error in find_input_resources_by_obj_operation_with_batch: {e}")

return None

Соседние файлы в папке 2