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

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

parent 95278107
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.uasp.bpm.ActivityKind;
import com.huigou.uasp.bpm.CooperationModelKind;
......@@ -13,6 +8,10 @@ import com.huigou.util.ClassHelper;
import com.huigou.util.DateUtil;
import com.huigou.util.StringUtil;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/**
* 流程环节处理人分组
*
......@@ -37,8 +36,8 @@ public class ProcUnitHandlerGroup implements Serializable {
private boolean isCurrentGroup;
public ProcUnitHandlerGroup() {
groupName = new java.util.ArrayList<String>();
handlers = new java.util.ArrayList<Map<String, Object>>();
groupName = new java.util.ArrayList<>();
handlers = new java.util.ArrayList<>();
}
public ProcUnitHandlerGroup(Integer groupId) {
......@@ -138,5 +137,16 @@ public class ProcUnitHandlerGroup implements Serializable {
}
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;
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.uasp.bpm.CooperationModelKind;
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.*;
import com.huigou.uasp.bpm.configuration.domain.model.TaskExecuteMode;
import com.huigou.uasp.bpm.engine.application.ActApplication;
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.ProcUnitHandler;
import com.huigou.uasp.bpm.engine.domain.model.ProcUnitHandlerBase;
import com.huigou.uasp.bpm.engine.domain.model.RuntimeTaskExtension;
import com.huigou.uasp.bpm.event.ProcessEventContext;
import com.huigou.util.Constants;
import com.huigou.util.SDO;
import com.huigou.util.StringUtil;
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;
/**
* 打回命令
......@@ -202,6 +197,16 @@ public class ReplenishCmd implements Command<Integer> {
runtimeTaskExtension.setPreviousId(currentTaskId);
runtimeTaskExtension.setExecutionId(hiTaskInstExtension.getExecutionId());
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);
......
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