@DDwrt100

Как организовать цепочки согласающих для согласования документа?

Добрый день. Кто-нибудь может подсказать, как реализовывается подобный функционал?
Вопрос скорее абстрактный, но для конкретики пусть будет база данных Postgress.
Функционал. Есть документ, есть человек генерирующий наполнение этого документа, и есть согласующие ,которые определяются во время создания документа, список согласующих вариативный, может быть два человека , а может и 10.

С функциональной части это выглядит следующим образом , через UI жмется "создать документ" выводится пустая форма с полями которые необходимо заполнить, одно из полей согласующие, в это поле с помощю справочника добавляются люди.

Собственно сам вопрос, какая структура в БД должна быть , чтобы реализовать вариативный список согласующих?
С документов все понятно, определить изменяемые поля и хранить в отдельной таблице. А вот не детерминированный список пока не совсем ясно. Кто может подсказать, как подобное реализуется со стороны релиационных баз данных.
Или тут определенно нужно смотреть в Nosql типа mongo ?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Давайте отделять структуру данных от бизнес-логики. Нам нужно хранить отдельно документы и отдельно список подписавших этот документ. Это 2 разные таблицы. Можем для красоты добавить третью - пользователей, но совсем не обязательно (эта таблица есть только в монолитах).

Таблица подписей может содержать ссылки на документ, пользователя, состояние подписал (bool) и разного рода служебную информацию. Если надо то можно добавить этап подписи, обязательность (required: bool) или еще что что может потребоваться. Факт одобрения можно хранить как в документе так и в отдельной таблице (если этапов подписания несколько).

А бизнес-логика принимает уже решение как калькулировать факт одобрения документа на основе этих данных
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
NeiroNx
@NeiroNx
Программист
Скорее всего уровни у согласующих(отражающие их подчинение) - главный не подпишет пока не подписали все промежуточные начальники.
Согласующие одного уровня вряд ли встретятся, а если и встретятся - то порядок не будет иметь значения.
Ответ написан
Комментировать
cjstress
@cjstress
C#
Копайте в сторону FSM паттерна. Есть состояния документа, есть нужные согласующие. Согласовали - идем в следующий стейт.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Сначала определяем список должностей согласующих и сортируем их по старшинству: от минимального влияния подписи к максимальному (к самому старшему согласующему).

И записываем в ячейку таблицы виде json-данных с id-шниками всех согласующих.

Затем, считаем результат полного согласования:
T=A1*2^0+...+AN*2^(n-1),
где
N - это порядковый номер по старшинству,
A1..AN - это факт согласования каждым из цепочки: 1- согласовано, 0 - нет.

И записываем текущее значение согласования и целевое значение согласования в ту же строку в БД.

Когда разница будет равна 0 - документ будет полностью согласован всей цепочкой людей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы