前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang办公工作流workflow利用js-ojus/flow做测试

golang办公工作流workflow利用js-ojus/flow做测试

作者头像
hotqin888
发布2019-01-03 11:10:26
2.2K0
发布2019-01-03 11:10:26
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

它这个东西https://github.com/js-ojus/flow很有意思,没有任何example,完全靠蒙,或者看它test摸索吧,看它issue里别人的例子。

首先安装mysql

然后建立一个用户travis,并且密码为空

CREATE USER 'travis'@'localhost' IDENTIFIED BY ''";

然后还要新建一个数据库flow,选择utf8mb4,它源码的某个地方有讲。

——然后给用户travis设置flow这个数据库的权限

然后进入文件夹内,初始化和进行测试。

代码语言:javascript
复制
D:\gowork\src\github.com\js-ojus\flow>setup_db.sh -t

D:\gowork\src\github.com\js-ojus\flow>setup_blob_dirs.sh

D:\gowork\src\github.com\js-ojus\flow>go test
PASS
ok      github.com/js-ojus/flow 5.965s

D:\gowork\src\github.com\js-ojus\flow>

beego里使用:

代码语言:javascript
复制
package controllers

import (
	"database/sql"
	// "strings"
	// "testing"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	// "github.com/astaxie/beego"
	"github.com/js-ojus/flow"
	// _ "github.com/mattn/go-sqlite3"
	// "github.com/astaxie/beego/httplib"
	// "github.com/astaxie/beego/logs"
	"log"
)

type WFApi struct {
	flow.Document
}

// fatal1 expects a value and an error value as its arguments.
func fatal1(val1 interface{}, err error) interface{} {
	if err != nil {
		fmt.Println("%v", err)
	}
	return val1
}

// Initialise DB connection.
// func init() {
// gt = t

// Connect to the database.travis
// driver, connStr := "mysql", "root:root@/flow"
// tdb := fatal1(sql.Open(driver, connStr)).(*sql.DB)
// flow.RegisterDB(tdb)

// if tdb == nil {
// 	log.Fatal("given database handle is `nil`")
// }
// db = tdb

// return nil
// }

// func RegisterDB(sdb *sql.DB) error {
// 	if sdb == nil {
// 		log.Fatal("given database handle is `nil`")
// 	}
// 	db = sdb

// 	return nil
// }

func WorkflowsCreate() {
	driver, connStr := "mysql", "root:root@/flow"
	tdb := fatal1(sql.Open(driver, connStr)).(*sql.DB)
	// flow.RegisterDB(tdb)

	if tdb == nil {
		log.Fatal("given database handle is `nil`")
	}
	db := tdb
	// var db *sql.DB
	tx, _ := db.Begin()

	// var tx *sql.Tx
	defer tx.Rollback()

	docType1, err := flow.DocTypes.New(tx, "EXAM:COMMON")
	if err != nil {
		fmt.Println(err)
	}

	docState1, err := flow.DocStates.New(tx, "Init") //初始化
	// docState2, err := flow.DocStates.New(tx, "EntrustCreate")   //委托创建
	// docState3, err := flow.DocStates.New(tx, "EntrustApproved") //委托审核
	// docState4, err := flow.DocStates.New(tx, "SampleHandon")    //样本交接
	// docState5, err := flow.DocStates.New(tx, "PrepareFinish")   //制备完成
	flow.DocStates.New(tx, "PrepareApproved") //制备审核
	flow.DocStates.New(tx, "TaskAssign")      //任务分配
	flow.DocStates.New(tx, "DataApproved")    //数据录入审核
	flow.DocStates.New(tx, "ReportGen")       //报告生成
	flow.DocStates.New(tx, "ReportApproved")  //报告审核

	/////
	docActionID1, _ := flow.DocActions.New(tx, "CreateEntrust", false)  //创建委托
	docActionID2, _ := flow.DocActions.New(tx, "ApproveEntrust", false) //审核委托
	docActionID3, _ := flow.DocActions.New(tx, "HandonSample", false)   //提交样本
	docActionID4, _ := flow.DocActions.New(tx, "FinishPrepare", true)   //完成制备
	docActionID5, _ := flow.DocActions.New(tx, "ApprovePrepare", true)  //审核制备
	docActionID6, _ := flow.DocActions.New(tx, "AssignTask", false)     //分配任务
	docActionID7, _ := flow.DocActions.New(tx, "ApproveData", false)    //审核数据
	docActionID8, _ := flow.DocActions.New(tx, "GenReport", false)      //生成报告
	docActionID9, _ := flow.DocActions.New(tx, "ApproveReport", true)   //审核报告

	workflowId, _ := flow.Workflows.New(tx, "Examination", docType1, docState1)
	flow.Workflows.SetActive(tx, workflowId, true)

	//创建Docments
	contextId, _ := flow.AccessContexts.New(tx, "Context")
	groupId, _ := flow.Groups.New(tx, "Examination", "exam")

	resUser, _ := tx.Exec(`INSERT INTO users_master(first_name, last_name, email, active)
		VALUES('admin', 'dashoo', 'admin@dashoo.com', 1)`)
	uid, _ := resUser.LastInsertId()
	userID1 := flow.UserID(uid)

	flow.Groups.AddUser(tx, groupId, userID1)
	roleID1, _ := flow.Roles.New(tx, "administrator")
	flow.Roles.AddPermissions(tx, roleID1, docType1, []flow.DocActionID{docActionID1, docActionID2,
		docActionID3, docActionID4, docActionID5, docActionID6, docActionID7, docActionID8, docActionID9})

	docNewInput := flow.DocumentsNewInput{
		DocTypeID:       docType1,
		AccessContextID: contextId,
		GroupID:         groupId,
		Title:           "entrust flow",
		Data:            "eid: 111, entrustNo: 2222",
	}
	flow.Documents.New(tx, &docNewInput)

	// documentID1, err := flow.Documents.New(tx, &docNewInput)

	// Documents.setState(tx, docType1, documentID1, docState2, contextId)

	tx.Commit()
}

func (this *WFApi) WorkflowsNext() {

	// tx, _ := flow.db.Begin()
	var tx *sql.Tx
	defer tx.Rollback()

	/*docNewInput := DocumentsNewInput {
	  	DocTypeID: docType1,
	  	AccessContextID: contextId,
	  	GroupID: groupId,
	  	Title: "entrust flow",
	  	Data: "eid: 111, entrustNo: 2222",
	  }
	  documentID1, err := Documents.New(tx, &docNewInput)
	  fmt.Println("documentID1=", documentID1, err)*/

	docEventInput := flow.DocEventsNewInput{
		DocTypeID:   flow.DocTypeID(1),
		DocumentID:  flow.DocumentID(1),
		DocStateID:  flow.DocStateID(2),
		DocActionID: flow.DocActionID(2),
		GroupID:     flow.GroupID(1),
		Text:        "开始审批",
	}
	groupIds := []flow.GroupID{flow.GroupID(1)}
	myWorkflow, err := flow.Workflows.Get(flow.WorkflowID(1))
	docEvent1, err := flow.DocEvents.New(tx, &docEventInput)
	myDocEvent, err := flow.DocEvents.Get(docEvent1)
	newDocStateId, err := myWorkflow.ApplyEvent(tx, myDocEvent, groupIds)
	fmt.Println("newDocStateId=", newDocStateId, err)

	tx.Commit()
}

main.go里调用

代码语言:javascript
复制
func main() {

	controllers.WorkflowsCreate()
	beego.Run()
}

 类似这样而已。暂时到这了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档