Team.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package models
  2. import (
  3. "time"
  4. "github.com/lifei6671/mindoc/conf"
  5. "github.com/astaxie/beego/orm"
  6. "errors"
  7. "github.com/astaxie/beego"
  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. return t, err
  42. }
  43. func (t *Team) Delete(id int) (err error) {
  44. if id <= 0 {
  45. return ErrInvalidParameter
  46. }
  47. o := orm.NewOrm()
  48. err = o.Begin()
  49. if err != nil {
  50. beego.Error("开启事物时出错 ->",err)
  51. return
  52. }
  53. _,err = o.QueryTable(t.TableNameWithPrefix()).Filter("team_id",id).Delete()
  54. if err != nil {
  55. beego.Error("删除团队时出错 ->", err)
  56. o.Rollback()
  57. return
  58. }
  59. _,err = o.Raw("delete from md_team_member where team_id=?;", id).Exec()
  60. if err != nil {
  61. beego.Error("删除团队成员时出错 ->", err)
  62. o.Rollback()
  63. return
  64. }
  65. _,err = o.Raw("delete from md_team_relationship where team_id=?;",id).Exec()
  66. if err != nil {
  67. beego.Error("删除团队项目时出错 ->", err)
  68. o.Rollback()
  69. return err
  70. }
  71. err = o.Commit()
  72. return
  73. }
  74. //分页查询团队.
  75. func (t *Team) FindToPager(pageIndex, pageSize int) (list []*Team, totalCount int, err error) {
  76. o := orm.NewOrm()
  77. offset := (pageIndex - 1) * pageSize
  78. _, err = o.QueryTable(t.TableNameWithPrefix()).OrderBy("-team_id").Offset(offset).Limit(pageSize).All(&list)
  79. if err != nil {
  80. return
  81. }
  82. c, err := o.QueryTable(t.TableNameWithPrefix()).Count()
  83. if err != nil {
  84. return
  85. }
  86. totalCount = int(c)
  87. for i,item := range list {
  88. if member,err := NewMember().Find(item.MemberId,"account","real_name"); err == nil {
  89. if member.RealName != "" {
  90. list[i].MemberName = member.RealName
  91. } else {
  92. list[i].MemberName = member.Account
  93. }
  94. }
  95. if c,err := o.QueryTable(NewTeamRelationship().TableNameWithPrefix()).Filter("team_id", item.TeamId).Count(); err == nil {
  96. list[i].BookCount = int(c)
  97. }
  98. if c,err := o.QueryTable(NewTeamMember().TableNameWithPrefix()).Filter("team_id", item.TeamId).Count(); err == nil {
  99. list[i].MemberCount = int(c)
  100. }
  101. }
  102. return
  103. }
  104. //更新或添加一个团队.
  105. func (t *Team) Save(cols ... string) (err error) {
  106. if t.TeamName == "" {
  107. return NewError(5001, "团队名称不能为空")
  108. }
  109. o := orm.NewOrm()
  110. if t.TeamId <= 0 && o.QueryTable(t.TableNameWithPrefix()).Filter("team_name", t.TeamName).Exist() {
  111. return errors.New("团队名称已存在")
  112. }
  113. if t.TeamId <= 0 {
  114. _, err = o.Insert(t)
  115. } else {
  116. _, err = o.Update(t, cols...)
  117. }
  118. if err != nil {
  119. beego.Error("在保存团队时出错 ->", err)
  120. }
  121. return
  122. }