
- •Задание на работу
- •Аннотация
- •Summary
- •Описание выполненной работы
- •2.1 Маршрутная технология и маршрутные карты
- •2.2 Разработка функциональных требований к подсистеме
- •2.3 Разработка модели классов этапа анализа
- •2.4 Разработка модели классов этапа проектирования
- •2.5 Разработка модели хранения
- •2.6 Создание базы данных
- •2.7 Разработка основных процедур
- •2.7.1 Процедура, создающая запись в таблице “prod_operation”:
- •2.7.2 Процедура, создающая запись в таблице “input_resources”
- •2.7.3 Процедура удаления записи о операции в таблице “prod_operation”
- •2.7.4 Процедура, создающая запись о схд в таблице “terminal_classifier”
- •2.7.5 Процедура, создающая грц класс в таблице terminal_classifier
- •2.7.6 Процедура создания экземпляра грц
- •2.7.7 Процедура, меняющая порядок операции, позволяя вставлять ее в начало, середину, конец тм
- •2.7.8 Процедура удаления записи в таблице “input_resources”
- •2.7.9 Процедура изменения количества ресурса в таблице “inputs_resources”
- •2.7.10 Процедура нахождения информации об операции по id
- •2.7.11 Процедура поиска tm, сортируя их по приоритету (порядок формируется приоритетом операции при ее создании / вставке в началу/середину/конец)
- •2.7.12 Поиск затрат ресурсов на тм на партию объектов
- •2.7.13 Поиск затрат ресурсов на одну операцию для партии изделий
2.5 Разработка модели хранения
На рис. 8 представлена диаграмма, описывающая сущности и связи модели хранения.
Рисунок 7 - ERD для проекта Работа с маршрутной спецификацией изделий
2.6 Создание базы данных
Дополним работу 2.1 двумя таблицами: 1. создание таблицы операций для объектов (продукции)
def create_prod_operation_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS prod_operation (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_operation_type INTEGER NOT NULL,
operation_name TEXT NOT NULL,
operation_priority REAL NOT NULL,
id_shd INTEGER NOT NULL,
prod_id INTEGER NOT NULL,
grc_id INTEGER NOT NULL,
prof_id INTEGER NOT NULL,
prof_qual_id INTEGER,
launch_time REAL NOT NULL,
time_per_obj REAL NOT NULL,
time_unit_id INTEGER NOT NULL,
FOREIGN KEY (id_shd) REFERENCES terminal_classifier(id) ON DELETE CASCADE,
FOREIGN KEY (prod_id) REFERENCES product(id) ON DELETE CASCADE,
FOREIGN KEY (grc_id) REFERENCES terminal_classifier(id) ON DELETE RESTRICT,
FOREIGN KEY (prof_id) REFERENCES terminal_classifier(id) ON DELETE RESTRICT,
FOREIGN KEY (prof_qual_id) REFERENCES enum(id) ON DELETE RESTRICT,
FOREIGN KEY (time_unit_id) REFERENCES unit(id) ON DELETE RESTRICT
);
''')
conn.commit()
2. создание таблицы входных ресурсов для объектов (продукции)
def create_input_resources_table():
cursor.execute("""
CREATE TABLE IF NOT EXISTS input_resources (
id INTEGER PRIMARY KEY AUTOINCREMENT,
operation_id INTEGER NOT NULL,
prod_id INTEGER NOT NULL,
resource_name TEXT NOT NULL,
unit_id INTEGER NOT NULL,
quantity REAL NOT NULL,
FOREIGN KEY (operation_id) REFERENCES prod_operation(id) ON DELETE CASCADE,
FOREIGN KEY (prod_id) REFERENCES product(id) ON DELETE RESTRICT
FOREIGN KEY (unit_id) REFERENCES unit(id) ON DELETE RESTRICT
);
""")
conn.commit()
2.7 Разработка основных процедур
2.7.1 Процедура, создающая запись в таблице “prod_operation”:
функция: create_obj_operation - добавление записи в таблицу prod_operations
-- вход:
-- 1. id_operation_type - тип операции
-- 2. operation_name - названия типа операции
-- 3. operation_priority - порядок операции в ТМ
-- 4. id_shd - id СХД
-- 5. prod_id - id продукции
-- 6. grc_id - id ГРЦ
-- 7. prof_id - id профессии
-- 8. prof_qual_id - квалификация для профессии (разряд)
-- 9. launch_time - время начала операции
-- 10. time_per_obj - время, затрачиваемое на выполнение операции для одного объекта
-- 11. time_unit_id - ЕИ времени
-- выход: 1 успех / 0 ошибка
-- эффекты:
-- 1. создание новой записи в таблице prod_operations
-- требования:
-- 1. передаваемые аргукменты должны существовать
def create_obj_operation(id_operation_type, operation_name, operation_priority, id_shd, prod_id, grc_id, prof_id, prof_qual_id, launch_time, time_per_obj, time_unit_id):
try:
if not is_exist_by_id_in_table(id_shd, 'terminal_classifier'):
print('нет такой записи СХД таблице terminal_classifier')
return
if not is_exist_by_id_in_table(prod_id, 'product'):
print('нет такой записи объекта в таблице product')
return
if not is_exist_by_id_in_table(grc_id, 'product'):
print('нет такой записи ГРЦ таблице terminal_classifier')
return
if not is_exist_by_id_in_table(prof_id, 'terminal_classifier'):
print('нет такой записи Профессии таблице terminal_classifier')
return
if not is_exist_by_id_in_table(prof_qual_id, 'enum'):
print('нет такой записи квалификации Профессии таблице enum')
print(f'prof_qual_id - {prof_qual_id}')
return
if not is_exist_by_id_in_table(time_unit_id, 'unit'):
print('нет такой записи ЕИ таблице unit')
return
# Проверка на существование операции с таким приоритетом
query = f"SELECT COUNT(*) FROM {PROD_OPERATION_TABLE} WHERE prod_id = ? AND operation_priority = ?"
cursor.execute(query, (prod_id, operation_priority))
is_operation_with_same_order_exist = cursor.fetchone()[0]
if is_operation_with_same_order_exist > 0:
print(f'операция с таким порядком - {operation_priority} уже существует для ТМ')
return
# Добавление новой операции
insert_query = f'''
INSERT INTO {PROD_OPERATION_TABLE} (id_operation_type, operation_name, operation_priority, id_shd, prod_id, grc_id, prof_id, prof_qual_id, launch_time, time_per_obj, time_unit_id)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
'''
cursor.execute(insert_query, (id_operation_type, operation_name, operation_priority, id_shd, prod_id, grc_id, prof_id, prof_qual_id, launch_time, time_per_obj, time_unit_id))
conn.commit()
print(f'операция \"{operation_name}\" успешно добавлена')
except Exception as e:
conn.rollback()
print(f"Error in create_obj_operation: {e}")
return 0