從設計到開發,實現一我的人均可以簡單使用及管理的工做流系統

工做流介紹

工做流(Workflow)就是工做流程的計算模型,即將工做流程中的工做如何先後組織在一塊兒的邏輯和規則在計算機中以恰當的模型進行表示並對其實施計算。python

工做流在IT領域不算是「新人」了,工做流思想在上世紀60年代就有人提出過;70年代就有人開始嘗試,可是因爲當時許多的限制,工做流一直沒有成功的被實現;80年代纔出現第一批成功的工做流系統;90年代工做流技術走向了第一個發展高峯期;90年代後至今工做流出現了不少版本,可是主旨仍是不變的,爲了使咱們的工做變得更加高效。shell

咱們經過工做流能夠節省不少沒必要要的時間,預設置好的處理人,可讓咱們沒必要反覆的問別人誰負責此節點;經過任務來實現最後的操做,可讓咱們減小不少人力成本,固然想要實現一套完善、簡單、通用、方便管理的工做流系統也是很是不容易的,接下來推薦一個較爲通用的,方便使用及管理的工做流系統。數據庫

Demo: 工做流系統(ferry)json

項目問答社區: 問答社區數據結構

此工做流系統使用的技術棧:ide

  • Golang
  • Gin
  • Gorm
  • Vue
  • Element

數據結構設計

對於一個完整的工做流系統來講,咱們須要有流程、模版、分組、用戶、任務等等,而且這些東西都是能夠靈活定製的,由於若是不能靈活定製的話,對於普通的使用這來講是很是不方便的,因此對於一個好的工做流系統,是必需要實現靈活性的。ui

下面直接來展現一下,數據結構的設計圖。設計

工做流數據結構設計圖

接下來對各個表進行詳細的介紹,這裏僅僅是中文介紹,至於數據庫的表名,可自行定義:code

介紹
用戶管理 這個是一個用戶管理的綜合,包括(用戶管理,用戶組管理,部門管理,權限管理)
流程分類 只爲區分各個功能的流程
流程 管理流程信息,對節點、流轉、分類等數據的管理及維護
模版 保存咱們自定義設置的模版,方便在建立或處理流程的時候渲染表單
工單 記錄每次提交的流程申請
工單綁定模版 綁定模版而且記錄每次流程申請對應的申請數據
工單流轉歷史 記錄流程申請的每一次的處理結果
任務 每一個節點及流程結束後須要執行的任務,可選項
任務執行歷史 記錄每次任務執行的歷史並保存執行結果

流程分類orm

type Classify struct {
    base.Model
    Name    string `gorm:"column:name; type: varchar(128)" json:"name" form:"name"`     // 分類名稱
    Creator int    `gorm:"column:creator; type: int(11)" json:"creator" form:"creator"` // 建立者
}

func (Classify) TableName() string {
    return "process_classify"
}

流程

type Info struct {
    base.Model
    Name      string          `gorm:"column:name; type:varchar(128)" json:"name" form:"name"`        // 流程名稱
    Structure json.RawMessage `gorm:"column:structure; type:json" json:"structure" form:"structure"` // 流程結構
    Classify  int             `gorm:"column:classify; type:int(11)" json:"classify" form:"classify"` // 分類ID
    Tpls      json.RawMessage `gorm:"column:tpls; type:json" json:"tpls" form:"tpls"`                // 模版
    Task      json.RawMessage `gorm:"column:task; type:json" json:"task" form:"task"`                // 任務ID, array, 可執行多個任務,能夠當成通知任務,每一個節點都會去執行
    Creator   int             `gorm:"column:creator; type:int(11)" json:"creator" form:"creator"`    // 建立者
}

func (Info) TableName() string {
    return "process_info"
}

模版

type Info struct {
    base.Model
    Name          string          `gorm:"column:name; type: varchar(128)" json:"name" form:"name" binding:"required"`                       // 模板名稱
    FormStructure json.RawMessage `gorm:"column:form_structure; type: json" json:"form_structure" form:"form_structure" binding:"required"` // 表單結構
    Creator       int             `gorm:"column:creator; type: int(11)" json:"creator" form:"creator"`                                      // 建立者
    Remarks       string          `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"`                                     // 備註
}

func (Info) TableName() string {
    return "tpl_info"
}

工單

