diff --git a/tyr-api/pom.xml b/tyr-api/pom.xml
index 08786447..56cc7297 100644
--- a/tyr-api/pom.xml
+++ b/tyr-api/pom.xml
@@ -26,5 +26,12 @@
cn.axzo.basics
basics-common
+
+
+ cn.axzo.foundation
+ dao-support-lib
+ 2.0.0-SNAPSHOT
+
+
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java
index c8833395..626a3a50 100644
--- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java
@@ -66,4 +66,9 @@ public class ListRoleReq {
* 是否需要角色对应的角色分组信息
*/
private Boolean needRoleGroup;
+
+ /**
+ * 是否需要角色对应的用户信息
+ */
+ private Boolean needRoleUser;
}
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleRes.java
index dab00cf6..d84e548e 100644
--- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleRes.java
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleRes.java
@@ -1,5 +1,6 @@
package cn.axzo.tyr.client.model.res;
+import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -107,4 +108,26 @@ public class SaasRoleRes {
* 角色权限
*/
private List saasPermissions;
+
+ /**
+ * 角色对应的人员信息
+ */
+ private List saasRoleUsers;
+
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class SaasRoleUser {
+
+ /**
+ * 用户id
+ */
+ private Long personId;
+
+ /**
+ * 用户名字
+ */
+ private String realName;
+ }
}
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java
new file mode 100644
index 00000000..bb63b56a
--- /dev/null
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java
@@ -0,0 +1,37 @@
+package cn.axzo.tyr.client.model.roleuser.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SaasRoleUserV2DTO {
+
+ /**
+ * 角色Id
+ */
+ private Long roleId;
+
+ private SaasRoleUser saasRoleUser;
+
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class SaasRoleUser {
+
+ /**
+ * 用户id
+ */
+ private Long personId;
+
+ /**
+ * 用户名字
+ */
+ private String realName;
+ }
+}
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java
new file mode 100644
index 00000000..2138726a
--- /dev/null
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java
@@ -0,0 +1,23 @@
+package cn.axzo.tyr.client.model.roleuser.req;
+
+import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
+import cn.axzo.foundation.dao.support.wrapper.Operator;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.List;
+
+@SuperBuilder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ListRoleUserRelationParam {
+
+ @CriteriaField(field = "roleId", operator = Operator.IN)
+ private List roleIds;
+
+ @CriteriaField(ignore = true)
+ private Boolean needUsers;
+}
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java
new file mode 100644
index 00000000..01a2af54
--- /dev/null
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java
@@ -0,0 +1,29 @@
+package cn.axzo.tyr.client.model.roleuser.req;
+
+import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
+import cn.axzo.foundation.page.IPageReq;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.List;
+
+@SuperBuilder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PageRoleUserRelationParam extends ListRoleUserRelationParam implements IPageReq {
+
+ @CriteriaField(ignore = true)
+ Integer page;
+
+ @CriteriaField(ignore = true)
+ Integer pageSize;
+
+ /**
+ * 排序:使用示例,createTime__DESC
+ */
+ @CriteriaField(ignore = true)
+ List sort;
+}
diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml
index 68216753..8ced5b46 100644
--- a/tyr-server/pom.xml
+++ b/tyr-server/pom.xml
@@ -102,8 +102,9 @@
- cn.axzo.pokonyan
- pokonyan
+ cn.axzo.foundation
+ dao-support-lib
+ 2.0.0-SNAPSHOT
@@ -121,6 +122,10 @@
pom
+
+ cn.axzo.basics
+ basics-profiles-api
+
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java
index 4a3e4ed1..39857ae9 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/FeignConfig.java
@@ -35,7 +35,8 @@ public class FeignConfig implements RequestInterceptor, EnvironmentAware {
@Value("${maokaiEnvUrl:http://dev-app.axzo.cn/maokai}")
private String maokaiEnvUrl;
-
+ @Value("${pudgeEnvUrl:http://dev-app.axzo.cn/pudge}")
+ private String pudgeEnvUrl;
private static String POD_NAMESPACE;
static {
@@ -57,6 +58,7 @@ public class FeignConfig implements RequestInterceptor, EnvironmentAware {
url = url.replace("http://workflow-engine:8080", workflowEnvUrl);
url = url.replace("http://thrones", thronesEnvUrl);
url = url.replace("http://maokai:8080", maokaiEnvUrl);
+ url = url.replace("http://pudge:10099", pudgeEnvUrl);
String profile = environment.getProperty("spring.profiles.active");
if(Objects.equals(profile, "test") && url.contains("dev-app.axzo.cn")) {
url = url.replace("dev-app", "test-api");
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/GlobalConfig.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/GlobalConfig.java
index a9aadbde..c70befba 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/GlobalConfig.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/GlobalConfig.java
@@ -18,7 +18,8 @@ import static cn.axzo.tyr.server.config.GlobalConfig.FeignClientConstant.*;
@Configuration
@EnableFeignClients(basePackages = {
WORKFLOW_ENGINE,
- INNER_FEIGN
+ INNER_FEIGN,
+ "cn.axzo"
})
public class GlobalConfig {
/**
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java
index 0f1e8b37..7b0fe16b 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java
@@ -43,7 +43,6 @@ import cn.axzo.tyr.server.service.RoleService;
import cn.axzo.tyr.server.service.SaasCommonDictService;
import cn.axzo.tyr.server.service.SaasRoleGroupRelationService;
import cn.axzo.tyr.server.service.SaasRoleGroupService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
@@ -294,8 +293,8 @@ public class SaasRoleController implements TyrSaasRoleApi {
public ApiPageResult page(PageRoleReq request) {
RoleService.PageSaasRoleParam param = RoleService.PageSaasRoleParam.builder().build();
BeanUtils.copyProperties(request, param);
- Page page = roleService.page(param);
- return ApiPageResult.ok(page.getRecords(), page.getTotal(), (int) page.getCurrent(), (int) page.getSize());
+ cn.axzo.foundation.page.PageResp page = roleService.page(param);
+ return ApiPageResult.ok(page.getData(), page.getTotal(), (int) page.getCurrent(), (int) page.getSize());
}
@Override
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java
index a8b18798..eecce09f 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java
@@ -1,9 +1,9 @@
package cn.axzo.tyr.server.service;
+import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
+import cn.axzo.foundation.dao.support.wrapper.Operator;
+import cn.axzo.foundation.page.IPageReq;
import cn.axzo.framework.domain.page.PageResp;
-import cn.axzo.pokonyan.dao.page.IPageParam;
-import cn.axzo.pokonyan.dao.wrapper.CriteriaField;
-import cn.axzo.pokonyan.dao.wrapper.Operator;
import cn.axzo.tyr.client.model.enums.IdentityType;
import cn.axzo.tyr.client.model.req.ChangeGroupLeaderRoleReq;
import cn.axzo.tyr.client.model.req.FeatureRoleRelationReq;
@@ -120,7 +120,7 @@ public interface RoleService extends IService {
List list(ListSaasRoleParam param);
- Page page(PageSaasRoleParam param);
+ cn.axzo.foundation.page.PageResp page(PageSaasRoleParam param);
void saveOrUpdateFeatureRoleRelation(List req, Long operatorId);
@@ -164,13 +164,16 @@ public interface RoleService extends IService {
@CriteriaField(ignore = true)
private Boolean needRoleGroup;
+
+ @CriteriaField(ignore = true)
+ private Boolean needRoleUser;
}
@SuperBuilder
@Data
@NoArgsConstructor
@AllArgsConstructor
- class PageSaasRoleParam extends ListSaasRoleParam implements IPageParam {
+ class PageSaasRoleParam extends ListSaasRoleParam implements IPageReq {
@CriteriaField(ignore = true)
Integer page;
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java
index b757d02d..0d24c505 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java
@@ -2,7 +2,14 @@ package cn.axzo.tyr.server.service;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO;
+import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
+import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
+import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
+import cn.axzo.tyr.server.repository.entity.SaasRole;
+import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -10,8 +17,12 @@ import java.util.List;
* @author haiyangjin
* @date 2023/9/14
*/
-public interface SaasRoleUserRelationService {
+public interface SaasRoleUserRelationService extends IService {
List list(RoleUserParam param);
PageResp pageQuery(RoleUserParam param);
+
+ List listV2(ListRoleUserRelationParam param);
+
+ cn.axzo.foundation.page.PageResp page(PageRoleUserRelationParam param);
}
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java
index ead5ac42..4607d584 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java
@@ -2,10 +2,10 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.basics.common.exception.ServiceException;
+import cn.axzo.foundation.dao.support.converter.PageConverter;
+import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
-import cn.axzo.pokonyan.dao.converter.PageConverter;
-import cn.axzo.pokonyan.dao.mysql.QueryWrapperHelper;
import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum;
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
import cn.axzo.tyr.client.model.enums.IdentityType;
@@ -27,6 +27,8 @@ import cn.axzo.tyr.client.model.res.RoleWithUserRes;
import cn.axzo.tyr.client.model.res.SaasPermissionRes;
import cn.axzo.tyr.client.model.res.SaasRoleGroupRes;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
+import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
+import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
@@ -64,14 +66,17 @@ import cn.axzo.tyr.server.service.SaasFeatureResourceService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService;
import cn.axzo.tyr.server.service.SaasRoleGroupRelationService;
import cn.axzo.tyr.server.service.SaasRoleGroupService;
+import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
@@ -154,6 +159,9 @@ public class RoleServiceImpl extends ServiceImpl
SaasRoleGroupRelationDao saasRoleGroupRelationDao;
@Autowired
SaasFeatureResourceService saasFeatureResourceService;
+ @Autowired
+ private SaasRoleUserRelationService saasRoleUserRelationService;
+
@Value("${groupLeader.code:projectTeamGPLeader}")
private String groupLeaderCode;
@@ -1164,28 +1172,33 @@ public class RoleServiceImpl extends ServiceImpl
}
@Override
- public Page page(PageSaasRoleParam param) {
+ public cn.axzo.foundation.page.PageResp page(PageSaasRoleParam param) {
QueryWrapper wrapper = QueryWrapperHelper.fromBean(param, SaasRole.class);
wrapper.eq("is_delete", 0);
- Page page = this.page(PageConverter.convertToMybatis(param, SaasRole.class), wrapper);
+ IPage page = this.page(PageConverter.toMybatis(param, SaasRole.class), wrapper);
Map> saasRoleGroups = listRoleGroups(param, page.getRecords());
Map> saasPermissions = listRolePermissions(param, page.getRecords());
+ Map> saasRoleUsers = listSaasRoleUser(param, page.getRecords());
+
return PageConverter.convert(page, (record) -> from(record,
saasRoleGroups,
- saasPermissions));
+ saasPermissions,
+ saasRoleUsers));
}
private SaasRoleRes from(SaasRole saasRole,
Map> saasRoleGroups,
- Map> saasPermissions) {
+ Map> saasPermissions,
+ Map> saasRoleUsers) {
SaasRoleRes saasRoleRes = SaasRoleRes.builder().build();
BeanUtils.copyProperties(saasRole, saasRoleRes);
saasRoleRes.setSaasRoleGroups(saasRoleGroups.get(saasRoleRes.getId()));
saasRoleRes.setSaasPermissions(saasPermissions.get(saasRoleRes.getId()));
+ saasRoleRes.setSaasRoleUsers(saasRoleUsers.get(saasRoleRes.getId()));
return saasRoleRes;
}
@@ -1378,4 +1391,23 @@ public class RoleServiceImpl extends ServiceImpl
throw new ServiceException(String.format("权限点 %s 信息错误", permissionIds));
}
}
+
+ private Map> listSaasRoleUser(PageSaasRoleParam param,
+ List saasRoles) {
+ if (CollectionUtils.isEmpty(saasRoles) || BooleanUtils.isNotTrue(param.getNeedRoleUser())) {
+ return Collections.emptyMap();
+ }
+
+ List roleIds = Lists.transform(saasRoles, SaasRole::getId);
+
+ ListRoleUserRelationParam listRoleUserRelationParam = ListRoleUserRelationParam.builder()
+ .roleIds(roleIds)
+ .needUsers(param.getNeedRoleUser())
+ .build();
+ List saasRoleUserV2DTOS = saasRoleUserRelationService.listV2(listRoleUserRelationParam);
+
+ return saasRoleUserV2DTOS.stream()
+ .map(e -> Pair.of(e.getRoleId(), e.getSaasRoleUser()))
+ .collect(Collectors.groupingBy(Pair::getKey, Collectors.mapping(Pair::getValue, Collectors.toList())));
+ }
}
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java
index 3a7c4ef7..0737ccd5 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java
@@ -2,24 +2,41 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
+import cn.axzo.basics.profiles.api.UserProfileServiceApi;
+import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
+import cn.axzo.foundation.dao.support.converter.PageConverter;
+import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO;
+import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
+import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
+import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam;
import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam;
import cn.axzo.tyr.server.repository.dao.SaasRoleDao;
import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao;
import cn.axzo.tyr.server.repository.entity.SaasRole;
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
+import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper;
import cn.axzo.tyr.server.service.SaasRoleUserRelationService;
+import cn.axzo.tyr.server.util.RpcInternalUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.BooleanUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -33,7 +50,8 @@ import java.util.stream.Collectors;
*/
@Slf4j
@Service
-public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationService {
+public class SaasRoleUserRelationServiceImpl extends ServiceImpl
+ implements SaasRoleUserRelationService {
@Resource
private SaasRoleUserRelationDao saasRoleUserRelationDao;
@@ -41,6 +59,9 @@ public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationServ
@Resource
private SaasRoleDao saasRoleDao;
+ @Autowired
+ private UserProfileServiceApi userProfileServiceApi;
+
@Override
public List list(RoleUserParam param) {
// TODO jhy 角色查询 需要验证标准角色和自定义角色的查询逻辑
@@ -99,4 +120,73 @@ public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationServ
.collect(Collectors.toList());
return PageResp.list(param.getPage(), param.getPageSize(), page.getTotal(), list);
}
+
+ @Override
+ public List listV2(ListRoleUserRelationParam param) {
+ return PageConverter.drainAll(pageNumber -> {
+ PageRoleUserRelationParam pageParam = PageRoleUserRelationParam.builder().build();
+ BeanUtils.copyProperties(param, pageParam);
+ pageParam.setPage(pageNumber);
+ pageParam.setPageSize(500);
+ return page(pageParam);
+ });
+ }
+
+ @Override
+ public cn.axzo.foundation.page.PageResp page(PageRoleUserRelationParam param) {
+ QueryWrapper wrapper = QueryWrapperHelper.fromBean(param, SaasRoleUserRelation.class);
+ wrapper.eq("is_delete", 0);
+
+ IPage page = this.page(PageConverter.toMybatis(param, SaasRoleUserRelation.class), wrapper);
+
+ Map saasRoleUsers = listSaasRoleUser(param, page.getRecords());
+
+ return PageConverter.convert(page, (record) -> from(record, saasRoleUsers));
+ }
+
+ private Map listSaasRoleUser(PageRoleUserRelationParam param,
+ List saasRoleUserRelations) {
+ if (CollectionUtils.isEmpty(saasRoleUserRelations) || BooleanUtils.isNotTrue(param.getNeedUsers())) {
+ return Collections.emptyMap();
+ }
+
+ List personIds = saasRoleUserRelations.stream()
+ .map(SaasRoleUserRelation::getNaturalPersonId)
+ .distinct()
+ .collect(Collectors.toList());
+
+ if (CollectionUtils.isEmpty(personIds)) {
+ return Collections.emptyMap();
+ }
+
+ List> partition = Lists.partition(personIds, 1000);
+
+ // 返回字段太多,所以截取部分字段返回,后续需要新增的手动增加
+ return partition.stream()
+ .map(e -> RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.postPersonProfiles(e), "查询用户信息", e).getData())
+ .filter(Objects::nonNull)
+ .flatMap(Collection::stream)
+ .collect(Collectors.toMap(PersonProfileDto::getId, this::from, (f, s) -> f));
+
+ }
+
+ private SaasRoleUserV2DTO.SaasRoleUser from(PersonProfileDto personProfileDto) {
+ if (personProfileDto == null) {
+ return null;
+ }
+
+ return SaasRoleUserV2DTO.SaasRoleUser.builder()
+ .personId(personProfileDto.getId())
+ .realName(personProfileDto.getRealName())
+ .build();
+ }
+
+ private SaasRoleUserV2DTO from(SaasRoleUserRelation saasRoleUserRelation,
+ Map saasRoleUsers) {
+
+ return SaasRoleUserV2DTO.builder()
+ .roleId(saasRoleUserRelation.getRoleId())
+ .saasRoleUser(saasRoleUsers.get(saasRoleUserRelation.getNaturalPersonId()))
+ .build();
+ }
}
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/util/RpcInternalUtil.java b/tyr-server/src/main/java/cn/axzo/tyr/server/util/RpcInternalUtil.java
index 622bfb4c..a9671a47 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/util/RpcInternalUtil.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/util/RpcInternalUtil.java
@@ -3,14 +3,18 @@ package cn.axzo.tyr.server.util;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.framework.domain.ServiceException;
import cn.axzo.framework.domain.web.BizException;
+import cn.axzo.framework.domain.web.result.ApiListResult;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.azxo.framework.common.model.CommonResponse;
+import cn.hutool.core.date.StopWatch;
import cn.hutool.core.lang.Assert;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -100,5 +104,43 @@ public class RpcInternalUtil {
return data;
}
+ /**
+ * 常用的RPC请求返回值解析,如果 被请求方 返回非200会抛出异常
+ */
+ public static CommonResponse> rpcListProcessor(Supplier>> supplier, String operationType, Object... param) {
+ return rpcListProcessorMayThrow(supplier, operationType, (msg) -> {
+ throw new ServiceException(msg);
+ }, param);
+ }
+
+ public static CommonResponse> rpcListProcessorMayThrow(Supplier>> supplier, String operationType, Consumer throwConsumer, Object... param) {
+ AssertUtil.notNull(throwConsumer, "自定义的异常处理不可为空");
+ log.info(operationType + "-Param: " + JSONUtil.toJsonStr(param));
+ CommonResponse> result = null;
+
+ try {
+ result = printLatency(supplier, operationType);
+ } catch (Throwable e) {
+ log.warn("rpc process error:{}", e.getMessage());
+ throwConsumer.accept("服务调用异常");
+ }
+
+ log.info(operationType + "-Result: " + JSONUtil.toJsonStr(result));
+ Assert.notNull(result, "服务调用异常");
+ // 200自定义处理
+ if (HttpStatus.HTTP_OK != result.getCode()) {
+ throwConsumer.accept(result.getMsg());
+ }
+ return result;
+ }
+
+ public static R printLatency(Supplier function, String optType) {
+ StopWatch stopWatch = new StopWatch(optType);
+ stopWatch.start(optType);
+ R r = function.get();
+ stopWatch.stop();
+ log.info(stopWatch.shortSummary(TimeUnit.MILLISECONDS));
+ return r;
+ }
}