diff --git a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java index fd844a4f..98bf67a2 100644 --- a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java +++ b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupAssociationRepository.java @@ -17,6 +17,8 @@ */ package cn.topiam.employee.common.repository.app; +import java.util.List; + import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.querydsl.QuerydslPredicateExecutor; @@ -52,10 +54,31 @@ public interface AppGroupAssociationRepository extends + " WHERE app_id = :appId and group_id = :groupId", nativeQuery = true) void deleteByGroupIdAndAppId(@Param("groupId") Long groupId, @Param("appId") Long appId); + /** + * 删除关联 + * + * @param appId {@link Long} + * @return {@link Boolean} + */ + @Modifying + @Transactional(rollbackFor = Exception.class) + @Query(value = "UPDATE app_group_association SET " + SOFT_DELETE_SET + + " WHERE app_id = :appId", nativeQuery = true) + void deleteAllByAppId(@Param(value = "appId") Long appId); + /** * 根据应用ID删除关联信息 * * @param appId {@link Long} */ void deleteByAppId(Long appId); + + /** + * 根据应用ID 查询关联信息 + * + * @param appId {@link Long} + * @return {@link List} + */ + @Query(value = "SELECT group_id FROM `app_group_association` WHERE app_id = :appId AND is_deleted = '0'", nativeQuery = true) + List findGroupIdByAppId(Long appId); } diff --git a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java index 2317facd..af2d35e1 100644 --- a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java +++ b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/AppGroupRepositoryCustomized.java @@ -17,6 +17,8 @@ */ package cn.topiam.employee.common.repository.app; +import java.util.List; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -38,4 +40,11 @@ public interface AppGroupRepositoryCustomized { * @return {@link Page} */ Page getAppGroupList(AppGroupQuery query, Pageable pageable); + + /** + * 查询应用组列表 + * + * @return {@link List} + */ + List getAppGroupList(AppGroupQuery query); } diff --git a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java index 2bf6cac8..eba16a39 100644 --- a/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java +++ b/eiam-common/src/main/java/cn/topiam/employee/common/repository/app/impl/AppGroupRepositoryCustomizedImpl.java @@ -81,5 +81,32 @@ public class AppGroupRepositoryCustomizedImpl implements AppGroupRepositoryCusto return new PageImpl<>(list, pageable, count); } + /** + * 查询应用组列表 + * + * @return {@link List} + */ + @Override + public List getAppGroupList(AppGroupQuery query) { + //@formatter:off + StringBuilder builder = new StringBuilder("SELECT `group`.id_, `group`.name_, `group`.code_, `group`.type_, `group`.create_time, `group`.remark_, IFNULL( ass.app_count, 0) AS app_count FROM app_group `group` LEFT JOIN(SELECT aga.group_id, COUNT(*) AS `app_count` FROM app_group_association aga WHERE aga.is_deleted = '0' GROUP BY aga.group_id ) ass ON `group`.id_ = ass.group_id WHERE is_deleted = '0'"); + //分组名称 + if (StringUtils.isNoneBlank(query.getName())) { + builder.append(" AND `group`.name_ like '%").append(query.getName()).append("%'"); + } + //分组编码 + if (StringUtils.isNoneBlank(query.getCode())) { + builder.append(" AND `group`.code_ like '%").append(query.getCode()).append("%'"); + } + //分组类型 + if (ObjectUtils.isNotEmpty(query.getType())) { + builder.append(" AND `group`.type_ like '%").append(query.getType().getCode()).append("%'"); + } + builder.append(" ORDER BY `group`.create_time DESC"); + //@formatter:on + List list = jdbcTemplate.query(builder.toString(), new AppGroupPoMapper()); + return list; + } + private final JdbcTemplate jdbcTemplate; } diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java b/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java index fd00b4d2..bb4e00f9 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/converter/app/AppConverter.java @@ -25,14 +25,11 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import com.google.common.collect.Lists; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Predicate; + import cn.topiam.employee.application.ApplicationService; import cn.topiam.employee.application.ApplicationServiceLoader; import cn.topiam.employee.common.entity.app.AppEntity; -import cn.topiam.employee.common.entity.app.QAppEntity; -import cn.topiam.employee.common.entity.app.query.AppQuery; import cn.topiam.employee.console.pojo.result.app.AppGetResult; import cn.topiam.employee.console.pojo.result.app.AppListResult; import cn.topiam.employee.console.pojo.update.app.AppUpdateParam; @@ -48,24 +45,6 @@ import cn.topiam.employee.support.repository.page.domain.Page; @Mapper(componentModel = "spring") public interface AppConverter { - /** - * 查询应用列表参数转换为 Querydsl Predicate - * - * @param query {@link AppQuery} query - * @return {@link Predicate} - */ - default Predicate queryAppListParamConvertToPredicate(AppQuery query) { - QAppEntity application = QAppEntity.appEntity; - Predicate predicate = ExpressionUtils.and(application.isNotNull(), - application.deleted.eq(Boolean.FALSE)); - //查询条件 - //@formatter:off - predicate = StringUtils.isBlank(query.getName()) ? predicate : ExpressionUtils.and(predicate, application.name.like("%" + query.getName() + "%")); - predicate = Objects.isNull(query.getProtocol()) ? predicate : ExpressionUtils.and(predicate, application.protocol.eq(query.getProtocol())); - //@formatter:on - return predicate; - } - /** * 实体转换为应用列表结果 * @@ -135,9 +114,10 @@ public interface AppConverter { * 实体转应用返回 * * @param entity {@link AppEntity} + * @param groupIds {@link List} * @return {@link AppGetResult} */ - default AppGetResult entityConvertToAppResult(AppEntity entity) { + default AppGetResult entityConvertToAppResult(AppEntity entity, List groupIds) { if (entity == null) { return null; } @@ -150,6 +130,7 @@ public interface AppConverter { appGetResult.setClientId(entity.getClientId()); appGetResult.setClientSecret(entity.getClientSecret()); appGetResult.setType(entity.getType()); + appGetResult.setGroupIds(groupIds); //图标未配置,所以先从模版中拿 if (StringUtils.isBlank(entity.getIcon())) { ApplicationService applicationService = getApplicationServiceLoader() diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java index aeb20e53..3c310581 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/pojo/result/app/AppGetResult.java @@ -19,6 +19,7 @@ package cn.topiam.employee.console.pojo.result.app; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.List; import cn.topiam.employee.common.enums.app.AppProtocol; import cn.topiam.employee.common.enums.app.AppType; @@ -104,4 +105,10 @@ public class AppGetResult implements Serializable { */ @Parameter(description = "备注") private String remark; + + /** + * 应用组ID集合 + */ + @Parameter(description = "应用组ID集合") + private List groupIds; } diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java b/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java index f2327faf..d539015f 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/service/app/impl/AppServiceImpl.java @@ -139,6 +139,7 @@ public class AppServiceImpl implements AppService { public boolean deleteApp(Long id) { AppEntity app = appRequireNonNull(id); applicationServiceLoader.getApplicationService(app.getTemplate()).delete(id.toString()); + appGroupAssociationRepository.deleteAllByAppId(id); AuditContext .setTarget(Target.builder().id(id.toString()).type(TargetType.APPLICATION).build()); return true; @@ -155,7 +156,8 @@ public class AppServiceImpl implements AppService { Optional optional = appRepository.findById(id); if (optional.isPresent()) { AppEntity entity = optional.get(); - return appConverter.entityConvertToAppResult(entity); + List groupIds = appGroupAssociationRepository.findGroupIdByAppId(id); + return appConverter.entityConvertToAppResult(entity, groupIds); } return null; diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java index 21995f93..440a7981 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/controller/AppController.java @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import cn.topiam.employee.common.entity.app.query.AppGroupQuery; import cn.topiam.employee.portal.pojo.query.GetAppListQuery; import cn.topiam.employee.portal.pojo.result.AppGroupListResult; import cn.topiam.employee.portal.pojo.result.GetAppListResult; @@ -68,8 +69,8 @@ public class AppController { */ @Operation(summary = "获取分组应用列表") @GetMapping(value = "/group_list") - public ApiRestResult> getAppGroupList() { - List list = appService.getAppGroupList(); + public ApiRestResult> getAppGroupList(AppGroupQuery appGroupQuery) { + List list = appService.getAppGroupList(appGroupQuery); return ApiRestResult.ok(list); } diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java index 51ec79a5..2985cf87 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/converter/AppGroupConverter.java @@ -17,19 +17,13 @@ */ package cn.topiam.employee.portal.converter; -import java.util.ArrayList; import java.util.List; import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Predicate; +import com.google.common.collect.Lists; -import cn.topiam.employee.common.entity.app.AppGroupAssociationEntity; -import cn.topiam.employee.common.entity.app.AppGroupEntity; -import cn.topiam.employee.common.entity.app.QAppGroupAssociationEntity; -import cn.topiam.employee.common.entity.app.QAppGroupEntity; +import cn.topiam.employee.common.entity.app.po.AppGroupPO; import cn.topiam.employee.portal.pojo.result.AppGroupListResult; /** @@ -42,53 +36,26 @@ import cn.topiam.employee.portal.pojo.result.AppGroupListResult; public interface AppGroupConverter { /** - * queryPredicate + * 实体转换为分组列表结果 * - * @return {@link Predicate} + * @param appGroupPoList {@link List} + * @return {@link List} */ - default Predicate getQueryPredicate() { - QAppGroupEntity appGroup = QAppGroupEntity.appGroupEntity; - return ExpressionUtils.and(appGroup.isNotNull(), appGroup.deleted.eq(Boolean.FALSE)); - } - - /** - * 应用组与应用关联 Predicate - * - * @return {@link Predicate} - */ - default Predicate queryAppGroupAssociationPredicate() { - QAppGroupAssociationEntity appGroupAssociation = QAppGroupAssociationEntity.appGroupAssociationEntity; - return ExpressionUtils.and(appGroupAssociation.isNotNull(), - appGroupAssociation.deleted.eq(Boolean.FALSE)); + default List entityConvertToAppGroupListResult(List appGroupPoList) { + List list = Lists.newArrayList(); + for (AppGroupPO po : appGroupPoList) { + AppGroupListResult result = entityConvertToAppGroupListResult(po); + list.add(result); + } + return list; } /** * 实体转分组管理列表 * - * @param list {@link AppGroupEntity} - * @param appGroupAssociationList {@link AppGroupAssociationEntity} + * @param appGroupPo {@link AppGroupPO} * @return {@link AppGroupListResult} */ - default List entityConvertToAppGroupListResult(List list, - List appGroupAssociationList) { - List results = new ArrayList<>(); - for (AppGroupEntity entity : list) { - AppGroupListResult result = appGroupEntityConverterToResult(entity); - long count = appGroupAssociationList.stream() - .filter(t -> t.getGroupId().equals(entity.getId())).count(); - result.setAppCount(Integer.valueOf(Long.toString(count))); - results.add(result); - } - return results; - } - - /** - * 将分组实体对象转换为Result - * - * @param entity {@link AppGroupEntity} - * @return {@link AppGroupEntity} - */ - @Mapping(target = "appCount", ignore = true) - AppGroupListResult appGroupEntityConverterToResult(AppGroupEntity entity); + AppGroupListResult entityConvertToAppGroupListResult(AppGroupPO appGroupPo); } diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java index 2f043a72..3163ea14 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/AppService.java @@ -19,6 +19,7 @@ package cn.topiam.employee.portal.service; import java.util.List; +import cn.topiam.employee.common.entity.app.query.AppGroupQuery; import cn.topiam.employee.portal.pojo.query.GetAppListQuery; import cn.topiam.employee.portal.pojo.result.AppGroupListResult; import cn.topiam.employee.portal.pojo.result.GetAppListResult; @@ -44,7 +45,8 @@ public interface AppService { /** * 查询应用分组 * + * @param appGroupQuery {@link AppGroupQuery} * @return {@link AppGroupListResult} */ - List getAppGroupList(); + List getAppGroupList(AppGroupQuery appGroupQuery); } diff --git a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java index a034c654..807d7063 100644 --- a/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java +++ b/eiam-portal/src/main/java/cn/topiam/employee/portal/service/impl/AppServiceImpl.java @@ -22,12 +22,9 @@ import java.util.List; import org.springframework.data.querydsl.QPageRequest; import org.springframework.stereotype.Service; -import com.querydsl.core.types.Predicate; - import cn.topiam.employee.common.entity.app.AppEntity; -import cn.topiam.employee.common.entity.app.AppGroupAssociationEntity; -import cn.topiam.employee.common.entity.app.AppGroupEntity; -import cn.topiam.employee.common.repository.app.AppGroupAssociationRepository; +import cn.topiam.employee.common.entity.app.po.AppGroupPO; +import cn.topiam.employee.common.entity.app.query.AppGroupQuery; import cn.topiam.employee.common.repository.app.AppGroupRepository; import cn.topiam.employee.common.repository.app.AppRepository; import cn.topiam.employee.portal.converter.AppConverter; @@ -67,51 +64,40 @@ public class AppServiceImpl implements AppService { /** * 查询应用分组 * + * @param appGroupQuery {@link AppGroupQuery} * @return {@link AppGroupListResult} */ @Override - public List getAppGroupList() { - Predicate predicate = appGroupConverter.getQueryPredicate(); - Predicate appGroupAssociationPredicate = appGroupConverter - .queryAppGroupAssociationPredicate(); - List appGroupAssociationList = (List) appGroupAssociationRepository - .findAll(appGroupAssociationPredicate); + public List getAppGroupList(AppGroupQuery appGroupQuery) { //查询映射 - List list = (List) appGroupRepository.findAll(predicate); - return appGroupConverter.entityConvertToAppGroupListResult(list, appGroupAssociationList); + List list = appGroupRepository.getAppGroupList(appGroupQuery); + return appGroupConverter.entityConvertToAppGroupListResult(list); } /** * AppRepository */ - private final AppRepository appRepository; + private final AppRepository appRepository; /** * AppGroupRepository */ - private final AppGroupRepository appGroupRepository; - - /** - * AppGroupAssociationRepository - */ - private final AppGroupAssociationRepository appGroupAssociationRepository; + private final AppGroupRepository appGroupRepository; /** * AppConverter */ - private final AppConverter appConverter; + private final AppConverter appConverter; /** * AppGroupConverter */ - private final AppGroupConverter appGroupConverter; + private final AppGroupConverter appGroupConverter; public AppServiceImpl(AppRepository appRepository, AppGroupRepository appGroupRepository, - AppGroupAssociationRepository appGroupAssociationRepository, AppConverter appConverter, AppGroupConverter appGroupConverter) { this.appRepository = appRepository; this.appGroupRepository = appGroupRepository; - this.appGroupAssociationRepository = appGroupAssociationRepository; this.appConverter = appConverter; this.appGroupConverter = appGroupConverter; }