fix: 自动发起流程获取当前线程登陆人问题

This commit is contained in:
2024-08-26 17:01:51 +08:00
parent f984b97eab
commit 8578c7ea3e
5 changed files with 63 additions and 12 deletions
@@ -8,6 +8,7 @@ import com.jero.common.api.vo.ResultCommon;
import com.jero.common.aspect.TranslationAspect;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.entity.CounterSignNodeNameConstants;
@@ -20,17 +21,15 @@ import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectTyp
import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeDataVO;
import com.jero.modules.activiti.process.esInitChange.mapper.ProcessEsInitChangeMapper;
import com.jero.modules.activiti.process.esInitChange.service.ProcessEsInitChangeService;
import com.jero.modules.activiti.process.esRevision.service.EsRevisionService;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.common.service.ILawsCommonService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptService;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
@@ -82,12 +81,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource
private IProcessHandleService processHandleService;
@Resource
private EsRevisionService revisionService;
@Resource
private ProcessAllService processAllService;
@Resource
private ILawsCommonService commonService;
@@ -98,7 +91,7 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
private TranslationAspect translationAspect;
@Resource
private EnterpriseStandardAuthDeptService esAdService;
private CurrentUserUtil currentUserUtil;
@Override
public void startProcess(InitChangeDataVO initChangeData) {
@@ -217,7 +210,11 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
Map<String, Object> variables = new HashMap<>();
variables.put("createUser", mainDraftUser);
// 启动流程
LoginUser currentUser = new LoginUser();
currentUser.setId(mainDraftUser);
currentUserUtil.bindUserToThread(currentUser);
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables);
currentUserUtil.clearCurrentUser();
ProcessEsInitChange initChange = new ProcessEsInitChange();
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
@@ -7,6 +7,7 @@ import com.jero.common.api.vo.ResultCommon;
import com.jero.common.aspect.TranslationAspect;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.enums.ProcessType;
@@ -19,6 +20,7 @@ import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardRecheckPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardRecheckPlanService;
import com.jero.modules.sys.utils.UserUtils;
@@ -69,6 +71,9 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
@Resource
private EnterpriseStandardRecheckPlanService esRecheckService;
@Resource
private CurrentUserUtil currentUserUtil;
@Override
public void startProcess(ESRecheckDataVO recheckData) {
// 执行流程发起前的操作
@@ -152,7 +157,11 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
// 设置流程变量
Map<String, Object> actVariables = this.setVariablesAutoStart(variables);
// 启动流程
LoginUser currentUser = new LoginUser();
currentUser.setId(userId);
currentUserUtil.bindUserToThread(currentUser);
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
currentUserUtil.clearCurrentUser();
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
@@ -13,6 +13,7 @@ import com.jero.common.api.vo.SendMessageAPI;
import com.jero.common.aspect.TranslationAspect;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.CommitFlagEnum;
@@ -41,6 +42,7 @@ import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.system.entity.LawsContactManage;
@@ -119,6 +121,9 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
@Resource
private ProcessDraftService prcDraftService;
@Resource
private CurrentUserUtil currentUserUtil;
@Override
public void startProcess(ESRevisionDataVO revisionData) {
// 执行流程发起前的操作
@@ -259,7 +264,11 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
Map<String, Object> variables = new HashMap<>();
variables.put("mainDraftUser", mainDraftUser);
// 启动流程
LoginUser currentUser = new LoginUser();
currentUser.setId(mainDraftUser);
currentUserUtil.bindUserToThread(currentUser);
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables);
currentUserUtil.clearCurrentUser();
ProcessEsRevision revision = new ProcessEsRevision();
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
@@ -4,6 +4,13 @@ import com.jero.common.system.vo.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.UnavailableSecurityManagerException;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ThreadContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: liao
@@ -11,8 +18,12 @@ import org.apache.shiro.UnavailableSecurityManagerException;
* @Description: 当前用户工具类
*/
@Slf4j
@Component
public class CurrentUserUtil {
@Autowired
private SecurityManager securityManager;
/**
* @Author: liao
* @Date: 2023/10/26 16:58
@@ -86,4 +97,29 @@ public class CurrentUserUtil {
}
}
/**
* 为当前线程绑定一个临时用户
*/
public void bindUserToThread(LoginUser tempUser) {
// 设置安全管理器
SecurityUtils.setSecurityManager(securityManager);
// 使用 SecurityManager 和用户信息构建 Subject
Subject.Builder builder = new Subject.Builder(SecurityUtils.getSecurityManager());
PrincipalCollection principalCollection = new SimplePrincipalCollection(tempUser, "yourRealmName");
builder.principals(principalCollection);
Subject subject = builder.buildSubject();
// 绑定 Subject 到当前线程
ThreadContext.bind(subject);
}
/**
* 清理当前线程中的用户信息
*/
public void clearCurrentUser() {
// 解绑当前线程的 Subject
ThreadContext.unbindSubject();
}
}
@@ -134,10 +134,10 @@ public class ESRecheckPlanJob implements Job {
LocalDate minusMonths = recheckLocalDate.minusMonths(1);
String recheckResult = recheckPlan.getRecheckResult();
// 流程中/修订/废止/封存 的不需要重新发起流程
if (YesOrNoEnum.YES.getValue().equals(recheckPlan.getInProcessFlag()) ||
if (StrUtil.isNotBlank(recheckResult) && (YesOrNoEnum.YES.getValue().equals(recheckPlan.getInProcessFlag()) ||
recheckResult.equals(RECHECK_INIT_CHANGE) ||
recheckResult.equals(RECHECK_ABOLISH) ||
recheckResult.equals(RECHECK_ARCHIVE)) {
recheckResult.equals(RECHECK_ARCHIVE))) {
// 已经发起过流程,不需要重复发起
log.info("企标编号为{}的企标已经达到复审日期前一个月,但是已经发起过复审流程,无需重复发起", es.getStandardNumber());
continue;