Merge branch 'feature/REQ-2845' into 'master'

Feature/req 2845

See merge request universal/infrastructure/backend/tyr!217
This commit is contained in:
李龙 2024-09-25 10:14:34 +00:00
commit bc3d34aadf
4 changed files with 163 additions and 139 deletions

View File

@ -1,134 +1,136 @@
package cn.axzo.tyr.server.service; package cn.axzo.tyr.server.service;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.model.req.DeleteFeatureResourceReq; import cn.axzo.tyr.client.model.req.DeleteFeatureResourceReq;
import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq; import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq;
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq; import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq; import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp; import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.server.model.ResourcePermission; import cn.axzo.tyr.server.model.ResourcePermission;
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO; import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
* 功能资源服务 * 功能资源服务
* *
* @version V1.0 * @version V1.0
* @author: ZhanSiHu * @author: ZhanSiHu
* @date: 2024/4/3 10:17 * @date: 2024/4/3 10:17
*/ */
public interface SaasFeatureResourceService extends IService<SaasFeatureResource> { public interface SaasFeatureResourceService extends IService<SaasFeatureResource> {
Long saveOrUpdateMenu(FeatureResourceTreeSaveReq req); Long saveOrUpdateMenu(FeatureResourceTreeSaveReq req);
void updateFeatureAuthType(Long featureId, Integer authType); void updateFeatureAuthType(Long featureId, Integer authType);
/**递归的**/ /**递归的**/
List<SaasFeatureResource> batchListDescendant(List<Long> featureIds); List<SaasFeatureResource> batchListDescendant(List<Long> featureIds);
SaasFeatureResource featureResourceById(Long featureId); SaasFeatureResource featureResourceById(Long featureId);
FeatureResourceTreeNode getTreeFeatureDescendant(Long featureId, Integer featureType); FeatureResourceTreeNode getTreeFeatureDescendant(Long featureId, Integer featureType);
/**菜单重排序**/ /**菜单重排序**/
void reorderMenuFeature(Long featureId, Integer offset); void reorderMenuFeature(Long featureId, Integer offset);
/** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/ /** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/
List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes); List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes);
/** 资源权限通用查询 **/ /** 资源权限通用查询 **/
List<ResourcePermission> permissionQuery(ResourcePermissionQueryDTO param); List<ResourcePermission> permissionQuery(ResourcePermissionQueryDTO param);
/** 查询资源树 **/ /** 查询资源树 **/
List<FeatureResourceTreeNode> getTree(GetFeatureResourceTreeReq req); List<FeatureResourceTreeNode> getTree(GetFeatureResourceTreeReq req);
SaasFeatureResource getByCode(String featureCode); SaasFeatureResource getByCode(String featureCode);
Set<Long> listAuthFree(); Set<Long> listAuthFree();
List<SaasFeatureResource> listByParentIdAndTerminalAndIds(Long parentId, String terminal, List<Long> featureIds); List<SaasFeatureResource> listByParentIdAndTerminalAndIds(Long parentId, String terminal, List<Long> featureIds);
List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param); List<SaasFeatureResource> listByParentIdAndBlurTerminalAndIds(Long parentId, String terminal, List<Long> featureIds);
PageResp<SaasFeatureResourceResp> page(PageSaasFeatureResourceReq param); List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param);
void deleteFeatureResource(DeleteFeatureResourceReq param); PageResp<SaasFeatureResourceResp> page(PageSaasFeatureResourceReq param);
Map<String, List<SaasFeatureResourceCache>> listCache(ListSaasFeatureResourceCache param); void deleteFeatureResource(DeleteFeatureResourceReq param);
void refreshCache(RefreshFeatureResourceCacheParam param); Map<String, List<SaasFeatureResourceCache>> listCache(ListSaasFeatureResourceCache param);
@Data void refreshCache(RefreshFeatureResourceCacheParam param);
@Builder
@NoArgsConstructor @Data
@AllArgsConstructor @Builder
class RefreshFeatureResourceCacheParam { @NoArgsConstructor
private Set<String> terminals; @AllArgsConstructor
} class RefreshFeatureResourceCacheParam {
private Set<String> terminals;
@Data }
@Builder
@NoArgsConstructor @Data
@AllArgsConstructor @Builder
class StoreSaasFeatureResourceCache { @NoArgsConstructor
@AllArgsConstructor
private List<SaasFeatureResourceDTO> saasFeatureResources; class StoreSaasFeatureResourceCache {
}
private List<SaasFeatureResourceDTO> saasFeatureResources;
@Data }
@Builder
@NoArgsConstructor @Data
@AllArgsConstructor @Builder
class SaasFeatureResourceDTO { @NoArgsConstructor
private String terminal; @AllArgsConstructor
class SaasFeatureResourceDTO {
private List<SaasFeatureResourceCache> features; private String terminal;
}
private List<SaasFeatureResourceCache> features;
@Data }
@Builder
@NoArgsConstructor @Data
@AllArgsConstructor @Builder
class ListSaasFeatureResourceCache { @NoArgsConstructor
@AllArgsConstructor
private Set<String> terminals; class ListSaasFeatureResourceCache {
}
private Set<String> terminals;
@Data }
@Builder
@NoArgsConstructor @Data
@AllArgsConstructor @Builder
class SaasFeatureResourceCache { @NoArgsConstructor
@AllArgsConstructor
private Long featureId; class SaasFeatureResourceCache {
private boolean notAuth; private Long featureId;
private Set<Long> parentIds; private boolean notAuth;
private String uniCode; private Set<Long> parentIds;
/** private String uniCode;
* 客户端版本号
* 在根据版本号查询菜单树限的时候需要 /**
*/ * 客户端版本号
private Integer version; * 在根据版本号查询菜单树限的时候需要
*/
/** private Integer version;
* 1展示
* 0隐藏 /**
* FeatureResourceStatus * 1展示
*/ * 0隐藏
private Integer status; * FeatureResourceStatus
} */
} private Integer status;
}
}