type Info struct {
    base.Model
    Title         string          `gorm:"column:title; type:varchar(128)" json:"title" form:"title"`                    // 工單標題
    Process       int             `gorm:"column:process; type:int(11)" json:"process" form:"process"`                   // 流程ID
    Classify      int             `gorm:"column:classify; type:int(11)" json:"classify" form:"classify"`                // 分類ID
    IsEnd         int             `gorm:"column:is_end; type:int(11); default:0" json:"is_end" form:"is_end"`           // 是否結束, 0 未結束,1 已結束
    State         json.RawMessage `gorm:"column:state; type:json" json:"state" form:"state"`                            // 狀態信息
    RelatedPerson json.RawMessage `gorm:"column:related_person; type:json" json:"related_person" form:"related_person"` // 工單全部處理人
    Creator       int             `gorm:"column:creator; type:int(11)" json:"creator" form:"creator"`                   // 建立人
}

func (Info) TableName() string {
    return "work_order_info"
}

工單綁定模版

type TplData struct {
    base.Model
    WorkOrder     int             `gorm:"column:work_order; type: int(11)" json:"work_order" form:"work_order"`          // 工單ID
    FormStructure json.RawMessage `gorm:"column:form_structure; type: json" json:"form_structure" form:"form_structure"` // 表單結構
    FormData      json.RawMessage `gorm:"column:form_data; type: json" json:"form_data" form:"form_data"`                // 表單數據
}

func (TplData) TableName() string {
    return "work_order_tpl_data"
}

工單流轉歷史

type CirculationHistory struct {
    base.Model
    Title        string `gorm:"column:title; type: varchar(128)" json:"title" form:"title"`                         // 工單標題
    WorkOrder    int    `gorm:"column:work_order; type: int(11)" json:"work_order" form:"work_order"`               // 工單ID
    State        string `gorm:"column:state; type: varchar(128)" json:"state" form:"state"`                         // 工單狀態
    Source       string `gorm:"column:source; type: varchar(128)" json:"source" form:"source"`                      // 源節點ID
    Target       string `gorm:"column:target; type: varchar(128)" json:"target" form:"target"`                      // 目標節點ID
    Circulation  string `gorm:"column:circulation; type: varchar(128)" json:"circulation" form:"circulation"`       // 流轉ID
    Processor    string `gorm:"column:processor; type: varchar(45)" json:"processor" form:"processor"`              // 處理人
    ProcessorId  int    `gorm:"column:processor_id; type: int(11)" json:"processor_id" form:"processor_id"`         // 處理人ID
    CostDuration string `gorm:"column:cost_duration; type: varchar(128)" json:"cost_duration" form:"cost_duration"` // 處理時長
    Remarks      string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"`                       // 備註
}

func (CirculationHistory) TableName() string {
    return "work_order_circulation_history"
}

任務

type Info struct {
    base.Model
    Name     string `gorm:"column:name; type: varchar(256)" json:"name" form:"name"`               // 任務名稱
    TaskType string `gorm:"column:task_type; type: varchar(45)" json:"task_type" form:"task_type"` // 任務類型
    Content  string `gorm:"column:content; type: longtext" json:"content" form:"content"`          // 任務內容
    Creator  int    `gorm:"column:creator; type: int(11)" json:"creator" form:"creator"`           // 建立者
    Remarks  string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"`          // 備註
}

func (Info) TableName() string {
    return "task_info"
}

任務執行歷史

type History struct {
    base.Model
    Task          int    `gorm:"column:task; type: int(11)" json:"task" form:"task"`                                    // 任務ID
    Name          string `gorm:"column:name; type: varchar(256)" json:"name" form:"name"`                               // 任務名稱
    TaskType      int    `gorm:"column:task_type; type: int(11)" json:"task_type" form:"task_type"`                     // 任務類型, python, shell
    ExecutionTime string `gorm:"column:execution_time; type: varchar(128)" json:"execution_time" form:"execution_time"` // 執行時間
    Result        string `gorm:"column:result; type: longtext" json:"result" form:"result"`                             // 任務返回
}

func (History) TableName() string {
    return "task_history"
}

管理及使用介紹

流程管理
流程管理

很是簡單的就能夠建立流程,拖拽一下,連接一下對應的節點,填充一下節點及流轉對應的右邊的數據,就能夠完美的建立一條流程數據。經過這條流程,咱們就能夠去進行流程申請了。

表單設計
表單設計

可以自定義表單對於一個工做流系統來講,是很是重要的。由於這樣,就能夠很是方便的管理用戶的輸入數據是啥。同時也能很是方便的來控制用戶的輸入。同時對於工做流管理這來講,大大的節省了表單維護的時間。

這次咱們主要是介紹了一下數據結構的設計及代碼的演示。同時也展現了一下數據在工做流開發中,比較複雜,可是對於用戶體驗來講很好的兩個功能,一個是流程管理,一個是表單設計。

相關文章
相關標籤/搜索