diff --git a/workflow/workflow.go b/workflow/workflow.go index 1cf95dab..f037443f 100644 --- a/workflow/workflow.go +++ b/workflow/workflow.go @@ -93,14 +93,21 @@ func (workflow *WorkFlow) Setting(id int) {} func (workflow *WorkFlow) SetupAPIs(id int) {} // Get 读取当前工作流(未完成的) -func (workflow *WorkFlow) Get(uid int, name string, id interface{}) map[string]interface{} { +func (workflow *WorkFlow) Get(uid int, id interface{}) map[string]interface{} { wflow := gou.Select("xiang.workflow") + hasUser := dbal.Raw(fmt.Sprintf("JSON_CONTAINS(users, '%d', '$')", uid)) params := gou.QueryParam{ - Select: []interface{}{"*"}, + Select: []interface{}{ + "data_id", "id", "input", "name", + "user_id", "users", + "node_name", "node_status", + "status", + "updated_at", "created_at", + }, Wheres: []gou.QueryWhere{ {Column: "name", Value: workflow.Name}, {Column: "data_id", Value: id}, - {Column: "user_id", Value: uid}, + {Column: hasUser, Value: 1}, {Column: "status", Value: "进行中"}, }, } @@ -111,8 +118,9 @@ func (workflow *WorkFlow) Get(uid int, name string, id interface{}) map[string]i return map[string]interface{}{ "name": workflow.Name, "data_id": id, - "node_name": name, + "node_name": workflow.Nodes[0].Name, "user_id": uid, + "users": []interface{}{uid}, "status": "进行中", "node_status": "进行中", "input": map[string]interface{}{}, @@ -128,7 +136,7 @@ func (workflow *WorkFlow) Save(uid int, name string, id interface{}, input Input Wheres: []gou.QueryWhere{ {Column: "name", Value: workflow.Name}, {Column: "data_id", Value: id}, - {Column: hasUser}, + {Column: hasUser, Value: 1}, {Column: "status", Value: "进行中"}, }, Limit: 1, diff --git a/workflow/workflow_test.go b/workflow/workflow_test.go index 408e0586..badb8d23 100644 --- a/workflow/workflow_test.go +++ b/workflow/workflow_test.go @@ -42,6 +42,7 @@ func TestSave(t *testing.T) { data := maps.Of(wflow).Dot() assert.Equal(t, int64(1), data.Get("id")) + assert.Equal(t, "assign", data.Get("name")) assert.Equal(t, "选择商务负责人", data.Get("node_name")) assert.Equal(t, "进行中", data.Get("node_status")) assert.Equal(t, "进行中", data.Get("status")) @@ -67,6 +68,7 @@ func TestSaveUpdate(t *testing.T) { data := maps.Of(wflow).Dot() assert.Equal(t, int64(1), data.Get("id")) + assert.Equal(t, "assign", data.Get("name")) assert.Equal(t, "选择商务负责人", data.Get("node_name")) assert.Equal(t, "进行中", data.Get("node_status")) assert.Equal(t, "进行中", data.Get("status")) @@ -79,6 +81,39 @@ func TestSaveUpdate(t *testing.T) { capsule.Query().From("xiang_workflow").Truncate() } +func TestGet(t *testing.T) { + assignFlow := Select("assign") + assignFlow.Save(1, "选择商务负责人", 1, Input{ + Data: map[string]interface{}{"id": 1, "name": "云主机"}, + Form: map[string]interface{}{"biz_id": 1, "name": "张良明"}, + }) + wflow := assignFlow.Get(1, 1) + data := maps.Of(wflow).Dot() + assert.Equal(t, int64(1), data.Get("id")) + assert.Equal(t, "assign", data.Get("name")) + assert.Equal(t, "选择商务负责人", data.Get("node_name")) + assert.Equal(t, "进行中", data.Get("node_status")) + assert.Equal(t, "进行中", data.Get("status")) + assert.Equal(t, int64(1), data.Get("user_id")) + assert.Equal(t, []interface{}{float64(1)}, data.Get("users")) + + // 清理数据 + capsule.Query().From("xiang_workflow").Truncate() +} + +func TestGetEmpty(t *testing.T) { + assignFlow := Select("assign") + wflow := assignFlow.Get(1, 1) + data := maps.Of(wflow).Dot() + assert.Equal(t, false, data.Has("id")) + assert.Equal(t, "assign", data.Get("name")) + assert.Equal(t, "选择商务负责人", data.Get("node_name")) + assert.Equal(t, "进行中", data.Get("node_status")) + assert.Equal(t, "进行中", data.Get("status")) + assert.Equal(t, 1, data.Get("user_id")) + assert.Equal(t, []interface{}{1}, data.Get("users")) +} + func check(t *testing.T) { keys := []string{} for key, workflow := range WorkFlows {