From 45e01d07bdd940c011150eade3a1a269758cbae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Wed, 24 Jul 2024 21:10:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(REQ-2545):=20=E8=AE=B0=E5=BD=95=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E7=BB=91=E5=AE=9A=E8=A7=92=E8=89=B2=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...PermissionRelationOperateLogSceneEnum.java | 5 +++ ...lationOperateLogResourceBindElementDO.java | 30 ++++++++++++++ ...RelationOperateLogResourceBindRoleDO.java} | 4 +- .../RelationOperateLogRoleBindResourceDO.java | 30 ++++++++++++++ .../impl/FeatureResourceSyncServiceImpl.java | 14 +++---- .../server/service/impl/RoleServiceImpl.java | 14 +++---- .../impl/SaasPageElementServiceImpl.java | 41 +++++++++++++++++-- 7 files changed, 118 insertions(+), 20 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindElementDO.java rename tyr-server/src/main/java/cn/axzo/tyr/server/model/{SaasPgroupPermissionRelationOperateLogOperateDO.java => RelationOperateLogResourceBindRoleDO.java} (79%) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogRoleBindResourceDO.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogSceneEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogSceneEnum.java index 171f7507..c2dd7696 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogSceneEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogSceneEnum.java @@ -28,6 +28,11 @@ public enum PermissionRelationOperateLogSceneEnum { */ OMS_ROLE_BIND_FEATURE_RESOURCE("OMS_ROLE_BIND_FEATURE_RESOURCE", "oms后台更新角色绑定的资源"), + /** + * oms后台更新资源绑定的页面元素 + */ + OMS_FEATURE_RESOURCE_BIND_ELEMENT("OMS_FEATURE_RESOURCE_BIND_ELEMENT", "oms后台更新资源绑定的页面元素"), + ; @EnumValue diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindElementDO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindElementDO.java new file mode 100644 index 00000000..2921d591 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindElementDO.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.server.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/7/24 + */ +@Builder +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RelationOperateLogResourceBindElementDO { + + /** + * 资源编码 + */ + private String uniCode; + + /** + * 页面元素code列表 + */ + private List featureCodes; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasPgroupPermissionRelationOperateLogOperateDO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindRoleDO.java similarity index 79% rename from tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasPgroupPermissionRelationOperateLogOperateDO.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindRoleDO.java index 7238ff7d..59376644 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasPgroupPermissionRelationOperateLogOperateDO.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogResourceBindRoleDO.java @@ -16,12 +16,12 @@ import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class SaasPgroupPermissionRelationOperateLogOperateDO { +public class RelationOperateLogResourceBindRoleDO { /** * 资源编码 */ - private List featureCodes; + private String uniCode; /** * 角色code列表 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogRoleBindResourceDO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogRoleBindResourceDO.java new file mode 100644 index 00000000..db7fddb5 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RelationOperateLogRoleBindResourceDO.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.server.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/7/24 + */ +@Builder +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RelationOperateLogRoleBindResourceDO { + + /** + * 资源编码 + */ + private List uniCodes; + + /** + * 角色code + */ + private String roleCode; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java index b82d18df..25c11749 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java @@ -12,7 +12,7 @@ import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq; import cn.axzo.tyr.client.model.req.ResourceSyncReq; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.server.inner.feign.BaseFeatureResourceApi; -import cn.axzo.tyr.server.model.SaasPgroupPermissionRelationOperateLogOperateDO; +import cn.axzo.tyr.server.model.RelationOperateLogResourceBindRoleDO; import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao; import cn.axzo.tyr.server.repository.dao.SaasPageElementFeatureResourceRelationDao; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; @@ -126,7 +126,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic } private void doSyncFromBase(ResourceSyncReq req) { - List operateDos = Lists.newCopyOnWriteArrayList(); + List operateDos = Lists.newCopyOnWriteArrayList(); //TODO:@Zhan 并发处理;同一个parent下同批查询 //处理数据缓存:避免同级节点上级重复处理 - 上级code查询 final Map codeCache = new ConcurrentHashMap<>(); @@ -172,7 +172,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic return featureResourceIdCodeMap; } - private void syncResourceProcess(List syncList, Map codeCache, Long operatorId, List operateDos) { + private void syncResourceProcess(List syncList, Map codeCache, Long operatorId, List operateDos) { for (FeatureResourceTreeNode treeNode : syncList) { if (codeCache.containsKey(treeNode.getId())) { @@ -243,7 +243,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic } } - private void doFeatureResourceRole(SaasFeatureResource featureResource, List roleCodes, Long operatorId, List operateDos) { + private void doFeatureResourceRole(SaasFeatureResource featureResource, List roleCodes, Long operatorId, List operateDos) { if (Objects.isNull(featureResource)) { return; } @@ -260,8 +260,8 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic } // 操作日志 - operateDos.add(SaasPgroupPermissionRelationOperateLogOperateDO.builder() - .featureCodes(Lists.newArrayList(featureResource.getUniCode())) + operateDos.add(RelationOperateLogResourceBindRoleDO.builder() + .uniCode(featureResource.getUniCode()) .roleCodes(roleCodes) .build()); @@ -355,7 +355,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic } - private void saveOperateLog(ResourceSyncReq req, List operateDos) { + private void saveOperateLog(ResourceSyncReq req, List operateDos) { List personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperatorId())), "查询用户信息", req.getOperatorId()).getData(); PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0); 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 a2bfe754..0fba54fc 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 @@ -1503,8 +1503,8 @@ public class RoleServiceImpl extends ServiceImpl List personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(operatorId)), "查询用户信息", operatorId).getData(); PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0); - SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() - .featureCodes(Lists.newArrayList(saasFeatureResource.getUniCode())) + RelationOperateLogResourceBindRoleDO operateAfter = RelationOperateLogResourceBindRoleDO.builder() + .uniCode(saasFeatureResource.getUniCode()) .build(); SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() .scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue()) @@ -1528,8 +1528,8 @@ public class RoleServiceImpl extends ServiceImpl PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0); List saasRoles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); - SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() - .featureCodes(Lists.newArrayList(saasFeatureResource.getUniCode())) + RelationOperateLogResourceBindRoleDO operateAfter = RelationOperateLogResourceBindRoleDO.builder() + .uniCode(saasFeatureResource.getUniCode()) .roleCodes(saasRoles.stream().map(SaasRole::getRoleCode).collect(Collectors.toList())) .build(); SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() @@ -1552,9 +1552,9 @@ public class RoleServiceImpl extends ServiceImpl uniCodes = saasFeatureResourceDao.lambdaQuery().in(BaseEntity::getId, saveOrUpdateRole.getPermissionIds()).list().stream().map(SaasFeatureResource::getUniCode).collect(Collectors.toList()); } - SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() - .featureCodes(uniCodes) - .roleCodes(Lists.newArrayList(saasRole.getRoleCode())) + RelationOperateLogRoleBindResourceDO operateAfter = RelationOperateLogRoleBindResourceDO.builder() + .uniCodes(uniCodes) + .roleCode(saasRole.getRoleCode()) .build(); SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() .scene(PermissionRelationOperateLogSceneEnum.OMS_ROLE_BIND_FEATURE_RESOURCE.getValue()) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java index 634f4753..fdfa806b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java @@ -3,26 +3,32 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.basics.common.util.StopWatchUtil; +import cn.axzo.basics.profiles.api.UserProfileServiceApi; +import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.FeatureResourceType; import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum; import cn.axzo.tyr.client.common.enums.PageElementTypeEnum; +import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum; import cn.axzo.tyr.client.model.req.*; import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp; import cn.axzo.tyr.client.model.res.IdentityAuthRes; import cn.axzo.tyr.client.model.res.PageElementBasicDTO; import cn.axzo.tyr.client.model.res.PageElementResp; +import cn.axzo.tyr.server.model.RelationOperateLogResourceBindElementDO; +import cn.axzo.tyr.server.model.RelationOperateLogResourceBindRoleDO; import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao; import cn.axzo.tyr.server.repository.dao.SaasPageElementDao; import cn.axzo.tyr.server.repository.dao.SaasPageElementFeatureResourceRelationDao; -import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; -import cn.axzo.tyr.server.repository.entity.SaasPageElement; -import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation; -import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; +import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.service.SaasPageElementService; +import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService; import cn.axzo.tyr.server.service.TyrSaasAuthService; +import cn.axzo.tyr.server.util.RpcInternalUtil; +import cn.azxo.framework.common.constatns.Constants; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; @@ -31,6 +37,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; @@ -59,6 +66,8 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao; private final SaasFeatureResourceDao saasFeatureResourceDao; private final TyrSaasAuthService tyrSaasAuthService; + private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService; + private final UserProfileServiceApi userProfileServiceApi; @Qualifier("asyncExecutor") @Autowired @@ -163,6 +172,9 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { .build()).collect(Collectors.toList()); saasPageElementFeatureResourceRelationDao.saveBatch(relations); } + + // 保存操作日志 + saveOperateLog(modifyPageElementRelation); } @Override @@ -387,4 +399,25 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { .and(w -> pageResources.forEach(p -> w.or().likeRight(SaasFeatureResource::getPath, p.getPath()))) .list(); } + + private void saveOperateLog(ModifyPageElementRelationDTO relation) { + List personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(relation.getOperatorId())), "查询用户信息", relation.getOperatorId()).getData(); + PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0); + + RelationOperateLogResourceBindElementDO operateAfter = RelationOperateLogResourceBindElementDO.builder() + .uniCode(relation.getFeatureResourceUniCode()) + .featureCodes(relation.getPageElementCodes()) + .build(); + SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() + .scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ELEMENT.getValue()) + .sceneId(relation.getFeatureResourceUniCode()) + .createBy(relation.getOperatorId()) + .createByName(Objects.isNull(operator) ? "" : operator.getRealName()) + .traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) + .requestData(JSONObject.toJSONString(relation)) + .operateData(JSONObject.toJSONString(Lists.newArrayList(operateAfter))) + .build(); + + saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); + } }