From 50350b8cd7cc1dc54e00d3d5d3df5d7d74c0c985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99?= Date: Fri, 20 Dec 2024 13:56:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:(REQ-3282)=20=E9=87=8D=E6=9E=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=9D=83=E9=99=90=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E6=AF=8F=E4=B8=AA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=B8=8D=E5=90=8C=E7=9A=84=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/controller/PrivateController.java | 21 +- .../tyr/server/service/PermissionService.java | 14 ++ .../ProductPermissionCacheService.java | 5 - .../service/WorkspaceProductService.java | 27 ++- .../service/impl/PermissionServiceImpl.java | 40 +++- .../service/impl/TyrSaasAuthServiceImpl.java | 33 ++- .../impl/WorkspaceProductServiceImpl.java | 81 +++---- .../v2/UserPermissionControllerTest.java | 10 +- .../axzo/tyr/server/permission/JobTest.java | 28 --- .../permission/PermissionPointTest.java | 145 ------------ .../tyr/server/permission/RoleUserTest.java | 78 ------- .../tyr/server/permission/SimpleTest.java | 25 -- .../impl/WorkspaceProductServiceImplTest.java | 214 ++++++++++++++++++ .../mysql/WorkspaceProductServiceImplTest.sql | 130 +++++++++++ 14 files changed, 472 insertions(+), 379 deletions(-) delete mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/permission/JobTest.java delete mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java delete mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java delete mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java create mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImplTest.java create mode 100644 tyr-server/src/test/resources/mysql/WorkspaceProductServiceImplTest.sql diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/PrivateController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/PrivateController.java index 692be370..2f2fa2e1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/PrivateController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/PrivateController.java @@ -18,8 +18,6 @@ import cn.axzo.tyr.client.model.req.ListRoleReq; import cn.axzo.tyr.client.model.req.ListSaasRoleGroupParam; import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq; import cn.axzo.tyr.client.model.req.PageProductFeatureRelationReq; -import cn.axzo.tyr.client.model.req.PageRoleReq; -import cn.axzo.tyr.client.model.req.PermissionCheckReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.res.CommonDictResp; import cn.axzo.tyr.client.model.res.FeatureResourceDTO; @@ -69,7 +67,6 @@ import cn.axzo.tyr.server.service.SaasFeatureResourceService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import cn.axzo.tyr.server.service.SaasRoleGroupService; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; -import cn.axzo.tyr.server.service.TyrSaasAuthService; import cn.axzo.tyr.server.service.WorkspaceProductService; import cn.axzo.tyr.server.service.impl.SaasFeatureResourceCacheService; import cn.axzo.tyr.server.util.FeatureCodeUtil; @@ -86,7 +83,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -615,11 +611,6 @@ public class PrivateController { return "ok"; } - @PostMapping("/api/private/workspaceProduct/list") - public Object listWorkspaceProduct(@RequestBody WorkspaceProductService.WorkspaceProductParam request) { - return workspaceProductService.listWorkspaceProductCached(request); - } - @PostMapping("/api/private/cacheWorkspaceProductHandler/process") public Object processCacheWorkspaceProductHandler(@RequestBody ServicePkgProductCreatedPayload request) { Event event = Event.builder() @@ -678,8 +669,8 @@ public class PrivateController { } @PostMapping("/api/private/workspaceProductCached/list") - public Object workspaceProductCached(@RequestBody WorkspaceProductService.ListWorkspaceProductPermissionCacheParam request) { - return workspaceProductService.listWorkspaceProductPermissionCached(request); + public Object workspaceProductCached(@RequestBody WorkspaceProductService.ListWorkspacePermissionCacheParam request) { + return workspaceProductService.listWorkspacePermissionCached(request); } /** @@ -1297,11 +1288,13 @@ public class PrivateController { } private List listWorkspaceProductPermission(CheckPermissionParam request) { - WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermissionCacheParam = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam + WorkspaceProductService.ListWorkspacePermissionCacheParam listWorkspaceProductPermissionCacheParam = WorkspaceProductService.ListWorkspacePermissionCacheParam .builder() - .workspaceIds(Sets.newHashSet(request.getWorkspaceId())) + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(request.getWorkspaceId()) + .build())) .build(); - return workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermissionCacheParam).stream() + return workspaceProductService.listWorkspacePermissionCached(listWorkspaceProductPermissionCacheParam).stream() .map(WorkspaceProductService.WorkspaceProductPermission::getProductPermissions) .flatMap(Collection::stream) .collect(Collectors.toList()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionService.java index f01e1848..256f2f8d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionService.java @@ -2,6 +2,8 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.feign.enums.RolePermissionTagEnum; import cn.axzo.tyr.feign.enums.RoleTypeEnum; +import cn.axzo.tyr.feign.req.ListPermissionUserReq; +import cn.axzo.tyr.feign.resp.PermissionUserResp; import cn.axzo.tyr.feign.resp.UserPermissionResp; import lombok.AllArgsConstructor; import lombok.Builder; @@ -14,8 +16,20 @@ import java.util.Set; public interface PermissionService { + /** + * 查询用户的权限 + * @param param + * @return + */ List listUserPermission(ListUserPermissionParam param); + /** + * 查询有权限的用户 + * @param param + * @return + */ + List listPermissionUser(ListPermissionUserReq param); + @Data @Builder @NoArgsConstructor diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductPermissionCacheService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductPermissionCacheService.java index a57ca4dd..7cc84d86 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductPermissionCacheService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductPermissionCacheService.java @@ -109,10 +109,5 @@ public interface ProductPermissionCacheService { * 项目code(H5会拉取项目下所有的元素) */ private String itemCode; - - /** - * 客户端版本号 - */ - private Integer version; } } \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/WorkspaceProductService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/WorkspaceProductService.java index 600eb8db..7257a304 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/WorkspaceProductService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/WorkspaceProductService.java @@ -14,13 +14,6 @@ import java.util.Set; public interface WorkspaceProductService { - /** - * 从缓存中查询项目的产品 - * @param param - * @return - */ - List listWorkspaceProductCached(WorkspaceProductParam param); - /** * 缓存项目的产品 * @param param @@ -28,11 +21,11 @@ public interface WorkspaceProductService { void storeWorkspaceProduct(StoreWorkspaceProductParam param); /** - * 从缓存中查询项目的产品及产品的权限 + * 从缓存中查询项目的权限 * @param param * @return */ - List listWorkspaceProductPermissionCached(ListWorkspaceProductPermissionCacheParam param); + List listWorkspacePermissionCached(ListWorkspacePermissionCacheParam param); /** * 从缓存中查询项目的产品及产品的菜单信息 @@ -60,12 +53,24 @@ public interface WorkspaceProductService { @Builder @NoArgsConstructor @AllArgsConstructor - class ListWorkspaceProductPermissionCacheParam { + class ListWorkspacePermissionCacheParam { + private List workspacePermissions; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + class WorkspacePermission { + /** * 项目id */ - private Set workspaceIds; + private Long workspaceId; + /** + * 权限code + */ private Set featureCodes; /** diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionServiceImpl.java index 6ea2b27a..36c82444 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionServiceImpl.java @@ -3,7 +3,9 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.tyr.feign.enums.IdentityTypeEnum; import cn.axzo.tyr.feign.enums.RolePermissionTagEnum; import cn.axzo.tyr.feign.enums.RoleTypeEnum; +import cn.axzo.tyr.feign.req.ListPermissionUserReq; import cn.axzo.tyr.feign.resp.PermissionResp; +import cn.axzo.tyr.feign.resp.PermissionUserResp; import cn.axzo.tyr.feign.resp.UserPermissionResp; import cn.axzo.tyr.server.service.PermissionService; import cn.axzo.tyr.server.service.ProductPermissionCacheService; @@ -134,6 +136,25 @@ public class PermissionServiceImpl implements PermissionService { .collect(Collectors.toList()); } + /** + * 1、根据权限code及相关条件查询项目的权限 + * 2、查询单位、项目的所有role + * 3、根据所有role查询角色信息 + * 4、根据项目的权限和role查询角色的权限信息 + * 5、解析有权限的admin role + * 6、解析有权限的非admin role + * 7、解析有离场权限的admin role + * 8、聚合6,7,8的角色,根据角色查询用户 + * 9、根据用户查询用户的tags + * 10、 + * @param param + * @return + */ + @Override + public List listPermissionUser(ListPermissionUserReq param) { + return null; + } + /** * 只有查询在职权限时才能直接根据管理员角色和产品去匹配 * 因为离场权限,管理员角色会配置管理员角色对应的离场权限 @@ -300,14 +321,19 @@ public class PermissionServiceImpl implements PermissionService { return Collections.emptyMap(); } - WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermission = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder() - .workspaceIds(workspaceIds) - .featureCodes(param.getFeatureCodes()) - .appType(param.getAppType()) - .itemCode(param.getItemCode()) - .terminal(param.getTerminal()) + WorkspaceProductService.ListWorkspacePermissionCacheParam listWorkspacePermissionCacheParam = WorkspaceProductService.ListWorkspacePermissionCacheParam + .builder() + .workspacePermissions(workspaceIds.stream() + .map(workspaceId -> WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(workspaceId) + .featureCodes(param.getFeatureCodes()) + .appType(param.getAppType()) + .itemCode(param.getItemCode()) + .terminal(param.getTerminal()) + .build()) + .collect(Collectors.toList())) .build(); - return workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermission) + return workspaceProductService.listWorkspacePermissionCached(listWorkspacePermissionCacheParam) .stream() .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, e -> Optional.ofNullable(e.getProductPermissions()) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java index a45bbe82..eabb884b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java @@ -469,11 +469,14 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { // 查询的featureCodes有可能已经被删除,但是saas_feature_code效率比较低,两个表的id不会重复,所以解析成id去过滤权限 Set featureIds = checkFeatureCodes(param); - WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermissionCacheParam = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder() - .workspaceIds(Sets.newHashSet(param.getWorkspaceId())) - .featureCodes(param.getFeatureCodes()) + WorkspaceProductService.ListWorkspacePermissionCacheParam listWorkspacePermissionCacheParam = WorkspaceProductService.ListWorkspacePermissionCacheParam + .builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(param.getWorkspaceId()) + .featureCodes(param.getFeatureCodes()) + .build())) .build(); - List productPermissions = workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermissionCacheParam) + List productPermissions = workspaceProductService.listWorkspacePermissionCached(listWorkspacePermissionCacheParam) .stream() .map(WorkspaceProductService.WorkspaceProductPermission::getProductPermissions) .filter(e -> !CollectionUtils.isEmpty(e)) @@ -994,10 +997,14 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { // find product by workspace Set workspaceId = filterRoleAuths.stream().map(FilterRoleAuth::getWorkspaceId).collect(Collectors.toSet()); - WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermission = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder() - .workspaceIds(workspaceId) + WorkspaceProductService.ListWorkspacePermissionCacheParam listWorkspacePermissionCacheParam = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(workspaceId.stream() + .map(e -> WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(e) + .build()) + .collect(Collectors.toList())) .build(); - Map> workspaceProductPermissions = workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermission) + Map> workspaceProductPermissions = workspaceProductService.listWorkspacePermissionCached(listWorkspacePermissionCacheParam) .stream() .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); @@ -1499,11 +1506,15 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { .map(IdentityAuthReq.WorkspaceOuPair::getWorkspaceId) .collect(Collectors.toSet()); // 查询项目的产品权限 - WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listProductPermisssion = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder() - .workspaceIds(workspaceIds) - .featureCodes(identityAuthReq.getFeatureCode()) + WorkspaceProductService.ListWorkspacePermissionCacheParam listProductPermisssion = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(workspaceIds.stream() + .map(workspaceId -> WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(workspaceId) + .featureCodes(identityAuthReq.getFeatureCode()) + .build()) + .collect(Collectors.toList())) .build(); - return workspaceProductService.listWorkspaceProductPermissionCached(listProductPermisssion).stream() + return workspaceProductService.listWorkspacePermissionCached(listProductPermisssion).stream() .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImpl.java index 9d7731f5..309ef109 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImpl.java @@ -7,9 +7,6 @@ import cn.axzo.thrones.client.saas.ServicePkgClient; import cn.axzo.thrones.client.saas.entity.serivicepgkproduct.ServicePkgProduct; import cn.axzo.thrones.client.saas.entity.servicepkg.ServicePkgDetailRes; import cn.axzo.tyr.server.repository.dao.ProductModuleDao; -import cn.axzo.tyr.server.repository.entity.ProductFeatureQuery; -import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; -import cn.axzo.tyr.server.service.ProductFeatureRelationService; import cn.axzo.tyr.server.service.ProductPermissionCacheService; import cn.axzo.tyr.server.service.ProductSaasFeatureResourceCacheService; import cn.axzo.tyr.server.service.WorkspaceProductService; @@ -22,6 +19,7 @@ import com.google.common.collect.Sets; import com.google.common.collect.Streams; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -36,6 +34,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.stream.Collectors; import static cn.axzo.tyr.server.config.exception.BizResultCode.REDIS_PRODUCT_NOT_NULL; @@ -51,8 +50,6 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService { @Autowired private ProductModuleDao productModuleDao; @Autowired - private ProductFeatureRelationService productFeatureRelationService; - @Autowired private StringRedisTemplate redisTemplate; @Autowired private ProductPermissionCacheService productPermissionCacheService; @@ -66,47 +63,6 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService { private static final String WORKSPACE_PRODUCT_KEY = "workspace:product"; - @Override - public List listWorkspaceProductCached(WorkspaceProductParam param) { - if (CollectionUtils.isEmpty(param.getWorkspaceIds())) { - return Collections.emptyList(); - } - - Map> workspaceProducts = listWorkspaceProduct(param.getWorkspaceIds()); - - Set productIds = workspaceProducts.values().stream() - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - - if (CollectionUtils.isEmpty(productIds)) { - return Collections.emptyList(); - } - - ProductFeatureQuery productFeatureQuery = ProductFeatureQuery.builder() - .productIds(productIds) - .featureResourceTypes(param.getFeatureResourceTypes()) - .terminal(param.getTerminal()) - .type(param.getType()) - .featureIdPairs(param.getFeatureIdPairs()) - .build(); - Map> saasProductModuleFeatureRelations = productFeatureRelationService.queryOnCondition(productFeatureQuery).stream() - .collect(Collectors.groupingBy(SaasProductModuleFeatureRelation::getProductModuleId)); - - return workspaceProducts.entrySet().stream() - .filter(e -> CollectionUtils.isNotEmpty(e.getValue())) - .map(e -> { - List features = e.getValue().stream() - .map(saasProductModuleFeatureRelations::get) - .filter(Objects::nonNull) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - return WorkspaceProduct.builder() - .workspaceId(e.getKey()) - .saasProductModuleFeatureRelations(features) - .build(); - }) - .collect(Collectors.toList()); - } @Override public void storeWorkspaceProduct(StoreWorkspaceProductParam param) { @@ -204,8 +160,14 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService { } @Override - public List listWorkspaceProductPermissionCached(ListWorkspaceProductPermissionCacheParam param) { - Map> workspaceProducts = listWorkspaceProduct(param.getWorkspaceIds()); + public List listWorkspacePermissionCached(ListWorkspacePermissionCacheParam param) { + if (CollectionUtils.isEmpty(param.getWorkspacePermissions())) { + return Collections.emptyList(); + } + + Map> workspaceProducts = listWorkspaceProduct(param.getWorkspacePermissions().stream() + .map(WorkspacePermission::getWorkspaceId) + .collect(Collectors.toSet())); Set productIds = workspaceProducts.values().stream() .flatMap(Collection::stream) @@ -217,19 +179,32 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService { ProductPermissionCacheService.ListProductPermissionParam listProductPermissionParam = ProductPermissionCacheService.ListProductPermissionParam.builder() .productIds(productIds) - .featureCodes(param.getFeatureCodes()) - .appType(param.getAppType()) - .itemCode(param.getItemCode()) - .terminal(param.getTerminal()) .build(); Map> productPermissionMap = productPermissionCacheService.list(listProductPermissionParam); + Map workspacePermissionMap = param.getWorkspacePermissions().stream() + .collect(Collectors.toMap(WorkspacePermission::getWorkspaceId, Function.identity(), (f, s) -> f)); + return workspaceProducts.entrySet().stream() .filter(e -> CollectionUtils.isNotEmpty(e.getValue())) .map(e -> { + + WorkspacePermission workspacePermissionParam = workspacePermissionMap.get(e.getKey()); + List productPermissions = e.getValue().stream() .map(productId -> { - List permissions = productPermissionMap.get(productId); + List permissions = Optional.ofNullable(productPermissionMap.get(productId)) + .orElseGet(Lists::newArrayList) + .stream() + .filter(permission -> CollectionUtils.isEmpty(workspacePermissionParam.getFeatureCodes()) + || workspacePermissionParam.getFeatureCodes().contains(permission.getFeatureCode())) + .filter(permission -> StringUtils.isBlank(workspacePermissionParam.getTerminal()) + || Objects.equals(workspacePermissionParam.getTerminal(), permission.getTerminal())) + .filter(permission -> StringUtils.isBlank(workspacePermissionParam.getAppType()) + || Objects.equals(workspacePermissionParam.getAppType(), permission.getAppType())) + .filter(permission -> StringUtils.isBlank(workspacePermissionParam.getItemCode()) + || Objects.equals(workspacePermissionParam.getItemCode(), permission.getItemCode())) + .collect(Collectors.toList()); if (CollectionUtils.isEmpty(permissions)) { return null; } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/UserPermissionControllerTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/UserPermissionControllerTest.java index 5a669d1b..0ed804f7 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/UserPermissionControllerTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/controller/v2/UserPermissionControllerTest.java @@ -39,8 +39,6 @@ import java.util.Map; import java.util.Set; import static cn.axzo.tyr.server.config.exception.BizResultCode.PARAM_ERROR; -import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation.NEW_FEATURE; -import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertThrows; class UserPermissionControllerTest extends BaseTest { @@ -107,6 +105,14 @@ class UserPermissionControllerTest extends BaseTest { @Test void listUserPermissionReplaceHasPermission() { + Map> featureCodeMap = Maps.newHashMap(); + featureCodeMap.put("h5:cmp_user_manage_worker_page", Sets.newHashSet("h5:cmp_user_manage_worker_page")); + featureCodeMap.put("h5:cmp_user_manage_worker_page_2", Sets.newHashSet("h5:cmp_user_manage_worker_page_2")); + featureCodeMap.put("h5:cmp_user_manage_worker_on_site_audit_btn", Sets.newHashSet("h5:cmp_user_manage_worker_on_site_audit_btn")); + featureCodeMap.put("h5:cmp_user_manage_worker_jump_to_team_btn", Sets.newHashSet("h5:cmp_user_manage_worker_jump_to_team_btn")); + Mockito.when(featureCodeCachedApi.list(Mockito.any())) + .thenReturn(ApiResult.ok(featureCodeMap)); + // old cn.axzo.tyr.client.feign.PermissionQueryApi#hasPermission PermissionCheckReq permissionCheckReq = PermissionCheckReq.builder() .personId(1827L) diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/JobTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/JobTest.java deleted file mode 100644 index 2babfb87..00000000 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/JobTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.axzo.tyr.server.permission; - -import cn.axzo.tyr.server.job.ProductFeatureRefreshJobHandler; -import cn.axzo.tyr.server.model.ProductFeatureRefreshParam; -import com.alibaba.fastjson.JSON; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -/** - * @version V1.0 - * @author: ZhanSiHu - * @date: 2023/10/23 11:30 - */ -@SpringBootTest -public class JobTest { - @Autowired - private ProductFeatureRefreshJobHandler productFeatureRefreshJobHandler; - - @Test - public void testProductFeatureRefresh() throws Exception { - ProductFeatureRefreshParam param = new ProductFeatureRefreshParam(); - param.setWorkspaceType(2); - param.setProductId(1007L); - productFeatureRefreshJobHandler.execute(JSON.toJSONString(param)); - } - -} diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java deleted file mode 100644 index ca39f750..00000000 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ /dev/null @@ -1,145 +0,0 @@ -package cn.axzo.tyr.server.permission; - -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.enums.FeatureType; -import cn.axzo.tyr.client.model.permission.PermissionPointDTO; -import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; -import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; -import cn.axzo.tyr.client.model.permission.PermissionPointVO; -import cn.axzo.tyr.server.controller.permission.PermissionPointController; -import cn.axzo.tyr.server.repository.entity.SaasFeature; -import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; -import cn.axzo.tyr.server.service.PermissionPointService; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Arrays; -import java.util.List; - -/** - * 权限点测试 - * - * @version V1.0 - * @author: ZhanSiHu - * @date: 2023/9/6 14:59 - */ -@SpringBootTest -public class PermissionPointTest { - @Autowired - private PermissionPointController controller; - @Autowired - private SaasFeatureDao saasFeatureDao; - @Autowired - private PermissionPointService permissionPointService; - - @Test - public void testList() { - List saasFeatures = saasFeatureDao.listByIds(Arrays.asList(206L, 207L, 208L)); - System.out.println(JSON.toJSONString(saasFeatures)); - } - - @Test - public void testListTreeNode() { - PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq(); - //request.setParentId(354L); - //request.setKeyword("预警"); - //request.setWorkspaceType(Arrays.asList("ent")); - //request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); - request.setDelegateType(0); - request.setMaxLevel(3); - request.setMaxFeatureType(2); - ApiResult> result = controller.listTreeNodes(request); - System.out.println("---------------"); - System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); - } - - @Test - public void testGetDetail() { - Long permissionId = 360L; - ApiResult result = controller.getDetail(permissionId); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testListByIds() { - List ids = Arrays.asList(354L, 360L); - ApiResult> result = controller.listTreeNodesByIds(ids); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testInsert() { - PermissionPointDTO permissionPoint = new PermissionPointDTO(); - permissionPoint.setFeatureName("测试合同权限点"); - permissionPoint.setFeatureCode("CMS_WEB_PROJ_0158"); - //permissionPoint.setParentId(360L); - //permissionPoint.setPath("/0/354/360/"); - //permissionPoint.setSort(3); - //permissionPoint.setTerminal("NT_CMS_WEB_PROJ"); - permissionPoint.setTerminal("NT_CMS_WEB_ENT_ZB"); - permissionPoint.setFeatureType(1); - //permissionPoint.setAppName("tyr"); - //permissionPoint.setFeatureUrl("/tyr/test/permission"); - //permissionPoint.setNeedAuth(true); - //permissionPoint.setNeedAuth(true); - System.out.println(JSON.toJSONString(permissionPoint)); - controller.savePermissionPoint(permissionPoint); - } - - @Test - public void testUpdate() { - PermissionPointDTO permissionPoint = new PermissionPointDTO(); - permissionPoint.setId(3479L); - permissionPoint.setFeatureName("测试合同权限点"); - permissionPoint.setFeatureCode("CMS_WEB_PROJ_0159"); //不生效 - permissionPoint.setParentId(361L);//不生效 - permissionPoint.setPath("/0/354/361/");//不生效 - permissionPoint.setSort(9);//不生效 - permissionPoint.setTerminal("NT_CMS_WEB_PROJ-xx");//不生效 - permissionPoint.setFeatureType(3); - permissionPoint.setAppName("tyr"); - permissionPoint.setFeatureUrl("/tyr/test/permission"); - permissionPoint.setNeedAuth(true); - permissionPoint.setNeedAuth(true); - controller.savePermissionPoint(permissionPoint); - } - - - @Test - public void testMove() { - PermissionPointMoveRequest request = new PermissionPointMoveRequest(); - request.setPermissionId(3483L); - request.setParentId(360L); - request.setSort(1); - ApiResult result = controller.move(request); - System.out.println(JSON.toJSONString(result)); - } - - - @Test - public void testDelete() { - Long permissionId = 360L; - controller.deletePermissionPoint(permissionId); - } - - @Test - public void testQueryList() { - PermissionPointListQueryRequest request = new PermissionPointListQueryRequest(); - request.setFeatureType(FeatureType.BUTTON.getCode()); - request.setIds(Arrays.asList(255L, 266L)); - ApiResult> result = controller.queryList(request); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void test() { - List saasFeatures = permissionPointService.listNodeWithChildrenByCode("CMS_WEB_PROJ_0546", "NT_CMS_WEB_PROJ"); - System.out.println(JSON.toJSONString(saasFeatures)); - } - -} diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java deleted file mode 100644 index 7d47a7bf..00000000 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/RoleUserTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.axzo.tyr.server.permission; - -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.feign.TyrSaasRoleApi; -import cn.axzo.tyr.client.model.BaseWorkspaceModel; -import cn.axzo.tyr.client.model.enums.FeatureType; -import cn.axzo.tyr.client.model.enums.IdentityType; -import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; -import cn.axzo.tyr.client.model.res.RoleWithUserRes; -import cn.axzo.tyr.server.controller.role.SaasRoleController; -import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; -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.service.RoleService; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Arrays; -import java.util.List; - -/** - * 权限点测试 - * - * @version V1.0 - * @author: ZhanSiHu - * @date: 2023/9/6 14:59 - */ -@SpringBootTest -public class RoleUserTest { - @Autowired - private SaasRoleUserRelationDao saasRoleUserRelationDao; - @Autowired - private SaasFeatureDao saasFeatureDao; - - @Autowired - private SaasRoleController controller; - - @Autowired - private SaasRoleDao saasRoleDao; - - @Autowired - private RoleService roleService; - - @Test - public void testList() { - saasRoleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() - .workspaceId( - 999L - ) - .ouId(123L) - .identityId(32L) - .identityType(IdentityType.PRACTITIONER) - .build(), Arrays.asList(4L)); - } - - @Test - public void testQuery() { - RoleWithUserQueryReq request = new RoleWithUserQueryReq(); - request.setOuId(5195L); - request.setWorkspaceId(232L); - request.setPage(1L); - request.setPageSize(5L); - ApiPageResult result = controller.queryRoleWithUser(request); - System.out.println(JSON.toJSONString(result)); - } - - @Test - public void testListAdmin() { - roleService.listAdmins(111L, 22L); - } - - -} diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java deleted file mode 100644 index 5b27c8d6..00000000 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.axzo.tyr.server.permission; - -import cn.axzo.tyr.client.model.permission.PermissionPointVO; -import cn.hutool.core.date.StopWatch; -import org.junit.Test; - -import java.util.concurrent.TimeUnit; - -/** - * @version V1.0 - * @author: ZhanSiHu - * @date: 2023/9/13 18:43 - */ -public class SimpleTest { - - @Test - public void testSplitBit() { - - PermissionPointVO vo = new PermissionPointVO(); - vo.applyFitOuTypeBit(65535L); - System.out.println(vo.getFitOuTypeList()); - vo.applyFitOuTypeBit(65535L); - System.out.println(vo.getFitOuTypeList()); - } -} diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImplTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImplTest.java new file mode 100644 index 00000000..e15fc87c --- /dev/null +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/service/impl/WorkspaceProductServiceImplTest.java @@ -0,0 +1,214 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.thrones.client.saas.ServicePkgClient; +import cn.axzo.thrones.client.saas.entity.serivicepgkproduct.ServicePkgProduct; +import cn.axzo.thrones.client.saas.entity.servicepkg.ServicePkgDetailRes; +import cn.axzo.tyr.base.BaseTest; +import cn.axzo.tyr.base.MysqlDataLoader; +import cn.axzo.tyr.server.service.WorkspaceProductService; +import cn.azxo.framework.common.model.CommonResponse; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +class WorkspaceProductServiceImplTest extends BaseTest { + + @Autowired + private MysqlDataLoader mysqlDataLoader; + @Autowired + private WorkspaceProductService workspaceProductService; + @Autowired + private ServicePkgClient servicePkgClient; + + @BeforeEach + @Override + public void setup() { + super.setup(); + mysqlDataLoader.loadFromClassName(getClass().getSimpleName()); + ServicePkgDetailRes servicePkgDetail = new ServicePkgDetailRes(); + servicePkgDetail.setSpaceId(3L); + ServicePkgProduct servicePkgProduct = new ServicePkgProduct(); + servicePkgProduct.setProductId(2L); + servicePkgDetail.setProducts(Lists.newArrayList(servicePkgProduct)); + Mockito.when(servicePkgClient.getServicePkgDetailBySpaceId(Mockito.eq(Sets.newHashSet(3L)))) + .thenReturn(CommonResponse.success(Lists.newArrayList(servicePkgDetail))); + + ServicePkgDetailRes servicePkgDetail2 = new ServicePkgDetailRes(); + servicePkgDetail2.setSpaceId(4L); + ServicePkgProduct servicePkgProduct2 = new ServicePkgProduct(); + servicePkgProduct2.setProductId(3L); + servicePkgDetail2.setProducts(Lists.newArrayList(servicePkgProduct2)); + Mockito.when(servicePkgClient.getServicePkgDetailBySpaceId(Mockito.eq(Sets.newHashSet(3L, 4L)))) + .thenReturn(CommonResponse.success(Lists.newArrayList(servicePkgDetail2, servicePkgDetail))); + + Mockito.when(servicePkgClient.getServicePkgDetailBySpaceId(Mockito.eq(Sets.newHashSet(11L)))) + .thenReturn(CommonResponse.success(Lists.newArrayList())); + } + + @Test + void listWorkspacePermissionCached() { + + + // workspace 没有product + WorkspaceProductService.ListWorkspacePermissionCacheParam param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(11L) + .build())) + .build(); + List workspaceProductPermissions = workspaceProductService.listWorkspacePermissionCached(param); + + Assertions.assertTrue(CollectionUtils.isEmpty(workspaceProductPermissions)); + // workspace 没有product + + // workspace 有product,featureCode + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .featureCodes(Sets.newHashSet("h5:cmp_user_manage_worker_labor_audit_btn", "h5:cmp_allotted_time_page")) + .build(), + WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(4L) + .featureCodes(Sets.newHashSet("h5:cmp_allotted_time_page")) + .build())) + .build(); + + Map> workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 1); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 1); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getCooperateType(), "1"); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getFeatureId(), 101745L); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getFeatureCode(), "h5:cmp_user_manage_worker_labor_audit_btn"); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getFeatureType(), 4); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getTerminal(), "NT_CMP_APP_GENERAL"); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getAppType(), "H5"); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getItemCode(), "h5:user_manage_D9B0186"); + + Assertions.assertEquals(workspacePermissions.get(4L).size(), 1); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getProductId(), 3L); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().size(), 1); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getCooperateType(), "9"); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getFeatureId(), 101936L); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getFeatureCode(), "h5:cmp_allotted_time_page"); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getFeatureType(), 4); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getTerminal(), "NT_CMP_APP_GENERAL"); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getAppType(), "H5"); + Assertions.assertEquals(workspacePermissions.get(4L).get(0).getPermissions().get(0).getItemCode(), "h5:allotted-time_26081705"); + // workspace 有product,featureCode + + // workspace 有product,terminal + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .terminal("NT_CMP_APP_GENERAL") + .build())) + .build(); + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 1); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 7); + + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .terminal("NT_CMP_APP_GENERAL_sdf") + .build())) + .build(); + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 0); + // workspace 有product,terminal + + // workspace 有product,appType + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .appType("H5") + .build())) + .build(); + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 1); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 7); + + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .appType("APP") + .build())) + .build(); + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 0); + // workspace 有product,appType + + // workspace 有product,itemCode + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .itemCode("h5:user_manage_D9B0186") + .build())) + .build(); + + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 1); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 7); + + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .itemCode("h5:user_manage_D9B0186_sdf") + .build())) + .build(); + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 0); + // workspace 有product,itemCode + + // workspace 有product,featureCode、terminal、appType、itemCode + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .featureCodes(Sets.newHashSet("h5:cmp_user_manage_worker_labor_audit_btn")) + .terminal("NT_CMP_APP_GENERAL") + .appType("H5") + .itemCode("h5:user_manage_D9B0186") + .build())) + .build(); + + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 1); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L); + Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 1); + + param = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() + .workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() + .workspaceId(3L) + .featureCodes(Sets.newHashSet("h5:cmp_user_manage_worker_labor_audit_btn")) + .terminal("NT_CMP_APP_GENERAL") + .appType("APP") + .itemCode("h5:user_manage_D9B0186_sdf") + .build())) + .build(); + + workspacePermissions = workspaceProductService.listWorkspacePermissionCached(param).stream() + .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); + Assertions.assertEquals(workspacePermissions.get(3L).size(), 0); + // workspace 有product,featureCode、terminal、appType、itemCode + } +} \ No newline at end of file diff --git a/tyr-server/src/test/resources/mysql/WorkspaceProductServiceImplTest.sql b/tyr-server/src/test/resources/mysql/WorkspaceProductServiceImplTest.sql new file mode 100644 index 00000000..273b7463 --- /dev/null +++ b/tyr-server/src/test/resources/mysql/WorkspaceProductServiceImplTest.sql @@ -0,0 +1,130 @@ +#-->DEFAULT + + +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (100835, 'cms:project_9103', '项目', 1, 'NT_CMS_WEB_GENERAL', 0, 100000, '100000,100835,', 0, '', 0, 'cms:project_9103', 1, 1, 'https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/oms/d4137963b9f54c7787afa7ef52d95540.svg', 1, '/', 0, '', 0, 0, '{"moreIcon": "https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/oms/cc474a2dc1884b6081f33d470a2e03e6.svg", "activeIcon": "https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/oms/3e69eb003de64682a2e88c4d9da5ed1d.svg"}', 0, 0, '2024-06-01 14:50:52', '2024-10-29 11:29:10', 59926, 9000404098, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101048, 'cms:pro_contract_management_7701', '合约管理', 2, 'NT_CMS_WEB_GENERAL', 0, 100883, '100000,100835,100883,101048,', 2, '2', 0, 'cms:pro_contract_management_7701', 0, 1, '', 1, '/netConstruction/construction/contract-manage', 0, '', 0, 0, null, 1, 0, '2024-06-18 16:35:35', '2024-10-21 11:24:41', 59926, 9000404204, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101053, 'cms:pro_contract_price_authority_7706', '查看合约价格信息', 4, 'NT_CMS_WEB_GENERAL', 5, 101054, '100000,100835,100883,101048,101054,101053,', 0, '', 0, 'cms:pro_contract_price_authority_7706', 4, 1, '', 1, '', 0, '', 0, 0, null, 1, 1, '2024-07-12 14:02:46', '2024-10-21 11:24:43', 59926, 9000404204, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101054, 'cms:pro_contract_detail_7707', '合约详情', 4, 'NT_CMS_WEB_GENERAL', 1, 101048, '100000,100835,100883,101048,101054,', 0, '', 0, 'cms:pro_contract_detail_7707', 3, 1, '', 1, '/', 0, '', 0, 0, null, 1, 1, '2024-07-04 16:27:16', '2024-10-21 11:24:42', 185732, 9000404204, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101744, 'cmp:pro_team_list_0443', '查看班组列表', 4, 'NT_CMP_APP_GENERAL', 5, 101741, '636,101437,101445,101573,101741,101744,', 0, '', 0, 'cmp:pro_team_list_0443', 2, 1, '', 1, '', 0, '', 0, 0, null, 1, 1, '2024-08-13 10:39:22', '2024-08-28 10:53:36', 86256, 25923, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101745, 'cmp:pro_worker_invite_recorder_0445', '查看工人入场申请', 4, 'NT_CMP_APP_GENERAL', 5, 101741, '636,101437,101445,101573,101741,101745,', 0, '', 0, 'cmp:pro_worker_invite_recorder_0445', 3, 1, '', 1, '', 0, '', 0, 0, null, 1, 1, '2024-08-13 10:40:29', '2024-08-28 10:53:36', 86256, 25923, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101746, 'cmp:pro_team_leader_invite_recorder_0446', '班组长入场申请记录', 4, 'NT_CMP_APP_GENERAL', 5, 101741, '636,101437,101445,101573,101741,101746,', 0, '', 0, 'cmp:pro_team_leader_invite_recorder_0446', 4, 1, '', 1, '', 0, '', 0, 0, null, 1, 1, '2024-08-13 10:40:50', '2024-08-28 10:53:36', 86256, 25923, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101749, 'cmp:pro_team_index_0449', '查看班组详情', 4, 'NT_CMP_APP_GENERAL', 5, 101741, '636,101437,101445,101573,101741,101749,', 0, '', 0, 'cmp:pro_team_index_0449', 7, 1, '', 1, '', 0, '', 0, 0, null, 1, 1, '2024-08-13 10:41:28', '2024-08-28 10:53:37', 86256, 25923, 0); + + +INSERT INTO product_module (id, icon, product_type, product_name, dict_workspace_type_id, dict_workspace_type_code, status, common_product, remark, auth_type, ou_type, is_delete, create_by, create_at, update_at, update_by, category, version, max_person_count, max_workspace_count, price, skus, material) +VALUES (2, 'https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/test/1695286111017-Snipaste_09-13 16-24.png', 2, '项目基础', 2, '2', 1, 1, '', 1, null, 0, 0, '2022-08-17 19:46:11', '2024-12-12 15:37:27', 89601, 'GENERAL_SERVICE', 0, 0, 0, 0, NULL, NULL); +INSERT INTO product_module (id, icon, product_type, product_name, dict_workspace_type_id, dict_workspace_type_code, status, common_product, remark, auth_type, ou_type, is_delete, create_by, create_at, update_at, update_by, category, version, max_person_count, max_workspace_count, price, skus, material) +VALUES (3, 'https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/test/1695279180099-人脸照.jpg', 2, '实名考勤', 2, '2', 1, 1, '', 1, null, 0, 0, '2022-08-17 19:46:11', '2024-10-28 11:14:06', 9000404668, 'GENERAL_SERVICE', 0, 0, 0, 0, null, null); + + +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257742, 2, 7, '1', 101744, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257743, 2, 7, '1', 101745, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257744, 2, 7, '1', 101746, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257745, 2, 7, '1', 4443, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257746, 2, 7, '1', 4416, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257747, 2, 7, '1', 4417, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257748, 2, 7, '1', 4418, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257749, 2, 7, '1', 4419, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257750, 2, 7, '1', 4420, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1257751, 2, 7, '1', 912, 0, '2024-08-20 17:54:00', '2024-08-20 17:54:00', 0, 0, 1, 0, ''); + + +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (14744, 'cms:pro_construction_contract_management', 'cms:pro_contract_management_7701', 1, 'NT_CMS_WEB_GENERAL', '2024-07-10 20:39:15', '2024-07-10 20:39:15', null, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (18070, 'cms:pro_construction_contract_management', 'cms:pro_contract_management_7701', 0, 'NT_CMS_WEB_GENERAL', '2024-07-16 09:56:12', '2024-07-16 09:56:11', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (18079, 'cms:pro_construction_contract_detail', 'cms:pro_contract_detail_7707', 0, 'NT_CMS_WEB_GENERAL', '2024-07-16 09:56:12', '2024-07-16 09:56:11', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (18080, 'cms:pro_construction_contract_detail_inventory_submit_audit', 'cms:pro_contract_detail_7707', 0, 'NT_CMS_WEB_GENERAL', '2024-07-16 09:56:12', '2024-07-16 09:56:11', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24219, 'h5:cmp_user_manage_worker_jump_to_team_btn', 'cmp:pro_team_list_0443', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24220, 'h5:cmp_user_manage_worker_page', 'cmp:pro_team_list_0443', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24221, 'h5:cmp_user_manage_worker_labor_audit_btn', 'cmp:pro_worker_invite_recorder_0445', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24222, 'h5:cmp_user_manage_worker_page', 'cmp:pro_worker_invite_recorder_0445', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24223, 'h5:cmp_user_manage_labor_audit_page', 'cmp:pro_worker_invite_recorder_0445', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24224, 'h5:cmp_user_manage_labor_audit_detail_btn', 'cmp:pro_worker_invite_recorder_0445', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (24225, 'h5:cmp_user_manage_worker_on_site_audit_btn', 'cmp:pro_team_leader_invite_recorder_0446', 0, 'NT_CMP_APP_GENERAL', '2024-08-28 10:53:36', '2024-08-28 10:53:36', 25923, null, 0); + + + +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (718447, 'cms:pro_construction_contract_management', 'cms:pro_construction_contract_management', '合约管理', 'PAGE', '/netConstruction/construction/contract-manage', 'NT_CMS_WEB_GENERAL', '2024-10-29 15:07:38', '2024-12-03 14:55:23', 0, '杜才伟-18682489918', 'PC', 0, 'CMS_COMMON', '', '', '单位组织', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, 9000404098); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (718451, 'cms:pro_construction_contract_detail', 'cms:pro_construction_contract_detail', '合约详情', 'PAGE', '/netConstruction/construction/contract-manage/contract-detail', 'NT_CMS_WEB_GENERAL', '2024-10-29 15:07:38', '2024-12-03 14:55:23', 0, '杜才伟-18682489918', 'PC', 0, 'CMS_COMMON', '', '', '单位组织', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, 9000404098); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (718455, 'cms:pro_construction_contract_detail', 'cms:pro_construction_contract_detail_inventory_submit_audit', '合约详情-提交审批', 'COMPONENT', '', 'NT_CMS_WEB_GENERAL', '2024-10-29 15:07:38', '2024-12-03 14:55:25', 0, '杜才伟-18682489918', 'PC', 0, 'CMS_COMMON', '', '', '单位组织', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, 9000404098); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369205, 'h5:cmp_user_manage_worker_page', 'h5:cmp_user_manage_worker_jump_to_team_btn', '人员管理-施工人员-跳转班组', 'COMPONENT', '', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:41', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369197, 'h5:cmp_user_manage_worker_page', 'h5:cmp_user_manage_worker_page', '人员管理-施工人员', 'PAGE', '__UNI__D9B0186#/pages/worker/index', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:40', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369202, 'h5:cmp_user_manage_worker_page', 'h5:cmp_user_manage_worker_labor_audit_btn', '人员管理-施工人员-劳务审核', 'COMPONENT', '', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:41', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369218, 'h5:cmp_user_manage_labor_audit_page', 'h5:cmp_user_manage_labor_audit_page', '人员管理-劳务审核', 'PAGE', '__UNI__D9B0186#/pages/labour/verify/index', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:42', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369219, 'h5:cmp_user_manage_labor_audit_page', 'h5:cmp_user_manage_labor_audit_detail_btn', '人员管理-劳务审核-详情', 'COMPONENT', '', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:42', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369203, 'h5:cmp_user_manage_worker_page', 'h5:cmp_user_manage_worker_on_site_audit_btn', '人员管理-施工人员-进场审核', 'COMPONENT', '', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:41', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369216, 'h5:cmp_user_manage_on_site_audit_page', 'h5:cmp_user_manage_on_site_audit_page', '人员管理-进场审核', 'PAGE', '__UNI__D9B0186#/pages/labour/enterAudit/index', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:42', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:user_manage_D9B0186', '', '__UNI__D9B0186', '人员管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); + + +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1749220, 3, 27, '9', 101437, 0, '2024-10-28 11:14:06', '2024-10-28 11:14:06', 0, 0, 1, 6, 'NT_CMP_APP_GENERAL'); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1749218, 3, 27, '9', 101934, 0, '2024-10-28 11:14:06', '2024-10-28 11:14:06', 0, 0, 1, 4, 'NT_CMP_APP_GENERAL'); +INSERT INTO saas_product_module_feature_relation (id, product_module_id, dict_code_id, dict_code, feature_id, is_delete, create_at, update_at, create_by, update_by, type, feature_type, terminal) +VALUES (1749219, 3, 27, '9', 101936, 0, '2024-10-28 11:14:06', '2024-10-28 11:14:06', 0, 0, 1, 4, 'NT_CMP_APP_GENERAL'); + +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101437, 'cmp:application_center_019', '应用', 6, 'NT_CMP_APP_GENERAL', 0, 636, '636,101437,', 0, '', 0, 'cmp:application_center_019', 2, 1, '', 0, '', 0, '', 0, 0, '{"moreIcon": "", "activeIcon": "", "terminalType": "", "terminalBizType": ""}', 1, 0, '2024-05-31 11:26:29', '2024-12-13 09:31:22', 86256, 9000400021, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101934, 'cmp:pro_team_schedule_rule_edit_0912', '编辑', 4, 'NT_CMP_APP_GENERAL', 5, 101932, '636,101437,101444,101508,101932,101934,', 0, '', 0, 'cmp:pro_team_schedule_rule_edit_0912', 1, 1, '', 0, '', 0, '', 0, 0, null, 1, 1, '2024-09-12 15:30:56', '2024-09-12 18:55:42', 9000399280, 9000399280, 0); +INSERT INTO saas_feature_resource (id, feature_code, feature_name, feature_type, terminal, component_type, parent_id, path, workspace_type, workspace_types, version, uni_code, display_order, status, icon, redirect_type, link_url, link_type, link_ext, app_item_id, sync_version, extra, auth_type, sub_auth_type, create_at, update_at, create_by, update_by, is_delete) +VALUES (101936, 'cmp:pro_task_time_allocate_task_0912', '工时分配到任务', 4, 'NT_CMP_APP_GENERAL', 5, 101935, '636,101437,101444,101508,101935,101936,', 0, '', 0, 'cmp:pro_task_time_allocate_task_0912', 0, 1, '', 0, '', 0, '', 0, 0, null, 1, 1, '2024-09-12 18:55:43', '2024-09-12 18:55:43', 9000399280, 9000399280, 0); + +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (25830, 'h5:cmp_attence_shift_list_page', 'cmp:pro_team_schedule_rule_edit_0912', 0, 'NT_CMP_APP_GENERAL', '2024-09-12 18:55:42', '2024-09-12 18:55:42', 9000399280, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (25831, 'h5:cmp_attence_shift_switch_btn', 'cmp:pro_team_schedule_rule_edit_0912', 0, 'NT_CMP_APP_GENERAL', '2024-09-12 18:55:42', '2024-09-12 18:55:42', 9000399280, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (25834, 'h5:cmp_allotted_time_page', 'cmp:pro_task_time_allocate_task_0912', 0, 'NT_CMP_APP_GENERAL', '2024-09-12 18:57:04', '2024-09-12 18:57:04', 9000399280, null, 0); +INSERT INTO saas_page_element_feature_resource_relation (id, page_element_code, feature_resource_uni_code, type, terminal, create_at, update_at, create_by, update_by, is_delete) +VALUES (25835, 'h5:cmp_allotted_time_detail_btn', 'cmp:pro_task_time_allocate_task_0912', 0, 'NT_CMP_APP_GENERAL', '2024-09-12 18:57:04', '2024-09-12 18:57:04', 9000399280, null, 0); + +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369373, 'h5:cmp_attence_shift_list_page', 'h5:cmp_attence_shift_list_page', '排班管理-排班列表', 'PAGE', '__UNI__D5F1867#/', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:53', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:attence_shift_D5F1867', '', '__UNI__D5F1867', '考勤班次H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369374, 'h5:cmp_attence_shift_list_page', 'h5:cmp_attence_shift_switch_btn', '排班管理-启用/禁用班次', 'COMPONENT', '', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:53', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:attence_shift_D5F1867', '', '__UNI__D5F1867', '考勤班次H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369351, 'h5:cmp_allotted_time_page', 'h5:cmp_allotted_time_page', '工时管理-分配工时', 'PAGE', '__UNI__26081705#/allotedTime', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:51', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:allotted-time_26081705', '', '__UNI__26081705', '工时管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); +INSERT INTO saas_page_element (id, group_code, code, name, type, link_url, terminal, create_at, update_at, is_delete, create_name, app_type, version, item_code, link_ext, app_id, item_name, ext, create_by, update_by) +VALUES (369352, 'h5:cmp_allotted_time_page', 'h5:cmp_allotted_time_detail_btn', '工时管理-分配工时-工时详情', 'COMPONENT', '', 'NT_CMP_APP_GENERAL', '2024-08-29 09:18:51', '2024-11-28 16:09:41', 0, '', 'H5', 0, 'h5:allotted-time_26081705', '', '__UNI__26081705', '工时管理H5', '{"applications": [{"type": "IOS", "minVersion": 0}, {"type": "ANDROID", "minVersion": 0}]}', null, null); + + +#-->WorkspaceProductServiceImplTest.sql \ No newline at end of file