Просмотр исходного кода

feat: 用户列表增加查询条件

BaiLuoYan 1 день назад
Родитель
Сommit
f9cb27c1e0

+ 12 - 1
internal/logic/user/userListLogic.go

@@ -58,7 +58,18 @@ func (l *UserListLogic) UserList(req *types.UserListReq) (resp *types.PageResp,
 		}
 		memberMap = mtMap
 	} else {
-		list, total, err = l.svcCtx.SysUserModel.FindListByPage(l.ctx, page, pageSize)
+		hasFilter := req.Username != "" || req.Nickname != "" || req.Status != 0 || req.DeptId != nil
+		if hasFilter {
+			filter := userModel.UserListFilter{
+				Username: req.Username,
+				Nickname: req.Nickname,
+				Status:   req.Status,
+				DeptId:   req.DeptId,
+			}
+			list, total, err = l.svcCtx.SysUserModel.FindListByFilter(l.ctx, filter, page, pageSize)
+		} else {
+			list, total, err = l.svcCtx.SysUserModel.FindListByPage(l.ctx, page, pageSize)
+		}
 		if err != nil {
 			return nil, err
 		}

+ 50 - 0
internal/model/user/sysUserModel.go

@@ -23,9 +23,17 @@ var ErrTokenVersionMismatch = errors.New("token version mismatch")
 var _ SysUserModel = (*customSysUserModel)(nil)
 
 type (
+	UserListFilter struct {
+		Username string
+		Nickname string
+		Status   int64
+		DeptId   *int64
+	}
+
 	SysUserModel interface {
 		sysUserModel
 		FindListByPage(ctx context.Context, page, pageSize int64) ([]*SysUser, int64, error)
+		FindListByFilter(ctx context.Context, filter UserListFilter, page, pageSize int64) ([]*SysUser, int64, error)
 		FindListByProductMembers(ctx context.Context, productCode string, page, pageSize int64) ([]*SysUser, map[int64]string, int64, error)
 		FindByIds(ctx context.Context, ids []int64) ([]*SysUser, error)
 		FindIdsByDeptId(ctx context.Context, deptId int64) ([]int64, error)
@@ -118,6 +126,48 @@ func (m *customSysUserModel) FindListByPage(ctx context.Context, page, pageSize
 	return list, total, nil
 }
 
+func (m *customSysUserModel) FindListByFilter(ctx context.Context, filter UserListFilter, page, pageSize int64) ([]*SysUser, int64, error) {
+	var conditions []string
+	var args []interface{}
+
+	if filter.Username != "" {
+		conditions = append(conditions, "`username` LIKE ?")
+		args = append(args, "%"+filter.Username+"%")
+	}
+	if filter.Nickname != "" {
+		conditions = append(conditions, "`nickname` LIKE ?")
+		args = append(args, "%"+filter.Nickname+"%")
+	}
+	if filter.Status > 0 {
+		conditions = append(conditions, "`status` = ?")
+		args = append(args, filter.Status)
+	}
+	if filter.DeptId != nil {
+		conditions = append(conditions, "`deptId` = ?")
+		args = append(args, *filter.DeptId)
+	}
+
+	where := ""
+	if len(conditions) > 0 {
+		where = " WHERE " + strings.Join(conditions, " AND ")
+	}
+
+	var total int64
+	countQuery := fmt.Sprintf("SELECT COUNT(*) FROM %s%s", m.table, where)
+	if err := m.QueryRowNoCacheCtx(ctx, &total, countQuery, args...); err != nil {
+		return nil, 0, err
+	}
+
+	var list []*SysUser
+	queryArgs := append(args, (page-1)*pageSize, pageSize)
+	query := fmt.Sprintf("SELECT %s FROM %s%s ORDER BY id DESC LIMIT ?,?", sysUserRows, m.table, where)
+	if err := m.QueryRowsNoCacheCtx(ctx, &list, query, queryArgs...); err != nil {
+		return nil, 0, err
+	}
+
+	return list, total, nil
+}
+
 type UserWithMemberType struct {
 	SysUser
 	MemberType string `db:"memberType"`

+ 16 - 0
internal/testutil/mocks/mock_user_model.go

@@ -214,6 +214,22 @@ func (mr *MockSysUserModelMockRecorder) FindIdsByDeptIdForShareTx(ctx, session,
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindIdsByDeptIdForShareTx", reflect.TypeOf((*MockSysUserModel)(nil).FindIdsByDeptIdForShareTx), ctx, session, deptId)
 }
 
+// FindListByFilter mocks base method.
+func (m *MockSysUserModel) FindListByFilter(ctx context.Context, filter user.UserListFilter, page, pageSize int64) ([]*user.SysUser, int64, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "FindListByFilter", ctx, filter, page, pageSize)
+	ret0, _ := ret[0].([]*user.SysUser)
+	ret1, _ := ret[1].(int64)
+	ret2, _ := ret[2].(error)
+	return ret0, ret1, ret2
+}
+
+// FindListByFilter indicates an expected call of FindListByFilter.
+func (mr *MockSysUserModelMockRecorder) FindListByFilter(ctx, filter, page, pageSize any) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindListByFilter", reflect.TypeOf((*MockSysUserModel)(nil).FindListByFilter), ctx, filter, page, pageSize)
+}
+
 // FindListByPage mocks base method.
 func (m *MockSysUserModel) FindListByPage(ctx context.Context, page, pageSize int64) ([]*user.SysUser, int64, error) {
 	m.ctrl.T.Helper()

+ 4 - 0
internal/types/types.go

@@ -359,6 +359,10 @@ type UserItem struct {
 
 type UserListReq struct {
 	ProductCode string `json:"productCode,optional"`
+	Username    string `json:"username,optional"`
+	Nickname    string `json:"nickname,optional"`
+	Status      int64  `json:"status,optional"`
+	DeptId      *int64 `json:"deptId,optional"`
 	Page        int64  `json:"page,optional"`
 	PageSize    int64  `json:"pageSize,optional"`
 }

+ 4 - 0
perm.api

@@ -270,6 +270,10 @@ type (
 	}
 	UserListReq {
 		ProductCode string `json:"productCode,optional"`
+		Username    string `json:"username,optional"`
+		Nickname    string `json:"nickname,optional"`
+		Status      int64  `json:"status,optional"`
+		DeptId      *int64 `json:"deptId,optional"`
 		Page        int64  `json:"page,optional"`
 		PageSize    int64  `json:"pageSize,optional"`
 	}