TeamMember.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package models
  2. import (
  3. "github.com/lifei6671/mindoc/conf"
  4. "errors"
  5. "github.com/astaxie/beego/orm"
  6. "github.com/astaxie/beego"
  7. )
  8. type TeamMember struct {
  9. TeamMemberId int `orm:"column(team_member_id);pk;auto;unique;" json:"team_member_id"`
  10. TeamId int `orm:"column(team_id);type(int)" json:"team_id"`
  11. MemberId int `orm:"column(member_id);type(int)" json:"member_id"`
  12. // RoleId 角色:0 创始人(创始人不能被移除) / 1 管理员/2 编辑者/3 观察者
  13. RoleId conf.BookRole `orm:"column(role_id);type(int)" json:"role_id"`
  14. RoleName string `orm:"-" json:"role_name"`
  15. Account string `orm:"-" json:"account"`
  16. RealName string `orm:"-" json:"real_name"`
  17. Avatar string `orm:"-" json:"avatar"`
  18. }
  19. // TableName 获取对应数据库表名.
  20. func (m *TeamMember) TableName() string {
  21. return "team_member"
  22. }
  23. func (m *TeamMember) TableNameWithPrefix() string {
  24. return conf.GetDatabasePrefix() + m.TableName()
  25. }
  26. // TableEngine 获取数据使用的引擎.
  27. func (m *TeamMember) TableEngine() string {
  28. return "INNODB"
  29. }
  30. // 联合唯一键
  31. func (m *TeamMember) TableUnique() [][]string {
  32. return [][]string{{"team_id", "member_id"}}
  33. }
  34. func NewTeamMember() *TeamMember {
  35. return &TeamMember{}
  36. }
  37. func (m *TeamMember) First(id int, cols ...string) (*TeamMember, error) {
  38. if id <= 0 {
  39. return nil, errors.New("参数错误")
  40. }
  41. o := orm.NewOrm()
  42. err := o.QueryTable(m.TableNameWithPrefix()).Filter("team_member_id", id).One(m, cols...)
  43. if err != nil && err != orm.ErrNoRows {
  44. beego.Error("查询团队成员错误 ->", err)
  45. }
  46. return m.Include(), err
  47. }
  48. func (m *TeamMember) ChangeRoleId(teamId int, memberId int, roleId conf.BookRole) (member *TeamMember, err error) {
  49. if teamId <= 0 || memberId <= 0 || roleId <= 0 || roleId > conf.BookObserver {
  50. return nil, ErrInvalidParameter
  51. }
  52. o := orm.NewOrm()
  53. err = o.QueryTable(m.TableNameWithPrefix()).Filter("team_id", teamId).Filter("member_id", memberId).One(m)
  54. if err != nil {
  55. beego.Error("查询团队用户时失败 ->", err)
  56. return m, err
  57. }
  58. m.RoleId = roleId
  59. err = m.Save("role_id")
  60. if err == nil {
  61. m.Include()
  62. }
  63. return m, err
  64. }
  65. func (m *TeamMember) FindFirst(teamId, memberId int) (*TeamMember, error) {
  66. if teamId <= 0 || memberId <= 0 {
  67. return nil, ErrInvalidParameter
  68. }
  69. o := orm.NewOrm()
  70. err := o.QueryTable(m.TableNameWithPrefix()).Filter("team_id",teamId).Filter("member_id",memberId).One(m)
  71. if err != nil {
  72. beego.Error("查询团队用户失败 ->",err)
  73. return nil,err
  74. }
  75. return m.Include(),nil
  76. }
  77. func (m *TeamMember) Save(cols ...string) (err error) {
  78. if m.TeamId <= 0 {
  79. return errors.New("团队不能为空")
  80. }
  81. if m.MemberId <= 0 {
  82. return errors.New("用户不能为空")
  83. }
  84. o := orm.NewOrm()
  85. if !o.QueryTable(NewTeam().TableNameWithPrefix()).Filter("team_id", m.TeamId).Exist() {
  86. return errors.New("团队不存在")
  87. }
  88. if !o.QueryTable(NewMember()).Filter("member_id", m.MemberId).Filter("status", 0).Exist() {
  89. return errors.New("用户不存在或已禁用")
  90. }
  91. if m.TeamMemberId <= 0 {
  92. _, err = o.Insert(m)
  93. } else {
  94. _, err = o.Update(m, cols...)
  95. }
  96. if err != nil {
  97. beego.Error("在保存团队时出错 ->", err)
  98. }
  99. return
  100. }
  101. func (m *TeamMember) Delete(id int) (err error) {
  102. if id <= 0 {
  103. return ErrInvalidParameter
  104. }
  105. _, err = orm.NewOrm().QueryTable(m.TableNameWithPrefix()).Filter("team_member_id", id).Delete()
  106. if err != nil {
  107. beego.Error("删除团队用户时出错 ->", err)
  108. }
  109. return
  110. }
  111. func (m *TeamMember) FindToPager(teamId, pageIndex, pageSize int) (list []*TeamMember, totalCount int, err error) {
  112. if teamId <= 0 {
  113. err = ErrInvalidParameter
  114. return
  115. }
  116. offset := (pageIndex - 1) * pageSize
  117. o := orm.NewOrm()
  118. _, err = o.QueryTable(m.TableNameWithPrefix()).Filter("team_id", teamId).Offset(offset).Limit(pageSize).All(&list)
  119. if err != nil {
  120. if err != orm.ErrNoRows {
  121. beego.Error("查询团队成员失败 ->", err)
  122. }
  123. return
  124. }
  125. c, err := o.QueryTable(m.TableNameWithPrefix()).Filter("team_id", teamId).Count()
  126. if err != nil {
  127. return
  128. }
  129. totalCount = int(c)
  130. //将来优化
  131. for _, item := range list {
  132. item.Include()
  133. }
  134. return
  135. }
  136. func (m *TeamMember) Include() *TeamMember {
  137. if member, err := NewMember().Find(m.MemberId, "account", "real_name", "avatar"); err == nil {
  138. m.Account = member.Account
  139. m.RealName = member.RealName
  140. m.Avatar = member.Avatar
  141. }
  142. if m.RoleId == 0 {
  143. m.RoleName = "创始人"
  144. } else if m.RoleId == 1 {
  145. m.RoleName = "管理员"
  146. } else if m.RoleId == 2 {
  147. m.RoleName = "编辑者"
  148. } else if m.RoleId == 3 {
  149. m.RoleName = "观察者"
  150. }
  151. return m
  152. }
  153. func (m *TeamMember) FindNotJoinMemberByAccount(teamId int, account string, limit int) (*SelectMemberResult, error) {
  154. if teamId <= 0 {
  155. return nil, ErrInvalidParameter
  156. }
  157. o := orm.NewOrm()
  158. sql := `select member.member_id,member.account
  159. from md_members as member
  160. left join md_team_member as team on team.team_id = ? and member.member_id != team.member_id
  161. where member.account like ?
  162. order by member.member_id desc
  163. limit ?;`
  164. members := make([]*Member, 0)
  165. _, err := o.Raw(sql, teamId, "%"+account+"%", limit).QueryRows(&members)
  166. if err != nil {
  167. beego.Error("查询团队用户时出错 ->", err)
  168. return nil, err
  169. }
  170. result := SelectMemberResult{}
  171. items := make([]KeyValueItem, 0)
  172. for _, member := range members {
  173. item := KeyValueItem{}
  174. item.Id = member.MemberId
  175. item.Text = member.Account
  176. items = append(items, item)
  177. }
  178. result.Result = items
  179. return &result, err
  180. }