fix(REQ-2545): 记录菜单绑定角色关系的日志

This commit is contained in:
李昆鹏 2024-07-24 18:30:29 +08:00
parent 7107a8364c
commit 6952d6f4ef
6 changed files with 110 additions and 88 deletions

View File

@ -11,7 +11,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum PermissionRelationOperateLogTypeEnum { public enum PermissionRelationOperateLogSceneEnum {
/** /**
* 同步 * 同步

View File

@ -19,14 +19,9 @@ import java.util.List;
public class SaasPgroupPermissionRelationOperateLogOperateDO { public class SaasPgroupPermissionRelationOperateLogOperateDO {
/** /**
* 资源ID列表 * 资源编码
*/ */
private Long featureId; private List<String> featureCodes;
/**
* 组ID列表
*/
private List<Long> groupIds;
/** /**
* 角色code列表 * 角色code列表

View File

@ -1,6 +1,7 @@
package cn.axzo.tyr.server.repository.entity; package cn.axzo.tyr.server.repository.entity;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*; import lombok.*;
@ -18,10 +19,15 @@ import lombok.*;
public class SaasPgroupPermissionRelationOperateLog extends BaseEntity<SaasPgroupPermissionRelationOperateLog> { public class SaasPgroupPermissionRelationOperateLog extends BaseEntity<SaasPgroupPermissionRelationOperateLog> {
/** /**
* 操作类型 * 操作场景
* @see cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogTypeEnum * @see PermissionRelationOperateLogSceneEnum
*/ */
private String type; private String scene;
/**
* 操作场景ID
*/
private String sceneId;
/** /**
* 请求ID * 请求ID
@ -42,4 +48,9 @@ public class SaasPgroupPermissionRelationOperateLog extends BaseEntity<SaasPgrou
* 创建者 * 创建者
*/ */
private Long createBy; private Long createBy;
/**
* 操作人名
*/
private String createByName;
} }

View File

