From 67520905d1e7e5760686edd0c5f7cea17a1bfc51 Mon Sep 17 00:00:00 2001 From: yjz <3131811435@qq.com> Date: Fri, 15 Dec 2023 19:06:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BC=81=E6=A0=87=E7=A8=BD=E6=9F=A5?= =?UTF-8?q?=E8=AE=A1=E5=88=92):=20=E9=A9=B3=E5=9B=9E=E8=8B=A5=E9=A9=B3?= =?UTF-8?q?=E5=9B=9E=E5=88=B0=E7=9A=84=E8=8A=82=E7=82=B9=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E7=BB=8F=E8=BF=87=E8=BD=AC=E5=8A=9E=EF=BC=8C=E5=88=99=E5=8F=91?= =?UTF-8?q?=E7=BB=99=E4=B9=8B=E5=89=8D=E7=9A=84=E8=BD=AC=E5=8A=9E=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/aspect/ProcessAspect.java | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/aspect/ProcessAspect.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/aspect/ProcessAspect.java index 7e815f3d..e422f808 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/aspect/ProcessAspect.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/aspect/ProcessAspect.java @@ -2,12 +2,14 @@ package com.jero.modules.activiti.process.aspect; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.jero.common.constant.enums.LanguageEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.MessageUtils; import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.process.esinspectplan.common.EsInspectPlanCommon; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.Process; @@ -17,8 +19,10 @@ import org.activiti.engine.RepositoryService; import org.activiti.engine.TaskService; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.task.Task; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @@ -26,9 +30,7 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; /** * @ClassName: 流程aop @@ -49,6 +51,8 @@ public class ProcessAspect { private RepositoryService repositoryService; @Resource private ProcessApprovalRecordService processApprovalRecordService; + private static final String PROCESS_ALL = "processAll"; + private static final List SPECIAL_NODE = Arrays.asList(EsInspectPlanCommon.PROCESS_NODE_3); // 流程审批 @Pointcut("execution(public * com.jero.modules.activiti.process..*Controller.flowApproval(..))") @@ -71,7 +75,7 @@ public class ProcessAspect { log.info("==========流程合法性校验前置方法开始=========="); if (!Objects.isNull(jp.getArgs())) { Map map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class); - Object object = map.get("processAll"); + Object object = map.get(PROCESS_ALL); ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class); if (checkTaskExistence(processAll.getTaskId())){ if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())){ @@ -99,7 +103,7 @@ public class ProcessAspect { log.info("==========流程会签节点驳回一票否决前置方法开始=========="); if (!Objects.isNull(jp.getArgs())) { Map map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class); - Object object = map.get("processAll"); + Object object = map.get(PROCESS_ALL); ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class); Object objectMap = map.get("map"); @@ -120,6 +124,53 @@ public class ProcessAspect { log.info("==========流程会签节点驳回一票否决前置方法结束=========="); } + @AfterReturning("processServiceFlowReject()") + public void doAfter(JoinPoint jp) { + log.info("==========流程驳回,若驳回到的节点之前经过转办,则驳回到转办人手里后置方法开始=========="); + if (!Objects.isNull(jp.getArgs())) { + Map map = JSON.parseObject(JSON.toJSONString(jp.getArgs()[0]), Map.class); + Object object = map.get(PROCESS_ALL); + ProcessAll processAll = JSON.parseObject(JSON.toJSONString(object), ProcessAll.class); + + Object objectMap = map.get("map"); + Map stringObjectMap = JSON.parseObject(JSON.toJSONString(objectMap), Map.class); + // 特殊节点排除 + if ((stringObjectMap.containsKey("pass") && !(boolean) stringObjectMap.get("pass")) && !SPECIAL_NODE.contains(processAll.getNodeId())){ + // 驳回的节点 + List processApprovalRecordList = processApprovalRecordService.list( + new LambdaQueryWrapper() + .eq(ProcessApprovalRecord::getProcessInstanceId, processAll.getProcessInstanceId()) + .orderByDesc(ProcessApprovalRecord::getCreateTime)); + if (!processApprovalRecordList.isEmpty()){ + ProcessApprovalRecord processApprovalRecord = processApprovalRecordList.get(0); + processApprovalRecordList.remove(0); + Optional optional = processApprovalRecordList.stream().filter(v -> + v.getTaskName().equals(processApprovalRecord.getTaskName()) + && v.getNodeId().equals(processApprovalRecord.getNodeId())).findFirst(); + optional.ifPresent(v -> { + // 是否转办过 + if (StringUtils.isNotBlank(v.getTransferBy())){ + // 转办给转办人 + taskService.setAssignee(processApprovalRecord.getTaskId(), v.getUserId()); + // 更新流程审批记录表 + processApprovalRecordService.update( + new LambdaUpdateWrapper() + .eq(ProcessApprovalRecord::getTaskId, processApprovalRecord.getTaskId()) + .set(ProcessApprovalRecord::getUserId, v.getUserId()) + .set(ProcessApprovalRecord::getOriginUserId, v.getUserId())); + } + }); + } + } + } + log.info("==========流程驳回,若驳回到的节点之前经过转办,则驳回到转办人手里后置方法结束=========="); + } + + /** + * 是否会签节点 + * @param taskId + * @return + */ public boolean isMultiTask(String taskId){ // 根据流程实例id查询 Task task = taskService.createTaskQuery()