Forráskód Böngészése

Merge branch 'v2' of https://git.i2edu.net/packages/light-apiengine into v2

aries.zhang 5 éve
szülő
commit
34410ad6db

+ 13 - 0
controllers/gen/SysWfController_gen.go

@@ -71,6 +71,19 @@ func (c *SysWfController) Run(ctx *gin.Context) {
 	partial.SysWf_Run(&entitys.CtrlContext{c.apiengine, ctx, db, c.apiengine.PlatformOrmEngine})
 }
 
+// Run
+// @Title Run
+// @Description 运行实例
+// @Param	      false  ""
+// @Success 200 {object} sysReturn
+// @Failure 403 :id is empty
+// @router /run  [post]
+func (c *SysWfController) NewStep(ctx *gin.Context) {
+	//
+	db := c.apiengine.BusinessOrmEngine[ctx.GetString("domain")]
+	partial.SysWf_NewStep(&entitys.CtrlContext{c.apiengine, ctx, db, c.apiengine.PlatformOrmEngine})
+}
+
 // WfDefinesTag
 // @Title WfDefinesTag
 // @Description 根据tag获取工作流事项

+ 26 - 0
controllers/partial/SysWfController.go

@@ -105,6 +105,32 @@ func SysWf_Run(c *entitys.CtrlContext) {
 	}
 }
 
+// _NewStep
+// @Title _NewStep
+// @Description 创建步骤
+// @Param	choice      false  ""
+// @Param	instance_id      false  ""
+// @Param	nextStep      false  ""
+// @Param	option      false  ""
+// @Param	users      false  ""
+// @Success 200 {object} models.Account
+// @Failure 403 :id is empty
+func SysWf_NewStep(c *entitys.CtrlContext) {
+	obj := models.WfRunData{}
+	err := c.Ctx.Bind(&obj)
+	if err != nil {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
+		return
+	}
+
+	bytess, err := wfclient.NewWFClient(c).NewStep(obj.InstanceId, obj.Users, obj.Choice, obj.Opinion, obj.NextStep, c)
+	if err == nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", string(bytess)})
+	} else {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
+	}
+}
+
 // _WfDefinesTag
 // @Title _WfDefinesTag
 // @Description 根据tag获取工作流事项

+ 85 - 86
engine/auth/auth_client.go

@@ -7,21 +7,22 @@ import (
 	"encoding/hex"
 	"errors"
 	"fmt"
+	"net"
+	"strconv"
+	"time"
+
 	"git.qianqiusoft.com/library/glog"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
 	sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
-	"net"
-	"strconv"
-	"time"
 )
 
 const (
 	__KEY = "Light#dauth-@*I2"
 
-	CMD_NEW = "new"
-	CMD_REMOVE = "remove"
-	CMD_PINGPONG = "pg"
+	CMD_NEW           = "new"
+	CMD_REMOVE        = "remove"
+	CMD_PINGPONG      = "pg"
 	CMD_PINGPONG_RESP = "pg_resp"
 )
 
@@ -33,7 +34,7 @@ type authPackage struct {
 	Content  []byte
 }
 