@ -3,9 +3,11 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.constant.enums.DeleteEnum; import cn.axzo.basics.common.constant.enums.DeleteEnum;
import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.basics.common.util.TreeUtil;
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.FeatureResourceType; import cn.axzo.tyr.client.common.enums.FeatureResourceType;
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogTypeEnum; import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq; import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
import cn.axzo.tyr.client.model.req.ResourceSyncReq; import cn.axzo.tyr.client.model.req.ResourceSyncReq;
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
@ -73,6 +75,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao; private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao;
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService; private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
private final UserProfileServiceApi userProfileServiceApi;
@Qualifier("asyncExecutor") @Qualifier("asyncExecutor")
@Autowired @Autowired
@ -123,6 +126,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
} }
private void doSyncFromBase(ResourceSyncReq req) { private void doSyncFromBase(ResourceSyncReq req) {
List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos = Lists.newCopyOnWriteArrayList();
//TODO:@Zhan 并发处理同一个parent下同批查询 //TODO:@Zhan 并发处理同一个parent下同批查询
//处理数据缓存避免同级节点上级重复处理 - 上级code查询 //处理数据缓存避免同级节点上级重复处理 - 上级code查询
final Map<Long, String> codeCache = new ConcurrentHashMap<>(); final Map<Long, String> codeCache = new ConcurrentHashMap<>();
@ -131,8 +135,11 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
//获取基准环境配置数据:同步某个ID的数据 需要同步处理它所有上级及下级组件 //获取基准环境配置数据:同步某个ID的数据 需要同步处理它所有上级及下级组件
List<FeatureResourceTreeNode> syncList = RpcInternalUtil.rpcProcessor(() -> baseFeatureResourceApi.getSyncTreeById(id), List<FeatureResourceTreeNode> syncList = RpcInternalUtil.rpcProcessor(() -> baseFeatureResourceApi.getSyncTreeById(id),
"get base sync tree by id", id).getData(); "get base sync tree by id", id).getData();
syncResourceProcess(syncList, codeCache, req.getOperatorId()); syncResourceProcess(syncList, codeCache, req.getOperatorId(), operateDos);
} }
// 记录操作日志
saveOperateLog(req, operateDos);
} }
@Override @Override
@ -165,7 +172,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
return featureResourceIdCodeMap; return featureResourceIdCodeMap;
} }
private void syncResourceProcess(List<FeatureResourceTreeNode> syncList, Map<Long, String> codeCache, Long operatorId) { private void syncResourceProcess(List<FeatureResourceTreeNode> syncList, Map<Long, String> codeCache, Long operatorId, List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos) {
for (FeatureResourceTreeNode treeNode : syncList) { for (FeatureResourceTreeNode treeNode : syncList) {
if (codeCache.containsKey(treeNode.getId())) { if (codeCache.containsKey(treeNode.getId())) {
@ -173,7 +180,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
log.info("already sync resource:{}", treeNode.getId()); log.info("already sync resource:{}", treeNode.getId());
//递归子节点 //递归子节点
if (CollectionUtils.isNotEmpty(treeNode.getChildren())) { if (CollectionUtils.isNotEmpty(treeNode.getChildren())) {
syncResourceProcess(treeNode.getChildren(), codeCache, operatorId); syncResourceProcess(treeNode.getChildren(), codeCache, operatorId, operateDos);
} }
continue; continue;
} }
@ -208,11 +215,11 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
} }
// 处理资源关联的权限 // 处理资源关联的权限
doFeatureResourceRole(baseResource, treeNode.getRoleCodes(), operatorId); doFeatureResourceRole(baseResource, treeNode.getRoleCodes(), operatorId, operateDos);
//递归子节点 //递归子节点
if (CollectionUtils.isNotEmpty(treeNode.getChildren())) { if (CollectionUtils.isNotEmpty(treeNode.getChildren())) {
syncResourceProcess(treeNode.getChildren(), codeCache, operatorId); syncResourceProcess(treeNode.getChildren(), codeCache, operatorId, operateDos);
} }
} }
} }
@ -236,7 +243,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
} }
} }
private void doFeatureResourceRole(SaasFeatureResource featureResource, List<String> roleCodes, Long operatorId) { private void doFeatureResourceRole(SaasFeatureResource featureResource, List<String> roleCodes, Long operatorId, List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos) {
if (Objects.isNull(featureResource)) { if (Objects.isNull(featureResource)) {
return; return;
} }
@ -252,8 +259,11 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
saasPgroupPermissionRelationDao.removeByFeatureIdAndGroupIds(featureResource.getId(), existPermissionRelations.stream().map(SaasPgroupPermissionRelation::getGroupId).collect(Collectors.toList()), operatorId); saasPgroupPermissionRelationDao.removeByFeatureIdAndGroupIds(featureResource.getId(), existPermissionRelations.stream().map(SaasPgroupPermissionRelation::getGroupId).collect(Collectors.toList()), operatorId);
} }
// 记录操作日志 // 操作日志
saveOperateLog(featureResource, roleCodes, operatorId); operateDos.add(SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureCodes(Lists.newArrayList(featureResource.getUniCode()))
.roleCodes(roleCodes)
.build());
if (CollectionUtils.isEmpty(roleCodes)) { if (CollectionUtils.isEmpty(roleCodes)) {
return; return;
@ -344,18 +354,19 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
return featureRoleMap; return featureRoleMap;
} }
private void saveOperateLog(SaasFeatureResource featureResource, List<String> 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();
private void saveOperateLog(ResourceSyncReq req, List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos) {
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperatorId())), "查询用户信息", req.getOperatorId()).getData();
PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.scene(PermissionRelationOperateLogSceneEnum.SYNC.getValue())
.createBy(req.getOperatorId())
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
.requestData(JSONObject.toJSONString(req))
.operateData(JSONObject.toJSONString(operateDos))
.build();
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
} }
} }

