From 412fbd6e2cbb5f5f5e926867b013b86e134449f7 Mon Sep 17 00:00:00 2001 From: PengyuDeng <89559616+PengyuDeng@users.noreply.github.com> Date: Mon, 2 Sep 2024 09:33:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7=E8=AF=A6?= =?UTF-8?q?=E6=83=85=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=BB=84=E7=BB=87=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=20(#560)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/auth/entity/UserDetail.java | 13 +++- .../auth/service/UserDetailService.java | 74 +++++++++++-------- 2 files changed, 57 insertions(+), 30 deletions(-) diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/UserDetail.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/UserDetail.java index 438b8986..6932a651 100644 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/UserDetail.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/UserDetail.java @@ -36,6 +36,9 @@ public class UserDetail { @Schema(hidden = true) private UserEntityType type; + @Schema(description = "用户类型ID") + private String typeId; + @Schema(description = "用户状态。1启用,0禁用") private Byte status; @@ -63,6 +66,9 @@ public class UserDetail { @Schema(description = "所在机构(部门)信息") private List orgList; + @Schema(description = "创建者ID") + private String creatorId; + private boolean tenantDisabled; public static UserDetail of(UserEntity entity) { @@ -118,6 +124,11 @@ public class UserDetail { return this; } + public UserDetail withType() { + this.setType(UserEntityTypes.getType(this.getTypeId())); + return this; + } + public UserEntity toUserEntity() { UserEntity userEntity = new UserEntity(); userEntity.setId(id); @@ -131,7 +142,7 @@ public class UserDetail { return userEntity; } - public UserDetailEntity toDetailEntity(){ + public UserDetailEntity toDetailEntity() { return FastBeanCopier.copy(this, new UserDetailEntity()); } diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/UserDetailService.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/UserDetailService.java index 6660ea6c..19ba151d 100755 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/UserDetailService.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/UserDetailService.java @@ -3,8 +3,10 @@ package org.jetlinks.community.auth.service; import org.hswebframework.web.api.crud.entity.PagerResult; import org.hswebframework.web.api.crud.entity.QueryParamEntity; import org.hswebframework.web.authorization.Authentication; +import org.hswebframework.web.authorization.ReactiveAuthenticationHolder; import org.hswebframework.web.authorization.ReactiveAuthenticationManager; import org.hswebframework.web.bean.FastBeanCopier; +import org.hswebframework.web.crud.query.QueryHelper; import org.hswebframework.web.crud.service.GenericReactiveCrudService; import org.hswebframework.web.i18n.LocaleUtils; import org.hswebframework.web.system.authorization.api.entity.UserEntity; @@ -20,13 +22,14 @@ import org.jetlinks.community.auth.service.request.SaveUserRequest; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; /** * 用户详情管理 @@ -44,20 +47,25 @@ public class UserDetailService extends GenericReactiveCrudService> queryUserDetail(QueryParamEntity query) { - return Mono - .zip( - userService.countUser(query), - userService.findUser(query).collectList()) - .flatMap(tp2 -> { - List userList = tp2.getT2(); - return this.createQuery() - .in(UserDetailEntity::getId, userList - .stream() - .map(UserEntity::getId) - .collect(Collectors.toList())) - .fetch() - .collectMap(UserDetailEntity::getId) - .flatMap(userDetailMap -> { - List userDetailList = userList.stream() - .map(user -> { - UserDetail userDetail = UserDetail.of(user); - UserDetailEntity entity = userDetailMap.get(user.getId()); - if (entity != null) { - userDetail = userDetail.with(entity); - } - return userDetail; - }) - .collect(Collectors.toList()); - return Mono.just(PagerResult.of(tp2.getT1(), userDetailList, query)); - }); - }); + return QueryHelper + .transformPageResult( + queryHelper + .select(UserDetail.class) + .all(UserDetailEntity.class) + .as(UserEntity::getId, UserDetail::setId) + .as(UserEntity::getName, UserDetail::setName) + .as(UserEntity::getUsername, UserDetail::setUsername) + // 兼容之前已有字段 + .as(UserEntity::getType, UserDetail::setTypeId) + .as(UserEntity::getStatus, UserDetail::setStatus) + .as(UserEntity::getCreateTime, UserDetail::setCreateTime) + .as(UserEntity::getCreatorId, UserDetail::setCreatorId) + .from(UserEntity.class) + .leftJoin(UserDetailEntity.class, j -> j.is(UserDetailEntity::getId, UserEntity::getId)) + .where(query) + .fetchPaged(), + list -> this.fillUserDetail(list). + collectList()); + } + + private Flux fillUserDetail(List users) { + if (CollectionUtils.isEmpty(users)) { + return Flux.empty(); + } + return Flux + .fromIterable(users) + .flatMap(detail -> + //维度信息 + ReactiveAuthenticationHolder + .get(detail.getId()) + .map(Authentication::getDimensions) + .defaultIfEmpty(Collections.emptyList()) + .map(dimensions -> detail.withDimension(dimensions).withType()) + ); } /**