diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourcePageQueryParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourcePageQueryParam.java index c54d41e2..b2f96075 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourcePageQueryParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/DataSourcePageQueryParam.java @@ -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; + } + } } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/team/TeamPageQueryParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/team/TeamPageQueryParam.java index 6cef62c4..59d50572 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/team/TeamPageQueryParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/team/TeamPageQueryParam.java @@ -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; + } + } } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/user/UserPageQueryParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/user/UserPageQueryParam.java index bfe3ffb2..b6e1d8b6 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/user/UserPageQueryParam.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/user/UserPageQueryParam.java @@ -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; + } + } } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java index b299b076..953deb10 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java @@ -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 queryPageWithPermission(DataSourcePageQueryParam param, DataSourceSelector selector) { LoginUser loginUser = ContextUtils.getLoginUser(); + IPage 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 dataSources = dataSourceConverter.do2dto(iPage.getRecords()); fillData(dataSources, selector); diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TeamServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TeamServiceImpl.java index 34d4e12b..8ca14516 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TeamServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TeamServiceImpl.java @@ -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 pageQuery(TeamPageQueryParam param, TeamSelector selector) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + EasyLambdaQueryWrapper 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 page = new Page<>(param.getPageNo(), param.getPageSize()); page.setSearchCount(param.getEnableReturnCount()); + queryWrapper.orderBy(param.getOrderByList()); IPage iPage = teamMapper.selectPage(page, queryWrapper); List list = teamConverter.do2dto(iPage.getRecords()); diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/UserServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/UserServiceImpl.java index 731c13f5..b6c011b5 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/UserServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/UserServiceImpl.java @@ -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 pageQuery(UserPageQueryParam param, UserSelector selector) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + EasyLambdaQueryWrapper 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 page = new Page<>(param.getPageNo(), param.getPageSize()); page.setSearchCount(param.getEnableReturnCount()); IPage iPage = dbhubUserMapper.selectPage(page, queryWrapper); diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/DataSourceCustomMapper.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/DataSourceCustomMapper.java index d90a05fc..05e77220 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/DataSourceCustomMapper.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/DataSourceCustomMapper.java @@ -12,6 +12,6 @@ import org.apache.ibatis.annotations.Param; */ public interface DataSourceCustomMapper extends Mapper { IPage selectPageWithPermission(IPage 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); } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/resources/mapper/DataSourceCustomMapper.xml b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/resources/mapper/DataSourceCustomMapper.xml index 569248ab..b909a691 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/resources/mapper/DataSourceCustomMapper.xml +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/resources/mapper/DataSourceCustomMapper.xml @@ -36,6 +36,9 @@ and ds.kind = #{kind} + + ${orderBy} + diff --git a/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/pom.xml b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/pom.xml index 011d43bc..ff50c082 100644 --- a/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/pom.xml +++ b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/pom.xml @@ -70,5 +70,9 @@ org.springframework spring-context-indexer + + com.baomidou + mybatis-plus-boot-starter + diff --git a/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/model/EasyLambdaQueryWrapper.java b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/model/EasyLambdaQueryWrapper.java new file mode 100644 index 00000000..c7618ead --- /dev/null +++ b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/model/EasyLambdaQueryWrapper.java @@ -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 extends LambdaQueryWrapper { + public void orderBy(List orderByList) { + if (CollectionUtils.isEmpty(orderByList)) { + return; + } + for (OrderBy orderBy : orderByList) { + appendSqlSegments(ORDER_BY, EasySqlUtils.columnToSqlSegment(orderBy.getOrderConditionName()), + EasySqlUtils.parseOrderBy(orderBy.getDirection())); + } + } +} diff --git a/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasySqlUtils.java b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasySqlUtils.java new file mode 100644 index 00000000..e71b5794 --- /dev/null +++ b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasySqlUtils.java @@ -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 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; + } +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAdminController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAdminController.java index f12c30c7..e6e1ad78 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAdminController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAdminController.java @@ -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 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); } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamAdminController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamAdminController.java index 7704b87e..d718db12 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamAdminController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamAdminController.java @@ -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 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); } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserAdminController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserAdminController.java index 5fd7d4c1..5f45bd79 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserAdminController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserAdminController.java @@ -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 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); }