ソースを参照

Merge branch 'v2' of http://192.168.0.224:3000/yongxu/sparrow into v2

lijian 2 年 前
コミット
a5d14df624
3 ファイル変更59 行追加30 行削除
  1. 19 14
      pkg/models/rulechain.go
  2. 1 1
      services/knowoapi/router.go
  3. 39 15
      services/knowoapi/services/rule_chain.go

+ 19 - 14
pkg/models/rulechain.go

@@ -37,27 +37,32 @@ type Cell struct {
 }
 
 type CellData struct {
-	Name     string `json:"name"`      // 名称
-	Id       string `json:"id"`        // id
-	Type     string `json:"type"`      // 节点类型
-	Desc     string `json:"desc"`      // 备注
-	ZIndex   string `json:"ZIndex"`    // 序号
-	FuncBody string `json:"func_body"` // 代码
-	Label    string `json:"label"`
-	Source   string `json:"source"` // 源节点id
-	Target   string `json:"target"` // 目标节点id
-	NodeConfiguration
-}
-
-type NodeConfiguration struct {
+	Name      string     `json:"name"`      // 名称
+	Id        string     `json:"id"`        // id
+	Type      string     `json:"type"`      // 节点类型
+	Desc      string     `json:"desc"`      // 备注
+	ZIndex    string     `json:"ZIndex"`    // 序号
+	FuncBody  string     `json:"func_body"` // 代码
+	Label     string     `json:"label"`
+	Source    string     `json:"source"` // 源节点id
+	Target    string     `json:"target"` // 目标节点id
+	Headers   []*Headers `json:"headers"`
 	Url       string     `json:"url"`
 	Method    string     `json:"method"`
-	Headers   []*Headers `json:"headers"`
 	Retry     int        `json:"retry"`
 	TimeOut   int        `json:"time_out"`
 	RetryWait int        `json:"retry_wait"`
 }
 
+type NodeConfiguration struct {
+	Url       string                 `json:"url"`
+	Method    string                 `json:"method"`
+	Headers   map[string]interface{} `json:"headers"`
+	Retry     int                    `json:"retry"`
+	TimeOut   int                    `json:"time_out"`
+	RetryWait int                    `json:"retry_wait"`
+}
+
 type Headers struct {
 	Key   string `json:"key"`
 	Value string `json:"value"`

+ 1 - 1
services/knowoapi/router.go

@@ -98,6 +98,6 @@ func registerRouters(srv *iris.Application, models *model.All, gen *generator.Ke
 	RoleAPI.Register(roleService).Handle(new(controllers.RoleController))
 
 	// ruleChain api
-	RuleChainAPI := mvc.New(adminRouter.Party("/rule_chain"))
+	RuleChainAPI := mvc.New(userRouter.Party("/rule_chain"))
 	RuleChainAPI.Register(ruleChainService).Handle(new(controllers.RuleChainController))
 }

+ 39 - 15
services/knowoapi/services/rule_chain.go

@@ -9,6 +9,13 @@ import (
 	"sparrow/services/knowoapi/model"
 )
 
+var nodeType = map[string]string{
+	"MsgTypeFilter":     "MsgTypeFilterNode",
+	"MsgTypeSwitchNode": "MsgTypeSwitchNode",
+	"JavascriptFilter":  "FilterJavascriptNode",
+	"RestApiAction":     "RestApiRequestNode",
+}
+
 // RuleChainService 业务接口
 type RuleChainService interface {
 	Create(*models.RuleChain) error
@@ -17,7 +24,6 @@ type RuleChainService interface {
 	Query(int, int, string) ([]models.RuleChain, int, error)
 	Get(vendorId, recordId string) (models.RuleChain, error)
 }
-
 type ruleChainService struct {
 	model *model.All
 }
@@ -59,27 +65,45 @@ func (a ruleChainService) create(ruleChain *models.RuleChain) error {
 				Model:       gorm.Model{},
 				RecordId:    guid.S(),
 				RuleChainID: ruleChain.RecordId,
-				Type:        v.Data.Type,
+				Type:        nodeType[v.Data.Type],
 				Name:        v.Data.Name,
 				DebugModel:  true,
 				Intro:       v.Data.Desc,
 			}
+
 			if v.Shape == "input-node" {
 				ruleChain.FirstRuleNodeID = ruleNode.RecordId
 				ruleNode.Name = "数据输入"
 			}
+			if ruleNode.Type == "MsgTypeSwitchNode" {
+				ruleNode.Name = "消息类型路由器"
+			}
 
-			configuration := models.NodeConfiguration{
-				Url:       v.Data.Url,
-				Method:    v.Data.Method,
-				Headers:   v.Data.Headers,
-				Retry:     v.Data.Retry,
-				TimeOut:   v.Data.TimeOut,
-				RetryWait: v.Data.RetryWait,
+			if ruleNode.Type == "FilterJavascriptNode" {
+				conMap := map[string]string{
+					"func_body": v.Data.FuncBody,
+				}
+				marshal, _ := json.Marshal(conMap)
+				ruleNode.Configuration = fmt.Sprintf("%s", marshal)
 			}
 
-			marshal, _ := json.Marshal(configuration)
-			ruleNode.Configuration = fmt.Sprintf("%s", marshal)
+			if ruleNode.Type == "RestApiRequestNode" {
+				configuration := models.NodeConfiguration{
+					Url:       v.Data.Url,
+					Method:    v.Data.Method,
+					Retry:     v.Data.Retry,
+					TimeOut:   v.Data.TimeOut,
+					RetryWait: v.Data.RetryWait,
+					Headers:   make(map[string]interface{}),
+				}
+				if len(v.Data.Headers) > 0 {
+					for _, header := range v.Data.Headers {
+						configuration.Headers[header.Key] = header.Value
+					}
+				}
+				marshal, _ := json.Marshal(configuration)
+				ruleNode.Configuration = fmt.Sprintf("%s", marshal)
+			}
 
 			nodeMap[v.Id] = ruleNode
 
@@ -93,10 +117,10 @@ func (a ruleChainService) create(ruleChain *models.RuleChain) error {
 	for _, v := range ruleChain.Cell {
 		if v.Shape == "edge" {
 			err := a.model.Relation.Create(&models.Relation{
-				RecordId:     guid.S(),
-				RuleChainId:  ruleChain.RecordId,
-				FromID:       nodeMap[v.Source.Cell].RecordId,
-				FromType:     nodeMap[v.Source.Cell].Type,
+				RecordId:    guid.S(),
+				RuleChainId: ruleChain.RecordId,
+				FromID:      nodeMap[v.Source.Cell].RecordId,
+				//FromType:     nodeMap[v.Source.Cell].Type,
 				ToID:         nodeMap[v.Target.Cell].RecordId,
 				ToType:       nodeMap[v.Target.Cell].Type,
 				RelationType: v.Data.Label,