mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-30 03:03:13 +08:00
Add order by
This commit is contained in:
@ -1,8 +1,9 @@
|
||||
package ai.chat2db.server.domain.api.param.datasource;
|
||||
|
||||
import ai.chat2db.server.tools.base.wrapper.param.OrderBy;
|
||||
import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author moji
|
||||
@ -23,4 +24,16 @@ public class DataSourcePageQueryParam extends PageQueryParam {
|
||||
* @see ai.chat2db.server.domain.api.enums.DataSourceKindEnum
|
||||
*/
|
||||
private String kind;
|
||||
|
||||
@Getter
|
||||
public enum OrderCondition implements ai.chat2db.server.tools.base.wrapper.param.OrderCondition {
|
||||
ID_DESC(OrderBy.desc("id")),
|
||||
;
|
||||
|
||||
final OrderBy orderBy;
|
||||
|
||||
OrderCondition(OrderBy orderBy) {
|
||||
this.orderBy = orderBy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
package ai.chat2db.server.domain.api.param.team;
|
||||
|
||||
import ai.chat2db.server.tools.base.wrapper.param.OrderBy;
|
||||
import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* page query
|
||||
@ -16,4 +18,15 @@ public class TeamPageQueryParam extends PageQueryParam {
|
||||
*/
|
||||
private String searchKey;
|
||||
|
||||
@Getter
|
||||
public enum OrderCondition implements ai.chat2db.server.tools.base.wrapper.param.OrderCondition {
|
||||
ID_DESC(OrderBy.desc("id")),
|
||||
;
|
||||
|
||||
final OrderBy orderBy;
|
||||
|
||||
OrderCondition(OrderBy orderBy) {
|
||||
this.orderBy = orderBy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
package ai.chat2db.server.domain.api.param.user;
|
||||
|
||||
import ai.chat2db.server.tools.base.wrapper.param.OrderBy;
|
||||
import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
@ -21,4 +23,16 @@ public class UserPageQueryParam extends PageQueryParam {
|
||||
* searchKey
|
||||
*/
|
||||
private String searchKey;
|
||||
|
||||
@Getter
|
||||
public enum OrderCondition implements ai.chat2db.server.tools.base.wrapper.param.OrderCondition {
|
||||
ID_DESC(OrderBy.desc("id")),
|
||||
;
|
||||
|
||||
final OrderBy orderBy;
|
||||
|
||||
OrderCondition(OrderBy orderBy) {
|
||||
this.orderBy = orderBy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ import ai.chat2db.server.tools.common.model.LoginUser;
|
||||
import ai.chat2db.server.tools.common.util.ContextUtils;
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
import ai.chat2db.server.tools.common.util.EasyEnumUtils;
|
||||
import ai.chat2db.server.tools.common.util.EasySqlUtils;
|
||||
import ai.chat2db.spi.config.DriverConfig;
|
||||
import ai.chat2db.spi.model.DataSourceConnect;
|
||||
import ai.chat2db.spi.model.Database;
|
||||
@ -187,9 +188,12 @@ public class DataSourceServiceImpl implements DataSourceService {
|
||||
@Override
|
||||
public PageResult<DataSource> queryPageWithPermission(DataSourcePageQueryParam param, DataSourceSelector selector) {
|
||||
LoginUser loginUser = ContextUtils.getLoginUser();
|
||||
|
||||
IPage<DataSourceDO> iPage = dataSourceCustomMapper.selectPageWithPermission(
|
||||
new Page<>(param.getPageNo(), param.getPageSize()),
|
||||
BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey(),param.getKind());
|
||||
BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey(),param.getKind(),
|
||||
EasySqlUtils.orderBy(param.getOrderByList()));
|
||||
|
||||
List<DataSource> dataSources = dataSourceConverter.do2dto(iPage.getRecords());
|
||||
|
||||
fillData(dataSources, selector);
|
||||
|
@ -19,6 +19,7 @@ import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
|
||||
import ai.chat2db.server.tools.common.exception.DataAlreadyExistsBusinessException;
|
||||
import ai.chat2db.server.tools.common.exception.ParamBusinessException;
|
||||
import ai.chat2db.server.tools.common.model.EasyLambdaQueryWrapper;
|
||||
import ai.chat2db.server.tools.common.util.ContextUtils;
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -61,7 +62,7 @@ public class TeamServiceImpl implements TeamService {
|
||||
|
||||
@Override
|
||||
public PageResult<Team> pageQuery(TeamPageQueryParam param, TeamSelector selector) {
|
||||
LambdaQueryWrapper<TeamDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
EasyLambdaQueryWrapper<TeamDO> queryWrapper = new EasyLambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotBlank(param.getSearchKey())) {
|
||||
queryWrapper.and(wrapper -> wrapper.like(TeamDO::getCode, "%" + param.getSearchKey() + "%")
|
||||
.or()
|
||||
@ -69,6 +70,7 @@ public class TeamServiceImpl implements TeamService {
|
||||
}
|
||||
Page<TeamDO> page = new Page<>(param.getPageNo(), param.getPageSize());
|
||||
page.setSearchCount(param.getEnableReturnCount());
|
||||
queryWrapper.orderBy(param.getOrderByList());
|
||||
IPage<TeamDO> iPage = teamMapper.selectPage(page, queryWrapper);
|
||||
List<Team> list = teamConverter.do2dto(iPage.getRecords());
|
||||
|
||||
|
@ -20,6 +20,7 @@ import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
|
||||
import ai.chat2db.server.tools.common.exception.DataAlreadyExistsBusinessException;
|
||||
import ai.chat2db.server.tools.common.exception.ParamBusinessException;
|
||||
import ai.chat2db.server.tools.common.model.EasyLambdaQueryWrapper;
|
||||
import ai.chat2db.server.tools.common.util.ContextUtils;
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
@ -74,7 +75,7 @@ public class UserServiceImpl implements UserService {
|
||||
|
||||
@Override
|
||||
public PageResult<User> pageQuery(UserPageQueryParam param, UserSelector selector) {
|
||||
LambdaQueryWrapper<DbhubUserDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
EasyLambdaQueryWrapper<DbhubUserDO> queryWrapper = new EasyLambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotBlank(param.getSearchKey())) {
|
||||
queryWrapper.and(wrapper -> wrapper.like(DbhubUserDO::getUserName, "%" + param.getSearchKey() + "%")
|
||||
.or()
|
||||
@ -84,6 +85,7 @@ public class UserServiceImpl implements UserService {
|
||||
}
|
||||
// Default not to query desktop accounts
|
||||
queryWrapper.ne(DbhubUserDO::getId, RoleCodeEnum.DESKTOP.getDefaultUserId());
|
||||
queryWrapper.orderBy(param.getOrderByList());
|
||||
Page<DbhubUserDO> page = new Page<>(param.getPageNo(), param.getPageSize());
|
||||
page.setSearchCount(param.getEnableReturnCount());
|
||||
IPage<DbhubUserDO> iPage = dbhubUserMapper.selectPage(page, queryWrapper);
|
||||
|
@ -12,6 +12,6 @@ import org.apache.ibatis.annotations.Param;
|
||||
*/
|
||||
public interface DataSourceCustomMapper extends Mapper<DataSourceDO> {
|
||||
IPage<DataSourceDO> selectPageWithPermission(IPage<DataSourceDO> page, @Param("admin") Boolean admin,
|
||||
@Param("userId") Long userId, @Param("searchKey") String searchKey, @Param("kind") String kind);
|
||||
@Param("userId") Long userId, @Param("searchKey") String searchKey, @Param("kind") String kind, @Param("orderBy") String orderBy);
|
||||
|
||||
}
|
||||
|
@ -36,6 +36,9 @@
|
||||
<if test="kind != null ">
|
||||
and ds.kind = #{kind}
|
||||
</if>
|
||||
<if test="orderBy != null ">
|
||||
${orderBy}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
|
@ -70,5 +70,9 @@
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-indexer</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -0,0 +1,27 @@
|
||||
package ai.chat2db.server.tools.common.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ai.chat2db.server.tools.base.wrapper.param.OrderBy;
|
||||
import ai.chat2db.server.tools.common.util.EasySqlUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ORDER_BY;
|
||||
|
||||
/**
|
||||
* Custom query wrapper
|
||||
*
|
||||
* @author Jiaju Zhuang
|
||||
*/
|
||||
public class EasyLambdaQueryWrapper<T> extends LambdaQueryWrapper<T> {
|
||||
public void orderBy(List<OrderBy> orderByList) {
|
||||
if (CollectionUtils.isEmpty(orderByList)) {
|
||||
return;
|
||||
}
|
||||
for (OrderBy orderBy : orderByList) {
|
||||
appendSqlSegments(ORDER_BY, EasySqlUtils.columnToSqlSegment(orderBy.getOrderConditionName()),
|
||||
EasySqlUtils.parseOrderBy(orderBy.getDirection()));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package ai.chat2db.server.tools.common.util;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import ai.chat2db.server.tools.base.enums.OrderByDirectionEnum;
|
||||
import ai.chat2db.server.tools.base.wrapper.param.OrderBy;
|
||||
import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
|
||||
import com.baomidou.mybatisplus.core.conditions.segments.ColumnSegment;
|
||||
import com.baomidou.mybatisplus.core.conditions.segments.OrderBySegmentList;
|
||||
import com.baomidou.mybatisplus.core.enums.SqlKeyword;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ASC;
|
||||
import static com.baomidou.mybatisplus.core.enums.SqlKeyword.DESC;
|
||||
|
||||
/**
|
||||
* sql utils
|
||||
*
|
||||
* @author Jiaju Zhuang
|
||||
*/
|
||||
public class EasySqlUtils {
|
||||
|
||||
public static String orderBy(List<OrderBy> orderByList) {
|
||||
if (CollectionUtils.isEmpty(orderByList)) {
|
||||
return null;
|
||||
}
|
||||
OrderBySegmentList orderBySegmentList = new OrderBySegmentList();
|
||||
for (OrderBy orderBy : orderByList) {
|
||||
orderBySegmentList.addAll(
|
||||
Arrays.asList(SqlKeyword.ORDER_BY, columnToSqlSegment(orderBy.getOrderConditionName()),
|
||||
parseOrderBy(orderBy.getDirection())));
|
||||
}
|
||||
return orderBySegmentList.getSqlSegment();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 columnName
|
||||
*/
|
||||
public static ColumnSegment columnToSqlSegment(String column) {
|
||||
return () -> column;
|
||||
}
|
||||
|
||||
public static ISqlSegment parseOrderBy(OrderByDirectionEnum direction) {
|
||||
if (direction == OrderByDirectionEnum.ASC) {
|
||||
return ASC;
|
||||
}
|
||||
return DESC;
|
||||
}
|
||||
}
|
@ -8,6 +8,8 @@ import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceUpdat
|
||||
import ai.chat2db.server.admin.api.controller.datasource.vo.DataSourcePageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceCreateParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourcePageQueryParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourcePageQueryParam.OrderCondition;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceSelector;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceUpdateParam;
|
||||
import ai.chat2db.server.domain.api.service.DataSourceService;
|
||||
@ -49,7 +51,9 @@ public class DataSourceAdminController {
|
||||
*/
|
||||
@GetMapping("/page")
|
||||
public WebPageResult<DataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) {
|
||||
return dataSourceService.queryPageWithPermission(dataSourceAdminConverter.request2param(request), DATA_SOURCE_SELECTOR)
|
||||
DataSourcePageQueryParam param = dataSourceAdminConverter.request2param(request);
|
||||
param.orderBy(OrderCondition.ID_DESC);
|
||||
return dataSourceService.queryPageWithPermission(param, DATA_SOURCE_SELECTOR)
|
||||
.mapToWeb(dataSourceAdminConverter::dto2vo);
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,8 @@ import ai.chat2db.server.admin.api.controller.team.request.TeamCreateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.team.request.TeamUpdateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.team.vo.TeamPageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam;
|
||||
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam.OrderCondition;
|
||||
import ai.chat2db.server.domain.api.param.team.TeamSelector;
|
||||
import ai.chat2db.server.domain.api.service.TeamService;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||
@ -28,7 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequestMapping("/api/admin/team")
|
||||
@RestController
|
||||
public class TeamAdminController {
|
||||
private static final TeamSelector TEAM_SELECTOR=TeamSelector.builder()
|
||||
private static final TeamSelector TEAM_SELECTOR = TeamSelector.builder()
|
||||
.modifiedUser(Boolean.TRUE)
|
||||
.build();
|
||||
|
||||
@ -46,7 +48,9 @@ public class TeamAdminController {
|
||||
*/
|
||||
@GetMapping("/page")
|
||||
public WebPageResult<TeamPageQueryVO> page(@Valid CommonPageQueryRequest request) {
|
||||
return teamService.pageQuery(teamAdminConverter.request2param(request), TEAM_SELECTOR)
|
||||
TeamPageQueryParam param = teamAdminConverter.request2param(request);
|
||||
param.orderBy(OrderCondition.ID_DESC);
|
||||
return teamService.pageQuery(param, TEAM_SELECTOR)
|
||||
.mapToWeb(teamAdminConverter::dto2vo);
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,8 @@ import ai.chat2db.server.admin.api.controller.user.request.UserCreateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserUpdateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.vo.UserPageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam.OrderCondition;
|
||||
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
|
||||
import ai.chat2db.server.domain.api.param.user.UserSelector;
|
||||
import ai.chat2db.server.domain.api.service.UserService;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||
@ -29,7 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
public class UserAdminController {
|
||||
|
||||
private static final UserSelector USER_SELECTOR= UserSelector.builder()
|
||||
private static final UserSelector USER_SELECTOR = UserSelector.builder()
|
||||
.modifiedUser(Boolean.TRUE)
|
||||
.build();
|
||||
|
||||
@ -47,7 +49,9 @@ public class UserAdminController {
|
||||
*/
|
||||
@GetMapping("/page")
|
||||
public WebPageResult<UserPageQueryVO> page(@Valid CommonPageQueryRequest request) {
|
||||
return userService.pageQuery(userAdminConverter.request2param(request), USER_SELECTOR)
|
||||
UserPageQueryParam param = userAdminConverter.request2param(request);
|
||||
param.orderBy(OrderCondition.ID_DESC);
|
||||
return userService.pageQuery(param, USER_SELECTOR)
|
||||
.mapToWeb(userAdminConverter::dto2vo);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user