fix: 自动发起流程获取当前线程登陆人问题
This commit is contained in:
+7
-10
@@ -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();
|
||||
|
||||
+9
@@ -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();
|
||||
|
||||
+9
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user