feat(REQ-7125) - 增加cms 访问审批日志时,对 oms 审批人的信息脱敏处理

This commit is contained in:
wangli 2026-03-04 11:34:57 +08:00
parent c58858b7cc
commit dd0a5b420a
5 changed files with 87 additions and 5 deletions

View File

@ -59,4 +59,10 @@ public class BpmnProcessInstanceLogQueryDTO {
*/
@ApiModelProperty(value = "是否需要加密", notes = "同一个实例的日志,在不同端[cms/oms]下,审批人的信息需要按一定规则进行隐藏控制")
private Boolean encrypt;
/**
* 控制 oms 审批人是否脱敏
*/
@ApiModelProperty(value = "oms 人员是否脱敏", notes = "true则将 oms 审批人的姓名、头像全部置为空")
private Boolean omsApproveDesensitization;
}

View File

@ -0,0 +1,30 @@
package cn.axzo.workflow.core.conf;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
/**
* TODO
*
* @author wangli
* @since 2026-03-04 10:18
*/
@Data
@Component
@RefreshScope
public class OmsWorkspaceProperty {
@Value("${oms-workspace.workspaceId}")
private Long workspaceId;
@Value("${oms-workspace.tenantId}")
private Long tenantId;
@Value("${oms-workspace.ouId}")
private Long ouId;
@Value("${oms-workspace.nodeId}")
private Long nodeId;
}

View File

@ -67,7 +67,7 @@ public class CustomActivityTriggerCmd extends AbstractCommand<Void> implements S
return null;
}
addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "同意", true);
addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "完成", true);
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
log.info("CustomActivityTriggerCmd triggerAsync");
runtimeService.triggerAsync(dto.getTriggerId());

View File

@ -61,6 +61,7 @@ import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceLogVO;
import cn.axzo.workflow.common.model.response.category.CategoryItemVO;
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
import cn.axzo.workflow.core.conf.OmsWorkspaceProperty;
import cn.axzo.workflow.core.engine.cmd.CustomAbortProcessInstanceAsyncCmd;
import cn.axzo.workflow.core.engine.cmd.CustomAbortProcessInstanceCmd;
import cn.axzo.workflow.core.engine.cmd.CustomCancelProcessInstanceAsyncCmd;
@ -301,6 +302,8 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
private ExtAxProcessSignService extAxProcessSignService;
@Resource
private ExtAxReadRecordService extAxReadRecordService;
@Resource
private OmsWorkspaceProperty omsWorkspaceProperty;
@Override
public HistoricProcessInstance getProcessInstanceByBusinessKey(String businessKey, @Nullable String tenantId,
@ -1698,11 +1701,54 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
getFutureTasks(forecasting, tasks);
// 处理是否加密
handleEncrypt(dto.getEncrypt(), tasks);
// 处理 oms 审批人脱敏
handleOmsApproverDesensitization(dto.getOmsApproveDesensitization(), tasks);
// reset field forecastAssignees Empty to null;
resetCollectionToNull(tasks);
return tasks;
}
private void handleOmsApproverDesensitization(Boolean omsApproveDesensitization, List<BpmnTaskInstanceLogVO> tasks) {
if (Boolean.FALSE.equals(omsApproveDesensitization)) {
return;
}
tasks.forEach(i -> {
if (Objects.nonNull(i.getResult())) {
if (Objects.equals(i.getResult(), PROCESSING)) {
// 脱敏头像
if (Objects.nonNull(i.getAssigneeSnapshot()) && Objects.equals(i.getAssigneeSnapshot().getTenantId(), String.valueOf(omsWorkspaceProperty.getTenantId()))) {
// 目前该节点是单人审批
i.getAssigneeSnapshot().setAvatar("https://axzo-public.oss-cn-chengdu.aliyuncs.com/app/app/1d718eb672a44247a6e530548dc0100f.svg");
} else if (!CollectionUtils.isEmpty(i.getForecastAssignees())) {
i.getForecastAssignees().forEach(j -> {
j.setAvatar("https://axzo-public.oss-cn-chengdu.aliyuncs.com/app/app/1d718eb672a44247a6e530548dc0100f.svg");
});
}
} else {
// 隐藏姓名脱敏头像
if (Objects.nonNull(i.getAssigneeSnapshot())) {
// 目前该节点是单人审批
i.getAssigneeSnapshot().setAssignerName("");
i.getAssigneeSnapshot().setAvatar("https://axzo-public.oss-cn-chengdu.aliyuncs.com/app/app/1d718eb672a44247a6e530548dc0100f.svg");
} else if (!CollectionUtils.isEmpty(i.getForecastAssignees())) {
i.getForecastAssignees().forEach(j -> {
j.setAssignerName("");
j.setAvatar("https://axzo-public.oss-cn-chengdu.aliyuncs.com/app/app/1d718eb672a44247a6e530548dc0100f.svg");
});
}
}
} else {
// 未来节点
if (!CollectionUtils.isEmpty(i.getForecastAssignees())) {
i.getForecastAssignees().forEach(j -> {
j.setAssignerName("");
j.setAvatar("https://axzo-public.oss-cn-chengdu.aliyuncs.com/app/app/1d718eb672a44247a6e530548dc0100f.svg");
});
}
}
});
}
private void resetCollectionToNull(List<BpmnTaskInstanceLogVO> tasks) {
tasks.forEach(i -> {
if (ListUtils.emptyIfNull(i.getForecastAssignees()).isEmpty()) {

View File

@ -145,10 +145,10 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
.ifPresent(approverEmptyHandleTypeEnum -> {
switch (approverEmptyHandleTypeEnum) {
case autoPassed:
autoPass(delegateTask, "", "未找到审批人,自动同意");
autoPass(delegateTask, "", "未找到审批人,系统通过");
break;
case autoRejection:
autoReject(delegateTask, "未找到审批人,自动驳回");
autoReject(delegateTask, "未找到审批人,系统驳回");
break;
case autoSkipped:
// autoReject(delegateTask);
@ -199,7 +199,7 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
}
private void autoReject(DelegateTask delegateTask) {
autoReject(delegateTask, "无需审批人,自动驳回");
autoReject(delegateTask, "无需审批人,驳回");
}
/**
@ -221,7 +221,7 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
* @param delegateTask 自动操作的任务
*/
private void autoPass(DelegateTask delegateTask) {
autoPass(delegateTask, null, "无需审批人,自动同意");
autoPass(delegateTask, null, "无需审批人,通过");
}
}