View File

@ -2,11 +2,13 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.foundation.dao.support.converter.PageConverter; import cn.axzo.foundation.dao.support.converter.PageConverter;
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.framework.domain.page.PageResp; import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogTypeEnum; import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum; import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum;
import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.IdentityType;
@ -39,17 +41,11 @@ import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO;
import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO;
import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO;
import cn.axzo.tyr.server.model.*; import cn.axzo.tyr.server.model.*;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import cn.axzo.tyr.server.repository.dao.*;
import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao;
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.*; import cn.axzo.tyr.server.repository.entity.*;
import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper;
import cn.axzo.tyr.server.service.*; import cn.axzo.tyr.server.service.*;
import cn.axzo.tyr.server.util.RpcInternalUtil;
import cn.azxo.framework.common.constatns.Constants; import cn.azxo.framework.common.constatns.Constants;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
@ -151,6 +147,10 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
private SaasRoleUserRelationService saasRoleUserRelationService; private SaasRoleUserRelationService saasRoleUserRelationService;
@Autowired @Autowired
private SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService; private SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
@Autowired
private UserProfileServiceApi userProfileServiceApi;
@Autowired
private SaasFeatureResourceDao saasFeatureResourceDao;
@Value("${groupLeader.code:projectTeamGPLeader}") @Value("${groupLeader.code:projectTeamGPLeader}")
private String groupLeaderCode; private String groupLeaderCode;
@ -1305,7 +1305,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
List<Long> insertGroupIds = groupIds.stream().filter(role -> !existGroupIds.contains(role)).collect(Collectors.toList()); List<Long> insertGroupIds = groupIds.stream().filter(role -> !existGroupIds.contains(role)).collect(Collectors.toList());
List<Long> deleteGroupIds = existGroupIds.stream().filter(role -> !groupIds.contains(role)).collect(Collectors.toList()); List<Long> deleteGroupIds = existGroupIds.stream().filter(role -> !groupIds.contains(role)).collect(Collectors.toList());
// 记录操作日志 // 记录操作日志
saveOperateLog(item.getFeatureId(), operatorId, groupIds, req); saveOperateLog(item.getFeatureId(), operatorId, item.getRoleIds(), req);
// 新增的 // 新增的
if (CollectionUtils.isNotEmpty(insertGroupIds)) { if (CollectionUtils.isNotEmpty(insertGroupIds)) {
List<SaasPgroupPermissionRelation> insertRelation = new ArrayList<>(); List<SaasPgroupPermissionRelation> insertRelation = new ArrayList<>();
@ -1494,12 +1494,21 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
} }
private void saveOperateLog(Long featureId, Long operatorId, List<FeatureRoleRelationReq.RelationRoleSettings> req) { private void saveOperateLog(Long featureId, Long operatorId, List<FeatureRoleRelationReq.RelationRoleSettings> req) {
SaasFeatureResource saasFeatureResource = saasFeatureResourceService.featureResourceById(featureId);
if (Objects.isNull(saasFeatureResource)) {
return;
}
List<PersonProfileDto> 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() SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureId(featureId) .featureCodes(Lists.newArrayList(saasFeatureResource.getUniCode()))
.build(); .build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.type(PermissionRelationOperateLogTypeEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue()) .scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue())
.sceneId(saasFeatureResource.getUniCode())
.createBy(operatorId) .createBy(operatorId)
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) .traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
.requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req)) .requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req))
.operateData(JSONObject.toJSONString(operateAfter)) .operateData(JSONObject.toJSONString(operateAfter))
@ -1508,14 +1517,24 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
} }
private void saveOperateLog(Long featureId, Long operatorId, List<Long> afterGroupIds, List<FeatureRoleRelationReq.RelationRoleSettings> req) { private void saveOperateLog(Long featureId, Long operatorId, List<Long> roleIds, List<FeatureRoleRelationReq.RelationRoleSettings> req) {
SaasFeatureResource saasFeatureResource = saasFeatureResourceService.featureResourceById(featureId);
if (Objects.isNull(saasFeatureResource)) {
return;
}
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(operatorId)), "查询用户信息", operatorId).getData();
PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
List<SaasRole> saasRoles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list();
SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder() SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureId(featureId) .featureCodes(Lists.newArrayList(saasFeatureResource.getUniCode()))
.groupIds(afterGroupIds) .roleCodes(saasRoles.stream().map(SaasRole::getRoleCode).collect(Collectors.toList()))
.build(); .build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.type(PermissionRelationOperateLogTypeEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue()) .scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue())
.sceneId(saasFeatureResource.getUniCode())
.createBy(operatorId) .createBy(operatorId)
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) .traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
.requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req)) .requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req))
.operateData(JSONObject.toJSONString(operateAfter)) .operateData(JSONObject.toJSONString(operateAfter))
@ -1524,6 +1543,29 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog)); saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
} }
private void saveOperateLog4RoleBindFeatureResource(SaveOrUpdateRoleVO saveOrUpdateRole) {
List<String> uniCodes = null;
if (CollectionUtils.isNotEmpty(saveOrUpdateRole.getPermissionIds())) {
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(saveOrUpdateRole.getRoleCode()))
.build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.scene(PermissionRelationOperateLogSceneEnum.OMS_ROLE_BIND_FEATURE_RESOURCE.getValue())
.sceneId(saveOrUpdateRole.getRoleCode())
.createBy(saveOrUpdateRole.getOperatorId())
.createByName(saveOrUpdateRole.getOperatorName())
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
.requestData(Objects.isNull(saveOrUpdateRole) ? null : JSONObject.toJSONString(saveOrUpdateRole))
.operateData(JSONObject.toJSONString(operateAfter))
.build();
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
}
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor

