userListLogic.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package user
  2. import (
  3. "context"
  4. "perms-system-server/internal/middleware"
  5. userModel "perms-system-server/internal/model/user"
  6. "perms-system-server/internal/response"
  7. "perms-system-server/internal/svc"
  8. "perms-system-server/internal/types"
  9. "perms-system-server/internal/util"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. )
  12. type UserListLogic struct {
  13. logx.Logger
  14. ctx context.Context
  15. svcCtx *svc.ServiceContext
  16. }
  17. func NewUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserListLogic {
  18. return &UserListLogic{
  19. Logger: logx.WithContext(ctx),
  20. ctx: ctx,
  21. svcCtx: svcCtx,
  22. }
  23. }
  24. // UserList 用户列表。超管查看全量用户列表,产品管理者查看当前产品下的成员列表。支持分页。
  25. func (l *UserListLogic) UserList(req *types.UserListReq) (resp *types.PageResp, err error) {
  26. page, pageSize := util.NormalizePage(req.Page, req.PageSize)
  27. caller := middleware.GetUserDetails(l.ctx)
  28. if caller == nil {
  29. return nil, response.ErrUnauthorized("未登录")
  30. }
  31. if !caller.IsSuperAdmin {
  32. if req.ProductCode == "" {
  33. return nil, response.ErrForbidden("非超管用户必须指定产品编码")
  34. }
  35. if caller.ProductCode != req.ProductCode {
  36. return nil, response.ErrForbidden("无权访问该产品的数据")
  37. }
  38. }
  39. var list []*userModel.SysUser
  40. var total int64
  41. var memberMap map[int64]string
  42. if req.ProductCode != "" {
  43. list, total, err = l.svcCtx.SysUserModel.FindListByProductMembers(l.ctx, req.ProductCode, page, pageSize)
  44. if err != nil {
  45. return nil, err
  46. }
  47. } else {
  48. list, total, err = l.svcCtx.SysUserModel.FindListByPage(l.ctx, page, pageSize)
  49. if err != nil {
  50. return nil, err
  51. }
  52. }
  53. if req.ProductCode != "" {
  54. userIds := make([]int64, 0, len(list))
  55. for _, u := range list {
  56. userIds = append(userIds, u.Id)
  57. }
  58. pmMap, err := l.svcCtx.SysProductMemberModel.FindMapByProductCodeUserIds(l.ctx, req.ProductCode, userIds)
  59. if err != nil {
  60. return nil, err
  61. }
  62. memberMap = make(map[int64]string, len(pmMap))
  63. for uid, pm := range pmMap {
  64. memberMap[uid] = pm.MemberType
  65. }
  66. }
  67. items := make([]types.UserItem, 0, len(list))
  68. for _, u := range list {
  69. avatar := ""
  70. if u.Avatar.Valid {
  71. avatar = u.Avatar.String
  72. }
  73. var memberType string
  74. if memberMap != nil {
  75. memberType = memberMap[u.Id]
  76. }
  77. items = append(items, types.UserItem{
  78. Id: u.Id,
  79. Username: u.Username,
  80. Nickname: u.Nickname,
  81. Avatar: avatar,
  82. Email: u.Email,
  83. Phone: u.Phone,
  84. Remark: u.Remark,
  85. DeptId: u.DeptId,
  86. Status: u.Status,
  87. MemberType: memberType,
  88. CreateTime: u.CreateTime,
  89. })
  90. }
  91. return &types.PageResp{
  92. Total: total,
  93. List: items,
  94. }, nil
  95. }