Скачиваний:
4
Добавлен:
29.03.2025
Размер:
1.25 Mб
Скачать

2.5.8. Процедура рекурсивного получения списка допустимых компонентов нижнего уровня для данного класса из таблицы «acceptable_components»:

функция: find_acceptable_components_by_class_recursive - получение списка допустимых классов-компонентов для данного класса реркусивно

-- вход:

-- 1. cl_id - id класса для продукции

-- выход: допустимые классы-компоненты

-- эффекты:

-- нет.

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

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

def find_acceptable_components_by_class_recursive(class_id):

try:

def find_components(class_id, result):

cursor.execute("SELECT component_id FROM acceptable_components WHERE class_id = ?", (class_id,))

components = cursor.fetchall()

for component in components:

component_id = component[0]

result.add(component_id)

find_components(component_id, result)

result = set()

find_components(class_id, result)

# Fetch component names for the result set

component_names = []

for component_id in result:

cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (component_id,))

component_name = cursor.fetchone()

if component_name:

component_names.append((component_id, component_name[0]))

print(f'результат подходящих компонент для id {class_id} - ({component_names})')

return component_names

except Exception as e:

print(f"Error occurred while finding acceptable components: {e}")

return []

2.5.9. Процедура получения списка компонентов для данного объекта (продукции) из таблицы «prod_position_union»:

функция: find_components_by_object - получение списка компонентов для данного объекта (продукции) из таблицы prod_position_union

-- 1. object_id - id объекта для продукции

-- выход: список компонентов объектов для данного объекта

-- эффекты:

-- нет.

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

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

def find_components_by_object(object_id):

try:

cursor.execute('''

SELECT comp_id, quantity FROM prod_position_union WHERE prod_id = ?

''', (object_id,))

components = cursor.fetchall()

result = []

for comp_id, quantity in components:

cursor.execute("SELECT product_name, quantity FROM product WHERE id = ?", (comp_id,))

name = cursor.fetchone()

if name:

result.append((['id', comp_id], ['product_name', name[0]], ['quantity', quantity]))

print(f'для продукции с id = {object_id} компоненты - ({result})')

return result

except Exception as e:

print(f"Error occurred while finding components by object: {e}")

return []

2.5.10. Процедура рекурсивного получения списка компонентов нижнего уровня для данного объекта (продукции) из таблицы «prod_position_union»:

функция: find_components_by_object_recursive - получение списка компонентов для данного объекта (продукции) из таблицы prod_position_union рекурсивно

-- 1. object_id - id объекта для продукции

-- выход: список компонентов объектов для данного объекта

-- эффекты:

-- нет.

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

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

def find_components_by_object_recursive(object_id):

try:

# Recursive function to find components

def find_components(obj_id, result):

cursor.execute("SELECT comp_id, quantity FROM prod_position_union WHERE prod_id = ?", (obj_id,))

components = cursor.fetchall()

for comp_id, quantity in components:

result[comp_id] = result.get(comp_id, 0) + quantity

find_components(comp_id, result)

result = {}

find_components(object_id, result)

# Fetch component names for the result

final_result = []

for comp_id, total_quantity in result.items():

cursor.execute("SELECT product_name FROM product WHERE id = ?", (comp_id,))

name = cursor.fetchone()

if name:

final_result.append((comp_id, name[0], total_quantity))

print(f'для объекта с id = {object_id} компоненты, найденные рекурсивно: {final_result}')

return final_result

except Exception as e:

print(f"Error occurred while finding components recursively: {e}")

return []

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