Мой начальник хочет, чтобы я разработал простой механизм рабочего процесса

Архитектура

публика:Маленькое кофейное шоу Java,Веб-сайт:javaxks.com

Автор: MCTW, ссылка:cn blog on.com/duck-stability-grade…

Однажды босс нашел меня, сказав, что это простой двигатель рабочего процесса. Я проверил день, я был рабочим процессом, затем сделал следующую версию: добавить любое утверждение, чтобы сформировать связанный список, и, наконец, добавить конечный узел для записи текущего утверждения.Когда утверждение завершено, утверждающий перемещается назад

Первый уровень

Однажды мой начальник пришел ко мне и сказал сделать простой движок рабочего процесса.

Я проверил, что такое рабочий процесс в течение дня, а затем сделал следующую версию:

  • Добавьте любое количество утверждающих, чтобы сформировать связанный список, и добавьте конечный узел в конце.
  • Запишите текущего утверждающего, когда утверждение завершено, утверждающий перемещается на один шаг назад.
  • Когда утверждающий соответствует конечному узлу, процесс завершается.

Босс: Это немного грубо.

2

Босс снова здесь: поддержать узел контрподписи.

В другой раз я проверил, что такое узел контрподписи, и обнаружил, что узел контрподписи — это большой узел со многими утверждающими.Только после того, как все в этом большом узле подтвердят его, я могу войти в следующий узел.

Я думал об этом неделю и перевернул первоначальный дизайн связанного списка:

image.png

Конструктивно я внес следующие коррективы:

  • Разделите узлы на две категории: простые узлы (прямоугольники на изображении выше) и сложные узлы (круги на изображении выше).
  • Используйте дерево для представления всего процесса, где узлы-листья — это простые узлы, а простые узлы — это узлы-листья.
  • Каждый узел прост и имеет только утверждающих.
  • Сложный узел содержит несколько дочерних узлов.
  • Добавить узел скрепления: после того, как узел скрепления активирован, все подузлы могут быть утверждены.Когда все подузлы утверждены, узел скрепления завершен.
  • Присоединение к последовательному узлу: дочерние узлы могут быть утверждены только в последовательности слева направо.После утверждения последнего дочернего узла завершается последовательный узел.
  • Самый внешний уровень всех рабочих процессов — это последовательный узел, который представляет собой завершение всего рабочего процесса после завершения узла.

Чтобы контролировать процесс утверждения, я разработал несколько состояний узла:

  • Готово: простые узлы, готовые к операциям утверждения, находятся в состоянии Готово.
  • Заполните: статус узла, который был одобрен.
  • Будущее: состояние узла, которое еще не достигнуто.
  • Ожидание: этот статус имеют только сложные узлы, указывающие на то, что они ожидают утверждения от дочерних узлов.

С помощью приведенных выше правил процесс утверждения рабочего процесса с контрассигнированным узлом выглядит следующим образом:

Босс: Интересно.

Уровень 3

А вот и босс: поддерживать параллельные узлы.

Я целый день проверял, что такое параллельный узел, и обнаружил, что параллельный узел — это большой узел со многими утверждающими.

Затем вскоре добавляются параллельные узлы:

  • Параллельный узел — это сложный узел, когда узел активен, любой дочерний узел может быть одобрен, а когда любой дочерний узел находится в завершенном состоянии, узел завершен.

Добавить новое состояние Пропустить:

  • Если состояние дочернего узла параллельного узла не равно (Готово, Ожидание), состояние других одноуровневых узлов и их дочерних узлов устанавливается на Пропустить.

Возьмите каштан 🌰:

Босс: Этот дизайн добавляет новый узел быть очень удобным.

Уровень 4

Босс здесь снова: узлы должны поддерживать вложенность, например, в узле с подписью есть параллельный узел, а в параллельном узле есть сложный узел, который может быть вложен на любом уровне.

Я: На самом деле, это было поддержано~

  • Бесконечно масштабируемая древовидная структура может поддерживать сколь угодно сложные процессы.

Босс: У парня что-то есть!

Уровень 5

Вот снова приходит босс: поддерживать условные узлы.

Рабочий процесс поставляется с формой, и необходимо определить, в какую ветку войти дальше, в соответствии с содержимым формы.

После нескольких дней размышлений я добавил условный узел:

  • Узлы условий аналогичны параллельным узлам, за исключением того, что только дочерние узлы, соответствующие условиям, могут войти в следующее утверждение.

Босс: Я прочитал это.

Уровень 6

Босс снова здесь: есть еще два типа утверждающих, например, следующего утверждающего можно выбрать из формы, а разных утверждающих можно выбрать по разным инициаторам.

