fix(企标稽查计划): 驳回若驳回到的节点之前经过转办,则发给之前的转办人

This commit is contained in:
yjz
2023-12-15 19:06:41 +08:00
parent ad35f5197b
commit 67520905d1
@@ -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<String> 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<String, Objects> 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<String, Objects> 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<String, Objects> 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<String, Object> stringObjectMap = JSON.parseObject(JSON.toJSONString(objectMap), Map.class);
// 特殊节点排除
if ((stringObjectMap.containsKey("pass") && !(boolean) stringObjectMap.get("pass")) && !SPECIAL_NODE.contains(processAll.getNodeId())){
// 驳回的节点
List<ProcessApprovalRecord> processApprovalRecordList = processApprovalRecordService.list(
new LambdaQueryWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getProcessInstanceId, processAll.getProcessInstanceId())
.orderByDesc(ProcessApprovalRecord::getCreateTime));
if (!processApprovalRecordList.isEmpty()){
ProcessApprovalRecord processApprovalRecord = processApprovalRecordList.get(0);
processApprovalRecordList.remove(0);
Optional<ProcessApprovalRecord> 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<ProcessApprovalRecord>()
.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()