transition.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package gorm
  2. import (
  3. "context"
  4. "strings"
  5. "github.com/jinzhu/gorm"
  6. "go-common/app/admin/main/aegis/model/net"
  7. "go-common/library/ecode"
  8. "go-common/library/log"
  9. )
  10. // TransitionByID .
  11. func (d *Dao) TransitionByID(c context.Context, id int64) (n *net.Transition, err error) {
  12. n = &net.Transition{}
  13. err = d.orm.Where("id=?", id).First(n).Error
  14. if err == gorm.ErrRecordNotFound {
  15. err = ecode.AegisTranNotFound
  16. return
  17. }
  18. if err != nil {
  19. log.Error("TransitionByID(%d) error(%v)", id, err)
  20. }
  21. return
  22. }
  23. // Transitions .
  24. func (d *Dao) Transitions(c context.Context, id []int64) (n []*net.Transition, err error) {
  25. n = []*net.Transition{}
  26. err = d.orm.Where("id in (?)", id).Find(&n).Error
  27. if err != nil {
  28. log.Error("Transitions(%v) error(%v)", id, err)
  29. }
  30. return
  31. }
  32. // TransitionList .
  33. func (d *Dao) TransitionList(c context.Context, pm *net.ListNetElementParam) (result *net.ListTransitionRes, err error) {
  34. result = &net.ListTransitionRes{
  35. Pager: net.Pager{
  36. Num: pm.Pn,
  37. Size: pm.Ps,
  38. },
  39. }
  40. db := d.orm.Table(net.TableTransition).Where("net_id=?", pm.NetID)
  41. if len(pm.ID) > 0 {
  42. db = db.Where("id in (?)", pm.ID)
  43. }
  44. pm.Name = strings.TrimSpace(pm.Name)
  45. if pm.Name != "" {
  46. db = db.Where("name=?", pm.Name)
  47. }
  48. err = db.Scopes(state(pm.State)).Count(&result.Pager.Total).Scopes(pager(pm.Ps, pm.Pn, pm.Sort)).Find(&result.Result).Error
  49. if err != nil {
  50. log.Error("TransitionList find error(%v) params(%+v)", err, pm)
  51. }
  52. return
  53. }
  54. // TransitionByUnique .
  55. func (d *Dao) TransitionByUnique(c context.Context, netID int64, name string) (t *net.Transition, err error) {
  56. t = &net.Transition{}
  57. err = d.orm.Where("net_id=? AND name=?", netID, name).First(t).Error
  58. if err == gorm.ErrRecordNotFound {
  59. err = nil
  60. t = nil
  61. return
  62. }
  63. if err != nil {
  64. log.Error("TransitionByUnique(%d,%s) error(%v)", netID, name, err)
  65. }
  66. return
  67. }
  68. // TransitionIDByNet .
  69. func (d *Dao) TransitionIDByNet(c context.Context, netID []int64, onlyDispatch bool, onlyAvailable bool) (ids map[int64][]int64, err error) {
  70. ids = map[int64][]int64{}
  71. listi := []struct {
  72. ID int64 `gorm:"column:id"`
  73. NetID int64 `gorm:"column:net_id"`
  74. }{}
  75. db := d.orm.Table(net.TableTransition).Where("net_id in (?)", netID)
  76. if onlyAvailable {
  77. db = db.Scopes(Available)
  78. }
  79. if onlyDispatch {
  80. db = db.Where("`limit`>0").Scopes(manual)
  81. }
  82. if err = db.Find(&listi).Error; err != nil {
  83. log.Error("TransitionIDByNet netid(%v) error(%v)", netID, err)
  84. return
  85. }
  86. for _, item := range listi {
  87. ids[item.NetID] = append(ids[item.NetID], item.ID)
  88. }
  89. return
  90. }
  91. func manual(db *gorm.DB) *gorm.DB {
  92. return db.Where("`trigger`=?", net.TriggerManual)
  93. }
  94. // TranByNet .
  95. func (d *Dao) TranByNet(c context.Context, netID int64, onlyAvailable bool) (list []*net.Transition, err error) {
  96. list = []*net.Transition{}
  97. db := d.orm
  98. if netID > 0 {
  99. db = db.Where("net_id=?", netID)
  100. }
  101. if onlyAvailable {
  102. db = db.Scopes(Available)
  103. }
  104. if err = db.Find(&list).Error; err != nil {
  105. log.Error("TranByNet error(%v)", err)
  106. }
  107. return
  108. }