rule_chain.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package services
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/gogf/gf/util/guid"
  6. "github.com/jinzhu/gorm"
  7. "sparrow/pkg/models"
  8. "sparrow/services/knowoapi/model"
  9. )
  10. // RuleChainService 业务接口
  11. type RuleChainService interface {
  12. Create(*models.RuleChain) error
  13. Delete(*models.RuleChain) error
  14. Update(*models.RuleChain) error
  15. Query(int, int, string) ([]models.RuleChain, int, error)
  16. Get(vendorId, recordId string) (models.RuleChain, error)
  17. }
  18. type ruleChainService struct {
  19. model *model.All
  20. }
  21. // NewRuleChainService new ruleChain service
  22. func NewRuleChainService(model *model.All) RuleChainService {
  23. return ruleChainService{
  24. model: model,
  25. }
  26. }
  27. func (a ruleChainService) Query(pi, ps int, name string) ([]models.RuleChain, int, error) {
  28. return a.model.RuleChain.Query(pi, ps, name)
  29. }
  30. func (a ruleChainService) Get(vendorId, recordId string) (models.RuleChain, error) {
  31. return a.model.RuleChain.Get(vendorId, recordId)
  32. }
  33. func (a ruleChainService) Create(ruleChain *models.RuleChain) error {
  34. ruleChain.RecordId = guid.S()
  35. err := a.create(ruleChain)
  36. if err != nil {
  37. return err
  38. }
  39. return a.model.RuleChain.Create(ruleChain)
  40. }
  41. func (a ruleChainService) create(ruleChain *models.RuleChain) error {
  42. fmt.Printf("++++++++++++++++%s+++++++++++++++", ruleChain.Cell)
  43. if len(ruleChain.Cell) > 0 {
  44. nodeMap := make(map[string]models.RuleNode)
  45. for _, v := range ruleChain.Cell {
  46. if v.Data.Shape != "edge" {
  47. ruleNode := models.RuleNode{
  48. Model: gorm.Model{},
  49. RecordId: guid.S(),
  50. RuleChainID: ruleChain.RecordId,
  51. Type: v.Data.Type,
  52. Name: v.Data.Name,
  53. DebugModel: true,
  54. Intro: v.Data.Desc,
  55. }
  56. if v.Data.Shape == "input-node" {
  57. ruleChain.FirstRuleNodeID = ruleNode.RecordId
  58. }
  59. var configuration models.NodeConfiguration
  60. if v.Data.Shape == "action_node" {
  61. for _, header := range v.Data.Headers {
  62. configuration.Headers[header.Key] = header.Value
  63. }
  64. }
  65. marshal, _ := json.Marshal(configuration)
  66. ruleNode.Configuration = fmt.Sprintf("%s", marshal)
  67. nodeMap[v.Id] = ruleNode
  68. err := a.model.RuleNode.Create(&ruleNode)
  69. if err != nil {
  70. return err
  71. }
  72. }
  73. }
  74. for _, v := range ruleChain.Cell {
  75. if v.Data.Shape == "edge" {
  76. err := a.model.Relation.Create(&models.Relation{
  77. RecordId: guid.S(),
  78. RuleChainId: ruleChain.RecordId,
  79. FromID: nodeMap[v.Data.Source].RecordId,
  80. FromType: nodeMap[v.Data.Source].Type,
  81. ToID: nodeMap[v.Data.Target].RecordId,
  82. ToType: nodeMap[v.Data.Target].Type,
  83. })
  84. if err != nil {
  85. return err
  86. }
  87. }
  88. }
  89. }
  90. return nil
  91. }
  92. func (a ruleChainService) Delete(ruleChain *models.RuleChain) error {
  93. err := a.delete(ruleChain)
  94. if err != nil {
  95. return err
  96. }
  97. return a.model.RuleChain.Delete(ruleChain)
  98. }
  99. func (a ruleChainService) delete(ruleChain *models.RuleChain) error {
  100. node, _, err := a.model.RuleNode.Query(1, 100, ruleChain.RecordId)
  101. if err != nil {
  102. return err
  103. }
  104. if len(node) > 0 {
  105. for _, v := range node {
  106. _ = a.model.RuleNode.Delete(&v)
  107. }
  108. }
  109. relation, _, err := a.model.Relation.Query(1, 100, ruleChain.RecordId)
  110. if err != nil {
  111. return err
  112. }
  113. if len(relation) > 0 {
  114. for _, v := range relation {
  115. _ = a.model.Relation.DeleteByChainId(&v)
  116. }
  117. }
  118. return nil
  119. }
  120. func (a ruleChainService) Update(ruleChain *models.RuleChain) error {
  121. err := a.delete(ruleChain)
  122. if err != nil {
  123. return err
  124. }
  125. err = a.create(ruleChain)
  126. if err != nil {
  127. return err
  128. }
  129. return a.model.RuleChain.Update(ruleChain)
  130. }