lijian 2 年 前
コミット
7731e1b02f

+ 3 - 3
pkg/models/rulechain.go

@@ -22,9 +22,9 @@ type RuleChain struct {
 
 // RuleChainParams 更新规则链参数
 type RuleChainParams struct {
-	VendorId string      `json:"VendorID"` // 厂商id
-	RecordId string      `json:"RecordId"` // 记录id
-	Cell     *gjson.Json `json:"cell"`
+	VendorId string        `json:"VendorID"` // 厂商id
+	RecordId string        `json:"RecordId"` // 记录id
+	Cell     []*gjson.Json `json:"cell"`
 	Cells    []*Cell
 }
 

+ 7 - 7
services/knowoapi/model/relation.go

@@ -21,9 +21,9 @@ func (a *Relation) Init(db *gorm.DB) *Relation {
 // Query query all roles
 func (a *Relation) Query(pi, ps int, chanId string) (datas []models.Relation, total int, err error) {
 	tx := a.db.Where("1=1")
-	if chanId != "" {
-		tx = tx.Where("rule_chain_id = ?", chanId)
-	}
+	//if chanId != "" {
+	//	tx = tx.Where("rule_chain_id = ?", chanId)
+	//}
 	err = tx.Limit(ps).Offset((pi - 1) * ps).Find(&datas).Error
 	err = tx.Model(&models.Relation{}).Count(&total).Error
 	return
@@ -56,10 +56,10 @@ func (a *Relation) Delete(relation *models.Relation) error {
 	return a.db.Delete(relation).Error
 }
 
-func (a *Relation) DeleteByChainId(relation *models.Relation) error {
-	a.db.Model(&models.Relation{}).Where("rule_chan_id = ?", relation.RuleChainId)
-	return a.db.Delete(relation).Error
-}
+//func (a *Relation) DeleteByChainId(relation *models.Relation) error {
+//	a.db.Model(&models.Relation{}).Where("rule_chan_id = ?", relation.RuleChainId)
+//	return a.db.Delete(relation).Error
+//}
 
 // Update update
 func (a *Relation) Update(relation *models.Relation) error {

+ 6 - 3
services/knowoapi/model/rule_chain.go

@@ -19,11 +19,14 @@ func (a *RuleChain) Init(db *gorm.DB) *RuleChain {
 }
 
 // Query query all roles
-func (a *RuleChain) Query(pi, ps int, name string) (datas []models.RuleChain, total int, err error) {
+func (a *RuleChain) Query(pi, ps int, name string, root bool) (datas []models.RuleChain, total int, err error) {
 	tx := a.db.Where("1=1")
 	if name != "" {
 		tx = tx.Where("name like ?", "%"+name+"%")
 	}
+	if root {
+		tx = tx.Where("root = 1")
+	}
 	err = tx.Limit(ps).Offset((pi - 1) * ps).Find(&datas).Error
 	err = tx.Model(&models.RuleChain{}).Count(&total).Error
 	return
@@ -67,8 +70,8 @@ func (a *RuleChain) Update(ruleChain *models.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).
+func (a *RuleChain) UpdateChainRoot(id string, isRoot bool) (data models.RuleChain, err error) {
+	err = a.db.Model(&data).Where("record_id = ?", id).
 		Update("root", isRoot).Error
 	return
 }

+ 90 - 45
services/knowoapi/services/rule_chain.go

@@ -1,10 +1,8 @@
 package services
 
 import (
-	"fmt"
-	"github.com/gogf/gf/encoding/gjson"
+	"encoding/json"
 	"github.com/gogf/gf/util/guid"
-	"github.com/jinzhu/gorm"
 	"sparrow/pkg/models"
 	"sparrow/pkg/rpcs"
 	"sparrow/pkg/server"
@@ -40,7 +38,7 @@ func NewRuleChainService(model *model.All) RuleChainService {
 }
 
 func (a ruleChainService) Query(pi, ps int, name string) ([]models.RuleChain, int, error) {
-	return a.model.RuleChain.Query(pi, ps, name)
+	return a.model.RuleChain.Query(pi, ps, name, false)
 }
 
 func (a ruleChainService) Get(vendorId, recordId string) (models.RuleChain, error) {
@@ -49,7 +47,18 @@ func (a ruleChainService) Get(vendorId, recordId string) (models.RuleChain, erro
 
 func (a ruleChainService) Create(ruleChain *models.RuleChain) error {
 	ruleChain.RecordId = guid.S()
-
+	if ruleChain.Root {
+		result, total, err := a.model.RuleChain.Query(1, 1, "", true)
+		if err != nil {
+			return err
+		}
+		if total > 0 {
+			_, err = a.model.RuleChain.UpdateChainRoot(result[0].RecordId, false)
+			if err != nil {
+				return err
+			}
+		}
+	}
 	err := a.model.RuleChain.Create(ruleChain)
 	if err != nil {
 		return err
@@ -67,23 +76,42 @@ func (a ruleChainService) Create(ruleChain *models.RuleChain) error {
 }
 
 func (a ruleChainService) create(params *models.RuleChainParams) (firstNodeId string, err error) {
+<<<<<<< HEAD
+=======
+
+>>>>>>> 30a0e004edad0622e971d2f781dc46f5bf3f398c
 	nodeMap := make(map[string]models.RuleNode)
 	var inputNodeId string
-	for _, v := range params.Cells {
-		if v.Shape != "edge" {
-			if v.Shape == "input-node" {
-				inputNodeId = v.Source.Cell
+
+	for _, v := range params.Cell {
+		if v.GetString("shape") != "edge" {
+			if v.GetString("shape") == "input-node" {
+				inputNodeId = v.GetString("source.cell")
 				continue
 			}
+
 			ruleNode := models.RuleNode{
-				Model:       gorm.Model{},
-				RecordId:    guid.S(),
-				RuleChainID: params.RecordId,
-				Type:        nodeType[v.Data.Type],
-				Name:        v.Data.Name,
-				DebugModel:  true,
-				Intro:       v.Data.Desc,
+				RecordId:      guid.S(),
+				RuleChainID:   params.RecordId,
+				Configuration: v.GetString("data"),
+				Type:          nodeType[v.GetString("data.type")],
+				Name:          v.GetString("data.name"),
+				DebugModel:    true,
+				Intro:         v.GetString("data.desc"),
 			}
+			//if v.Shape != "edge" {
+			//	if v.Shape == "input-node" {
+			//		inputNodeId = v.Source.Cell
+			//		continue
+			//	}
+			//	ruleNode := models.RuleNode{
+			//		RecordId:    guid.S(),
+			//		RuleChainID: params.RecordId,
+			//		Type:        nodeType[v.Data.Type],
+			//		Name:        v.Data.Name,
+			//		DebugModel:  true,
+			//		Intro:       v.Data.Desc,
+			//	}
 
 			//switch ruleNode.Type {
 			//case "MsgTypeSwitchNode":
@@ -117,34 +145,34 @@ func (a ruleChainService) create(params *models.RuleChainParams) (firstNodeId st
 			//	}
 			//}
 
-			str, err := gjson.DecodeToJson(v.Data)
-			if err != nil {
-				return "", err
-			}
-			ruleNode.Configuration = fmt.Sprintf("%s", str.MustToJsonString())
+			//str, err := gjson.DecodeToJson(v)
+			//if err != nil {
+			//	return "", err
+			//}
 
-			nodeMap[v.Id] = ruleNode
+			nodeMap[v.GetString("id")] = ruleNode
 
 			err = a.model.RuleNode.Create(&ruleNode)
 			if err != nil {
 				return firstNodeId, err
 			}
-			if firstNodeId == "" {
-				firstNodeId = ruleNode.RecordId
-			}
 		}
 	}
 
-	for _, v := range params.Cells {
-		if v.Shape == "edge" && v.Source.Cell != inputNodeId {
-			err := a.model.Relation.Create(&models.Relation{
-				RecordId:    guid.S(),
-				RuleChainId: params.RecordId,
-				FromID:      nodeMap[v.Source.Cell].RecordId,
+	for _, v := range params.Cell {
+		if v.GetString("shape") == "edge" {
+			if v.GetString("source.cell") == inputNodeId {
+				firstNodeId = nodeMap[v.GetString("target.cell")].RecordId
+				continue
+			}
+			err = a.model.Relation.Create(&models.Relation{
+				RecordId: guid.S(),
+				//RuleChainId: params.RecordId,
+				FromID: nodeMap[v.GetString("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,
+				ToID:         nodeMap[v.GetString("target.cell")].RecordId,
+				ToType:       nodeMap[v.GetString("target.cell")].Type,
+				RelationType: v.GetString("data.label"),
 			})
 			if err != nil {
 				return firstNodeId, err
@@ -187,15 +215,15 @@ func (a ruleChainService) delete(ruleChain *models.RuleChain) error {
 		}
 	}
 
-	relation, _, err := a.model.Relation.Query(1, 100, ruleChain.RecordId)
-	if err != nil {
-		return err
-	}
-	if len(relation) > 0 {
-		for _, v := range relation {
-			_ = a.model.Relation.DeleteByChainId(&v)
-		}
-	}
+	//relation, _, err := a.model.Relation.Query(1, 100, ruleChain.RecordId)
+	//if err != nil {
+	//	return err
+	//}
+	//if len(relation) > 0 {
+	//	for _, v := range relation {
+	//		_ = a.model.Relation.DeleteByChainId(&v)
+	//	}
+	//}
 	return nil
 }
 
@@ -209,7 +237,11 @@ func (a ruleChainService) Update(params *models.RuleChainParams) error {
 		return err
 	}
 	if params.Cell != nil {
-		ruleChain.Configuration = params.Cell.MustToJsonString()
+		str, err := json.Marshal(params.Cell)
+		if err != nil {
+			return err
+		}
+		ruleChain.Configuration = string(str)
 		ruleChain.FirstRuleNodeID, err = a.create(params)
 		if err != nil {
 			return err
@@ -237,9 +269,22 @@ func (a ruleChainService) UpdateChainRoot(params *models.ChangeRootParams) error
 	//if params.Root {
 	//	isRoot = 1
 	//}
-	_, err := a.model.RuleChain.UpdateChainRoot(params.VendorId, params.RecordId, params.Root)
+	_, err := a.model.RuleChain.UpdateChainRoot(params.RecordId, params.Root)
 	if err != nil {
 		return err
 	}
+	if params.Root {
+		data, total, err := a.model.RuleChain.Query(1, 1, "", true)
+		if err != nil {
+			return err
+		}
+		if total > 0 {
+			data[0].Root = false
+			_, err := a.model.RuleChain.UpdateChainRoot(data[0].RecordId, data[0].Root)
+			if err != nil {
+				return err
+			}
+		}
+	}
 	return nil
 }