userListLogic.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. var mtMap map[int64]string
  44. list, mtMap, total, err = l.svcCtx.SysUserModel.FindListByProductMembers(l.ctx, req.ProductCode, page, pageSize)
  45. if err != nil {
  46. return nil, err
  47. }
  48. memberMap = mtMap
  49. } else {
  50. list, total, err = l.svcCtx.SysUserModel.FindListByPage(l.ctx, page, pageSize)
  51. if err != nil {
  52. return nil, err
  53. }
  54. }
  55. items := make([]types.UserItem, 0, len(list))
  56. for _, u := range list {
  57. avatar := ""
  58. if u.Avatar.Valid {
  59. avatar = u.Avatar.String
  60. }
  61. var memberType string
  62. if memberMap != nil {
  63. memberType = memberMap[u.Id]
  64. }
  65. items = append(items, types.UserItem{
  66. Id: u.Id,
  67. Username: u.Username,
  68. Nickname: u.Nickname,
  69. Avatar: avatar,
  70. Email: u.Email,
  71. Phone: u.Phone,
  72. Remark: u.Remark,
  73. DeptId: u.DeptId,
  74. Status: u.Status,
  75. MemberType: memberType,
  76. CreateTime: u.CreateTime,
  77. })
  78. }
  79. return &types.PageResp{
  80. Total: total,
  81. List: items,
  82. }, nil
  83. }