使用手册请访问文档
go get github.com/hulutech-web/goravel-workflow
import "github.com/hulutech-web/goravel-workflow"
func init() {
"providers": []foundation.ServiceProvider{
....
&workflow.ServiceProvider{},
}
}
go run . artisan vendor:publish --package=github.com/hulutech-web/goravel-workflow
artisan vendor:publish --package=github.com/hulutech-web/goravel-workflow
在database/seeders/database_seeder.go下的添加
func (s *DatabaseSeeder) Run() error {
return facades.Seeder().Call([]seeder.Seeder{
&WorkflowDatabaseSeeder{},
})
}
go run . artisan migrate:refresh --seed
如果启动项目报错,请检查路由是否有重名,并修改路由
发布资源后,config/workflow.go中的配置文件中有默认的关联映射,根据需要自行修改和修改
用户自定义User结构中注入流程框架,并实现框架中的Hook接口
type User struct {
orm.Model
Name string `gorm:"column:name;type:varchar(255);not null" form:"name" json:"name"`
WorkNo string `gorm:"column:workno;not null;unique_index:users_workno_unique" json:"workno" form:"workno"`
Password string `gorm:"column:password;type:varchar(255);not null" form:"password" json:"password"`
...
Workflow *Workflow
orm.SoftDeletes
}
实现接口
// 通知发起人,在被驳回时调用,或者整个流程结束时调用。
func (u *User) NotifySendOne(id uint) error {
fmt.Printf("custom ======User %d unpasshook called.\n", id)
return nil
}
// 通知下一个审批人,当当前环节的审批人通过时,触发。
func (u *User) NotifyNextAuditor(id uint) error {
fmt.Printf("custom ======User %d passhook called.\n", id)
return nil
}
框架提供了2个hooks
,供开发者自行实现逻辑,可以发送邮件通知,短信通知等
app/providers/app_services_provider.go
实例化workflow,并注入服务
func (receiver *AppServiceProvider) Boot(app foundation.Application) {
wf := workflow.NewBaseWorkflow()
// 注册子级的方法到工作流中
user := &models.User{Workflow: wf}
wf.RegisterHook("NotifySendOneHook", reflect.ValueOf(user.NotifySendOne))
wf.RegisterHook("NotifyNextAuditorHook", reflect.ValueOf(user.NotifyNextAuditor))
}
回调参数将在User结构中的NotifySendOne和NotifyNextAuditor方法中执行后续操作,由开发者自行实现
package routes
import (
"github.com/goravel/framework/contracts/foundation"
"github.com/goravel/framework/contracts/route"
"github.com/goravel/framework/facades"
controllers "github.com/hulutech-web/goravel-workflow/controllers"
"github.com/hulutech-web/goravel-workflow/middleware"
)
func Api(app foundation.Application) {
router := app.MakeRoute()
authController := controllers.NewAuthController()
router.Post("/api/auth/login", authController.AdminLogin)
router.Post("/api/h5/login", authController.H5Login)
captchaController := controllers.NewCaptchaController()
router.Get("/api/captcha/get", captchaController.GetCaptcha)
router.Post("/api/captcha/validate", captchaController.ValidateCaptcha)
facades.Route().Middleware(middleware.Jwt()).Prefix("/api").Group(func(router route.Router) {
//文件上传
uploadCtrl := controllers.NewUploadController()
router.Post("/upload", uploadCtrl.Upload)
homeCtrl := controllers.NewHomeController()
router.Get("/home", homeCtrl.Index)
// 部门
deptCtrl := controllers.NewDeptController()
router.Resource("dept", deptCtrl)
router.Post("dept/bindmanager", deptCtrl.BindManager)
router.Post("dept/binddirector", deptCtrl.BindDirector)
// 员工
empCtrl := controllers.NewEmpController()
router.Resource("emp", empCtrl)
router.Post("emp/search", empCtrl.Search)
router.Get("emp/options", empCtrl.Options)
router.Post("emp/bind", empCtrl.BindUser)
//流程
flowCtrl := controllers.NewFlowController()
router.Resource("flow", flowCtrl)
router.Get("flow/list", flowCtrl.List)
router.Get("flow/create", flowCtrl.Create)
//流程设计
router.Get("flow/flowchart/{id}", flowCtrl.FlowDesign)
router.Post("flow/publish", flowCtrl.Publish)
//entry节点
entryCtrl := controllers.NewEntryController()
router.Get("flow/{id}/entry", entryCtrl.Create)
router.Post("entry", entryCtrl.Store)
router.Get("entry/{id}", entryCtrl.Show)
router.Get("entry/{id}/entrydata", entryCtrl.EntryData)
//流程重发
router.Post("entry/resend", entryCtrl.Resend)
//流程轨迹
flowlinkCtrl := controllers.NewFlowlinkController()
router.Post("flowlink", flowlinkCtrl.Update)
//模板控件
templateformCtrl := controllers.NewTemplateformController()
router.Get("template/{id}/templateform", templateformCtrl.Index)
router.Post("templateform", templateformCtrl.Store)
router.Put("templateform/{id}", templateformCtrl.Update)
router.Delete("templateform/{id}", templateformCtrl.Destroy)
router.Get("templateform/{id}", templateformCtrl.Show)
//模板
templateCtrl := controllers.NewTemplateController()
router.Resource("template", templateCtrl)
// 流程
processCtrl := controllers.NewProcessController()
router.Resource("process", processCtrl)
router.Get("process/attribute", processCtrl.Attribute)
router.Post("process/con", processCtrl.Condition)
// 审批流转
procCtrl := controllers.NewProcController()
router.Get("proc/{entry_id}", procCtrl.Index)
//同意
router.Post("pass", procCtrl.Pass)
//驳回
router.Post("unpass", procCtrl.UnPass)
})
}
请访问前端框架goravel-workflow-vue下载安装扩展,并按照文档进行集成
请访问前端框架goravel-workflow-doc进行查看