После некоторого размышления я разделил простые узлы на 3 категории:

  • Первый: утверждающий записан на смерть.
  • Второй: утверждающие читают из формы.
  • Третий тип: расчет утверждающего на основе инициатора и функции отображения. Например, get_director ("Цянь Моу") получает Ли Моу, руководителя Цянь Моу.

Босс: Хм.

Уровень 7

Босс снова здесь: узел может быть одобрен спереди назад, может ли он быть отклонен сзади вперед?

Я: ......

Во-первых, реализована функция опровержения обратно инициатору, что равносильно запуску всего с нуля:

  • Только узлы в состоянии «Готово» имеют право на отклонение. (Точно так же, как только ноды в состоянии «Готово» имеют право одобрять)

Босс: Малыш, ты ленивый.

Уровень 8

Босс снова здесь: сначала осознайте отказ и вернитесь к предыдущему утверждающему.

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

Пожертвовав волосами, я, наконец, добился функции, закрывающей предыдущий уровень:

Босс: Читать.

Уровень 9

И снова босс: реализовать функцию, опровергающую любой узел.

Я нашел это требование нетрудным для достижения:

  • Продолжайте отклонять предыдущий уровень до тех пор, пока узел в состоянии Готов не будет содержать узел, который нужно отклонить.

Босс: Хм.

Уровень 10 Босс снова здесь: добавьте ограничение по времени в обычный узел, если он не будет завершен в течение указанного времени, он покажет, что время истекло.

Я: Есть ли еще такая потребность?

Но все же сбылось.

В этот момент я понял, что спрос и волосы связаны отрицательно, чем больше спрос, тем меньше волос.

Уровень 11

Босс здесь снова: добавьте прокси-функцию, например, если вам есть что утвердить, но вы не уверены, то передайте тому, кто может утвердить.

Сразу же я обнаружил, что это требование принципиально отличалось от того, что было раньше: раньше отношение узлов рабочего процесса было фиксированным с самого начала, то есть оно определялось до того, как процесс был инициирован.

Но теперь вы должны измениться во время процесса одобрения.

Это не что иное, как некоторые дополнительные занятия и некоторое выпадение волос, и, наконец, разработан следующий план:

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

Уровень 12

Босс снова здесь: Можете ли вы добавить функцию отмены прокси?

. . . Я уже польщен, так что добавлю:

  • Агент отмены — операция счетчика прокси
  • Если доверенность была одобрена, доверенность нельзя отменить.

Уровень 13

Босс здесь снова: добавьте предварительное и постусловие к каждому узлу.Только когда предварительное условие будет выполнено, узел может быть введен, и узел может быть одобрен только тогда, когда будет выполнено постусловие.

Мое сердце: а босс до свидания, ах босс до свидания до свидания до свидания до свидания!

Мой рот: Хороший босс, получил получил.

Позже: Позже я действительно добавил пре- и постусловия в каждую ноду, а заодно удвоил соответствующий код логики утверждения.

Уровень 14.

Босс снова идет: рабочий процесс теперь очень сложный, требуется много времени, чтобы воспользоваться преимуществами рабочего процесса для каждого в процессе: интуитивно показывает процент текущего утверждения.

Я получил.

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

После тестирования и размышлений окончательный план выглядит следующим образом:

  • Процент завершения рабочего процесса относится к расстоянию от крайнего правого узла «Готово» до крайнего левого узла/расстоянию до крайнего правого узла в дереве.

Уровень 15

Босс снова здесь: можете ли вы прикрепить два исполняемых скрипта к каждому узлу и выполнить их после утверждения узла и завершения утверждения?

Я получил.

Позже, конечно, я понял эту функцию, и в то же время я также обнаружил, что был лысым в расцвете сил.

постскриптум

Босс - талантливый студент, окончивший Университет Цинхуа. Иначе он, вероятно, не смог бы придумать столько гениальных потребностей. Позже босс продал эту систему документооборота такой компании, как Guang* Securities. Я также отправился в другие компании, чтобы продолжить свою карьеру Я думал, что у меня есть будущее.

Когда я начал этот рабочий процесс, я только что закончил бакалавриат, и когда я ушел из этой компании, я посмотрел в зеркало и выглядел старым. Это было уже 3 года назад, и мне до сих пор страшно, когда я вспоминаю те дни, когда я работал сверхурочно, чтобы изменить свой рабочий процесс.

В конце концов, я надеюсь, что все мои коллеги в мире не будут иметь клопов, будут здоровы телом и духом и накопит достаточно денег, чтобы купить два люкса в городе первого уровня.Через несколько лет они смогут жить неспеша жизнь на пенсии без болезней и бед.