- •Задание на работу
- •0.1. Функциональные требования
- •0.2. Содержание работы
- •1. Разработка функциональных требований к подсистеме
- •2. Разработка проектной модели классов
- •3. Разработка модели хранения
- •4. Разработка физической модели данных и поддерживающих процедур
- •4.1 Процедура, создающая запись в таблице «orders»:
- •4.2 Процедура, добавляющая позицию заказа:
- •4.3 Процедура, изменяющая тип конфигурируемости объекта-изделия:
- •4.4 Процедура, изменяющая конфигурируемость параметра:
- •4.5 Процедура, возвращающая список конфигурируемых параметров данного объекта-изделия:
- •4.6 Процедура, возвращающая список нЕконфигурируемых параметров данного объекта-изделия:
- •4.7 Процедура, возвращающая список всех параметров данного объекта-изделия:
- •4.8 Процедура, возвращающая список вариантов исполнения для данного типового изделия с конфигуратором:
- •4.9 Процедура, создающая вариант исполнения по данному типовому изделию с конфигуратором:
- •4.10 Процедура, создающая типовое изделие с конфигуратором по данному типовому изделию без конфигуратора:
- •4.11 Процедура, выводящая сведения о деталях заказа:
- •4.12 Процедура, связывающая имеющийся параметр с продуктом:
- •4.13 Процедура, задающая значения параметра для продукции:
- •5. Тестирование процедур
1. Разработка функциональных требований к подсистеме
Создадим диаграмму вариантов использования с именем Работа c заказами изделий с вариантами исполнения.
На рис. 1 приведена диаграмма ВИ Работа c заказами изделий с вариантами исполнения.
Рис. 1. Диаграмма ВИ для процесса Работа c заказами изделий с вариантами исполнения
2. Разработка проектной модели классов
Модель классов для ВИ Задание варианта исполнения
Рис. 2. Модель классов для прецедента Задание варианта исполнения
Описание компонентов диаграммы
Используем шаблон для работы со справочником изделий. Это решение позволит вести классификатор и справочник заказываемых изделий с указанием параметров изделий. Введем альтернативную классификацию изделий по использованию в конфигураторе. Введение классов Изделие без конфигурации, Типовое изделие с конфигуратором, Вариант исполнения позволит задать различные правила для работы с изделиями. Изделия класса Изделие без конфигурации могут быть включены в заказ непосредственно из справочника. Изделия класса Типовое изделие с конфигуратором не могут быть включены в заказ, но имеют в своем описании список параметров конфигурации без указания их значений. Изделие класса Вариант исполнения создается динамически в процессе формирования позиции заказа. Чтобы указать вариант исполнения в позиции заказа, необходимо выбрать типовое изделие, указать значения его параметров конфигурации, создать экземпляр варианта исполнения и включить его в позицию заказа.
Но при этом, придется повторить процедуру добавления в позицию заказа с новым появившимся id варианта исполнения. Так же надо не забыть указать параметры этому варианту исполнению, иначе возникнет ошибка.
Рис. 3. Модель классов для прецедента Формирование позиций заказа
В состав заказа могут быть включены как изделия без конфигуратора, так и варианты исполнения. При выборе изделия класса Типовое изделие с конфигуратором должен создаваться вариант исполнения и указываться значения параметров конфигурации, отдельно запуская соотвествующие функции.
3. Разработка модели хранения
Описание компонентов диаграммы
Берем за основу модель хранения для справочника изделий.
Для классификации изделий по основанию Использование конфигуратора. вводим квалификатор configurable_type. Для него зададим 3 значения:
1) (0) «Изделие без конфигуратора»
2) (1) «Типовое изделие с конфигуратором»
3) (2) «Вариант исполнения»
Использование конфигуратора.
Для указания того, что параметр продукции является параметром конфигурации в сущность prod_param добавляем поле is_configurable:
1 – параметр является параметром конфигурации;
0 – параметр не является параметром конфигурации.
4. Разработка физической модели данных и поддерживающих процедур
Модификация таблиц для хранения объектов (изделий) и их параметров для поддержки конфигураций:
добавлено поле которое указывает является ли данный параметр конфигурируемым is_configurable
def create_prod_param_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS prod_param (
id INTEGER PRIMARY KEY AUTOINCREMENT,
prod_id INTEGER NOT NULL,
param_id INTEGER NOT NULL,
is_configurable BOOLEAN NOT NULL DEFAULT FALSE,
int_value INTEGER,
str_value TEXT,
real_value REAL,
enum_value TEXT,
class_value INTEGER,
UNIQUE (prod_id, param_id),
FOREIGN KEY (param_id) REFERENCES param(id) ON DELETE CASCADE,
FOREIGN KEY (prod_id) REFERENCES product(id) ON DELETE CASCADE
)
''')
conn.commit()
Добавлено поле configurable_type которое указывает какого типа конфигурируемости данный объект
def create_product_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS product (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_category INTEGER,
configurable_type INTEGER NOT NULL DEFAULT 0,
product_name_short TEXT,
product_name TEXT NOT NULL,
quantity INTEGER,
price REAL,
unit_value REAL,
place INTEGER,
FOREIGN KEY (id_category) REFERENCES terminal_classifier(id) ON DELETE CASCADE
)
''')
conn.commit()
Скрипт для создания таблицы заказов:
def create_orders_table():
cursor.execute("""
CREATE TABLE IF NOT EXISTS orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
customer INTEGER NOT NULL,
contact_person INTEGER,
order_time TEXT NOT NULL,
order_completion_time TEXT,
FOREIGN KEY (customer) REFERENCES terminal_classifier(id),
FOREIGN KEY (contact_person) REFERENCES product(id)
);
""")
conn.commit()
Скрипт для создания таблицы позиций заказов:
def create_orders_pos_table():
cursor.execute("""
CREATE TABLE IF NOT EXISTS orders_pos (
order_id INTEGER NOT NULL,
prod_id INTEGER NOT NULL,
quantity INTEGER NOT NULL,
PRIMARY KEY (order_id, prod_id),
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (prod_id) REFERENCES product(id)
);
""")
conn.commit()