-func (ap *authPackage)toBytes()[]byte{
+func (ap *authPackage) toBytes() []byte {
 	buf := bytes.NewBuffer([]byte{})
 
 	b := []byte(ap.Cmd)
@@ -47,32 +48,32 @@ func (ap *authPackage)toBytes()[]byte{
 }
 
 type TcpClient struct {
-	conn     net.Conn           // 连接
-	pchan    chan *authPackage  // 包chan
-	done     chan bool          // 是否done
-	exited   bool               // 退出
-	verified bool               // 验证是否
+	conn     net.Conn          // 连接
+	pchan    chan *authPackage // 包chan
+	done     chan bool         // 是否done
+	exited   bool              // 退出
+	verified bool              // 验证是否
 }
 
 // 创建client
-func NewTcpClient()*TcpClient{
+func NewTcpClient() *TcpClient {
 	c := &TcpClient{
-		pchan: make(chan *authPackage, 100),
-		done:  make(chan bool),
-		exited: false,
+		pchan:    make(chan *authPackage, 100),
+		done:     make(chan bool),
+		exited:   false,
 		verified: false,
 	}
 	return c
 }
 
 // 启动
-func(c *TcpClient)Start() {
+func (c *TcpClient) Start() {
 	go func() {
 		defer func() {
 			if p := recover(); p != nil {
 				fmt.Println("ecover", p)
 			}
-			if c.conn != nil{
+			if c.conn != nil {
 				c.conn.Close()
 			}
 			c.restart()
@@ -96,7 +97,7 @@ func(c *TcpClient)Start() {
 			fmt.Println("Error dialing", err.Error())
 			return
 		}
-		if vresp != "ok"{
+		if vresp != "ok" {
 			// 验证失败
 			fmt.Println("verify is not ok", vresp)
 			return
@@ -131,17 +132,17 @@ func(c *TcpClient)Start() {
 				fmt.Println("读取命令错误", err.Error())
 				break
 			}
-			if cmd == CMD_NEW{
+			if cmd == CMD_NEW {
 				err = c.newHandler()
-			} else if cmd == CMD_REMOVE{
+			} else if cmd == CMD_REMOVE {
 				err = c.removeHandler()
-			} else if cmd == CMD_PINGPONG_RESP{
+			} else if cmd == CMD_PINGPONG_RESP {
 
 			} else {
 				fmt.Println("未知cmd", cmd)
 				continue
 			}
-			if err != nil{
+			if err != nil {
 				c.done <- true
 				fmt.Println("处理错误", err.Error())
 				break
@@ -151,19 +152,19 @@ func(c *TcpClient)Start() {
 }
 
 // 停止
-func(c *TcpClient)Stop(){
+func (c *TcpClient) Stop() {
 	c.exited = true
 	c.conn.Close()
 }
 
 // 检测
-func(c *TcpClient)restart(){
-	if c.exited{
+func (c *TcpClient) restart() {
+	if c.exited {
 		// 已退出则不重启
 		return
 	}
 
-	go func(){
+	go func() {
 		c.verified = false
 		c.done = make(chan bool)
 		c.pchan = make(chan *authPackage, 100)
@@ -174,30 +175,30 @@ func(c *TcpClient)restart(){
 }
 
 // 发送bytes
-func(c *TcpClient)Send(cmd string, bytess []byte){
-	if !c.verified{
+func (c *TcpClient) Send(cmd string, bytess []byte) {
+	if !c.verified {
 		fmt.Println("未认证")
 		return
 	}
 
 	glog.Infoln("发送指令1", cmd)
 	c.pchan <- &authPackage{
-		Cmd: cmd,
+		Cmd:     cmd,
 		Content: bytess,
 	}
 	glog.Infoln("发送指令2", cmd)
 }
 
 // 发送token
-func(c *TcpClient)SendToken(token *entitys.Token){
-	glog.Infoln("发送新建token")
+func (c *TcpClient) SendToken(token *entitys.Token) {
+	// glog.Infoln("发送新建token")
 	bytess := tokenToBytes(token)
 	c.Send(CMD_NEW, bytess)
 }
 
 // 处理创建
-func(c *TcpClient)newHandler()error{
-	fmt.Println("处理新建")
+func (c *TcpClient) newHandler() error {
+	// fmt.Println("处理新建")
 	bytess, err := readBytes(c.conn)
 	if err != nil {
 		fmt.Println("读取token内容错误", err.Error())
@@ -205,7 +206,7 @@ func(c *TcpClient)newHandler()error{
 	}
 	// 新建
 	token, err := bytesToToken(bytess)
-	if err != nil{
+	if err != nil {
 		glog.Infoln("bytesToToken 错误", err.Error())
 		return err
 	}
@@ -214,7 +215,7 @@ func(c *TcpClient)newHandler()error{
 }
 
 // 处理删除
-func(c *TcpClient)removeHandler()error{
+func (c *TcpClient) removeHandler() error {
 	fmt.Println("处理删除")
 	bytess, err := readBytes(c.conn)
 	if err != nil {
@@ -227,10 +228,10 @@ func(c *TcpClient)removeHandler()error{
 }
 
 // 读取字符串
-func readString(conn net.Conn)(string, error){
+func readString(conn net.Conn) (string, error) {
 	// 读长度
 	size, err := readUInt32(conn)
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取长度失败,", err.Error())
 		return "", err
 	}
@@ -238,15 +239,15 @@ func readString(conn net.Conn)(string, error){
 	// 读字符串
 	b := make([]byte, size)
 	n, err := conn.Read(b)
-	if n != int(size){
+	if n != int(size) {
 		return "", errors.New("读取长度不是" + strconv.Itoa(int(size)))
 	}
 	return string(b), nil
 }
 
 // 写入字符串
-func writeString(conn net.Conn, str string)error{
-	if str == ""{
+func writeString(conn net.Conn, str string) error {
+	if str == "" {
 		return errors.New("字符串为空")
 	}
 
@@ -255,18 +256,18 @@ func writeString(conn net.Conn, str string)error{
 
 	// 发送长度
 	err := writeUInt32(conn, uint32(size))
-	if err != nil{
+	if err != nil {
 		fmt.Println("发送长度失败,", err.Error())
 		return err
 	}
 
 	// 发送内容
 	n, err := conn.Write(bytess)
-	if err != nil{
+	if err != nil {
 		fmt.Println("发送内容失败,", err.Error())
 		return err
 	}
-	if n != size{
+	if n != size {
 		return errors.New("发送长度不是" + strconv.Itoa(int(size)))
 	}
 
@@ -274,10 +275,10 @@ func writeString(conn net.Conn, str string)error{
 }
 
 // 读取bytes
-func readBytes(conn net.Conn)([]byte, error){
+func readBytes(conn net.Conn) ([]byte, error) {
 	// 读长度
 	size, err := readUInt32(conn)
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取长度失败,", err.Error())
 		return nil, err
 	}
@@ -285,21 +286,21 @@ func readBytes(conn net.Conn)([]byte, error){
 	// 读字符串
 	b := make([]byte, size)
 	n, err := conn.Read(b)
-	if n != int(size){
+	if n != int(size) {
 		return nil, errors.New("读取长度不是" + strconv.Itoa(int(size)))
 	}
 	return b, nil
 }
 
 // 读取uint64
-func readUInt32(conn net.Conn)(uint32, error){
+func readUInt32(conn net.Conn) (uint32, error) {
 	b := make([]byte, 4)
 	n, err := conn.Read(b)
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取长度失败,", err.Error())
 		return 0, err
 	}
-	if n != 4{
+	if n != 4 {
 		return 0, errors.New("读取长度不是4")
 	}
 	size := binary.BigEndian.Uint32(b)
@@ -308,49 +309,47 @@ func readUInt32(conn net.Conn)(uint32, error){
 }
 
 // 写入长度
-func writeUInt32(conn net.Conn, v uint32)error{
+func writeUInt32(conn net.Conn, v uint32) error {
 	// 发送长度
 	b := make([]byte, 4)
 	binary.BigEndian.PutUint32(b, v)
 	n, err := conn.Write(b)
-	if err != nil{
+	if err != nil {
 		fmt.Println("发送长度失败,", err.Error())
 		return err
 	}
-	if n != 4{
+	if n != 4 {
 		return errors.New("发送长度不是4")
 	}
 
 	return nil
 }
 
-
 // 写入长度
-func writeUInt64(conn net.Conn, v uint64)error{
+func writeUInt64(conn net.Conn, v uint64) error {
 	// 发送长度
 	b := make([]byte, 8)
 	binary.BigEndian.PutUint64(b, v)
 	n, err := conn.Write(b)
-	if err != nil{
+	if err != nil {
 		fmt.Println("发送长度失败,", err.Error())
 		return err
 	}
-	if n != 4{
+	if n != 4 {
 		return errors.New("发送长度不是4")
 	}
 
 	return nil
 }
 
-
 // 读取uint64
-func readStringByBytes(bytess []byte)(string, int, error) {
+func readStringByBytes(bytess []byte) (string, int, error) {
 	size := binary.BigEndian.Uint32(bytess)
 	return string(bytess[4 : 4+size]), int(size), nil
 }
 
 // int转bytes
-func uint32ToBytes(v int)[]byte{
+func uint32ToBytes(v int) []byte {
 	b := make([]byte, 4)
 	binary.BigEndian.PutUint32(b, uint32(v))
 
@@ -358,7 +357,7 @@ func uint32ToBytes(v int)[]byte{
 }
 
 // int转bytes
-func uint64ToBytes(v int)[]byte{
+func uint64ToBytes(v int) []byte {
 	b := make([]byte, 8)
 	binary.BigEndian.PutUint32(b, uint32(v))
 
@@ -366,68 +365,68 @@ func uint64ToBytes(v int)[]byte{
 }
 
 // 转token
-func bytesToToken(content []byte)(*entitys.Token, error){
+func bytesToToken(content []byte) (*entitys.Token, error) {
 	token := &entitys.Token{}
 	var index int = 0
 	var size int
 	var err error = nil
-	fmt.Println("读取userid")
+	// fmt.Println("读取userid")
 	token.UserId, size, err = readStringByBytes(content)
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取userid错误")
-		return  nil, err
+		return nil, err
 	}
 	index += 4 + size
 
-	fmt.Println("读取AccessToken")
+	// fmt.Println("读取AccessToken")
 	token.AccessToken, size, err = readStringByBytes(content[index:])
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取AccessToken错误")
-		return  nil, err
+		return nil, err
 	}
 	index += 4 + size
 
-	fmt.Println("读取RefreshToken")
+	// fmt.Println("读取RefreshToken")
 	token.RefreshToken, size, err = readStringByBytes(content[index:])
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取RefreshToken错误")
-		return  nil, err
+		return nil, err
 	}
 	index += 4 + size
 
-	fmt.Println("读取LoginID")
+	// fmt.Println("读取LoginID")
 	token.LoginID, size, err = readStringByBytes(content[index:])
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取LoginID错误")
-		return  nil, err
+		return nil, err
 	}
 	index += 4 + size
 
-	fmt.Println("读取timestamp")
+	// fmt.Println("读取timestamp")
 	token.TimeStamp = binary.BigEndian.Uint64(content[index:])
 	index += 8
 
-	fmt.Println("读取ServerIp")
+	// fmt.Println("读取ServerIp")
 	token.ServerIp, size, err = readStringByBytes(content[index:])
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取ServerIp错误")
-		return  nil, err
+		return nil, err
 	}
 	index += 4 + size
 
-	fmt.Println("读取Domain")
+	// fmt.Println("读取Domain")
 	token.Domain, size, err = readStringByBytes(content[index:])
-	if err != nil{
+	if err != nil {
 		fmt.Println("读取Domain错误")
-		return  nil, err
+		return nil, err
 	}
 	index += 4 + size
 
-	return  token, nil
+	return token, nil
 }
 
 // 转bytes,包括token开头
-func tokenToBytes(token *entitys.Token)[]byte{
+func tokenToBytes(token *entitys.Token) []byte {
 	buf := bytes.NewBuffer([]byte{})
 
 	t := []byte(token.UserId)
@@ -459,7 +458,7 @@ func tokenToBytes(token *entitys.Token)[]byte{
 	buf.Write(t)
 
 	bytess := buf.Bytes()
-	buf = bytes.NewBuffer([]byte{})		// 这里用reset是错误的
+	buf = bytes.NewBuffer([]byte{}) // 这里用reset是错误的
 
 	tokenstrbytes := []byte(token.AccessToken)
 	buf.Write(uint32ToBytes(len(tokenstrbytes)))
@@ -471,7 +470,7 @@ func tokenToBytes(token *entitys.Token)[]byte{
 }
 
 // 发送验证
-func sendVerify(conn net.Conn){
+func sendVerify(conn net.Conn) {
 	timestamp := time.Now().UnixNano()
 	timestampStr := strconv.Itoa(int(timestamp))
 	seed := timestampStr + __KEY
@@ -482,7 +481,7 @@ func sendVerify(conn net.Conn){
 }
 
 // md5 哈希
-func hash(str string)string{
+func hash(str string) string {
 	h := md5.New()
 	h.Write([]byte(str))
 	return hex.EncodeToString(h.Sum(nil))

+ 3 - 0
routers/sys_wf_gen.go

@@ -43,6 +43,9 @@ func registerSysWfRouter(e *engine.ApiEngine) {
 	//v1.GET("/recall",ctrler.Recall)
 	v1.POST("/interrupt", ctrler.Interrupt)
 
+	//v1.GET("/newstep",ctrler.Recall)
+	v1.POST("/newstep", ctrler.NewStep)
+
 	v1.GET("/designer", ctrler.Designer)
 	//v1.POST("/designer",ctrler.Designer)
 

+ 5 - 4
utils/token_store.go

@@ -2,13 +2,14 @@ package utils
 
 import (
 	"errors"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
 	"log"
 	"strings"
 	"sync"
 	"time"
+
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
 )
 
 type TokenStore struct {
@@ -46,7 +47,7 @@ func (t *TokenStore) Set(key string, v *entitys.Token) {
 	} else if val != v {
 		t.tokens[key] = v
 	}
-	log.Println(key, "添加Token:", v.AccessToken, v.RefreshToken, v.LoginID)
+	// log.Println(key, "添加Token:", v.AccessToken, v.RefreshToken, v.LoginID)
 }
 
 func (t *TokenStore) Remove(key string) {

+ 33 - 0
wfclient/client.go

@@ -299,6 +299,39 @@ func (w *WFClient) Run(instanceId, userId, choice, options, nextStep string, c *
 	return []byte{}, nil
 }
 
+/**
+ * @brief: run the wf instance
+ * @param1 instanceId: id of instance
+ * @param2 userId: approver id
+ * @param3 choice: choice
+ * @param4 options: options
+ * @return1 content of response
+ * @return2 error
+ */
+func (w *WFClient) NewStep(instanceId, userId, choice, options, nextStep string, c *entitys.CtrlContext) ([]byte, error) {
+	url := w.getFullUrl("api/wf_instance/newstep")
+
+	params := make(map[string]string)
+	params["instance_id"] = instanceId
+	params["users"] = userId
+	if choice != "" {
+		params["choice"] = choice
+	}
+	if options != "" {
+		params["opinion"] = options
+	}
+	if nextStep != "" {
+		params["nextStep"] = nextStep
+	}
+
+	bytess, err := HttpClientInstance().post(url, params, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	return bytess, err
+}
+
 /**
  * @brief: pre the wf instance
  * @param1 instanceId: id of instance