Commit 5edbd649 authored by 雍欢's avatar 雍欢

修复:多次打回到同一个节点的时候,第二次开始就直接没保存处理结果的BUG

parent 95278107
package com.huigou.uasp.bpm.engine.domain.model; package com.huigou.uasp.bpm.engine.domain.model;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.huigou.cache.SystemCache; import com.huigou.cache.SystemCache;
import com.huigou.uasp.bpm.ActivityKind; import com.huigou.uasp.bpm.ActivityKind;
import com.huigou.uasp.bpm.CooperationModelKind; import com.huigou.uasp.bpm.CooperationModelKind;
...@@ -13,9 +8,13 @@ import com.huigou.util.ClassHelper; ...@@ -13,9 +8,13 @@ import com.huigou.util.ClassHelper;
import com.huigou.util.DateUtil; import com.huigou.util.DateUtil;
import com.huigou.util.StringUtil; import com.huigou.util.StringUtil;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* 流程环节处理人分组 * 流程环节处理人分组
* *
* @author gongmm * @author gongmm
*/ */
public class ProcUnitHandlerGroup implements Serializable { public class ProcUnitHandlerGroup implements Serializable {
...@@ -37,8 +36,8 @@ public class ProcUnitHandlerGroup implements Serializable { ...@@ -37,8 +36,8 @@ public class ProcUnitHandlerGroup implements Serializable {
private boolean isCurrentGroup; private boolean isCurrentGroup;
public ProcUnitHandlerGroup() { public ProcUnitHandlerGroup() {
groupName = new java.util.ArrayList<String>(); groupName = new java.util.ArrayList<>();
handlers = new java.util.ArrayList<Map<String, Object>>(); handlers = new java.util.ArrayList<>();
} }
public ProcUnitHandlerGroup(Integer groupId) { public ProcUnitHandlerGroup(Integer groupId) {
...@@ -138,5 +137,16 @@ public class ProcUnitHandlerGroup implements Serializable { ...@@ -138,5 +137,16 @@ public class ProcUnitHandlerGroup implements Serializable {
} }
handlers.add(map); handlers.add(map);
// 排序,确保未处理的人排在最后面
Map<Integer, List<Map<String, Object>>> groupByStatus = handlers.stream().collect(Collectors.groupingBy(h -> Objects.equals(h.get("status"), 0) ? 0 : 1));
handlers = new ArrayList<>(handlers.size());
// 已处理的handler放在前面
if (groupByStatus.containsKey(1)) {
handlers.addAll(groupByStatus.get(1));
}
// 未处理的handler放在后面
if (groupByStatus.containsKey(0)) {
handlers.addAll(groupByStatus.get(0));
}
} }
} }
package com.huigou.uasp.bpm.cmd; package com.huigou.uasp.bpm.cmd;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.task.Task;
import org.springframework.util.Assert;
import com.huigou.context.ThreadLocalUtil; import com.huigou.context.ThreadLocalUtil;
import com.huigou.uasp.bpm.CooperationModelKind; import com.huigou.uasp.bpm.*;
import com.huigou.uasp.bpm.MessageSendModel;
import com.huigou.uasp.bpm.MessageSenderManager;
import com.huigou.uasp.bpm.ProcessAction;
import com.huigou.uasp.bpm.TaskKind;
import com.huigou.uasp.bpm.TaskScope;
import com.huigou.uasp.bpm.TaskStatus;
import com.huigou.uasp.bpm.configuration.domain.model.TaskExecuteMode; import com.huigou.uasp.bpm.configuration.domain.model.TaskExecuteMode;
import com.huigou.uasp.bpm.engine.application.ActApplication; import com.huigou.uasp.bpm.engine.application.ActApplication;
import com.huigou.uasp.bpm.engine.application.ProcUnitHandlerApplication; import com.huigou.uasp.bpm.engine.application.ProcUnitHandlerApplication;
import com.huigou.uasp.bpm.engine.domain.model.HistoricTaskInstanceExtension; import com.huigou.uasp.bpm.engine.domain.model.HistoricTaskInstanceExtension;
import com.huigou.uasp.bpm.engine.domain.model.ProcUnitHandler; import com.huigou.uasp.bpm.engine.domain.model.ProcUnitHandler;
import com.huigou.uasp.bpm.engine.domain.model.ProcUnitHandlerBase;
import com.huigou.uasp.bpm.engine.domain.model.RuntimeTaskExtension; import com.huigou.uasp.bpm.engine.domain.model.RuntimeTaskExtension;
import com.huigou.uasp.bpm.event.ProcessEventContext; import com.huigou.uasp.bpm.event.ProcessEventContext;
import com.huigou.util.Constants; import com.huigou.util.Constants;
import com.huigou.util.SDO; import com.huigou.util.SDO;
import com.huigou.util.StringUtil; import com.huigou.util.StringUtil;
import com.huigou.util.Util; import com.huigou.util.Util;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.task.Task;
import org.springframework.util.Assert;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 打回命令 * 打回命令
* <p> * <p>
* 打回的作用是补充、完善信息,修改错误数据,加减处理人员。 * 打回的作用是补充、完善信息,修改错误数据,加减处理人员。
* *
* @author gongmm * @author gongmm
*/ */
public class ReplenishCmd implements Command<Integer> { public class ReplenishCmd implements Command<Integer> {
...@@ -98,7 +93,7 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -98,7 +93,7 @@ public class ReplenishCmd implements Command<Integer> {
getTaskService().saveTask(task); getTaskService().saveTask(task);
HistoricTaskInstanceEntity historicTaskInstance = Context.getCommandContext().getDbSqlSession() HistoricTaskInstanceEntity historicTaskInstance = Context.getCommandContext().getDbSqlSession()
.findInCache(HistoricTaskInstanceEntity.class, task.getId()); .findInCache(HistoricTaskInstanceEntity.class, task.getId());
historicTaskInstance.setProcessInstanceId(task.getProcessInstanceId()); historicTaskInstance.setProcessInstanceId(task.getProcessInstanceId());
RuntimeTaskExtension runtimeTaskExtension = new RuntimeTaskExtension(); RuntimeTaskExtension runtimeTaskExtension = new RuntimeTaskExtension();
...@@ -116,7 +111,7 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -116,7 +111,7 @@ public class ReplenishCmd implements Command<Integer> {
runtimeTaskExtension.setExecutorFullId(hiTaskInstExtension.getExecutorFullId()); runtimeTaskExtension.setExecutorFullId(hiTaskInstExtension.getExecutorFullId());
runtimeTaskExtension.setExecutorFullName(hiTaskInstExtension.getExecutorFullName()); runtimeTaskExtension.setExecutorFullName(hiTaskInstExtension.getExecutorFullName());
return runtimeTaskExtension; return runtimeTaskExtension;
} }
...@@ -139,7 +134,7 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -139,7 +134,7 @@ public class ReplenishCmd implements Command<Integer> {
* 更新新任务为等待状态 * 更新新任务为等待状态
*/ */
RuntimeTaskExtension runtimeTaskExtension = createReplenishTask(hiTaskInst); RuntimeTaskExtension runtimeTaskExtension = createReplenishTask(hiTaskInst);
HistoricTaskInstanceExtension hiTaskInstExtension = actApplication.loadHistoricTaskInstanceExtension(currentTaskId); HistoricTaskInstanceExtension hiTaskInstExtension = actApplication.loadHistoricTaskInstanceExtension(currentTaskId);
if (StringUtil.isNotBlank(procUnitHandlerId) && !ProcessAction.REPLENISH.equals(hiTaskInstExtension.getGenerateReason())) { if (StringUtil.isNotBlank(procUnitHandlerId) && !ProcessAction.REPLENISH.equals(hiTaskInstExtension.getGenerateReason())) {
// 1 给本环节生成新任务 // 1 给本环节生成新任务
...@@ -155,10 +150,10 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -155,10 +150,10 @@ public class ReplenishCmd implements Command<Integer> {
} }
ActivityImpl activity = commandContext.getExecutionEntityManager().findExecutionById(task.getProcessInstanceId()).getProcessDefinition() ActivityImpl activity = commandContext.getExecutionEntityManager().findExecutionById(task.getProcessInstanceId()).getProcessDefinition()
.findActivity(task.getTaskDefinitionKey()); .findActivity(task.getTaskDefinitionKey());
ExecutionEntity parentExecutionEntity = commandContext.getExecutionEntityManager().findExecutionById(task.getProcessInstanceId()) ExecutionEntity parentExecutionEntity = commandContext.getExecutionEntityManager().findExecutionById(task.getProcessInstanceId())
.findExecution(task.getTaskDefinitionKey()); .findExecution(task.getTaskDefinitionKey());
ExecutionEntity execution = parentExecutionEntity.createExecution(); ExecutionEntity execution = parentExecutionEntity.createExecution();
parentExecutionEntity.setVariableLocal("nrOfInstances", (Integer) parentExecutionEntity.getVariableLocal("nrOfInstances") + 1); parentExecutionEntity.setVariableLocal("nrOfInstances", (Integer) parentExecutionEntity.getVariableLocal("nrOfInstances") + 1);
...@@ -183,7 +178,7 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -183,7 +178,7 @@ public class ReplenishCmd implements Command<Integer> {
} }
} }
this.procUnitHandlerService.updateOtherProcUnitHandlersResultSystemComplete(newProcUnitHandler.getBizId(), newProcUnitHandler.getProcUnitId(), this.procUnitHandlerService.updateOtherProcUnitHandlersResultSystemComplete(newProcUnitHandler.getBizId(), newProcUnitHandler.getProcUnitId(),
newProcUnitHandler.getGroupId(), newProcUnitHandlerId, null); newProcUnitHandler.getGroupId(), newProcUnitHandlerId, null);
} }
// new task Id // new task Id
...@@ -193,7 +188,7 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -193,7 +188,7 @@ public class ReplenishCmd implements Command<Integer> {
if (CooperationModelKind.isChief(newProcUnitHandler.getCooperationModelId())) { if (CooperationModelKind.isChief(newProcUnitHandler.getCooperationModelId())) {
this.procUnitHandlerService.updateProcUnitHandlerAssistantChiefId(newProcUnitHandler.getBizId(), newProcUnitHandler.getProcUnitId(), this.procUnitHandlerService.updateProcUnitHandlerAssistantChiefId(newProcUnitHandler.getBizId(), newProcUnitHandler.getProcUnitId(),
procUnitHandlerId, newProcUnitHandler.getId()); procUnitHandlerId, newProcUnitHandler.getId());
} }
runtimeTaskExtension.setPreviousId(newTaskId); runtimeTaskExtension.setPreviousId(newTaskId);
...@@ -202,8 +197,18 @@ public class ReplenishCmd implements Command<Integer> { ...@@ -202,8 +197,18 @@ public class ReplenishCmd implements Command<Integer> {
runtimeTaskExtension.setPreviousId(currentTaskId); runtimeTaskExtension.setPreviousId(currentTaskId);
runtimeTaskExtension.setExecutionId(hiTaskInstExtension.getExecutionId()); runtimeTaskExtension.setExecutionId(hiTaskInstExtension.getExecutionId());
actApplication.updateTaskExtensionStatus(this.currentTaskId, TaskStatus.WAITED); actApplication.updateTaskExtensionStatus(this.currentTaskId, TaskStatus.WAITED);
SDO params = ThreadLocalUtil.getVariable(Constants.SDO, SDO.class);
ApprovalParameter approvalParameter = ApprovalParameter.newInstance(params);
String newProcUnitHandlerId = procUnitHandlerService.copyProcUnitHandler(procUnitHandlerId);
ProcUnitHandler newProcUnitHandler = procUnitHandlerService.loadProcUnitHandler(newProcUnitHandlerId);
newProcUnitHandler.setOpinion(approvalParameter.getHandleOpinion());
newProcUnitHandler.setResult(HandleResult.REPLENISH.getId());
newProcUnitHandler.setStatus(ProcUnitHandlerBase.Status.COMPLETED.getId());
newProcUnitHandler.setHandledDate(new Date());
procUnitHandlerService.saveProcUnitHandler(newProcUnitHandler);
} }
actApplication.saveTaskExtension(runtimeTaskExtension); actApplication.saveTaskExtension(runtimeTaskExtension);
ProcessEventContext.addNewProcessTask(runtimeTaskExtension.getId()); ProcessEventContext.addNewProcessTask(runtimeTaskExtension.getId());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment