mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-30 19:22:58 +08:00
Complete team user code
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
package ai.chat2db.server.domain.api.param.datasource.access;
|
||||
|
||||
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
|
||||
import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
@ -14,9 +14,20 @@ public class DataSourceAccessComprehensivePageQueryParam extends PageQueryParam
|
||||
/**
|
||||
* 数据源id
|
||||
*/
|
||||
@NotNull
|
||||
private Long dataSourceId;
|
||||
|
||||
/**
|
||||
* 授权类型
|
||||
*
|
||||
* @see AccessObjectTypeEnum
|
||||
*/
|
||||
private String accessObjectType;
|
||||
|
||||
/**
|
||||
* 授权id,根据类型区分是用户还是团队
|
||||
*/
|
||||
private Long accessObjectId;
|
||||
|
||||
/**
|
||||
* Query keywords for users or teams
|
||||
*/
|
||||
|
@ -28,6 +28,7 @@ public abstract class DataSourceAccessConverter {
|
||||
@Mappings({
|
||||
@Mapping(target = "accessObject.id", source = "accessObjectId"),
|
||||
@Mapping(target = "accessObject.type", source = "accessObjectType"),
|
||||
@Mapping(target = "dataSource.id", source = "dataSourceId"),
|
||||
})
|
||||
public abstract DataSourceAccess do2dto(DataSourceAccessDO data);
|
||||
|
||||
@ -60,6 +61,7 @@ public abstract class DataSourceAccessConverter {
|
||||
})
|
||||
public abstract DataSourceAccessDO param2do(DataSourceAccessCreatParam param, Long userId);
|
||||
|
||||
|
||||
/**
|
||||
* convert
|
||||
*
|
||||
|
@ -1,22 +1,28 @@
|
||||
package ai.chat2db.server.domain.core.converter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import ai.chat2db.server.domain.api.model.DataSource;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceTestParam;
|
||||
import ai.chat2db.server.domain.core.util.DesUtil;
|
||||
import ai.chat2db.server.domain.api.param.ConsoleCreateParam;
|
||||
import ai.chat2db.server.domain.api.param.ConsoleConnectParam;
|
||||
import ai.chat2db.server.domain.api.param.ConsoleCreateParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceCreateParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourcePreConnectParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceTestParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.DataSourceUpdateParam;
|
||||
import ai.chat2db.server.domain.api.service.DataSourceService;
|
||||
import ai.chat2db.server.domain.core.util.DesUtil;
|
||||
import ai.chat2db.server.domain.repository.entity.DataSourceDO;
|
||||
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.MappingTarget;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
|
||||
/**
|
||||
* @author moji
|
||||
@ -27,6 +33,10 @@ import org.mapstruct.Mappings;
|
||||
@Mapper(componentModel = "spring")
|
||||
public abstract class DataSourceConverter {
|
||||
|
||||
@Resource
|
||||
@Lazy
|
||||
private DataSourceService dataSourceService;
|
||||
|
||||
/**
|
||||
* 参数转换
|
||||
*
|
||||
@ -178,4 +188,30 @@ public abstract class DataSourceConverter {
|
||||
* @return
|
||||
*/
|
||||
public abstract List<DataSource> do2dto(List<DataSourceDO> dataSourceDOList);
|
||||
|
||||
/**
|
||||
* Fill in detailed information
|
||||
*
|
||||
* @param list
|
||||
*/
|
||||
public void fillDetail(List<DataSource> list) {
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
List<Long> idList = EasyCollectionUtils.toList(list, DataSource::getId);
|
||||
List<DataSource> queryList = dataSourceService.queryByIds(idList).getData();
|
||||
Map<Long, DataSource> queryMap = EasyCollectionUtils.toIdentityMap(queryList, DataSource::getId);
|
||||
for (DataSource data : list) {
|
||||
if (data == null || data.getId() == null) {
|
||||
continue;
|
||||
}
|
||||
DataSource query = queryMap.get(data.getId());
|
||||
add(data, query);
|
||||
}
|
||||
}
|
||||
|
||||
@Mappings({
|
||||
@Mapping(target = "id", ignore = true),
|
||||
})
|
||||
public abstract void add(@MappingTarget DataSource target, DataSource source);
|
||||
}
|
||||
|
@ -31,6 +31,18 @@ public abstract class TeamUserConverter {
|
||||
@Lazy
|
||||
private EnvironmentService environmentService;
|
||||
|
||||
/**
|
||||
* convert
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Mappings({
|
||||
@Mapping(target = "team.id", source = "teamId"),
|
||||
@Mapping(target = "user.id", source = "userId"),
|
||||
})
|
||||
public abstract TeamUser do2dto(TeamUserDO data);
|
||||
|
||||
/**
|
||||
* convert
|
||||
*
|
||||
|
@ -15,6 +15,7 @@ import ai.chat2db.server.domain.api.service.DataSourceAccessService;
|
||||
import ai.chat2db.server.domain.api.service.TeamService;
|
||||
import ai.chat2db.server.domain.api.service.UserService;
|
||||
import ai.chat2db.server.domain.core.converter.DataSourceAccessConverter;
|
||||
import ai.chat2db.server.domain.core.converter.DataSourceConverter;
|
||||
import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO;
|
||||
import ai.chat2db.server.domain.repository.mapper.DataSourceAccessCustomMapper;
|
||||
import ai.chat2db.server.domain.repository.mapper.DataSourceAccessMapper;
|
||||
@ -48,6 +49,8 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
|
||||
@Resource
|
||||
private DataSourceAccessConverter dataSourceAccessConverter;
|
||||
@Resource
|
||||
private DataSourceConverter dataSourceConverter;
|
||||
@Resource
|
||||
private UserService userService;
|
||||
@Resource
|
||||
private TeamService teamService;
|
||||
@ -58,7 +61,8 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
|
||||
Page<DataSourceAccessDO> page = new Page<>(param.getPageNo(), param.getPageSize());
|
||||
page.setSearchCount(param.getEnableReturnCount());
|
||||
IPage<DataSourceAccessDO> iPage = dataSourceAccessCustomMapper.comprehensivePageQuery(page,
|
||||
param.getDataSourceId(), param.getUserOrTeamSearchKey(),
|
||||
param.getDataSourceId(), param.getAccessObjectType(), param.getAccessObjectId(),
|
||||
param.getUserOrTeamSearchKey(),
|
||||
param.getDataSourceSearchKey());
|
||||
|
||||
List<DataSourceAccess> list = dataSourceAccessConverter.do2dto(iPage.getRecords());
|
||||
@ -88,6 +92,15 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
|
||||
}
|
||||
|
||||
fillAccessObject(list, selector);
|
||||
|
||||
fillDataSource(list, selector);
|
||||
}
|
||||
|
||||
private void fillDataSource(List<DataSourceAccess> list, DataSourceAccessSelector selector) {
|
||||
if (BooleanUtils.isNotTrue(selector.getDataSource())) {
|
||||
return;
|
||||
}
|
||||
dataSourceConverter.fillDetail(EasyCollectionUtils.toList(list, DataSourceAccess::getDataSource));
|
||||
}
|
||||
|
||||
private void fillAccessObject(List<DataSourceAccess> list, DataSourceAccessSelector selector) {
|
||||
|
@ -52,7 +52,7 @@ public class TeamUserServiceImpl implements TeamUserService {
|
||||
Page<TeamUserDO> page = new Page<>(param.getPageNo(), param.getPageSize());
|
||||
page.setSearchCount(param.getEnableReturnCount());
|
||||
IPage<TeamUserDO> iPage = teamUserCustomMapper.comprehensivePageQuery(page, param.getTeamId(),
|
||||
param.getUserId(), param.getTeamRoleCode(),param.getTeamSearchKey(),param.getUserSearchKey());
|
||||
param.getUserId(), param.getTeamRoleCode(), param.getTeamSearchKey(), param.getUserSearchKey());
|
||||
|
||||
List<TeamUser> list = teamUserConverter.do2dto(iPage.getRecords());
|
||||
|
||||
@ -93,7 +93,7 @@ public class TeamUserServiceImpl implements TeamUserService {
|
||||
}
|
||||
|
||||
private void fillTeam(List<TeamUser> list, TeamUserSelector selector) {
|
||||
if (BooleanUtils.isNotTrue(selector.getUser())) {
|
||||
if (BooleanUtils.isNotTrue(selector.getTeam())) {
|
||||
return;
|
||||
}
|
||||
teamConverter.fillDetail(EasyCollectionUtils.toList(list, TeamUser::getTeam));
|
||||
|
@ -13,7 +13,8 @@ import org.apache.ibatis.annotations.Param;
|
||||
public interface DataSourceAccessCustomMapper extends Mapper<DataSourceAccessDO> {
|
||||
|
||||
IPage<DataSourceAccessDO> comprehensivePageQuery(IPage<DataSourceAccessDO> page, @Param("dataSourceId") Long dataSourceId,
|
||||
@Param("accessObjectType") String accessObjectType,
|
||||
@Param("accessObjectId") Long accessObjectId,
|
||||
@Param("userOrTeamSearchKey") String userOrTeamSearchKey,
|
||||
@Param("dataSourceSearchKey") String dataSourceSearchKey);
|
||||
|
||||
}
|
||||
|
@ -15,13 +15,22 @@
|
||||
<if test="dataSourceId != null ">
|
||||
and dsa.DATA_SOURCE_ID = #{dataSourceId}
|
||||
</if>
|
||||
<if test="accessObjectId != null ">
|
||||
and dsa.ACCESS_OBJECT_ID = #{accessObjectId}
|
||||
</if>
|
||||
<if test="accessObjectType != null ">
|
||||
and dsa.ACCESS_OBJECT_TYPE = #{accessObjectType}
|
||||
</if>
|
||||
<if test="userOrTeamSearchKey != null ">
|
||||
and (t.CODE like concat('%',#{userOrTeamSearchKey},'%') or t.NAME like concat('%',#{userOrTeamSearchKey},'%') or
|
||||
du.USER_NAME like concat('%',#{userOrTeamSearchKey},'%') or du.NICK_NAME like concat('%',#{userOrTeamSearchKey},'%') or
|
||||
and (t.CODE like concat('%',#{userOrTeamSearchKey},'%') or t.NAME like
|
||||
concat('%',#{userOrTeamSearchKey},'%') or
|
||||
du.USER_NAME like concat('%',#{userOrTeamSearchKey},'%') or du.NICK_NAME like
|
||||
concat('%',#{userOrTeamSearchKey},'%') or
|
||||
du.EMAIL like concat('%',#{userOrTeamSearchKey},'%'))
|
||||
</if>
|
||||
<if test="dataSourceSearchKey != null ">
|
||||
and (ds.ALIAS like concat('%',#{dataSourceSearchKey},'%') or ds.URL like concat('%',#{dataSourceSearchKey},'%'))
|
||||
and (ds.ALIAS like concat('%',#{dataSourceSearchKey},'%') or ds.URL like
|
||||
concat('%',#{dataSourceSearchKey},'%'))
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
@ -3,8 +3,8 @@ package ai.chat2db.server.admin.api.controller.user;
|
||||
|
||||
import ai.chat2db.server.admin.api.controller.user.converter.UserDataSourcesAdminConverter;
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserDataSourceBatchCreateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.vo.UserDataSourcePageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
|
||||
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam;
|
||||
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector;
|
||||
@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
public class UserDataSourceAdminController {
|
||||
private static final DataSourceAccessSelector DATA_SOURCE_ACCESS_SELECTOR = DataSourceAccessSelector.builder()
|
||||
.accessObject(Boolean.TRUE)
|
||||
.dataSource(Boolean.TRUE)
|
||||
.build();
|
||||
|
||||
@Resource
|
||||
@ -46,7 +46,7 @@ public class UserDataSourceAdminController {
|
||||
* @version 2.1.0
|
||||
*/
|
||||
@GetMapping("/page")
|
||||
public WebPageResult<UserDataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) {
|
||||
public WebPageResult<UserDataSourcePageQueryVO> page(@Valid UserTeamPageCommonQueryRequest request) {
|
||||
return dataSourceAccessService.comprehensivePageQuery(userDataSourcesAdminConverter.request2param(request),
|
||||
DATA_SOURCE_ACCESS_SELECTOR)
|
||||
.mapToWeb(userDataSourcesAdminConverter::dto2vo);
|
||||
|
@ -2,9 +2,9 @@
|
||||
package ai.chat2db.server.admin.api.controller.user;
|
||||
|
||||
import ai.chat2db.server.admin.api.controller.user.converter.UserTeamAdminConverter;
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserTeamBatchCreateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.vo.UserTeamPageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.param.team.user.TeamUserCreatParam;
|
||||
import ai.chat2db.server.domain.api.param.team.user.TeamUserSelector;
|
||||
import ai.chat2db.server.domain.api.service.TeamUserService;
|
||||
@ -44,7 +44,7 @@ public class UserTeamAdminController {
|
||||
* @version 2.1.0
|
||||
*/
|
||||
@GetMapping("/page")
|
||||
public WebPageResult<UserTeamPageQueryVO> page(@Valid CommonPageQueryRequest request) {
|
||||
public WebPageResult<UserTeamPageQueryVO> page(@Valid UserTeamPageCommonQueryRequest request) {
|
||||
return teamUserService.comprehensivePageQuery(userTeamAdminConverter.request2param(request), TEAM_USER_SELECTOR)
|
||||
.mapToWeb(userTeamAdminConverter::dto2vo);
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
package ai.chat2db.server.admin.api.controller.user.converter;
|
||||
|
||||
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessBatchCreateRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.vo.UserDataSourcePageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
|
||||
import ai.chat2db.server.domain.api.enums.DataSourceKindEnum;
|
||||
import ai.chat2db.server.domain.api.model.DataSourceAccess;
|
||||
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
|
||||
@ -16,7 +17,7 @@ import org.mapstruct.Mappings;
|
||||
*
|
||||
* @author Jiaju Zhuang
|
||||
*/
|
||||
@Mapper(componentModel = "spring", imports = {DataSourceKindEnum.class})
|
||||
@Mapper(componentModel = "spring", imports = {DataSourceKindEnum.class, AccessObjectTypeEnum.class})
|
||||
public abstract class UserDataSourcesAdminConverter {
|
||||
|
||||
/**
|
||||
@ -26,10 +27,12 @@ public abstract class UserDataSourcesAdminConverter {
|
||||
* @return
|
||||
*/
|
||||
@Mappings({
|
||||
@Mapping(source = "userId", target = "accessObjectId"),
|
||||
@Mapping(target = "accessObjectType", expression = "java(AccessObjectTypeEnum.USER.name())"),
|
||||
@Mapping(source = "searchKey", target = "userOrTeamSearchKey"),
|
||||
@Mapping(target = "enableReturnCount", expression = "java(true)"),
|
||||
})
|
||||
public abstract DataSourceAccessComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
|
||||
public abstract DataSourceAccessComprehensivePageQueryParam request2param(UserTeamPageCommonQueryRequest request);
|
||||
|
||||
/**
|
||||
* convert
|
||||
|
@ -1,7 +1,7 @@
|
||||
package ai.chat2db.server.admin.api.controller.user.converter;
|
||||
|
||||
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
|
||||
import ai.chat2db.server.admin.api.controller.user.vo.UserTeamPageQueryVO;
|
||||
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
|
||||
import ai.chat2db.server.domain.api.model.TeamUser;
|
||||
import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam;
|
||||
import org.mapstruct.Mapper;
|
||||
@ -26,7 +26,7 @@ public abstract class UserTeamAdminConverter {
|
||||
@Mapping(source = "searchKey", target = "teamSearchKey"),
|
||||
@Mapping(target = "enableReturnCount", expression = "java(true)"),
|
||||
})
|
||||
public abstract TeamUserComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
|
||||
public abstract TeamUserComprehensivePageQueryParam request2param(UserTeamPageCommonQueryRequest request);
|
||||
|
||||
/**
|
||||
* conversion
|
||||
|
@ -0,0 +1,25 @@
|
||||
|
||||
package ai.chat2db.server.admin.api.controller.user.request;
|
||||
|
||||
import ai.chat2db.server.tools.base.wrapper.request.PageQueryRequest;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Pagination query
|
||||
*
|
||||
* @author Jiaju Zhuang
|
||||
*/
|
||||
@Data
|
||||
public class UserTeamPageCommonQueryRequest extends PageQueryRequest {
|
||||
/**
|
||||
* user id
|
||||
*/
|
||||
@NotNull
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* searchKey
|
||||
*/
|
||||
private String searchKey;
|
||||
}
|
@ -12,6 +12,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class CommonPageQueryRequest extends PageQueryRequest {
|
||||
|
||||
|
||||
/**
|
||||
* searchKey
|
||||
*/
|
||||
|
Reference in New Issue
Block a user