129 lines
5.8 KiB
Go
129 lines
5.8 KiB
Go
package workflow
|
|
|
|
import "github.com/yaoapp/gou"
|
|
|
|
// Process
|
|
// 读取工作流 xiang.workflow.Find(name, workflow_id)
|
|
// 读取工作流 xiang.workflow.Open(name, uid, data_id)
|
|
// 保存工作流 xiang.workflow.Save(name, uid, node_name, data_id, input, ...output)
|
|
// 进入下一个节点 xiang.workflow.Next(name, uid, workflow_id, output)
|
|
// 跳转到指定节点 xiang.workflow.Goto(name, uid, workflow_id, node_name, output)
|
|
// 更新工作流状态 xiang.workflow.Status(name, uid, workflow_id, status_name, output)
|
|
// 标记结束流程 xiang.workflow.Done(name, uid, workflow_id, output)
|
|
// 标记关闭流程 xiang.workflow.Close(name, uid, workflow_id, output)
|
|
// 标记重置流程 xiang.workflow.Reset(name, uid, workflow_id, output)
|
|
|
|
func init() {
|
|
// 注册处理器
|
|
gou.RegisterProcessHandler("xiang.workflow.Find", ProcessFind)
|
|
gou.RegisterProcessHandler("xiang.workflow.Setting", ProcessSetting)
|
|
gou.RegisterProcessHandler("xiang.workflow.Open", ProcessOpen)
|
|
gou.RegisterProcessHandler("xiang.workflow.Save", ProcessSave)
|
|
gou.RegisterProcessHandler("xiang.workflow.Next", ProcessNext)
|
|
gou.RegisterProcessHandler("xiang.workflow.Goto", ProcessGoto)
|
|
gou.RegisterProcessHandler("xiang.workflow.Status", ProcessStatus)
|
|
gou.RegisterProcessHandler("xiang.workflow.Done", ProcessDone)
|
|
gou.RegisterProcessHandler("xiang.workflow.Close", ProcessClose)
|
|
gou.RegisterProcessHandler("xiang.workflow.Reset", ProcessReset)
|
|
}
|
|
|
|
// ProcessFind xiang.workflow.Find 读取工作流
|
|
// args: [工作流名称*, 工作流ID*]
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessFind(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(2)
|
|
wflow := Select(process.ArgsString(0))
|
|
return wflow.Find(process.ArgsInt(1))
|
|
}
|
|
|
|
// ProcessOpen xiang.workflow.Open 读取工作流
|
|
// args: [工作流名称*, 当前用户ID*, 关联数据ID*]
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessOpen(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(3)
|
|
wflow := Select(process.ArgsString(0))
|
|
return wflow.Open(process.ArgsInt(1), process.Args[2])
|
|
}
|
|
|
|
// ProcessSetting xiang.workflow.Setting 读取工作流配置
|
|
// args: [工作流名称*, 当前用户ID*, 关联数据ID*]
|
|
// return: map[string]interface{} 工作流配置
|
|
func ProcessSetting(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(3)
|
|
wflow := Select(process.ArgsString(0))
|
|
return wflow.Setting(process.ArgsInt(1), process.Args[2])
|
|
}
|
|
|
|
// ProcessSave xiang.workflow.Save 保存工作流节点信息
|
|
// args: [工作流名称*, 当前用户ID*, 节点名称*, 关联数据ID*, 输入数据*, 输出数据] (输入数据: {"data":{}, "form":{}} data 关联数据记录信息, form 工作流body表单信息, 输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessSave(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(5)
|
|
wflow := Select(process.ArgsString(0))
|
|
input := InputOf(process.ArgsMap(4))
|
|
output := map[string]interface{}{}
|
|
if process.NumOfArgsIs(6) {
|
|
output = process.ArgsMap(5)
|
|
}
|
|
return wflow.Save(process.ArgsInt(1), process.ArgsString(2), process.Args[3], input, output)
|
|
}
|
|
|
|
// ProcessNext xiang.workflow.Next 进入下一个节点
|
|
// args: [工作流名称*, 当前用户ID*, 工作流ID*, 输出数据*] (输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessNext(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(4)
|
|
wflow := Select(process.ArgsString(0))
|
|
output := process.ArgsMap(3)
|
|
return wflow.Next(process.ArgsInt(1), process.ArgsInt(2), output)
|
|
}
|
|
|
|
// ProcessGoto xiang.workflow.Goto 跳转到指定节点
|
|
// args: [工作流名称*, 当前用户ID*, 工作流ID*, 节点名称*, 输出数据*] (输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessGoto(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(5)
|
|
wflow := Select(process.ArgsString(0))
|
|
output := process.ArgsMap(4)
|
|
return wflow.Goto(process.ArgsInt(1), process.ArgsInt(2), process.ArgsString(3), output)
|
|
}
|
|
|
|
// ProcessStatus xiang.workflow.Status 更新工作流状态
|
|
// args: [工作流名称*, 当前用户ID*, 工作流ID*, 状态名称*, 输出数据*] (输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessStatus(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(5)
|
|
wflow := Select(process.ArgsString(0))
|
|
output := process.ArgsMap(4)
|
|
return wflow.Status(process.ArgsInt(1), process.ArgsInt(2), process.ArgsString(3), output)
|
|
}
|
|
|
|
// ProcessDone xiang.workflow.Done 标记结束流程
|
|
// args: [工作流名称*, 当前用户ID*, 工作流ID*, 输出数据*] (输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessDone(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(4)
|
|
wflow := Select(process.ArgsString(0))
|
|
output := process.ArgsMap(3)
|
|
return wflow.Done(process.ArgsInt(1), process.ArgsInt(2), output)
|
|
}
|
|
|
|
// ProcessClose xiang.workflow.Close 标记关闭流程
|
|
// args: [工作流名称*, 当前用户ID*, 工作流ID*, 输出数据*] (输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessClose(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(4)
|
|
wflow := Select(process.ArgsString(0))
|
|
output := process.ArgsMap(3)
|
|
return wflow.Close(process.ArgsInt(1), process.ArgsInt(2), output)
|
|
}
|
|
|
|
// ProcessReset xiang.workflow.Reset 标记重置流程
|
|
// args: [工作流名称*, 当前用户ID*, 工作流ID*, 输出数据*] (输出数据: {"foo":"bar"} )
|
|
// return: map[string]interface{} 工作流数据记录
|
|
func ProcessReset(process *gou.Process) interface{} {
|
|
process.ValidateArgNums(4)
|
|
wflow := Select(process.ArgsString(0))
|
|
output := process.ArgsMap(3)
|
|
return wflow.Reset(process.ArgsInt(1), process.ArgsInt(2), output)
|
|
}
|