userListLogic.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. func (l *UserListLogic) UserList(req *types.UserListReq) (resp *types.PageResp, err error) {
  25. page, pageSize := util.NormalizePage(req.Page, req.PageSize)
  26. caller := middleware.GetUserDetails(l.ctx)
  27. if caller == nil {
  28. return nil, response.ErrUnauthorized("未登录")
  29. }
  30. if !caller.IsSuperAdmin {
  31. if req.ProductCode == "" {
  32. return nil, response.ErrForbidden("非超管用户必须指定产品编码")
  33. }
  34. if caller.ProductCode != req.ProductCode {
  35. return nil, response.ErrForbidden("无权访问该产品的数据")
  36. }
  37. }
  38. var list []*userModel.SysUser
  39. var total int64
  40. var memberMap map[int64]string
  41. if req.ProductCode != "" {
  42. list, total, err = l.svcCtx.SysUserModel.FindListByProductMembers(l.ctx, req.ProductCode, page, pageSize)
  43. if err != nil {
  44. return nil, err
  45. }
  46. } else {
  47. list, total, err = l.svcCtx.SysUserModel.FindListByPage(l.ctx, page, pageSize)
  48. if err != nil {
  49. return nil, err
  50. }
  51. }
  52. if req.ProductCode != "" {
  53. userIds := make([]int64, 0, len(list))
  54. for _, u := range list {
  55. userIds = append(userIds, u.Id)
  56. }
  57. pmMap, err := l.svcCtx.SysProductMemberModel.FindMapByProductCodeUserIds(l.ctx, req.ProductCode, userIds)
  58. if err != nil {
  59. return nil, err
  60. }
  61. memberMap = make(map[int64]string, len(pmMap))
  62. for uid, pm := range pmMap {
  63. memberMap[uid] = pm.MemberType
  64. }
  65. }
  66. items := make([]types.UserItem, 0, len(list))
  67. for _, u := range list {
  68. avatar := ""
  69. if u.Avatar.Valid {
  70. avatar = u.Avatar.String
  71. }
  72. var memberType string
  73. if memberMap != nil {
  74. memberType = memberMap[u.Id]
  75. }
  76. items = append(items, types.UserItem{
  77. Id: u.Id,
  78. Username: u.Username,
  79. Nickname: u.Nickname,
  80. Avatar: avatar,
  81. Email: u.Email,
  82. Phone: u.Phone,
  83. Remark: u.Remark,
  84. DeptId: u.DeptId,
  85. Status: u.Status,
  86. MemberType: memberType,
  87. CreateTime: u.CreateTime,
  88. })
  89. }
  90. return &types.PageResp{
  91. Total: total,
  92. List: items,
  93. }, nil
  94. }