From 7107a8364c57946044faeac5025df9d8ae12a69f 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 15:59:42 +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 --- .../PermissionRelationOperateLogTypeEnum.java | 36 ++++++++++ ...PermissionRelationOperateLogOperateDO.java | 35 ++++++++++ ...PgroupPermissionRelationOperateLogDao.java | 12 ++++ ...aasPgroupPermissionRelationOperateLog.java | 45 ++++++++++++ ...oupPermissionRelationOperateLogMapper.java | 11 +++ ...upPermissionRelationOperateLogService.java | 15 ++++ .../SaasPgroupPermissionRelationService.java | 11 +++ .../impl/FeatureResourceSyncServiceImpl.java | 32 +++++++-- .../server/service/impl/RoleServiceImpl.java | 68 +++++++++++++------ ...rmissionRelationOperateLogServiceImpl.java | 33 +++++++++ ...asPgroupPermissionRelationServiceImpl.java | 45 ++++++++++-- 11 files changed, 312 insertions(+), 31 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogTypeEnum.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasPgroupPermissionRelationOperateLogOperateDO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationOperateLogDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationOperateLogMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationOperateLogService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationOperateLogServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogTypeEnum.java new file mode 100644 index 00000000..ee14434f --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/PermissionRelationOperateLogTypeEnum.java @@ -0,0 +1,36 @@ +package cn.axzo.tyr.client.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/7/24 + */ +@Getter +@AllArgsConstructor +public enum PermissionRelationOperateLogTypeEnum { + + /** + * 同步 + */ + SYNC("SYNC", "同步"), + + /** + * oms后台更新资源绑定的角色 + */ + OMS_FEATURE_RESOURCE_BIND_ROLE("OMS_FEATURE_RESOURCE_BIND_ROLE", "oms后台更新资源绑定的角色"), + + /** + * oms后台更新角色绑定资源绑定的 + */ + OMS_ROLE_BIND_FEATURE_RESOURCE("OMS_ROLE_BIND_FEATURE_RESOURCE", "oms后台更新角色绑定的资源"), + + ; + + @EnumValue + private final String value; + private final String desc; +} \ No newline at end of file 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/SaasPgroupPermissionRelationOperateLogOperateDO.java new file mode 100644 index 00000000..c6964fb8 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/SaasPgroupPermissionRelationOperateLogOperateDO.java @@ -0,0 +1,35 @@ +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 SaasPgroupPermissionRelationOperateLogOperateDO { + + /** + * 资源ID列表 + */ + private Long featureId; + + /** + * 组ID列表 + */ + private List groupIds; + + /** + * 角色code列表 + */ + private List roleCodes; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationOperateLogDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationOperateLogDao.java new file mode 100644 index 00000000..798ebac6 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationOperateLogDao.java @@ -0,0 +1,12 @@ +package cn.axzo.tyr.server.repository.dao; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog; +import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationOperateLogMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasPgroupPermissionRelationOperateLogDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java new file mode 100644 index 00000000..fc0e8560 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java @@ -0,0 +1,45 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/7/24 + */ +@Getter +@Setter +@Builder +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_pgroup_permission_relation_operate_log") +public class SaasPgroupPermissionRelationOperateLog extends BaseEntity { + + /** + * 操作类型 + * @see cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogTypeEnum + */ + private String type; + + /** + * 请求ID + */ + private String traceId; + + /** + * 请求参数数据 + */ + private String requestData; + + /** + * 操作后数据 + */ + private String operateData; + + /** + * 创建者 + */ + private Long createBy; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationOperateLogMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationOperateLogMapper.java new file mode 100644 index 00000000..33e43629 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationOperateLogMapper.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasPgroupPermissionRelationOperateLogMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationOperateLogService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationOperateLogService.java new file mode 100644 index 00000000..a25d2b74 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationOperateLogService.java @@ -0,0 +1,15 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog; + +import java.util.List; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/7/24 + */ +public interface SaasPgroupPermissionRelationOperateLogService { + + void batchSave(List logs); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java index 3651d466..4927926f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.foundation.page.PageResp; import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq; +import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import com.baomidou.mybatisplus.extension.service.IService; import lombok.AllArgsConstructor; @@ -41,6 +42,16 @@ public interface SaasPgroupPermissionRelationService extends IService roleCodes, Long operatorId) { + SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() + .featureId(featureResource.getId()) + .roleCodes(roleCodes) + .build(); + SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() + .type(PermissionRelationOperateLogTypeEnum.SYNC.getValue()) + .createBy(operatorId) + .traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) + .operateData(JSONObject.toJSONString(operateAfter)) + .build(); + + saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); + } } 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 e3ad93f7..7a3cdcaa 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 @@ -6,6 +6,7 @@ import cn.axzo.foundation.dao.support.converter.PageConverter; import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogTypeEnum; import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; @@ -37,10 +38,7 @@ import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO; import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; -import cn.axzo.tyr.server.model.ResourcePermission; -import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO; -import cn.axzo.tyr.server.model.RoleFeatureRelation; -import cn.axzo.tyr.server.model.RoleWithFeature; +import cn.axzo.tyr.server.model.*; import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; @@ -49,24 +47,10 @@ import cn.axzo.tyr.server.repository.dao.SaasRoleDao; import cn.axzo.tyr.server.repository.dao.SaasRoleGroupDao; import cn.axzo.tyr.server.repository.dao.SaasRoleGroupRelationDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; -import cn.axzo.tyr.server.repository.entity.SaasFeature; -import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; -import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; -import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.entity.SaasRole; -import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; -import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; -import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser; +import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; -import cn.axzo.tyr.server.service.PermissionGroupService; -import cn.axzo.tyr.server.service.RoleService; -import cn.axzo.tyr.server.service.SaasFeatureResourceService; -import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; -import cn.axzo.tyr.server.service.SaasRoleGroupRelationService; -import cn.axzo.tyr.server.service.SaasRoleGroupService; -import cn.axzo.tyr.server.service.SaasRoleUserRelationService; +import cn.axzo.tyr.server.service.*; +import cn.azxo.framework.common.constatns.Constants; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; @@ -74,6 +58,7 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Pair; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -90,6 +75,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -163,6 +149,8 @@ public class RoleServiceImpl extends ServiceImpl SaasFeatureResourceService saasFeatureResourceService; @Autowired private SaasRoleUserRelationService saasRoleUserRelationService; + @Autowired + private SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService; @Value("${groupLeader.code:projectTeamGPLeader}") private String groupLeaderCode; @@ -447,6 +435,8 @@ public class RoleServiceImpl extends ServiceImpl .groupIds(Lists.newArrayList(saasPermissionGroup.getId())) .relations(pgpRelations) .type(NEW_FEATURE) + .operatorId(saveOrUpdateRole.getOperatorId()) + .requestData(saveOrUpdateRole) .build(); saasPgroupPermissionRelationService.saveOrUpdate(upsertPermissionRelationParam); } @@ -1304,6 +1294,8 @@ public class RoleServiceImpl extends ServiceImpl saasFeatureResourceService.updateFeatureAuthType(item.getFeatureId(), item.getAuthType()); if (CollectionUtil.isEmpty(item.getRoleIds()) || item.getAuthType() == 0) { saasPgroupPermissionRelationDao.removeByPermissionPointIds(Collections.singletonList(item.getFeatureId())); + // 记录操作日志 + saveOperateLog(item.getFeatureId(), operatorId, req); } else { List existGroupIds = saasPgroupPermissionRelationDao.queryByFeatureIds(Collections.singletonList(item.getFeatureId())) .stream().map(SaasPgroupPermissionRelation::getGroupId).collect(Collectors.toList()); @@ -1312,7 +1304,8 @@ public class RoleServiceImpl extends ServiceImpl .stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList()); List insertGroupIds = groupIds.stream().filter(role -> !existGroupIds.contains(role)).collect(Collectors.toList()); List deleteGroupIds = existGroupIds.stream().filter(role -> !groupIds.contains(role)).collect(Collectors.toList()); - + // 记录操作日志 + saveOperateLog(item.getFeatureId(), operatorId, groupIds, req); // 新增的 if (CollectionUtils.isNotEmpty(insertGroupIds)) { List insertRelation = new ArrayList<>(); @@ -1500,6 +1493,37 @@ public class RoleServiceImpl extends ServiceImpl Collectors.toList()))); } + private void saveOperateLog(Long featureId, Long operatorId, List req) { + SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() + .featureId(featureId) + .build(); + SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() + .type(PermissionRelationOperateLogTypeEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue()) + .createBy(operatorId) + .traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) + .requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req)) + .operateData(JSONObject.toJSONString(operateAfter)) + .build(); + + saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); + } + + private void saveOperateLog(Long featureId, Long operatorId, List afterGroupIds, List req) { + SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() + .featureId(featureId) + .groupIds(afterGroupIds) + .build(); + SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() + .type(PermissionRelationOperateLogTypeEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue()) + .createBy(operatorId) + .traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) + .requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req)) + .operateData(JSONObject.toJSONString(operateAfter)) + .build(); + + saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); + } + @Data @Builder @NoArgsConstructor diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationOperateLogServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationOperateLogServiceImpl.java new file mode 100644 index 00000000..9969f30d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationOperateLogServiceImpl.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationOperateLogDao; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog; +import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/7/24 + */ +@Slf4j +@Service +@AllArgsConstructor +public class SaasPgroupPermissionRelationOperateLogServiceImpl implements SaasPgroupPermissionRelationOperateLogService { + + private final SaasPgroupPermissionRelationOperateLogDao saasPgroupPermissionRelationOperateLogDao; + + @Override + public void batchSave(List logs) { + if (CollectionUtils.isEmpty(logs)) { + return; + } + + saasPgroupPermissionRelationOperateLogDao.saveBatch(logs); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index 92a3a2e3..331657c6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -6,12 +6,19 @@ import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.foundation.page.PageResp; import cn.axzo.framework.auth.domain.TerminalInfo; import cn.axzo.tyr.client.common.enums.FeatureResourceType; +import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogTypeEnum; import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq; +import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; +import cn.axzo.tyr.server.model.SaasPgroupPermissionRelationOperateLogOperateDO; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog; import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper; +import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; +import cn.azxo.framework.common.constatns.Constants; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -19,14 +26,12 @@ import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.slf4j.MDC; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -39,6 +44,7 @@ public class SaasPgroupPermissionRelationServiceImpl extends ServiceImpl implements SaasPgroupPermissionRelationService { private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService; @Override @Transactional(rollbackFor = Exception.class) @@ -71,6 +77,9 @@ public class SaasPgroupPermissionRelationServiceImpl if (CollectionUtils.isNotEmpty(deleteList)) { saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList())); } + + // 记录操作日志 + saveOperateLog(param.getOperatorId(), param.getRequestData(), relations); } @Override @@ -113,4 +122,32 @@ public class SaasPgroupPermissionRelationServiceImpl } this.removeByIds(param.getIds()); } + + private void saveOperateLog(Long operatorId, SaveOrUpdateRoleVO requestData, List newRelations) { + if (Objects.isNull(operatorId)) { + return; + } + + Map> newFeatureResourceIdMap = newRelations.stream() + .collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getFeatureId, + Collectors.mapping(SaasPgroupPermissionRelation::getGroupId, Collectors.toList()))); + + List operateLogs = Lists.newArrayList(); + newFeatureResourceIdMap.entrySet().forEach(e -> { + Long featureId = e.getKey(); + SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() + .featureId(featureId) + .groupIds(e.getValue()) + .build(); + SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() + .type(PermissionRelationOperateLogTypeEnum.OMS_ROLE_BIND_FEATURE_RESOURCE.getValue()) + .createBy(operatorId) + .traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) + .requestData(Objects.isNull(requestData) ? null : JSONObject.toJSONString(requestData)) + .operateData(JSONObject.toJSONString(operateAfter)) + .build(); + operateLogs.add(operateLog); + }); + saasPgroupPermissionRelationOperateLogService.batchSave(operateLogs); + } }