Prechádzať zdrojové kódy

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

lijian 2 rokov pred
rodič
commit
0943f80497

+ 31 - 3
pkg/models/rulechain.go

@@ -17,7 +17,21 @@ type RuleChain struct {
 	DebugModel      bool   `gorm:"column:debug_model"`        //调试模式
 	Intro           string `gorm:"column:intro"`              //描述
 	VendorID        string `gorm:"column:vendor_id"`          //厂商ID
-	Cell            Cells  `json:"cell"`
+}
+
+// RuleChainParams 更新规则链参数
+type RuleChainParams struct {
+	VendorId string      `json:"VendorID"` // 厂商id
+	RecordId string      `json:"RecordId"` // 记录id
+	Cell     interface{} `json:"cell"`
+	Cells    []*Cell
+}
+
+// ChangeRootParams 更新规则链参数
+type ChangeRootParams struct {
+	VendorId string `json:"vendor_id"` // 厂商id
+	RecordId string `json:"record_id"` // 记录id
+	Root     bool   `json:"root"`
 }
 
 type CreatChainReq struct {
@@ -44,8 +58,9 @@ type CellData struct {
 	ZIndex    string     `json:"ZIndex"`    // 序号
 	FuncBody  string     `json:"func_body"` // 代码
 	Label     string     `json:"label"`
-	Source    string     `json:"source"` // 源节点id
-	Target    string     `json:"target"` // 目标节点id
+	Source    string     `json:"source"`   // 源节点id
+	Target    string     `json:"target"`   // 目标节点id
+	MesType   []string   `json:"mes_type"` // 消息类型
 	Headers   []*Headers `json:"headers"`
 	Url       string     `json:"url"`
 	Method    string     `json:"method"`
@@ -79,3 +94,16 @@ func (a *RuleChain) Validate() error {
 	}
 	return nil
 }
+
+// Validate ``
+func (a *RuleChainParams) Validate() error {
+	return nil
+}
+
+// Validate ``
+func (a *ChangeRootParams) Validate() error {
+	if a.RecordId == "" {
+		return errors.New("记录id不能为空")
+	}
+	return nil
+}

+ 24 - 4
services/knowoapi/controllers/rule_chain.go

@@ -48,16 +48,16 @@ func (a *RuleChainController) Delete() {
 // Put 更新
 // PUT /admin/rule_chain
 func (a *RuleChainController) Put() {
-	RuleChain := new(models.RuleChain)
-	if err := parseBody(a.Ctx, RuleChain); err != nil {
+	params := new(models.RuleChainParams)
+	if err := parseBody(a.Ctx, params); err != nil {
 		badRequest(a.Ctx, err)
 		return
 	}
-	if err := a.Service.Update(RuleChain); err != nil {
+	if err := a.Service.Update(params); err != nil {
 		responseError(a.Ctx, ErrDatabase, err.Error())
 		return
 	}
-	done(a.Ctx, RuleChain)
+	done(a.Ctx, "已保存")
 }
 
 // Get get RuleChains
@@ -85,3 +85,23 @@ func (a *RuleChainController) Get() {
 		"total": total,
 	})
 }
+
+// PutChange 更新
+// PutChange /rule_chain/change
+func (a *RuleChainController) PutChange() {
+	params := new(models.ChangeRootParams)
+	if err := parseBody(a.Ctx, params); err != nil {
+		badRequest(a.Ctx, err)
+		return
+	}
+	if params.VendorId == "" {
+		params.VendorId = a.Token.getVendorID(a.Ctx)
+	}
+
+	err := a.Service.UpdateChainRoot(params)
+	if err != nil {
+		responseError(a.Ctx, ErrDatabase, err.Error())
+		return
+	}
+	done(a.Ctx, "已更新")
+}

+ 7 - 0
services/knowoapi/model/rule_chain.go

@@ -65,3 +65,10 @@ func (a *RuleChain) Delete(ruleChain *models.RuleChain) error {
 func (a *RuleChain) Update(ruleChain *models.RuleChain) error {
 	return a.db.Save(ruleChain).Error
 }
+
+// UpdateChainRoot 设置规则链
+func (a *RuleChain) UpdateChainRoot(vendorId, id string, isRoot bool) (data models.RuleChain, err error) {
+	err = a.db.Model(&data).Where("vendor_id = ? and record_id = ?", vendorId, id).
+		Update("root", isRoot).Error
+	return
+}

+ 51 - 26
services/knowoapi/services/rule_chain.go

@@ -22,9 +22,10 @@ var nodeType = map[string]string{
 type RuleChainService interface {
 	Create(*models.RuleChain) error
 	Delete(*models.RuleChain) error
-	Update(*models.RuleChain) error
+	Update(*models.RuleChainParams) error
 	Query(int, int, string) ([]models.RuleChain, int, error)
 	Get(vendorId, recordId string) (models.RuleChain, error)
+	UpdateChainRoot(*models.ChangeRootParams) error
 }
 type ruleChainService struct {
 	model *model.All
@@ -47,14 +48,7 @@ func (a ruleChainService) Get(vendorId, recordId string) (models.RuleChain, erro
 
 func (a ruleChainService) Create(ruleChain *models.RuleChain) error {
 	ruleChain.RecordId = guid.S()
-	if len(ruleChain.Cell) > 0 {
-		marshal, _ := json.Marshal(ruleChain.Cell)
-		ruleChain.Configuration = fmt.Sprintf("%s", marshal)
-		err := a.create(ruleChain)
-		if err != nil {
-			return err
-		}
-	}
+
 	err := a.model.RuleChain.Create(ruleChain)
 	if err != nil {
 		return err
@@ -71,11 +65,11 @@ func (a ruleChainService) Create(ruleChain *models.RuleChain) error {
 	return nil
 }
 
-func (a ruleChainService) create(ruleChain *models.RuleChain) error {
+func (a ruleChainService) create(params *models.RuleChainParams) error {
 
 	nodeMap := make(map[string]models.RuleNode)
 	var inputNodeId string
-	for _, v := range ruleChain.Cell {
+	for _, v := range params.Cells {
 		if v.Shape != "edge" {
 			if v.Shape == "input-node" {
 				inputNodeId = v.Source.Cell
@@ -84,25 +78,30 @@ func (a ruleChainService) create(ruleChain *models.RuleChain) error {
 			ruleNode := models.RuleNode{
 				Model:       gorm.Model{},
 				RecordId:    guid.S(),
-				RuleChainID: ruleChain.RecordId,
+				RuleChainID: params.RecordId,
 				Type:        nodeType[v.Data.Type],
 				Name:        v.Data.Name,
 				DebugModel:  true,
 				Intro:       v.Data.Desc,
 			}
-			if ruleNode.Type == "MsgTypeSwitchNode" {
+
+			switch ruleNode.Type {
+			case "MsgTypeSwitchNode":
 				ruleNode.Name = "消息类型路由器"
-			}
+			case "MsgTypeFilter":
+				conMap := map[string]interface{}{
+					"msg_type": v.Data.MesType,
+				}
+				marshal, _ := json.Marshal(conMap)
+				ruleNode.Configuration = fmt.Sprintf("%s", marshal)
 
-			if ruleNode.Type == "FilterJavascriptNode" {
+			case "FilterJavascriptNode":
 				conMap := map[string]string{
 					"func_body": v.Data.FuncBody,
 				}
 				marshal, _ := json.Marshal(conMap)
 				ruleNode.Configuration = fmt.Sprintf("%s", marshal)
-			}
-
-			if ruleNode.Type == "RestApiRequestNode" {
+			case "RestApiRequestNode":
 				configuration := models.NodeConfiguration{
 					Url:       v.Data.Url,
 					Method:    v.Data.Method,
@@ -129,11 +128,11 @@ func (a ruleChainService) create(ruleChain *models.RuleChain) error {
 		}
 	}
 
-	for _, v := range ruleChain.Cell {
+	for _, v := range params.Cells {
 		if v.Shape == "edge" && v.Source.Cell != inputNodeId {
 			err := a.model.Relation.Create(&models.Relation{
 				RecordId:    guid.S(),
-				RuleChainId: ruleChain.RecordId,
+				RuleChainId: params.RecordId,
 				FromID:      nodeMap[v.Source.Cell].RecordId,
 				//FromType:     nodeMap[v.Source.Cell].Type,
 				ToID:         nodeMap[v.Target.Cell].RecordId,
@@ -193,28 +192,54 @@ func (a ruleChainService) delete(ruleChain *models.RuleChain) error {
 	return nil
 }
 
-func (a ruleChainService) Update(ruleChain *models.RuleChain) error {
-	err := a.delete(ruleChain)
+func (a ruleChainService) Update(params *models.RuleChainParams) error {
+	ruleChain, err := a.Get(params.VendorId, params.RecordId)
 	if err != nil {
 		return err
 	}
-	err = a.create(ruleChain)
+	err = a.delete(&ruleChain)
 	if err != nil {
 		return err
 	}
+	if params.Cell != nil {
+
+		marshal, _ := json.Marshal(params.Cell)
+		ruleChain.Configuration = string(marshal)
 
-	err = a.model.RuleChain.Update(ruleChain)
+		err = json.Unmarshal(marshal, &params.Cells)
+		if err != nil {
+			return err
+		}
+		err = a.create(params)
+		if err != nil {
+			return err
+		}
+	}
+
+	err = a.model.RuleChain.Update(&ruleChain)
 	if err != nil {
 		return err
 	}
-	params := rpcs.ArgsRuleChainAct{
+	args := rpcs.ArgsRuleChainAct{
 		RuleChainId: ruleChain.RecordId,
 		VendorId:    ruleChain.VendorID,
 	}
 	reply := new(rpcs.ReplyEmptyResult)
-	err = server.RPCCallByName(nil, rpcs.ControllerName, "Controller.UpdateRuleChain", &params, &reply)
+	err = server.RPCCallByName(nil, rpcs.ControllerName, "Controller.UpdateRuleChain", &args, &reply)
 	if err != nil {
 		server.Log.Errorf("update ruleChan error : %v", err)
 	}
 	return nil
 }
+
+func (a ruleChainService) UpdateChainRoot(params *models.ChangeRootParams) error {
+	//var isRoot int = 0
+	//if params.Root {
+	//	isRoot = 1
+	//}
+	_, err := a.model.RuleChain.UpdateChainRoot(params.VendorId, params.RecordId, params.Root)
+	if err != nil {
+		return err
+	}
+	return nil
+}