Merge branch 'hotfix/20240724-log' into 'master'
Hotfix/20240724 log See merge request universal/infrastructure/backend/tyr!89
This commit is contained in:
commit
d333091bbc
@ -0,0 +1,66 @@
|
||||
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 PermissionRelationOperateLogSceneEnum {
|
||||
|
||||
/**
|
||||
* oms同步
|
||||
*/
|
||||
OMS_SYNC("OMS_SYNC", "oms同步"),
|
||||
|
||||
/**
|
||||
* oms后台更新资源绑定的角色
|
||||
*/
|
||||
OMS_FEATURE_RESOURCE_BIND_ROLE("OMS_FEATURE_RESOURCE_BIND_ROLE", "oms后台更新资源绑定的角色"),
|
||||
|
||||
/**
|
||||
* oms后台更新角色绑定资源绑定的
|
||||
*/
|
||||
OMS_ROLE_BIND_FEATURE_RESOURCE("OMS_ROLE_BIND_FEATURE_RESOURCE", "oms后台更新角色绑定的资源"),
|
||||
|
||||
/**
|
||||
* oms后台更新资源绑定的页面元素
|
||||
*/
|
||||
OMS_FEATURE_RESOURCE_BIND_ELEMENT("OMS_FEATURE_RESOURCE_BIND_ELEMENT", "oms后台更新资源绑定的页面元素"),
|
||||
|
||||
/**
|
||||
* oms后台更新产品榜的资源
|
||||
*/
|
||||
OMS_PRODUCT_BIND_FEATURE_RESOURCE("OMS_PRODUCT_BIND_FEATURE_RESOURCE", "oms后台更新产品榜的资源"),
|
||||
|
||||
/**
|
||||
* oms后台添加API
|
||||
*/
|
||||
OMS_API_INSERT("OMS_API_INSERT", "oms后台添加API"),
|
||||
|
||||
/**
|
||||
* oms后台更新API
|
||||
*/
|
||||
OMS_API_UPDATE("OMS_API_UPDATE", "oms后台更新API"),
|
||||
|
||||
/**
|
||||
* oms后台删除API
|
||||
*/
|
||||
OMS_API_DELETE("OMS_API_DELETE", "oms后台删除API"),
|
||||
|
||||
/**
|
||||
* oms后台同步API
|
||||
*/
|
||||
OMS_API_SYNC("OMS_API_SYNC", "oms后台同步API"),
|
||||
|
||||
;
|
||||
|
||||
@EnumValue
|
||||
private final String value;
|
||||
private final String desc;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package cn.axzo.tyr.client.feign;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.req.PermissionOperateLogReq;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* @author likunpeng
|
||||
* @version 1.0
|
||||
* @date 2024/7/25
|
||||
*/
|
||||
@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}")
|
||||
public interface PermissionOperateLogApi {
|
||||
|
||||
/** API关联操作日志记录 **/
|
||||
@PostMapping("/api/permissionOperateLog/save")
|
||||
ApiResult<Void> save(@RequestBody @Valid PermissionOperateLogReq req);
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 创建新路由请求
|
||||
*
|
||||
* @version V1.0
|
||||
* @author: ZhanSiHu
|
||||
* @date: 2023/9/11 10:33
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PermissionOperateLogReq implements Serializable {
|
||||
|
||||
|
||||
@NotBlank(message = "表名不能为空")
|
||||
private String tableName;
|
||||
|
||||
@NotNull(message = "操作人ID不能为空")
|
||||
@Min(value = 1, message = "操作人ID有误")
|
||||
private Long operatorId;
|
||||
|
||||
@NotBlank(message = "场景不能为空")
|
||||
private String scene;
|
||||
|
||||
private String sceneId;
|
||||
|
||||
private Object requestData;
|
||||
|
||||
private Object operateData;
|
||||
}
|
||||
@ -29,4 +29,6 @@ public class ResourceSyncReq {
|
||||
/** 操作人personId **/
|
||||
@NotNull(message = "操作人ID不能为空")
|
||||
private Long operatorId;
|
||||
|
||||
private String traceId;
|
||||
}
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
package cn.axzo.tyr.server.config;
|
||||
|
||||
import cn.axzo.framework.auth.config.FeignContextInfoInterceptor;
|
||||
import cn.axzo.framework.auth.domain.*;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author chenwenjian
|
||||
* @version 1.0
|
||||
* @date 2024/6/19 12:44
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ContextInfoFillInterceptor implements HandlerInterceptor {
|
||||
@Override
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
||||
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
ContextInfoHolder.clear();
|
||||
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
String lite = request.getHeader(FeignContextInfoInterceptor.LITE);
|
||||
if (StrUtil.isNotBlank(lite)) {
|
||||
try {
|
||||
ContextInfo.LiteSaasContext liteSaasContext = JSONUtil.toBean(lite, ContextInfo.LiteSaasContext.class);
|
||||
String serverName = request.getHeader(FeignContextInfoInterceptor.SERVICE_NAME);
|
||||
if (Objects.nonNull(liteSaasContext)) {
|
||||
ContextInfo contextInfo = new ContextInfo();
|
||||
contextInfo.setWorkspaceId(liteSaasContext.getWorkspaceId());
|
||||
contextInfo.setWorkspaceType(liteSaasContext.getWorkspaceType());
|
||||
contextInfo.setOuId(liteSaasContext.getOuId());
|
||||
contextInfo.setOuType(liteSaasContext.getOuType());
|
||||
contextInfo.setSaasTenantId(liteSaasContext.getSaasTennantId());
|
||||
|
||||
UserInfo userInfo = new UserInfo();
|
||||
userInfo.setIdentityId(liteSaasContext.getIdentityId());
|
||||
userInfo.setIdentityType(liteSaasContext.getIdentityType());
|
||||
userInfo.setPersonId(liteSaasContext.getPersonId());
|
||||
userInfo.setAcntId(liteSaasContext.getAcntId());
|
||||
userInfo.setRealName(liteSaasContext.getRealName());
|
||||
contextInfo.setUserInfo(userInfo);
|
||||
|
||||
TerminalInfo terminalInfo = new TerminalInfo(liteSaasContext.getTerminal());
|
||||
contextInfo.setTerminalInfo(terminalInfo);
|
||||
|
||||
SystemAndDeviceInfo systemAndDeviceInfo = new SystemAndDeviceInfo();
|
||||
systemAndDeviceInfo.setIpAddress(liteSaasContext.getIpAddress());
|
||||
contextInfo.setSystemAndDeviceInfo(systemAndDeviceInfo);
|
||||
|
||||
ContextInfoHolder.set(contextInfo);
|
||||
log.info("ContextInfo parsing success! server: {}, contextInfo: {}", StrUtil.isNotBlank(serverName) ? serverName : "unknown", lite);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("ContextInfo parsing failure! {}", e.getMessage());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
log.warn("Can not get LiteSaasContext!");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.axzo.tyr.server.config;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* @author chenwenjian
|
||||
* @version 1.0
|
||||
* @date 2024/6/19 13:17
|
||||
*/
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class WebConfig implements WebMvcConfigurer {
|
||||
|
||||
private final ContextInfoFillInterceptor contextInfoFillInterceptor;
|
||||
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(contextInfoFillInterceptor)
|
||||
.addPathPatterns("/**");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package cn.axzo.tyr.server.controller.permission;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.feign.PermissionOperateLogApi;
|
||||
import cn.axzo.tyr.client.model.req.PermissionOperateLogReq;
|
||||
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author likunpeng
|
||||
* @version 1.0
|
||||
* @date 2024/7/25
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class PermissionOperateLogController implements PermissionOperateLogApi {
|
||||
|
||||
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> save(PermissionOperateLogReq req) {
|
||||
saasPgroupPermissionRelationOperateLogService.save(req);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package cn.axzo.tyr.server.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author likunpeng
|
||||
* @version 1.0
|
||||
* @date 2024/7/25
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class BasicRoleDO {
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private Long roleId;
|
||||
|
||||
/**
|
||||
* 角色code
|
||||
*/
|
||||
private String roleCode;
|
||||
|
||||
/**
|
||||
* 角色名字
|
||||
*/
|
||||
private String roleName;
|
||||
}
|
||||
@ -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 RelationOperateLogProductBindResourceDO {
|
||||
|
||||
/**
|
||||
* 资源编码
|
||||
*/
|
||||
private List<String> uniCodes;
|
||||
|
||||
/**
|
||||
* 产品ID
|
||||
*/
|
||||
private Long productId;
|
||||
}
|
||||
@ -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<String> featureCodes;
|
||||
}
|
||||
@ -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 RelationOperateLogResourceBindRoleDO {
|
||||
|
||||
/**
|
||||
* 资源编码
|
||||
*/
|
||||
private String uniCode;
|
||||
|
||||
/**
|
||||
* 角色code列表
|
||||
*/
|
||||
private List<String> roleCodes;
|
||||
}
|
||||
@ -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<String> uniCodes;
|
||||
|
||||
/**
|
||||
* 角色code
|
||||
*/
|
||||
private String roleCode;
|
||||
}
|
||||
@ -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<SaasPgroupPermissionRelationOperateLogMapper, SaasPgroupPermissionRelationOperateLog> {
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,66 @@
|
||||
package cn.axzo.tyr.server.repository.entity;
|
||||
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||
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<SaasPgroupPermissionRelationOperateLog> {
|
||||
|
||||
/**
|
||||
* 操作关联的表名
|
||||
*/
|
||||
private String tableName;
|
||||
|
||||
/**
|
||||
* 操作场景
|
||||
* @see PermissionRelationOperateLogSceneEnum
|
||||
*/
|
||||
private String scene;
|
||||
|
||||
/**
|
||||
* 操作场景ID
|
||||
*/
|
||||
private String sceneId;
|
||||
|
||||
/**
|
||||
* 请求ID
|
||||
*/
|
||||
private String traceId;
|
||||
|
||||
/**
|
||||
* 请求参数数据
|
||||
*/
|
||||
private String requestData;
|
||||
|
||||
/**
|
||||
* 操作后数据
|
||||
*/
|
||||
private String operateData;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private Long createBy;
|
||||
|
||||
/**
|
||||
* 操作人名
|
||||
*/
|
||||
private String createByName;
|
||||
|
||||
/**
|
||||
* 操作人角色
|
||||
*/
|
||||
private String createByRole;
|
||||
}
|
||||
@ -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<SaasPgroupPermissionRelationOperateLog> {
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.tyr.client.model.req.PermissionOperateLogReq;
|
||||
import cn.axzo.tyr.server.model.BasicRoleDO;
|
||||
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<SaasPgroupPermissionRelationOperateLog> logs);
|
||||
|
||||
List<BasicRoleDO> getPersonBasicRoles(Long personId);
|
||||
|
||||
void save(PermissionOperateLogReq req);
|
||||
}
|
||||
@ -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<SaasPgroup
|
||||
* 关联类型(0:saas_feature,1:saas_feature_resource)
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 操作人ID
|
||||
*/
|
||||
private Long operatorId;
|
||||
|
||||
/**
|
||||
* 请求参数
|
||||
*/
|
||||
private SaveOrUpdateRoleVO requestData;
|
||||
}
|
||||
|
||||
@Data
|
||||
|
||||
@ -3,30 +3,34 @@ package cn.axzo.tyr.server.service.impl;
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.basics.common.constant.enums.DeleteEnum;
|
||||
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.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||
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.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;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
|
||||
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.*;
|
||||
import cn.axzo.tyr.server.service.FeatureResourceSyncService;
|
||||
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
|
||||
import cn.axzo.tyr.server.util.RpcInternalUtil;
|
||||
import cn.azxo.framework.common.constatns.Constants;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
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.stereotype.Service;
|
||||
@ -70,6 +74,9 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
|
||||
private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao;
|
||||
|
||||
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
|
||||
private final UserProfileServiceApi userProfileServiceApi;
|
||||
|
||||
@Qualifier("asyncExecutor")
|
||||
@Autowired
|
||||
private ExecutorService asyncExecutor;
|
||||
@ -109,6 +116,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
|
||||
@Override
|
||||
public void syncFromBase(ResourceSyncReq req) {
|
||||
req.setTraceId(MDC.get(Constants.CTX_LOG_ID_MDC));
|
||||
if (req.getIds().size() > 1) {
|
||||
//超过一个异步处理
|
||||
CompletableFuture.runAsync(() -> doSyncFromBase(req), asyncExecutor).whenComplete((t, ex) -> saasFeatureResourceCacheService.clearCache());
|
||||
@ -119,6 +127,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
}
|
||||
|
||||
private void doSyncFromBase(ResourceSyncReq req) {
|
||||
List<RelationOperateLogResourceBindRoleDO> operateDos = Lists.newCopyOnWriteArrayList();
|
||||
//TODO:@Zhan 并发处理;同一个parent下同批查询
|
||||
//处理数据缓存:避免同级节点上级重复处理 - 上级code查询
|
||||
final Map<Long, String> codeCache = new ConcurrentHashMap<>();
|
||||
@ -127,7 +136,14 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
//获取基准环境配置数据:同步某个ID的数据 需要同步处理它所有上级及下级组件
|
||||
List<FeatureResourceTreeNode> syncList = RpcInternalUtil.rpcProcessor(() -> baseFeatureResourceApi.getSyncTreeById(id),
|
||||
"get base sync tree by id", id).getData();
|
||||
syncResourceProcess(syncList, codeCache, req.getOperatorId());
|
||||
syncResourceProcess(syncList, codeCache, req.getOperatorId(), operateDos);
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
try {
|
||||
saveOperateLog(req, operateDos);
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,7 +177,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
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<RelationOperateLogResourceBindRoleDO> operateDos) {
|
||||
|
||||
for (FeatureResourceTreeNode treeNode : syncList) {
|
||||
if (codeCache.containsKey(treeNode.getId())) {
|
||||
@ -169,7 +185,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
log.info("already sync resource:{}", treeNode.getId());
|
||||
//递归子节点
|
||||
if (CollectionUtils.isNotEmpty(treeNode.getChildren())) {
|
||||
syncResourceProcess(treeNode.getChildren(), codeCache, operatorId);
|
||||
syncResourceProcess(treeNode.getChildren(), codeCache, operatorId, operateDos);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -204,11 +220,14 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
}
|
||||
|
||||
// 处理资源关联的权限
|
||||
doFeatureResourceRole(baseResource, treeNode.getRoleCodes(), operatorId);
|
||||
RelationOperateLogResourceBindRoleDO logResourceBindRoleDO = doFeatureResourceRole(baseResource, treeNode.getRoleCodes(), operatorId);
|
||||
if (Objects.nonNull(logResourceBindRoleDO)) {
|
||||
operateDos.add(logResourceBindRoleDO);
|
||||
}
|
||||
|
||||
//递归子节点
|
||||
if (CollectionUtils.isNotEmpty(treeNode.getChildren())) {
|
||||
syncResourceProcess(treeNode.getChildren(), codeCache, operatorId);
|
||||
syncResourceProcess(treeNode.getChildren(), codeCache, operatorId, operateDos);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -232,9 +251,9 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
}
|
||||
}
|
||||
|
||||
private void doFeatureResourceRole(SaasFeatureResource featureResource, List<String> roleCodes, Long operatorId) {
|
||||
private RelationOperateLogResourceBindRoleDO doFeatureResourceRole(SaasFeatureResource featureResource, List<String> roleCodes, Long operatorId) {
|
||||
if (Objects.isNull(featureResource)) {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
// 先清除资源绑定的角色 @20240723 产品武艳华要求资源绑定的角色以PRE角色为准;
|
||||
@ -248,8 +267,13 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
saasPgroupPermissionRelationDao.removeByFeatureIdAndGroupIds(featureResource.getId(), existPermissionRelations.stream().map(SaasPgroupPermissionRelation::getGroupId).collect(Collectors.toList()), operatorId);
|
||||
}
|
||||
|
||||
// 操作日志
|
||||
RelationOperateLogResourceBindRoleDO logResourceBindRoleDO = RelationOperateLogResourceBindRoleDO.builder()
|
||||
.uniCode(featureResource.getUniCode())
|
||||
.build();
|
||||
|
||||
if (CollectionUtils.isEmpty(roleCodes)) {
|
||||
return;
|
||||
return logResourceBindRoleDO;
|
||||
}
|
||||
|
||||
// List<String> existRoleCodes = getFeatureResourceRoleCodeMap(Lists.newArrayList(featureResource.getId()))
|
||||
@ -264,10 +288,11 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
|
||||
List<SaasRole> saasRoles = saasRoleDao.listByRoleCodes(roleCodes);
|
||||
if (CollectionUtils.isEmpty(saasRoles)) {
|
||||
return;
|
||||
return logResourceBindRoleDO;
|
||||
}
|
||||
List<Long> groupIds = saasPgroupRoleRelationDao.findByRoleIds(saasRoles.stream().map(BaseEntity::getId).collect(Collectors.toList()))
|
||||
.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList());
|
||||
List<SaasPgroupRoleRelation> saasPgroupRoleRelations = saasPgroupRoleRelationDao.findByRoleIds(saasRoles.stream().map(BaseEntity::getId).collect(Collectors.toList()));
|
||||
List<Long> groupIds = saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList());
|
||||
List<Long> existRoleIds = saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getRoleId).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(groupIds)) {
|
||||
List<SaasPgroupPermissionRelation> insertRelation = groupIds.stream()
|
||||
.map(groupId -> {
|
||||
@ -282,7 +307,10 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
saasPgroupPermissionRelationDao.saveBatch(insertRelation);
|
||||
|
||||
logResourceBindRoleDO.setRoleCodes(saasRoles.stream().filter(e -> existRoleIds.contains(e.getId())).map(SaasRole::getRoleCode).collect(Collectors.toList()));
|
||||
}
|
||||
return logResourceBindRoleDO;
|
||||
}
|
||||
|
||||
private Map<Long, List<String>> getFeatureResourceRoleCodeMap(List<Long> allFeatureResourceIds) {
|
||||
@ -336,4 +364,22 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
|
||||
|
||||
return featureRoleMap;
|
||||
}
|
||||
|
||||
|
||||
private void saveOperateLog(ResourceSyncReq req, List<RelationOperateLogResourceBindRoleDO> 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()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_FEATURE_RESOURCE)
|
||||
.scene(PermissionRelationOperateLogSceneEnum.OMS_SYNC.getValue())
|
||||
.createBy(req.getOperatorId())
|
||||
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
|
||||
.traceId(req.getTraceId())
|
||||
.requestData(JSONObject.toJSONString(req))
|
||||
.operateData(JSONObject.toJSONString(operateDos))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(req.getOperatorId())))
|
||||
.build();
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,11 +2,14 @@ package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
|
||||
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.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||
import cn.axzo.tyr.client.common.enums.ProductModuleFeatureRelationTypeEnum;
|
||||
import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq;
|
||||
import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp;
|
||||
@ -17,15 +20,19 @@ import cn.axzo.tyr.client.model.req.ProductSaveReq;
|
||||
import cn.axzo.tyr.client.model.req.UpdateProductStatusReq;
|
||||
import cn.axzo.tyr.client.model.res.GovernmentTerminalResp;
|
||||
import cn.axzo.tyr.client.model.res.WorkspaceProductResp;
|
||||
import cn.axzo.tyr.server.model.RelationOperateLogProductBindResourceDO;
|
||||
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindElementDO;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
|
||||
import cn.axzo.tyr.server.repository.entity.ProductModule;
|
||||
import cn.axzo.tyr.server.repository.dao.ProductModuleDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
||||
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
||||
import cn.axzo.tyr.server.service.ProductService;
|
||||
import cn.axzo.tyr.server.service.SaasBasicDictService;
|
||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||
import cn.axzo.tyr.server.service.*;
|
||||
import cn.axzo.tyr.server.util.RpcInternalUtil;
|
||||
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.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||
@ -34,6 +41,7 @@ import com.google.common.collect.Sets;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
@ -56,6 +64,9 @@ public class ProductServiceImpl implements ProductService {
|
||||
private final ProductFeatureRelationService productFeatureRelationService;
|
||||
private final SaasFeatureResourceService saasFeatureResourceService;
|
||||
private final SaasBasicDictService saasBasicDictService;
|
||||
private final UserProfileServiceApi userProfileServiceApi;
|
||||
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
|
||||
private final SaasFeatureResourceDao saasFeatureResourceDao;
|
||||
|
||||
@Override
|
||||
public ApiResult<List<ProductVO>> list(ProductSearchListReq req) {
|
||||
@ -227,9 +238,15 @@ public class ProductServiceImpl implements ProductService {
|
||||
}
|
||||
// 保存商品权限信息
|
||||
if (WorkspaceTypeCodeEnum.GOVERNMENT.getCode().equals(productModule.getDictWorkspaceTypeCode())) {
|
||||
saveGovernmentFeatureResource(productModule.getId(), productModule.getDictWorkspaceTypeId(), productModule.getDictWorkspaceTypeCode(), req.getFeatureScope().getGovernmentFeatureResourceIds());
|
||||
saveGovernmentFeatureResource(productModule.getId(), productModule.getDictWorkspaceTypeId(), productModule.getDictWorkspaceTypeCode(), req.getFeatureScope().getGovernmentFeatureResourceIds(), req);
|
||||
} else {
|
||||
saveNonGaFeatureResource(productModule.getId(), req.getFeatureScope().getRelations());
|
||||
// 保存操作日志
|
||||
try {
|
||||
saveOperateLog4NonGaProduct(req, productModule.getId());
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
}
|
||||
return ApiResult.ok(productModule.getId());
|
||||
}
|
||||
@ -347,7 +364,7 @@ public class ProductServiceImpl implements ProductService {
|
||||
/**
|
||||
* 保存政务端产品功能权限
|
||||
*/
|
||||
private void saveGovernmentFeatureResource(Long productId, Long dictWorkspaceTypeId, String dictWorkspaceTypeCode, List<Long> rootFeatureIds) {
|
||||
private void saveGovernmentFeatureResource(Long productId, Long dictWorkspaceTypeId, String dictWorkspaceTypeCode, List<Long> rootFeatureIds, ProductSaveReq request) {
|
||||
List<SaasFeatureResource> saasFeatureResources = saasFeatureResourceService.listByParentIdAndTerminalAndIds(null, null, rootFeatureIds);
|
||||
AssertUtil.notEmpty(saasFeatureResources, "功能范围选择端不能为空");
|
||||
saasFeatureResources.forEach(e -> {
|
||||
@ -365,6 +382,13 @@ public class ProductServiceImpl implements ProductService {
|
||||
req.getFeatureIds().addAll(featureIds);
|
||||
req.setFeatureRelationType(ProductModuleFeatureRelationTypeEnum.FEATURE_RESOURCE.getCode());
|
||||
productFeatureRelationService.updateFeatureResourceRelation(Collections.singletonList(req), ProductModuleFeatureRelationTypeEnum.FEATURE_RESOURCE.getCode());
|
||||
|
||||
// 保存操作日志
|
||||
try {
|
||||
saveOperateLog4GovernmentProduct(request, productId, frs);
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -458,4 +482,53 @@ public class ProductServiceImpl implements ProductService {
|
||||
.build()).collect(Collectors.toList()) : Collections.emptyList())
|
||||
.build()).orElse(null);
|
||||
}
|
||||
|
||||
private void saveOperateLog4GovernmentProduct(ProductSaveReq req, Long productId, List<SaasFeatureResource> featureResources) {
|
||||
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperator())), "查询用户信息", req.getOperator()).getData();
|
||||
PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
|
||||
|
||||
RelationOperateLogProductBindResourceDO operateAfter = RelationOperateLogProductBindResourceDO.builder()
|
||||
.productId(productId)
|
||||
.uniCodes(CollectionUtils.emptyIfNull(featureResources).stream().map(SaasFeatureResource::getUniCode).collect(Collectors.toList()))
|
||||
.build();
|
||||
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_PRODUCT)
|
||||
.scene(PermissionRelationOperateLogSceneEnum.OMS_PRODUCT_BIND_FEATURE_RESOURCE.getValue())
|
||||
.sceneId(productId.toString())
|
||||
.createBy(req.getOperator())
|
||||
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
|
||||
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
|
||||
.requestData(JSONObject.toJSONString(req))
|
||||
.operateData(JSONObject.toJSONString(Lists.newArrayList(operateAfter)))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(req.getOperator())))
|
||||
.build();
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
|
||||
private void saveOperateLog4NonGaProduct(ProductSaveReq req, Long productId) {
|
||||
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperator())), "查询用户信息", req.getOperator()).getData();
|
||||
PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
|
||||
List<SaasFeatureResource> featureResources = Lists.newArrayList();
|
||||
if (CollectionUtils.isNotEmpty(req.getFeatureScope().getRelations())) {
|
||||
Set<Long> allFeatureResourceIds = req.getFeatureScope().getRelations().stream().map(ProductSaveReq.ProductFeatureRelation::getFeatureIds).filter(CollectionUtils::isNotEmpty).flatMap(Set::stream).collect(Collectors.toSet());
|
||||
featureResources = saasFeatureResourceDao.lambdaQuery().in(BaseEntity::getId, allFeatureResourceIds).list();
|
||||
}
|
||||
|
||||
RelationOperateLogProductBindResourceDO operateAfter = RelationOperateLogProductBindResourceDO.builder()
|
||||
.productId(productId)
|
||||
.uniCodes(featureResources.stream().map(SaasFeatureResource::getUniCode).collect(Collectors.toList()))
|
||||
.build();
|
||||
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_PRODUCT)
|
||||
.scene(PermissionRelationOperateLogSceneEnum.OMS_PRODUCT_BIND_FEATURE_RESOURCE.getValue())
|
||||
.sceneId(productId.toString())
|
||||
.createBy(req.getOperator())
|
||||
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
|
||||
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
|
||||
.requestData(JSONObject.toJSONString(req))
|
||||
.operateData(JSONObject.toJSONString(Lists.newArrayList(operateAfter)))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(req.getOperator())))
|
||||
.build();
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,10 +2,13 @@ package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
|
||||
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.mysql.QueryWrapperHelper;
|
||||
import cn.axzo.framework.domain.page.PageResp;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||
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,36 +40,13 @@ 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.repository.dao.SaasFeatureDao;
|
||||
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.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.model.*;
|
||||
import cn.axzo.tyr.server.repository.dao.*;
|
||||
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.axzo.tyr.server.util.RpcInternalUtil;
|
||||
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 +54,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 +71,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 +145,12 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
SaasFeatureResourceService saasFeatureResourceService;
|
||||
@Autowired
|
||||
private SaasRoleUserRelationService saasRoleUserRelationService;
|
||||
@Autowired
|
||||
private SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
|
||||
@Autowired
|
||||
private UserProfileServiceApi userProfileServiceApi;
|
||||
@Autowired
|
||||
private SaasFeatureResourceDao saasFeatureResourceDao;
|
||||
|
||||
@Value("${groupLeader.code:projectTeamGPLeader}")
|
||||
private String groupLeaderCode;
|
||||
@ -447,8 +435,17 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
.groupIds(Lists.newArrayList(saasPermissionGroup.getId()))
|
||||
.relations(pgpRelations)
|
||||
.type(NEW_FEATURE)
|
||||
.operatorId(saveOrUpdateRole.getOperatorId())
|
||||
.requestData(saveOrUpdateRole)
|
||||
.build();
|
||||
saasPgroupPermissionRelationService.saveOrUpdate(upsertPermissionRelationParam);
|
||||
|
||||
// 记录操作日志
|
||||
try {
|
||||
saveOperateLog4RoleBindFeatureResource(saveOrUpdateRole);
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1304,6 +1301,12 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
saasFeatureResourceService.updateFeatureAuthType(item.getFeatureId(), item.getAuthType());
|
||||
if (CollectionUtil.isEmpty(item.getRoleIds()) || item.getAuthType() == 0) {
|
||||
saasPgroupPermissionRelationDao.removeByPermissionPointIds(Collections.singletonList(item.getFeatureId()));
|
||||
// 记录操作日志
|
||||
try {
|
||||
saveOperateLog(item.getFeatureId(), operatorId, req);
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
} else {
|
||||
List<Long> existGroupIds = saasPgroupPermissionRelationDao.queryByFeatureIds(Collections.singletonList(item.getFeatureId()))
|
||||
.stream().map(SaasPgroupPermissionRelation::getGroupId).collect(Collectors.toList());
|
||||
@ -1312,7 +1315,12 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
.stream().map(SaasPgroupRoleRelation::getGroupId).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());
|
||||
|
||||
// 记录操作日志
|
||||
try {
|
||||
saveOperateLog(item.getFeatureId(), operatorId, item.getRoleIds(), req);
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
// 新增的
|
||||
if (CollectionUtils.isNotEmpty(insertGroupIds)) {
|
||||
List<SaasPgroupPermissionRelation> insertRelation = new ArrayList<>();
|
||||
@ -1500,6 +1508,86 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
Collectors.toList())));
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
RelationOperateLogResourceBindRoleDO operateAfter = RelationOperateLogResourceBindRoleDO.builder()
|
||||
.uniCode(saasFeatureResource.getUniCode())
|
||||
.build();
|
||||
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_FEATURE_RESOURCE)
|
||||
.scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue())
|
||||
.sceneId(saasFeatureResource.getUniCode())
|
||||
.createBy(operatorId)
|
||||
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
|
||||
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
|
||||
.requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req))
|
||||
.operateData(JSONObject.toJSONString(Lists.newArrayList(operateAfter)))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(operatorId)))
|
||||
.build();
|
||||
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
RelationOperateLogResourceBindRoleDO operateAfter = RelationOperateLogResourceBindRoleDO.builder()
|
||||
.uniCode(saasFeatureResource.getUniCode())
|
||||
.roleCodes(saasRoles.stream().map(SaasRole::getRoleCode).collect(Collectors.toList()))
|
||||
.build();
|
||||
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_FEATURE_RESOURCE)
|
||||
.scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue())
|
||||
.sceneId(saasFeatureResource.getUniCode())
|
||||
.createBy(operatorId)
|
||||
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
|
||||
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
|
||||
.requestData(Objects.isNull(req) ? null : JSONObject.toJSONString(req))
|
||||
.operateData(JSONObject.toJSONString(Lists.newArrayList(operateAfter)))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(operatorId)))
|
||||
.build();
|
||||
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
|
||||
private void saveOperateLog4RoleBindFeatureResource(SaveOrUpdateRoleVO saveOrUpdateRole) {
|
||||
SaasRole saasRole = saasRoleDao.getById(saveOrUpdateRole.getId());
|
||||
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());
|
||||
}
|
||||
|
||||
RelationOperateLogRoleBindResourceDO operateAfter = RelationOperateLogRoleBindResourceDO.builder()
|
||||
.uniCodes(uniCodes)
|
||||
.roleCode(saasRole.getRoleCode())
|
||||
.build();
|
||||
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_ROLE)
|
||||
.scene(PermissionRelationOperateLogSceneEnum.OMS_ROLE_BIND_FEATURE_RESOURCE.getValue())
|
||||
.sceneId(saasRole.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(Lists.newArrayList(operateAfter)))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(saveOrUpdateRole.getOperatorId())))
|
||||
.build();
|
||||
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
|
||||
@ -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,13 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
|
||||
.build()).collect(Collectors.toList());
|
||||
saasPageElementFeatureResourceRelationDao.saveBatch(relations);
|
||||
}
|
||||
|
||||
// 保存操作日志
|
||||
try {
|
||||
saveOperateLog(modifyPageElementRelation);
|
||||
} catch (Exception e) {
|
||||
log.warn("save operate log error", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -386,4 +402,27 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
|
||||
.and(w -> pageResources.forEach(p -> w.or().likeRight(SaasFeatureResource::getPath, p.getPath())))
|
||||
.list();
|
||||
}
|
||||
|
||||
private void saveOperateLog(ModifyPageElementRelationDTO relation) {
|
||||
List<PersonProfileDto> 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()
|
||||
.tableName(SaasPgroupPermissionRelationOperateLogServiceImpl.TABLE_NAME_PAGE_ELEMENT)
|
||||
.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)))
|
||||
.createByRole(JSONObject.toJSONString(saasPgroupPermissionRelationOperateLogService.getPersonBasicRoles(relation.getOperatorId())))
|
||||
.build();
|
||||
|
||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,99 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
|
||||
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
|
||||
import cn.axzo.framework.auth.domain.ContextInfo;
|
||||
import cn.axzo.framework.auth.domain.ContextInfoHolder;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||
import cn.axzo.tyr.client.model.req.PermissionOperateLogReq;
|
||||
import cn.axzo.tyr.server.model.BasicRoleDO;
|
||||
import cn.axzo.tyr.server.model.RelationOperateLogProductBindResourceDO;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationOperateLogDao;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleDao;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
|
||||
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
|
||||
import cn.axzo.tyr.server.util.RpcInternalUtil;
|
||||
import cn.azxo.framework.common.constatns.Constants;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author likunpeng
|
||||
* @version 1.0
|
||||
* @date 2024/7/24
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class SaasPgroupPermissionRelationOperateLogServiceImpl implements SaasPgroupPermissionRelationOperateLogService {
|
||||
|
||||
public static final String TABLE_NAME_FEATURE_RESOURCE = "saas_feature_resource";
|
||||
public static final String TABLE_NAME_ROLE = "saas_role";
|
||||
public static final String TABLE_NAME_PAGE_ELEMENT = "saas_page_element";
|
||||
public static final String TABLE_NAME_PRODUCT = "product_module";
|
||||
|
||||
private final SaasPgroupPermissionRelationOperateLogDao saasPgroupPermissionRelationOperateLogDao;
|
||||
private final SaasRoleUserRelationDao roleUserRelationDao;
|
||||
private final SaasRoleDao saasRoleDao;
|
||||
private final UserProfileServiceApi userProfileServiceApi;
|
||||
|
||||
@Override
|
||||
public void batchSave(List<SaasPgroupPermissionRelationOperateLog> logs) {
|
||||
if (CollectionUtils.isEmpty(logs)) {
|
||||
return;
|
||||
}
|
||||
saasPgroupPermissionRelationOperateLogDao.saveBatch(logs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BasicRoleDO> getPersonBasicRoles(Long personId) {
|
||||
if (Objects.isNull(personId)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
ContextInfo contextInfo = ContextInfoHolder.get();
|
||||
if (Objects.isNull(contextInfo)) {
|
||||
log.warn("no contextInfo, personId:{}", personId);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<SaasRoleUserRelation> relations = roleUserRelationDao.queryByPersonId(personId, contextInfo.getWorkspaceId(), contextInfo.getOuId());
|
||||
if (CollectionUtils.isEmpty(relations)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return saasRoleDao.lambdaQuery().in(BaseEntity::getId, relations.stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList())).list()
|
||||
.stream().map(e -> BasicRoleDO.builder().roleId(e.getId()).roleCode(e.getRoleCode()).roleName(e.getName()).build()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(PermissionOperateLogReq req) {
|
||||
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()
|
||||
.tableName(req.getTableName())
|
||||
.scene(req.getScene())
|
||||
.sceneId(req.getSceneId())
|
||||
.createBy(req.getOperatorId())
|
||||
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
|
||||
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
|
||||
.requestData(Objects.nonNull(req.getRequestData()) ? JSONObject.toJSONString(req.getRequestData()) : null)
|
||||
.operateData(Objects.nonNull(req.getOperateData()) ? JSONObject.toJSONString(req.getOperateData()) : null)
|
||||
.createByRole(JSONObject.toJSONString(getPersonBasicRoles(req.getOperatorId())))
|
||||
.build();
|
||||
batchSave(Lists.newArrayList(operateLog));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user