View File

@ -183,12 +183,21 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
return navTreeList.stream().filter(t -> Objects.equals(t.getParentId(), root.getId())).collect(Collectors.toList()); return navTreeList.stream().filter(t -> Objects.equals(t.getParentId(), root.getId())).collect(Collectors.toList());
} }
private boolean isGATerminal(String terminal) {
if (Objects.isNull(terminal)) {
return false;
}
TerminalInfo tm = new TerminalInfo(terminal);
return tm.isGA();
}
@Override @Override
public boolean hasPermission(PermissionCheckReq req) { public boolean hasPermission(PermissionCheckReq req) {
//这里暂时硬编码-非OMS端鉴权请求 直接转老接口处理 //这里暂时硬编码-非OMS端鉴权请求 直接转老接口处理
if (!StrUtil.equals("NT_OMS_WEB" ,req.getTerminal()) if (!StrUtil.equals("NT_OMS_WEB" ,req.getTerminal())
&& !Objects.equals(TerminalInfo.NT_PC_GA_GENERAL, req.getTerminal())) { && !isGATerminal(req.getTerminal())) {
// 为了兼容用户没有在企业中但是需要看到企业类型的菜单在调用相关接口时忽略这些菜单的鉴权 // 为了兼容用户没有在企业中但是需要看到企业类型的菜单在调用相关接口时忽略这些菜单的鉴权
if (CollectionUtils.isNotEmpty(notAuthUniCodes)) { if (CollectionUtils.isNotEmpty(notAuthUniCodes)) {

View File

@ -4,7 +4,6 @@ import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.basics.profiles.api.UserProfileServiceApi; import cn.axzo.basics.profiles.api.UserProfileServiceApi;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.framework.auth.domain.TerminalInfo;
import cn.axzo.framework.domain.page.PageResp; import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.framework.domain.web.result.ApiResult;
@ -78,6 +77,10 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class ProductServiceImpl implements ProductService { public class ProductServiceImpl implements ProductService {
/** 政务端前缀 **/
private static final String PREFIX_TERMINAL_GA = "NT_PC_GA_";
private final ProductModuleDao productModuleDao; private final ProductModuleDao productModuleDao;
private final ProductFeatureRelationService productFeatureRelationService; private final ProductFeatureRelationService productFeatureRelationService;
private final SaasFeatureResourceService saasFeatureResourceService; private final SaasFeatureResourceService saasFeatureResourceService;
@ -290,7 +293,7 @@ public class ProductServiceImpl implements ProductService {
@Override @Override
public ApiResult<List<GovernmentTerminalResp>> getGovernmentTerminal(String terminal) { public ApiResult<List<GovernmentTerminalResp>> getGovernmentTerminal(String terminal) {
List<SaasFeatureResource> featureResources = saasFeatureResourceService.listByParentIdAndTerminalAndIds(0L, terminal, null); List<SaasFeatureResource> featureResources = saasFeatureResourceService.listByParentIdAndBlurTerminalAndIds(0L, terminal, null);
List<GovernmentTerminalResp> resps = CollectionUtil.isEmpty(featureResources) ? Collections.emptyList() : featureResources.stream().map(e -> GovernmentTerminalResp.builder() List<GovernmentTerminalResp> resps = CollectionUtil.isEmpty(featureResources) ? Collections.emptyList() : featureResources.stream().map(e -> GovernmentTerminalResp.builder()
.featureResourceId(e.getId()) .featureResourceId(e.getId())
.featureResourceName(e.getFeatureName()) .featureResourceName(e.getFeatureName())
@ -405,7 +408,7 @@ public class ProductServiceImpl implements ProductService {
List<SaasFeatureResource> saasFeatureResources = saasFeatureResourceService.listByParentIdAndTerminalAndIds(null, null, rootFeatureIds); List<SaasFeatureResource> saasFeatureResources = saasFeatureResourceService.listByParentIdAndTerminalAndIds(null, null, rootFeatureIds);
AssertUtil.notEmpty(saasFeatureResources, "功能范围选择端不能为空"); AssertUtil.notEmpty(saasFeatureResources, "功能范围选择端不能为空");
saasFeatureResources.forEach(e -> { saasFeatureResources.forEach(e -> {
AssertUtil.isTrue(e.getParentId() == 0 && TerminalInfo.NT_PC_GA_GENERAL.equals(e.getTerminal()), "功能范围选择端有误"); AssertUtil.isTrue(e.getParentId() == 0 && e.getTerminal().startsWith(PREFIX_TERMINAL_GA), "功能范围选择端有误");
}); });
List<SaasFeatureResource> frs = saasFeatureResourceService.batchListDescendant(rootFeatureIds); List<SaasFeatureResource> frs = saasFeatureResourceService.batchListDescendant(rootFeatureIds);
@ -471,7 +474,7 @@ public class ProductServiceImpl implements ProductService {
} }
product.setRelationType(result.getData().get(0).getType()); product.setRelationType(result.getData().get(0).getType());
List<Long> featureIds = result.getData().stream().map(ProductFeatureRelationVO::getFeatureId).collect(Collectors.toList()); List<Long> featureIds = result.getData().stream().map(ProductFeatureRelationVO::getFeatureId).collect(Collectors.toList());
List<SaasFeatureResource> featureResources = saasFeatureResourceService.listByParentIdAndTerminalAndIds(0L, TerminalInfo.NT_PC_GA_GENERAL, featureIds); List<SaasFeatureResource> featureResources = saasFeatureResourceService.listByParentIdAndBlurTerminalAndIds(0L, PREFIX_TERMINAL_GA, featureIds);
if (CollectionUtil.isNotEmpty(featureResources)) { if (CollectionUtil.isNotEmpty(featureResources)) {
product.setFeatureScopes(featureResources.stream().map(e -> ProductVO.FeatureScope.builder() product.setFeatureScopes(featureResources.stream().map(e -> ProductVO.FeatureScope.builder()
.governmentFeatureResourceId(e.getId()) .governmentFeatureResourceId(e.getId())

View File

@ -602,6 +602,16 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
.list(); .list();
} }
@Override
public List<SaasFeatureResource> listByParentIdAndBlurTerminalAndIds(Long parentId, String terminal, List<Long> featureIds) {
return featureResourceDao.lambdaQuery()
.eq(BaseEntity::getIsDelete, 0)
.eq(Objects.nonNull(parentId), SaasFeatureResource::getParentId, parentId)
.likeRight(StringUtils.isNotBlank(terminal), SaasFeatureResource::getTerminal, terminal)
.in(CollectionUtil.isNotEmpty(featureIds), SaasFeatureResource::getId, featureIds)
.list();
}
@Override @Override
public List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param) { public List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param) {
return PageConverter.drainAll(pageNumber -> { return PageConverter.drainAll(pageNumber -> {