MemberResult.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package models
  2. import (
  3. "time"
  4. "github.com/astaxie/beego/orm"
  5. "github.com/beego/i18n"
  6. "github.com/mindoc-org/mindoc/conf"
  7. )
  8. type MemberRelationshipResult struct {
  9. MemberId int `json:"member_id"`
  10. Account string `json:"account"`
  11. RealName string `json:"real_name"`
  12. Description string `json:"description"`
  13. Email string `json:"email"`
  14. Phone string `json:"phone"`
  15. Avatar string `json:"avatar"`
  16. Role conf.SystemRole `json:"role"` //用户角色:0 管理员/ 1 普通用户
  17. Status int `json:"status"` //用户状态:0 正常/1 禁用
  18. CreateTime time.Time `json:"create_time"`
  19. CreateAt int `json:"create_at"`
  20. RelationshipId int `json:"relationship_id"`
  21. BookId int `json:"book_id"`
  22. // RoleId 角色:0 创始人(创始人不能被移除) / 1 管理员/2 编辑者/3 观察者
  23. RoleId conf.BookRole `json:"role_id"`
  24. RoleName string `json:"role_name"`
  25. }
  26. type SelectMemberResult struct {
  27. Result []KeyValueItem `json:"results"`
  28. }
  29. type KeyValueItem struct {
  30. Id int `json:"id"`
  31. Text string `json:"text"`
  32. }
  33. func NewMemberRelationshipResult() *MemberRelationshipResult {
  34. return &MemberRelationshipResult{}
  35. }
  36. func (m *MemberRelationshipResult) FromMember(member *Member) *MemberRelationshipResult {
  37. m.MemberId = member.MemberId
  38. m.Account = member.Account
  39. m.Description = member.Description
  40. m.Email = member.Email
  41. m.Phone = member.Phone
  42. m.Avatar = member.Avatar
  43. m.Role = member.Role
  44. m.Status = member.Status
  45. m.CreateTime = member.CreateTime
  46. m.CreateAt = member.CreateAt
  47. m.RealName = member.RealName
  48. return m
  49. }
  50. func (m *MemberRelationshipResult) ResolveRoleName(lang string) *MemberRelationshipResult {
  51. if m.RoleId == conf.BookAdmin {
  52. m.RoleName = i18n.Tr(lang, "common.administrator")
  53. } else if m.RoleId == conf.BookEditor {
  54. m.RoleName = i18n.Tr(lang, "common.editor")
  55. } else if m.RoleId == conf.BookObserver {
  56. m.RoleName = i18n.Tr(lang, "common.obverser")
  57. }
  58. return m
  59. }
  60. // 根据项目ID查询用户
  61. func (m *MemberRelationshipResult) FindForUsersByBookId(lang string, bookId, pageIndex, pageSize int) ([]*MemberRelationshipResult, int, error) {
  62. o := orm.NewOrm()
  63. var members []*MemberRelationshipResult
  64. sql1 := "SELECT * FROM md_relationship AS rel LEFT JOIN md_members as member ON rel.member_id = member.member_id WHERE rel.book_id = ? ORDER BY rel.relationship_id DESC LIMIT ?,?"
  65. sql2 := "SELECT count(*) AS total_count FROM md_relationship AS rel LEFT JOIN md_members as member ON rel.member_id = member.member_id WHERE rel.book_id = ?"
  66. var total_count int
  67. err := o.Raw(sql2, bookId).QueryRow(&total_count)
  68. if err != nil {
  69. return members, 0, err
  70. }
  71. offset := (pageIndex - 1) * pageSize
  72. _, err = o.Raw(sql1, bookId, offset, pageSize).QueryRows(&members)
  73. if err != nil {
  74. return members, 0, err
  75. }
  76. for _, item := range members {
  77. item.ResolveRoleName(lang)
  78. }
  79. return members, total_count, nil
  80. }
  81. // 查询指定文档中不存在的用户列表
  82. func (m *MemberRelationshipResult) FindNotJoinUsersByAccount(bookId, limit int, account string) ([]*Member, error) {
  83. o := orm.NewOrm()
  84. sql := "SELECT m.* FROM md_members as m LEFT JOIN md_relationship as rel ON m.member_id=rel.member_id AND rel.book_id = ? WHERE rel.relationship_id IS NULL AND m.account LIKE ? LIMIT 0,?;"
  85. var members []*Member
  86. _, err := o.Raw(sql, bookId, account, limit).QueryRows(&members)
  87. return members, err
  88. }
  89. // 根据姓名以及用户名模糊查询指定文档中不存在的用户列表
  90. func (m *MemberRelationshipResult) FindNotJoinUsersByAccountOrRealName(bookId, limit int, keyWord string) ([]*Member, error) {
  91. o := orm.NewOrm()
  92. sql := "SELECT m.* FROM md_members as m LEFT JOIN md_relationship as rel ON rel.member_id = m.member_id AND rel.book_id = ? WHERE rel.relationship_id IS NULL AND (m.real_name LIKE ? OR m.account LIKE ?) LIMIT 0,?;"
  93. var members []*Member
  94. _, err := o.Raw(sql, bookId, keyWord, keyWord, limit).QueryRows(&members)
  95. return members, err
  96. }