View File

@ -6,19 +6,12 @@ import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.framework.auth.domain.TerminalInfo; import cn.axzo.framework.auth.domain.TerminalInfo;
import cn.axzo.tyr.client.common.enums.FeatureResourceType; 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.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.dao.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; 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.repository.mapper.SaasPgroupPermissionRelationMapper;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService;
import cn.azxo.framework.common.constatns.Constants;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -26,12 +19,14 @@ import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.slf4j.MDC;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.*; import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -44,7 +39,6 @@ public class SaasPgroupPermissionRelationServiceImpl
extends ServiceImpl<SaasPgroupPermissionRelationMapper, SaasPgroupPermissionRelation> extends ServiceImpl<SaasPgroupPermissionRelationMapper, SaasPgroupPermissionRelation>
implements SaasPgroupPermissionRelationService { implements SaasPgroupPermissionRelationService {
private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao;
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -77,9 +71,6 @@ public class SaasPgroupPermissionRelationServiceImpl
if (CollectionUtils.isNotEmpty(deleteList)) { if (CollectionUtils.isNotEmpty(deleteList)) {
saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList())); saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList()));
} }
// 记录操作日志
saveOperateLog(param.getOperatorId(), param.getRequestData(), relations);
} }
@Override @Override
@ -122,32 +113,4 @@ public class SaasPgroupPermissionRelationServiceImpl
} }
this.removeByIds(param.getIds()); this.removeByIds(param.getIds());
} }
private void saveOperateLog(Long operatorId, SaveOrUpdateRoleVO requestData, List<SaasPgroupPermissionRelation> newRelations) {
if (Objects.isNull(operatorId)) {
return;
}
Map<Long, List<Long>> newFeatureResourceIdMap = newRelations.stream()
.collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getFeatureId,
Collectors.mapping(SaasPgroupPermissionRelation::getGroupId, Collectors.toList())));
List<SaasPgroupPermissionRelationOperateLog> 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);
}
} }