From 8578c7ea3ebd6d64ddedf46e38e128d7a36bc8dd Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 26 Aug 2024 17:01:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E5=8A=A8=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=8E=B7=E5=8F=96=E5=BD=93=E5=89=8D=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E7=99=BB=E9=99=86=E4=BA=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ProcessEsInitChangeServiceImpl.java | 17 ++++----- .../impl/ProcessEsRecheckServiceImpl.java | 9 +++++ .../service/impl/EsRevisionServiceImpl.java | 9 +++++ .../laws/common/util/CurrentUserUtil.java | 36 +++++++++++++++++++ .../laws/enterprise/job/ESRecheckPlanJob.java | 4 +-- 5 files changed, 63 insertions(+), 12 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java index d694d4dd..0884bf58 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java @@ -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 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(); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/service/impl/ProcessEsRecheckServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/service/impl/ProcessEsRecheckServiceImpl.java index 33113bc1..cbd71173 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/service/impl/ProcessEsRecheckServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/service/impl/ProcessEsRecheckServiceImpl.java @@ -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 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(); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java index a4c3cd9c..ab4c1c8a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java @@ -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 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(); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/util/CurrentUserUtil.java b/laws-modules/src/main/java/com/jero/modules/laws/common/util/CurrentUserUtil.java index 7a196a17..cf9ff700 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/util/CurrentUserUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/util/CurrentUserUtil.java @@ -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(); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java index a606a350..2a19c951 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java @@ -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;