wf_process.go 8.0 KB
Newer Older
Mr.奇淼('s avatar
Mr.奇淼( 已提交
1 2
package model

Mr.奇淼('s avatar
Mr.奇淼( 已提交
3
import (
4
	"gin-vue-admin/global"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
5 6 7 8
	"gorm.io/gorm"
	"time"
)

Mr.奇淼('s avatar
Mr.奇淼( 已提交
9
var WorkflowBusinessStruct map[string]func() GVA_Workflow
10
var WorkflowBusinessTable map[string]func() interface{}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
11 12

type GVA_Workflow interface {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
13 14
	CreateWorkflowMove() *WorkflowMove
	GetBusinessType() string
Mr.奇淼('s avatar
Mr.奇淼( 已提交
15
	GetBusinessID() uint
Mr.奇淼('s avatar
Mr.奇淼( 已提交
16
	GetWorkflowBase() WorkflowBase
Mr.奇淼('s avatar
Mr.奇淼( 已提交
17 18
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
19
type WorkflowBase struct {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
20 21
	WorkflowMoveID    uint   `json:"workflowMoveID" gorm:"-"`
	BusinessID        uint   `json:"businessID" gorm:"<-:false;column:id"` // 业务对应ID(businessID)的返回
Mr.奇淼('s avatar
Mr.奇淼( 已提交
22 23
	BusinessType      string `json:"businessType" gorm:"-"`
	PromoterID        uint   `json:"promoterID" gorm:"-"`
24
	OperatorID        uint   `json:"operatorID" gorm:"-"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
25 26
	WorkflowProcessID string `json:"workflowProcessID" gorm:"-"`
	WorkflowNodeID    string `json:"workflowNodeID" gorm:"-"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
27
	Param             string `json:"param" gorm:"-"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
28
	Action            string `json:"action" gorm:"-"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
29 30
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
31 32
func (w WorkflowBase) CreateWorkflowMove() (businessModel *WorkflowMove) {
	return &WorkflowMove{
Mr.奇淼('s avatar
Mr.奇淼( 已提交
33
		GVA_MODEL:         global.GVA_MODEL{ID: w.WorkflowMoveID},
Mr.奇淼('s avatar
Mr.奇淼( 已提交
34 35
		BusinessType:      w.BusinessType,
		PromoterID:        w.PromoterID,
36
		OperatorID:        w.OperatorID,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
37
		Param:             w.Param,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
38 39 40 41 42 43
		WorkflowProcessID: w.WorkflowProcessID,
		WorkflowNodeID:    w.WorkflowNodeID,
		BusinessID:        w.BusinessID,
		Action:            w.Action,
		IsActive:          true,
	}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
44 45
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
46
func (w WorkflowBase) GetBusinessType() (businessType string) {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
47 48 49
	return w.BusinessType
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
50 51 52 53
func (w WorkflowBase) GetBusinessID() (businessID uint) {
	return w.BusinessID
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
54 55 56 57
func (w WorkflowBase) GetWorkflowBase() (workflowBase WorkflowBase) {
	return w
}

58 59 60
//定义clazz常量

const (
61 62 63 64 65 66 67 68 69 70 71 72 73
	USER_TASK         string = "userTask"
	SCRIPT_TASK       string = "scriptTask"
	RECEIVE_TASK      string = "receiveTask"
	MAIL_TASK         string = "mailTask"
	TIMER_START       string = "timerStart"
	MESSAGE_START     string = "messageStart"
	EXCLUSIVE_GATEWAY string = "exclusiveGateway" // 排他网关
	INCLUSIVE_GATEWAY string = "inclusiveGateway" // 包容网关
	PARELLEL_GATEWAY  string = "parallelGateway"  // 并行网关
	FLOW              string = "flow"
	START             string = "start"
	END               string = "end"
	PROCESS           string = "process"
74 75
)

Mr.奇淼('s avatar
Mr.奇淼( 已提交
76
type WorkflowMove struct {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
77
	global.GVA_MODEL
78 79 80 81 82 83 84 85 86 87 88 89 90
	WorkflowProcessID string          `json:"workflowProcessID" gorm:"comment:工作流模板ID"`
	WorkflowProcess   WorkflowProcess `gorm:"<-:false" json:"workflowProcess" gorm:"comment:工作流模板具体信息"`
	WorkflowNodeID    string          `json:"workflowNodeID" gorm:"comment:工作流节点ID"`
	WorkflowNode      WorkflowNode    `gorm:"<-:false" json:"workflowNode" gorm:"comment:工作流节点具体信息"`
	BusinessType      string          `json:"businessType" gorm:"comment:业务标记"`
	BusinessID        uint            `json:"businessID" gorm:"comment:业务ID"`
	PromoterID        uint            `json:"promoterID" gorm:"comment:当前流转发起人"`
	Promoter          SysUser         `gorm:"<-:false" json:"promoter" gorm:"comment:当前流转发起人信息"`
	OperatorID        uint            `json:"operatorID" gorm:"comment:当前流转操作人"`
	Operator          SysUser         `gorm:"<-:false" json:"operator" gorm:"comment:当前流转操作人信息"`
	Action            string          `json:"action" gorm:"comment:工作流驱动事件"`
	Param             string          `json:"param" gorm:"comment:工作流驱动参数"`
	IsActive          bool            `json:"isActive" gorm:"comment:是否是活跃节点 "`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
91 92
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
93
type WorkflowProcess struct {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
94 95 96
	ID          string `json:"id" form:"id" gorm:"comment:流程标识;primaryKey;unique;not null"`
	CreatedAt   time.Time
	UpdatedAt   time.Time
Mr.奇淼('s avatar
Mr.奇淼( 已提交
97
	DeletedAt   gorm.DeletedAt `json:"-" gorm:"index"`
98 99 100 101 102 103
	Name        string         `json:"name" gorm:"comment:流程名称"`
	Category    string         `json:"category" gorm:"comment:分类"`
	Clazz       string         `json:"clazz" gorm:"comment:类型"`
	Label       string         `json:"label" gorm:"comment:流程标题"`
	HideIcon    bool           `json:"hideIcon" gorm:"comment:是否隐藏图标"`
	Description string         `json:"description" gorm:"comment:详细介绍"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
104
	View        string         `json:"view" gorm:"comment:前端视图文件"`
105
	Nodes       []WorkflowNode `json:"nodes"` // 流程节点数据
106
	Edges       []WorkflowEdge `json:"edges"` // 流程链接数据
Mr.奇淼('s avatar
Mr.奇淼( 已提交
107 108 109
}

type WorkflowNode struct {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
110 111 112
	ID                string `json:"id" form:"id" gorm:"comment:节点id;primaryKey;unique;not null"`
	CreatedAt         time.Time
	UpdatedAt         time.Time
Mr.奇淼('s avatar
Mr.奇淼( 已提交
113
	DeletedAt         gorm.DeletedAt `json:"-" gorm:"index"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
114
	WorkflowProcessID string         `json:"workflowProcessID" gorm:"comment:流程标识"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
115 116 117 118
	Clazz             string         `json:"clazz" gorm:"comment:节点类型"`
	Label             string         `json:"label" gorm:"comment:节点名称"`
	Type              string         `json:"type" gorm:"comment:图标类型"`
	Shape             string         `json:"shape" gorm:"comment:形状"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
119 120
	Description       string         `json:"description" gorm:"comment:详细介绍"`
	View              string         `json:"view" gorm:"comment:前端视图文件"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
121 122 123 124 125 126 127 128 129 130
	X                 float64        `json:"y" gorm:"comment:x位置"`
	Y                 float64        `json:"x" gorm:"comment:y位置"`
	WaitState         string         `json:"waitState" gorm:"comment:等待属性"`
	StateValue        string         `json:"stateValue" gorm:"comment:等待值"`
	To                string         `json:"to" gorm:"comment:收件人"`
	Subject           string         `json:"subject" gorm:"comment:标题"`
	Content           string         `json:"content" gorm:"comment:内容"`
	Cycle             string         `json:"cycle" gorm:"comment:循环时间"`
	Duration          string         `json:"duration" gorm:"comment:持续时间"`
	HideIcon          bool           `json:"hideIcon" gorm:"comment:是否隐藏图标"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
131 132 133
	DueDate           time.Time      `json:"dueDate" gorm:"comment:到期时间"`
	AssignType        string         `json:"assignType" gorm:"comment:审批类型"`
	AssignValue       string         `json:"assignValue" gorm:"comment:审批类型值"`
134
	Success           bool           `json:"success" gorm:"comment:是否成功"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
135 136 137
}

type WorkflowEdge struct {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
138 139 140
	ID                  string `json:"id" form:"id" gorm:"comment:唯一标识;primaryKey;unique;not null"`
	CreatedAt           time.Time
	UpdatedAt           time.Time
Mr.奇淼('s avatar
Mr.奇淼( 已提交
141
	DeletedAt           gorm.DeletedAt     `json:"-" gorm:"index"`
142 143 144 145 146 147
	WorkflowProcessID   string             `json:"-" gorm:"comment:流程标识"`
	Clazz               string             `json:"clazz" gorm:"comment:类型(线)"`
	Source              string             `json:"source" gorm:"comment:起点节点"`
	Target              string             `json:"target" gorm:"comment:目标节点"`
	SourceAnchor        int                `json:"sourceAnchor" gorm:"comment:起点"`
	TargetAnchor        int                `json:"targetAnchor" gorm:"comment:目标点"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
148
	Description         string             `json:"description" gorm:"comment:详细介绍"`
149 150 151 152 153 154 155 156 157 158 159 160
	Shape               string             `json:"shape" gorm:"comment:形状"`
	StartPoint          WorkflowStartPoint `json:"startPoint"` // 起点信息
	EndPoint            WorkflowEndPoint   `json:"endPoint"`   // 终点信息
	Label               string             `json:"label" gorm:"comment:标题"`
	HideIcon            bool               `json:"hideIcon" gorm:"comment:隐藏图标"`
	ConditionExpression string             `json:"conditionExpression" gorm:"comment:条件标识"`
	Seq                 string             `json:"seq" gorm:"comment:序号"`
	Reverse             bool               `json:"reverse" gorm:"comment:是否反向"`
}

type WorkflowStartPoint struct {
	WorkflowEdgeID string
Mr.奇淼('s avatar
Mr.奇淼( 已提交
161 162 163 164
	global.GVA_MODEL
	X     float64 `json:"x"`
	Y     float64 `json:"y"`
	Index int     `json:"index"`
165 166 167 168 169 170 171 172
}

type WorkflowEndPoint struct {
	WorkflowEdgeID string
	global.GVA_MODEL
	X     float64 `json:"x"`
	Y     float64 `json:"y"`
	Index int     `json:"index"`
Mr.奇淼('s avatar
Mr.奇淼( 已提交
173
}