diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupDTO.java index a92902ac..79c50c0c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupDTO.java @@ -5,6 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; import java.util.List; @Data @@ -65,6 +66,10 @@ public class SaasRoleGroupDTO { */ private String path; + private Date createAt; + + private Date updateAt; + /** * 角色信息 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupRes.java index e3d616de..2c774e94 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupRes.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasRoleGroupRes.java @@ -5,6 +5,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; + @Data @Builder @NoArgsConstructor @@ -57,4 +59,19 @@ public class SaasRoleGroupRes { * 上级分组id */ private Long parentId; + + /** + * 层级path + */ + private String path; + + /** + * 添加时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; } diff --git a/tyr-client/src/main/java/cn/axzo/tyr/feign/req/PageRoleReq.java b/tyr-client/src/main/java/cn/axzo/tyr/feign/req/PageRoleReq.java index 6cfd6478..6cbcd57a 100644 --- a/tyr-client/src/main/java/cn/axzo/tyr/feign/req/PageRoleReq.java +++ b/tyr-client/src/main/java/cn/axzo/tyr/feign/req/PageRoleReq.java @@ -114,8 +114,10 @@ public class PageRoleReq { */ private Boolean needRoleUser; - - private Boolean needPermissionRelation; + /** + * 是否需要角色跟菜单组件的关联关系,不查询具体的菜单组件信息 + */ + private Boolean needFeatureResourceRelation; /** * 是否需要预设角色,因为预设角色的workspaceId和ouId为-1 diff --git a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/FeatureResourceRelationResp.java b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/FeatureResourceRelationResp.java new file mode 100644 index 00000000..8c6fe6cb --- /dev/null +++ b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/FeatureResourceRelationResp.java @@ -0,0 +1,38 @@ +package cn.axzo.tyr.feign.resp; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FeatureResourceRelationResp { + + /** + * 菜单资源树节点id + */ + private Long featureId; + + /** + * 新旧菜单资源数标识 + */ + private Integer type; + + /** + * 菜单资源树节点类型 + */ + private Integer featureType; + + /** + * 权限点标签: + * 在职:JOINED + * 离场:LEAVE + * @see cn.axzo.tyr.feign.enums.RolePermissionTagEnum + */ + private Set tags; +} diff --git a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleFeatureResourceResp.java b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleFeatureResourceResp.java index 0d11e862..c1d07259 100644 --- a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleFeatureResourceResp.java +++ b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleFeatureResourceResp.java @@ -30,6 +30,7 @@ public class RoleFeatureResourceResp { /** * 菜单组件的权限标签 + * @see cn.axzo.tyr.feign.enums.RolePermissionTagEnum */ private Set tags; } diff --git a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleGroupResp.java b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleGroupResp.java index 597ee1ce..d39b20de 100644 --- a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleGroupResp.java +++ b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleGroupResp.java @@ -5,6 +5,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; + @Data @Builder @NoArgsConstructor @@ -12,4 +14,68 @@ import lombok.NoArgsConstructor; public class RoleGroupResp { private Long id; + + /** + * 租户类型: + * @see cn.axzo.apollo.workspace.common.enums.WorkspaceTypeEnum + */ + private Integer workspaceType; + + /** + * 协同关系类型 + * 1:总包 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:OMS通用 7:企业通用 8:企业内班组 9:项目内班组 + * 政务的就是-1 + * @see cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum + */ + private Integer cooperateShipType; + + /** + * 名称 + */ + private String name; + + /** + * 所属工作台id + */ + private Long workspaceId; + + /** + * 所属单位id + */ + private Long ouId; + + /** + * 上级分组id + */ + private Long parentId; + + /** + * 层级path + */ + private String path; + + /** + * 排序 + */ + private Integer sort; + + /** + * 分组CODE + */ + private String code; + + /** + * 分类CODE, 用于代班长,小组长的权限分类。 + */ + private String categoryCode; + + /** + * 添加时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; } diff --git a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleResp.java b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleResp.java index 3c98599b..a00fe311 100644 --- a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleResp.java +++ b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleResp.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.feign.resp; +import cn.axzo.tyr.feign.enums.RoleTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -36,7 +37,7 @@ public class RoleResp { /** * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 - * @See cn.axzo.tyr.model.enums.RoleTypeEnum + * @see cn.axzo.tyr.feign.enums.RoleTypeEnum */ private String roleType; @@ -53,6 +54,7 @@ public class RoleResp { /** * 协同关系类型 * 1:总包 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:OMS通用 7:企业通用 8:企业内班组 9:项目内班组 + * @see cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum */ private Integer cooperateShipType; @@ -104,4 +106,9 @@ public class RoleResp { * 角色对应的人员信息 */ private List roleUsers; + + /** + * 角色关联的菜单组件信息:只有相关的关联信息,比roleFeatureResources少很多信息 + */ + private List featureResourceRelations; } diff --git a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleUserResp.java b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleUserResp.java index fcc92ebb..68064a29 100644 --- a/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleUserResp.java +++ b/tyr-client/src/main/java/cn/axzo/tyr/feign/resp/RoleUserResp.java @@ -11,5 +11,33 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class RoleUserResp { - private Long id; + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 + */ + private Integer identityType; + + /** + * 用户personId + */ + private Long personId; + + /** + * 用户名字 + */ + private String realName; + + /** + * 所属单位Id 用户在当前工作台的所属单位 + */ + private Long ouId; + + /** + * 工作台Id + */ + private Long workspaceId; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java index 077c006a..f3c6be81 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java @@ -18,4 +18,9 @@ public class PermissionConstant { public static final String FEATURE_TOP_PATH = "/0/"; /** 权限点business_no前缀 **/ public static final String FEATURE_BIZ_NO_PREFIX = "feature"; + + /** + * 分页查询最大PAGE_SIZE + */ + public static final Integer MAX_PAGE_SIZE = 1000; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java index f0364423..f88146c4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizResultCode.java @@ -31,7 +31,7 @@ public enum BizResultCode implements IResultCode { TERMINAL_EXIST("100021", "新端已经存在:{}"), TERMINAL_NOT_FOUND("100022", "原端不存在:{}"), FEATURE_CODE_OVER_LENGTH("100023", "组件code不能超过100个字符:{}"), - MAX_PAGE_SIZE_ERROR("100024", "最大查询"); + MAX_PAGE_SIZE_ERROR("100024", "最大PAGE_SIZE不能超过1000"); private String errorCode; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/v2/RoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/v2/RoleController.java index 9b114598..695b9c10 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/v2/RoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/v2/RoleController.java @@ -1,18 +1,25 @@ package cn.axzo.tyr.server.controller.v2; +import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; +import cn.axzo.tyr.client.common.enums.FeatureResourceType; import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum; import cn.axzo.tyr.client.model.res.SaasRoleRes; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; import cn.axzo.tyr.feign.api.RoleApi; import cn.axzo.tyr.feign.enums.RoleTypeEnum; import cn.axzo.tyr.feign.req.PageRoleReq; +import cn.axzo.tyr.feign.resp.FeatureResourceRelationResp; import cn.axzo.tyr.feign.resp.RoleFeatureResourceResp; +import cn.axzo.tyr.feign.resp.RoleGroupResp; import cn.axzo.tyr.feign.resp.RoleResp; +import cn.axzo.tyr.feign.resp.RoleUserResp; import cn.axzo.tyr.server.service.RoleService; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; @@ -21,6 +28,9 @@ import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; +import static cn.axzo.tyr.server.common.constants.PermissionConstant.MAX_PAGE_SIZE; +import static cn.axzo.tyr.server.config.exception.BizResultCode.MAX_PAGE_SIZE_ERROR; + @Slf4j @RestController public class RoleController implements RoleApi { @@ -79,34 +89,118 @@ public class RoleController implements RoleApi { result.setProductUnitTypes(req.getCooperateShipTypes()); result.setNeedPermission(req.getNeedFeatureResources()); + + result.setNeedPermissionRelation(req.getNeedFeatureResourceRelation()); + + result.setFeatureResourceTypes(Optional.ofNullable(req.getFeatureResourceTypes()) + .map(e -> e.stream() + .map(f -> FeatureResourceType.valueOf(f.name())) + .collect(Collectors.toList())) + .orElse(null)); return result; } + private void assembleRoleFeatureResource(SaasRoleRes saasRoleRes, RoleResp roleResp) { + if (CollectionUtils.isEmpty(saasRoleRes.getSaasPermissions())) { + return; + } + + roleResp.setRoleFeatureResources(saasRoleRes.getSaasPermissions().stream() + .map(permission -> { + RoleFeatureResourceResp roleFeatureResourceResp = RoleFeatureResourceResp.builder().build(); + BeanUtils.copyProperties(permission, roleFeatureResourceResp); + roleFeatureResourceResp.setTags(Optional.ofNullable(permission.getTags()) + .map(tags -> tags.stream() + .map(RolePermissionTagEnum::getDesc) + .collect(Collectors.toSet()) + ) + .orElse(null)); + return roleFeatureResourceResp; + }) + .collect(Collectors.toList())); + } + + private void assembleRoleGroup(SaasRoleRes saasRoleRes, RoleResp roleResp) { + if (CollectionUtils.isEmpty(saasRoleRes.getSaasRoleGroups())) { + return; + } + roleResp.setRoleGroup(saasRoleRes.getSaasRoleGroups().stream() + .map(roleGroup -> { + RoleGroupResp roleGroupResp = RoleGroupResp.builder().build(); + BeanUtils.copyProperties(roleGroup, roleGroupResp); + + if (StringUtils.isNotBlank(roleGroup.getWorkspaceTypeCode())) { + roleGroupResp.setWorkspaceType(Integer.valueOf(roleGroup.getWorkspaceTypeCode())); + } + + // 因为角色分组页面可以选择多个,会逗号隔开,但是是不允许这样的数据出现的,为了兼容不报错,如果有逗号就取第一个返回 + if (StringUtils.isNotBlank(roleGroup.getOuTypeCode())) { + if (roleGroup.getOuTypeCode().contains(",")) { + roleGroupResp.setCooperateShipType(Integer.valueOf(roleGroup.getOuTypeCode().split(",")[0])); + } else { + roleGroupResp.setCooperateShipType(Integer.valueOf(roleGroup.getOuTypeCode())); + } + } + return roleGroupResp; + }) + .findFirst() + .orElse(null)); + } + + private void assembleRoleUser(SaasRoleRes saasRoleRes, RoleResp roleResp) { + + if (CollectionUtils.isEmpty(saasRoleRes.getSaasRoleUsers())) { + return; + } + + roleResp.setRoleUsers(saasRoleRes.getSaasRoleUsers().stream() + .map(saasRoleUser -> { + RoleUserResp roleUserResp = RoleUserResp.builder().build(); + BeanUtils.copyProperties(saasRoleUser, roleUserResp); + return roleUserResp; + }) + .collect(Collectors.toList())); + } + + private void assembleFeatureResourceRelation(SaasRoleRes saasRoleRes, RoleResp roleResp) { + + if (CollectionUtils.isEmpty(saasRoleRes.getPermissionRelations())) { + return; + } + + roleResp.setFeatureResourceRelations(saasRoleRes.getPermissionRelations().stream() + .map(saasPermissionRelationRes -> { + FeatureResourceRelationResp featureResourceRelationResp = FeatureResourceRelationResp.builder().build(); + BeanUtils.copyProperties(saasPermissionRelationRes, featureResourceRelationResp); + featureResourceRelationResp.setTags(Optional.ofNullable(saasPermissionRelationRes.getTags()) + .map(tags -> tags.stream() + .map(RolePermissionTagEnum::getDesc) + .collect(Collectors.toSet()) + ) + .orElse(null)); + return featureResourceRelationResp; + }) + .collect(Collectors.toList())); + } + private RoleResp from(SaasRoleRes saasRoleRes) { RoleResp result = RoleResp.builder().build(); BeanUtils.copyProperties(saasRoleRes, result); - if (Objects.nonNull(saasRoleRes.getSaasPermissions())) { - result.setRoleFeatureResources(saasRoleRes.getSaasPermissions().stream() - .map(permission -> { - RoleFeatureResourceResp roleFeatureResourceResp = RoleFeatureResourceResp.builder().build(); - BeanUtils.copyProperties(permission, roleFeatureResourceResp); -// roleFeatureResourceResp.setUniCode(); - roleFeatureResourceResp.setTags(Optional.ofNullable(permission.getTags()) - .map(tags -> tags.stream() - .map(RolePermissionTagEnum::getDesc) - .collect(Collectors.toSet()) - ) - .orElse(null)); - return roleFeatureResourceResp; - }) - .collect(Collectors.toList())); - } + assembleRoleFeatureResource(saasRoleRes, result); + assembleRoleGroup(saasRoleRes, result); + + assembleRoleUser(saasRoleRes, result); + + assembleFeatureResourceRelation(saasRoleRes, result); return result; } private void check(PageRoleReq req) { + if (Objects.nonNull(req.getPageSize())) { + Axssert.check(MAX_PAGE_SIZE >= req.getPageSize() , MAX_PAGE_SIZE_ERROR); + } } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java index 36958eb8..4523cdbc 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java @@ -19,6 +19,7 @@ import java.util.List; */ public interface SaasRoleGroupService extends IService { + @Deprecated List getList(QuerySaasRoleGroupReq req); /** @@ -26,6 +27,7 @@ public interface SaasRoleGroupService extends IService { * @param req 角色分组参数 * @return 角色分组列表 */ + @Deprecated List getRoleGroupList(QuerySaasRoleGroupReq req); @@ -40,6 +42,7 @@ public interface SaasRoleGroupService extends IService { * @param categoryCode * @return */ + @Deprecated List listByCategoryCode(List categoryCode); /** @@ -47,6 +50,7 @@ public interface SaasRoleGroupService extends IService { * @param codes 角色组编码 * @param type 1-仅查当前code 2-对应code角色组及子级角色组 3-仅对应code角色组的子级 * **/ + @Deprecated List listByCodes(List codes, int type); List list(ListSaasRoleGroupParam 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 2a1f3d28..3631331c 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 @@ -1621,31 +1621,31 @@ public class RoleServiceImpl extends ServiceImpl return Collections.emptyMap(); } - List roleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() - .in(SaasRoleGroupRelation::getRoleId, Lists.transform(saasRoles, SaasRole::getId)) - .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); + List roleGroupRelations = saasRoleGroupRelationService.list(SaasRoleGroupRelationService.ListSaasRoleGroupRelationParam.builder() + .roleIds(Lists.transform(saasRoles, SaasRole::getId)) + .build()); if (CollectionUtils.isEmpty(roleGroupRelations)) { return Collections.emptyMap(); } - - Map saasRoleGroups = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() - .ids(Lists.transform(roleGroupRelations, SaasRoleGroupRelation::getSaasRoleGroupId)) - .build()) + Map saasRoleGroups = saasRoleGroupService.list(ListSaasRoleGroupParam.builder() + .ids(roleGroupRelations.stream() + .map(SaasRoleGroupRelation::getSaasRoleGroupId) + .collect(Collectors.toSet())) + .build()) .stream() - .collect(Collectors.toMap(SaasRoleGroup::getId, Function.identity())); + .collect(Collectors.toMap(SaasRoleGroupDTO::getId, Function.identity())); return roleGroupRelations.stream() .filter(e -> saasRoleGroups.get(e.getSaasRoleGroupId()) != null) .collect(Collectors.groupingBy(SaasRoleGroupRelation::getRoleId, Collectors.mapping(e -> { - SaasRoleGroup saasRoleGroup = saasRoleGroups.get(e.getSaasRoleGroupId()); + SaasRoleGroupDTO saasRoleGroup = saasRoleGroups.get(e.getSaasRoleGroupId()); return toRoleGroupRes(saasRoleGroup); }, Collectors.toList()))); } - private SaasRoleGroupRes toRoleGroupRes(SaasRoleGroup saasRoleGroup) { + private SaasRoleGroupRes toRoleGroupRes(SaasRoleGroupDTO saasRoleGroup) { if (saasRoleGroup == null) { return null; } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/RoleControllerTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/RoleControllerTest.java index 4ff715d5..3f040b39 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/RoleControllerTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/RoleControllerTest.java @@ -1,26 +1,44 @@ package cn.axzo.tyr.server.controller.v2; +import cn.axzo.apollo.core.web.Results; +import cn.axzo.apollo.workspace.api.workspace.req.GetSimpleWorkspaceReqV2; +import cn.axzo.apollo.workspace.api.workspace.res.SimpleWorkspaceRes; +import cn.axzo.basics.profiles.api.UserProfileServiceApi; +import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; +import cn.axzo.foundation.exception.BusinessException; import cn.axzo.tyr.base.BaseTest; import cn.axzo.tyr.base.MysqlDataLoader; import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum; +import cn.axzo.tyr.feign.enums.FeatureResourceTypeEnum; import cn.axzo.tyr.feign.enums.RoleTypeEnum; import cn.axzo.tyr.feign.req.PageRoleReq; import cn.axzo.tyr.feign.resp.RoleResp; +import cn.azxo.framework.common.model.CommonResponse; import com.google.common.collect.Sets; import org.assertj.core.util.Lists; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; +import static cn.axzo.tyr.server.config.exception.BizResultCode.MAX_PAGE_SIZE_ERROR; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + class RoleControllerTest extends BaseTest { + @Autowired private MysqlDataLoader mysqlDataLoader; @Autowired private RoleController roleController; + @Autowired + private UserProfileServiceApi userProfileServiceApi; @BeforeEach @Override @@ -29,11 +47,23 @@ class RoleControllerTest extends BaseTest { mysqlDataLoader.loadFromClassName(getClass().getSimpleName()); MockitoAnnotations.initMocks(this); } + @Test - void list() { + void page() { + + BusinessException businessException = assertThrows(BusinessException.class, ()->{ + roleController.page(PageRoleReq.builder() + .pageSize(1001) + .build()) + .getData() + .getData(); + }); + assertEquals(businessException.getErrorCode(), MAX_PAGE_SIZE_ERROR.getErrorCode()); + List roleResps = roleController.page(PageRoleReq.builder() - .roleIds(Sets.newHashSet(24425L)) - .build()) + .roleIds(Sets.newHashSet(24425L)) + .pageSize(1000) + .build()) .getData() .getData(); Assertions.assertEquals(roleResps.size(), 1); @@ -129,32 +159,136 @@ class RoleControllerTest extends BaseTest { Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(0).getId(), 153L); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(0).getUniCode(), "oms:menu_page"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(0).getTags().size(), 1); - Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(0).getTags().contains(RolePermissionTagEnum.JOINED)); + Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(0).getTags().contains(RolePermissionTagEnum.JOINED.getDesc())); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(0).getTerminal(), "NT_OMS_WEB"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(1).getId(), 466L); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(1).getUniCode(), "oms:imConfig_page"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(1).getTags().size(), 1); - Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(1).getTags().contains(RolePermissionTagEnum.JOINED)); + Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(1).getTags().contains(RolePermissionTagEnum.JOINED.getDesc())); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(1).getTerminal(), "NT_OMS_WEB"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(2).getId(), 467L); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(2).getUniCode(), "oms:im_robot_page"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(2).getTags().size(), 1); - Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(2).getTags().contains(RolePermissionTagEnum.JOINED)); + Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(2).getTags().contains(RolePermissionTagEnum.JOINED.getDesc())); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(2).getTerminal(), "NT_OMS_WEB"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(3).getId(), 469L); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(3).getUniCode(), "oms:msgPush_page"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(3).getTags().size(), 1); - Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(3).getTags().contains(RolePermissionTagEnum.JOINED)); + Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(3).getTags().contains(RolePermissionTagEnum.JOINED.getDesc())); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(3).getTerminal(), "NT_OMS_WEB"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(4).getId(), 693L); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(4).getUniCode(), "oms:detail_backPay_btn"); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(4).getTags().size(), 1); - Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(4).getTags().contains(RolePermissionTagEnum.JOINED)); + Assertions.assertTrue(roleResps.get(0).getRoleFeatureResources().get(4).getTags().contains(RolePermissionTagEnum.JOINED.getDesc())); Assertions.assertEquals(roleResps.get(0).getRoleFeatureResources().get(4).getTerminal(), "NT_OMS_WEB"); + + roleResps = roleController.page(PageRoleReq.builder() + .roleIds(Sets.newHashSet(24425L)) + .needRoleGroup(true) + .build()) + .getData() + .getData(); + Assertions.assertEquals(roleResps.size(), 1); + Assertions.assertNotNull(roleResps.get(0).getRoleGroup()); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getId(), 6); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getWorkspaceType(), 6); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getCooperateShipType(), 6); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getName(), "研发中心"); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getWorkspaceId(), -1); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getOuId(), -1); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getParentId(), 0); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getPath(), "6,"); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getSort(), 3); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getCode(), "A1"); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getCategoryCode(), "FF"); + Assertions.assertEquals(LocalDateTime.ofInstant(roleResps.get(0).getRoleGroup().getCreateAt().toInstant(), ZoneId.systemDefault()), + LocalDateTime.of(2023, 9, 19, 14, 31, 19)); + Assertions.assertEquals(LocalDateTime.ofInstant(roleResps.get(0).getRoleGroup().getUpdateAt().toInstant(), ZoneId.systemDefault()), + LocalDateTime.of(2024, 5, 29, 9, 33, 24)); + + roleResps = roleController.page(PageRoleReq.builder() + .roleIds(Sets.newHashSet(25324L)) + .needRoleGroup(true) + .build()) + .getData() + .getData(); + Assertions.assertEquals(roleResps.size(), 1); + Assertions.assertNotNull(roleResps.get(0).getRoleGroup()); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getId(), 13); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getWorkspaceType(), 2); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getCooperateShipType(), 5); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getName(), "专业分包"); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getWorkspaceId(), -1); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getOuId(), -1); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getParentId(), 0); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getPath(), "13,"); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getSort(), 1); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getCode(), "A2"); + Assertions.assertEquals(roleResps.get(0).getRoleGroup().getCategoryCode(), ""); + Assertions.assertEquals(LocalDateTime.ofInstant(roleResps.get(0).getRoleGroup().getCreateAt().toInstant(), ZoneId.systemDefault()), + LocalDateTime.of(2023, 10, 23, 17, 49, 59)); + Assertions.assertEquals(LocalDateTime.ofInstant(roleResps.get(0).getRoleGroup().getUpdateAt().toInstant(), ZoneId.systemDefault()), + LocalDateTime.of(2024, 8, 15, 18, 39, 13)); + + List personProfileDtos = Lists.newArrayList(); + PersonProfileDto personProfileDto = new PersonProfileDto(); + personProfileDto.setId(24511L); + personProfileDto.setRealName("测试名字"); + personProfileDtos.add(personProfileDto); + Mockito.when(userProfileServiceApi.postPersonProfiles(Mockito.any())) + .thenReturn(CommonResponse.success(personProfileDtos)); + + roleResps = roleController.page(PageRoleReq.builder() + .roleIds(Sets.newHashSet(24425L)) + .needRoleUser(true) + .build()) + .getData() + .getData(); + Assertions.assertEquals(roleResps.size(), 1); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().size(), 1); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().get(0).getPersonId(), 24511L); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().get(0).getIdentityId(), 28802L); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().get(0).getIdentityType(), 3); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().get(0).getOuId(), 4L); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().get(0).getWorkspaceId(), 3L); + Assertions.assertEquals(roleResps.get(0).getRoleUsers().get(0).getRealName(), "测试名字"); + + roleResps = roleController.page(PageRoleReq.builder() + .roleIds(Sets.newHashSet(24425L)) + .needFeatureResourceRelation(true) + .build()) + .getData() + .getData(); + Assertions.assertEquals(roleResps.size(), 1); + Assertions.assertEquals(roleResps.get(0).getFeatureResourceRelations().size(), 10); + Assertions.assertEquals(roleResps.get(0).getFeatureResourceRelations().get(0).getFeatureId(), 153L); + Assertions.assertEquals(roleResps.get(0).getFeatureResourceRelations().get(0).getType(), 1); + Assertions.assertEquals(roleResps.get(0).getFeatureResourceRelations().get(0).getFeatureType(), 2); + Assertions.assertEquals(roleResps.get(0).getFeatureResourceRelations().get(0).getTags().size(), 1); + Assertions.assertTrue(roleResps.get(0).getFeatureResourceRelations().get(0).getTags().contains(RolePermissionTagEnum.JOINED.getDesc())); + + + roleResps = roleController.page(PageRoleReq.builder() + .roleIds(Sets.newHashSet(24425L)) + .needFeatureResourceRelation(true) + .featureResourceTypes(Lists.newArrayList(FeatureResourceTypeEnum.PAGE)) + .build()) + .getData() + .getData(); + Assertions.assertEquals(roleResps.size(), 1); + Assertions.assertEquals(roleResps.get(0).getFeatureResourceRelations().size(), 7); + + roleResps = roleController.page(PageRoleReq.builder() + .needPresetRole(true) + .build()) + .getData() + .getData(); + Assertions.assertEquals(roleResps.size(), 4); + } } \ No newline at end of file diff --git a/tyr-server/src/test/resources/mysql/RoleControllerTest.sql b/tyr-server/src/test/resources/mysql/RoleControllerTest.sql index b7300130..6b635f28 100644 --- a/tyr-server/src/test/resources/mysql/RoleControllerTest.sql +++ b/tyr-server/src/test/resources/mysql/RoleControllerTest.sql @@ -10,10 +10,10 @@ INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete, create_at, update_at) VALUES (25, 25326, 13, 0, '2023-10-23 17:50:00', '2023-10-23 17:49:59'); INSERT INTO saas_role_group_relation (id, role_id, saas_role_group_id, is_delete, create_at, update_at) VALUES (26, 25327, 13, 0, '2023-10-23 17:50:00', '2023-10-23 17:49:59'); -INSERT INTO saas_role_group (id, workspace_type_code, ou_type_code, name, workspace_id, ou_id, parent_id, sort, code, category_code, is_delete, create_at, update_at) -VALUES (6, '6', '6', '研发中心', -1, -1, 0, 3, 'A1', '', 0, '2023-09-19 14:31:19', '2024-05-29 09:33:24'); -INSERT INTO saas_role_group (id, workspace_type_code, ou_type_code, name, workspace_id, ou_id, parent_id, sort, code, category_code, is_delete, create_at, update_at) -VALUES (13, '2', '5', '专业分包', -1, -1, 0, 1, 'A2', '', 0, '2023-10-23 17:49:59', '2024-08-15 18:39:13'); +INSERT INTO saas_role_group (id, workspace_type_code, ou_type_code, name, workspace_id, ou_id, parent_id, sort, code, category_code, is_delete, create_at, update_at, path) +VALUES (6, '6', '6', '研发中心', -1, -1, 0, 3, 'A1', 'FF', 0, '2023-09-19 14:31:19', '2024-05-29 09:33:24', '6,'); +INSERT INTO saas_role_group (id, workspace_type_code, ou_type_code, name, workspace_id, ou_id, parent_id, sort, code, category_code, is_delete, create_at, update_at, path) +VALUES (13, '2', '5,3,4', '专业分包', -1, -1, 0, 1, 'A2', '', 0, '2023-10-23 17:49:59', '2024-08-15 18:39:13', '13,'); INSERT INTO saas_role (id, NAME, description, role_type, role_code, workspace_id, owner_ou_id, product_unit_type, workspace_type, is_delete, create_at, update_at, create_by, update_by, fit_ou_type_bit, fit_ou_node_type_bit, position_template_id, project_team_manage_role_resource_id, from_pre_role_id, job_code, is_display, sort, enabled) VALUES (101100, '超级管理员', '超级管理员', 'super_admin', 'ou_superadmin', 0, 0, 7, 1, 0, '2024-09-25 21:47:42', '2024-09-29 17:17:27', 2051297, 2051297, 1, 65535, 0, null, 0, '', 1, 0, 1);