package user import ( "context" "perms-system-server/internal/middleware" userModel "perms-system-server/internal/model/user" "perms-system-server/internal/response" "perms-system-server/internal/svc" "perms-system-server/internal/types" "perms-system-server/internal/util" "github.com/zeromicro/go-zero/core/logx" ) type UserListLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserListLogic { return &UserListLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *UserListLogic) UserList(req *types.UserListReq) (resp *types.PageResp, err error) { page, pageSize := util.NormalizePage(req.Page, req.PageSize) caller := middleware.GetUserDetails(l.ctx) if caller == nil { return nil, response.ErrUnauthorized("未登录") } if !caller.IsSuperAdmin { if req.ProductCode == "" { return nil, response.ErrForbidden("非超管用户必须指定产品编码") } if caller.ProductCode != req.ProductCode { return nil, response.ErrForbidden("无权访问该产品的数据") } } var list []*userModel.SysUser var total int64 var memberMap map[int64]string if req.ProductCode != "" { list, total, err = l.svcCtx.SysUserModel.FindListByProductMembers(l.ctx, req.ProductCode, page, pageSize) if err != nil { return nil, err } } else { list, total, err = l.svcCtx.SysUserModel.FindListByPage(l.ctx, page, pageSize) if err != nil { return nil, err } } if req.ProductCode != "" { userIds := make([]int64, 0, len(list)) for _, u := range list { userIds = append(userIds, u.Id) } pmMap, err := l.svcCtx.SysProductMemberModel.FindMapByProductCodeUserIds(l.ctx, req.ProductCode, userIds) if err != nil { return nil, err } memberMap = make(map[int64]string, len(pmMap)) for uid, pm := range pmMap { memberMap[uid] = pm.MemberType } } items := make([]types.UserItem, 0, len(list)) for _, u := range list { avatar := "" if u.Avatar.Valid { avatar = u.Avatar.String } var memberType string if memberMap != nil { memberType = memberMap[u.Id] } items = append(items, types.UserItem{ Id: u.Id, Username: u.Username, Nickname: u.Nickname, Avatar: avatar, Email: u.Email, Phone: u.Phone, Remark: u.Remark, DeptId: u.DeptId, Status: u.Status, MemberType: memberType, CreateTime: u.CreateTime, }) } return &types.PageResp{ Total: total, List: items, }, nil }