Team.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package models
  2. import (
  3. "errors"
  4. "time"
  5. "github.com/beego/beego/v2/client/orm"
  6. "github.com/beego/beego/v2/core/logs"
  7. "github.com/mindoc-org/mindoc/conf"
  8. )
  9. //团队.
  10. type Team struct {
  11. TeamId int `orm:"column(team_id);pk;auto;unique;" json:"team_id"`
  12. TeamName string `orm:"column(team_name);size(255)" json:"team_name"`
  13. MemberId int `orm:"column(member_id);type(int);" json:"member_id"`
  14. IsDelete bool `orm:"column(is_delete);default(0)" json:"is_delete"`
  15. CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
  16. MemberCount int `orm:"-" json:"member_count"`
  17. BookCount int `orm:"-" json:"book_count"`
  18. MemberName string `orm:"-" json:"member_name"`
  19. }
  20. // TableName 获取对应数据库表名.
  21. func (t *Team) TableName() string {
  22. return "teams"
  23. }
  24. // TableEngine 获取数据使用的引擎.
  25. func (t *Team) TableEngine() string {
  26. return "INNODB"
  27. }
  28. func (t *Team) TableNameWithPrefix() string {
  29. return conf.GetDatabasePrefix() + t.TableName()
  30. }
  31. func NewTeam() *Team {
  32. return &Team{}
  33. }
  34. // 查询一个团队.
  35. func (t *Team) First(id int, cols ...string) (*Team, error) {
  36. if id <= 0 {
  37. return nil, orm.ErrNoRows
  38. }
  39. o := orm.NewOrm()
  40. err := o.QueryTable(t.TableNameWithPrefix()).Filter("team_id", id).One(t, cols...)
  41. if err != nil {
  42. logs.Error("查询团队失败 ->", id, err)
  43. return nil, err
  44. }
  45. t.Include()
  46. return t, err
  47. }
  48. func (t *Team) Delete(id int) (err error) {
  49. if id <= 0 {
  50. return ErrInvalidParameter
  51. }
  52. ormer := orm.NewOrm()
  53. o, err := ormer.Begin()
  54. if err != nil {
  55. logs.Error("开启事物时出错 ->", err)
  56. return
  57. }
  58. _, err = o.QueryTable(t.TableNameWithPrefix()).Filter("team_id", id).Delete()
  59. if err != nil {
  60. logs.Error("删除团队时出错 ->", err)
  61. o.Rollback()
  62. return
  63. }
  64. _, err = o.Raw("delete from md_team_member where team_id=?;", id).Exec()
  65. if err != nil {
  66. logs.Error("删除团队成员时出错 ->", err)
  67. o.Rollback()
  68. return
  69. }
  70. _, err = o.Raw("delete from md_team_relationship where team_id=?;", id).Exec()
  71. if err != nil {
  72. logs.Error("删除团队项目时出错 ->", err)
  73. o.Rollback()
  74. return err
  75. }
  76. err = o.Commit()
  77. return
  78. }
  79. //分页查询团队.
  80. func (t *Team) FindToPager(pageIndex, pageSize int) (list []*Team, totalCount int, err error) {
  81. o := orm.NewOrm()
  82. offset := (pageIndex - 1) * pageSize
  83. _, err = o.QueryTable(t.TableNameWithPrefix()).OrderBy("-team_id").Offset(offset).Limit(pageSize).All(&list)
  84. if err != nil {
  85. return
  86. }
  87. c, err := o.QueryTable(t.TableNameWithPrefix()).Count()
  88. if err != nil {
  89. return
  90. }
  91. totalCount = int(c)
  92. for _, item := range list {
  93. item.Include()
  94. }
  95. return
  96. }
  97. func (t *Team) Include() {
  98. o := orm.NewOrm()
  99. if member, err := NewMember().Find(t.MemberId, "account", "real_name"); err == nil {
  100. if member.RealName != "" {
  101. t.MemberName = member.RealName
  102. } else {
  103. t.MemberName = member.Account
  104. }
  105. }
  106. if c, err := o.QueryTable(NewTeamRelationship().TableNameWithPrefix()).Filter("team_id", t.TeamId).Count(); err == nil {
  107. t.BookCount = int(c)
  108. }
  109. if c, err := o.QueryTable(NewTeamMember().TableNameWithPrefix()).Filter("team_id", t.TeamId).Count(); err == nil {
  110. t.MemberCount = int(c)
  111. }
  112. }
  113. //更新或添加一个团队.
  114. func (t *Team) Save(cols ...string) (err error) {
  115. if t.TeamName == "" {
  116. return NewError(5001, "团队名称不能为空")
  117. }
  118. o := orm.NewOrm()
  119. if t.TeamId <= 0 && o.QueryTable(t.TableNameWithPrefix()).Filter("team_name", t.TeamName).Exist() {
  120. return errors.New("团队名称已存在")
  121. }
  122. if t.TeamId <= 0 {
  123. _, err = o.Insert(t)
  124. } else {
  125. _, err = o.Update(t, cols...)
  126. }
  127. if err != nil {
  128. logs.Error("在保存团队时出错 ->", err)
  129. }
  130. return
  131. }