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

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

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

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

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

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

-- эффекты:

-- нет.

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

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

def find_components_by_object_and_class(object_id, class_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 id_category, product_name FROM product WHERE id = ?", (comp_id,))

parent_info = cursor.fetchone()

if parent_info and parent_info[0] == class_id: # Check if parent matches class_id

result.append((comp_id, parent_info[1], quantity))

print(f'для объекта с id={object_id} класса с id={class_id} компоненты: {result}')

return result

except Exception as e:

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

return []

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

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

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

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

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

-- эффекты:

-- нет.

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

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

def find_components_by_object_and_class_recursive(object_id, class_id):

try:

def get_classifier_name(category_id):

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

row = cursor.fetchone()

return row[0] if row else None

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:

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

parent_info = cursor.fetchone()

if parent_info:

product_category = parent_info[0] # Component's category (id_category)

product_name_in_func = parent_info[1] # Name from terminal_classifier table

classifier_name = get_classifier_name(product_category)

root_category_name = get_classifier_name(class_id)

category_children = get_category_children(root_category_name)

if classifier_name in category_children or classifier_name == root_category_name:

# Add or update the accumulated quantity in the result dictionary

if comp_id in result:

result[comp_id]["quantity"] += quantity

else:

result[comp_id] = {"name": product_name_in_func, "quantity": quantity, "category_name": classifier_name}

cursor.execute("SELECT COUNT(*) FROM prod_position_union WHERE prod_id = ?", (comp_id,))

has_nested_components = cursor.fetchone()[0] > 0

if has_nested_components:

find_components(comp_id, result)

result = {}

find_components(object_id, result)

# Prepare the final result as a list of tuples

final_result = [

(comp_id, data["name"], data["quantity"]) for comp_id, data in result.items()

]

print(f"Final result for object_id={object_id} and class_id={class_id}: {final_result}")

return final_result

except Exception as e:

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

return []

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