userListLogic.go 2.2 KB

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