This commit is contained in:
lvshaohua 2023-07-05 15:32:43 +08:00
parent d9b206f625
commit 66042357eb
8 changed files with 110 additions and 19 deletions

View File

@ -90,7 +90,7 @@ public class BpmTransformUtil {
if(StringUtils.isNotBlank(parentId)){
BpmJsonNode parentNode = childNodeMap.get(parentId);
if(parentNode!=null){
if(BpmFlowNodeType.NODE_CONDITION.getType().equals(parentNode.getType()) ){
if(BpmFlowNodeType.NODE_ROUTER.getType().equals(parentNode.getType()) ){
sequenceFlowId=parentNode.getId();
flow.setName(parentNode.getName());
if(!ObjectUtils.isEmpty(parentNode.getProperty()) && !Boolean.TRUE.equals(parentNode.getProperty().getDefaultCondition())){
@ -130,7 +130,7 @@ public class BpmTransformUtil {
public static String create(String fromId, BpmJsonNode flowNode, Process process,BpmnModel bpmnModel,List<SequenceFlow> sequenceFlows,Map<String,BpmJsonNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
String nodeType = flowNode.getType();
if (BpmFlowNodeType.NODE_CONDITION.isEqual(nodeType)) {
if (BpmFlowNodeType.NODE_ROUTER.isEqual(nodeType)) {
return createExclusiveGatewayBuilder(fromId, flowNode,process,bpmnModel,sequenceFlows,childNodeMap);
} else if (BpmFlowNodeType.NODE_TASK.isEqual(nodeType)) {
childNodeMap.put(flowNode.getId(),flowNode);
@ -242,7 +242,7 @@ public class BpmTransformUtil {
if (Objects.nonNull(childNode) &&StringUtils.isNotBlank(childNode.getId()) ) {
String parentId = childNode.getParentId();
BpmJsonNode parentChildNode = childNodeMap.get(parentId);
if(BpmFlowNodeType.NODE_CONDITION.getType().equals(parentChildNode.getType())){
if(BpmFlowNodeType.NODE_ROUTER.getType().equals(parentChildNode.getType())){
String endExId= parentChildNode.getId()+"end";
process.addFlowElement(createExclusiveGateWayEnd(endExId));
if (incoming == null || incoming.isEmpty()) {

View File

@ -1,4 +1,5 @@
package cn.axzo.workflow.core.listener;
public interface BpmProcessEventListener {
}

View File

@ -47,21 +47,12 @@ public class BpmTaskConvert {
task.getProcessInstanceId());
if (processInstance != null) {
String startUserId = processInstance.getStartUserId();
Long startWorkspaceId = null;
Long startIdentityId = null;
if (StringUtils.isNotBlank(startUserId)) {
String[] s = startUserId.split("_");
startWorkspaceId = Long.valueOf(s[0]);
startIdentityId = Long.valueOf(s[1]);
}
//convert
BpmTaskTodoPageItemRespVO.ProcessInstance processInstance1 = new BpmTaskTodoPageItemRespVO.ProcessInstance();
processInstance1.setId(processInstance.getId());
processInstance1.setName(processInstance.getName());
processInstance1.setProcessDefinitionId(processInstance.getProcessDefinitionId());
processInstance1.setStartWorkspaceId(startWorkspaceId);
processInstance1.setStartIdentityId(startIdentityId);
processInstance1.setStartIdentityId(Long.valueOf(startUserId));
respVO.setProcessInstance(processInstance1);
}
return respVO;

View File

@ -84,4 +84,20 @@ public class BpmJsonNode {
public void setBranches(List<BpmJsonNode> branches) {
this.branches = branches;
}
public BpmJsonNodeProperty getProperty() {
return property;
}
public void setProperty(BpmJsonNodeProperty property) {
this.property = property;
}
public Map getIncoming() {
return incoming;
}
public void setIncoming(Map incoming) {
this.incoming = incoming;
}
}

View File

@ -33,4 +33,7 @@ public class BpmTaskTodoBpmPageDTO extends BpmPageParam {
@ApiModelProperty(value = "结束的创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endCreateTime;
@ApiModelProperty(value = "审核单号", example = "20220622143500001")
private String customProInstId;
}

View File

@ -26,12 +26,11 @@ public class EngineExecutionStartListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
String currentActivityId = execution.getCurrentActivityId();
Process mainProcess = repositoryService.getBpmnModel(execution.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(currentActivityId);
String variable=currentActivityId+"assigneeList";
List usersValue = (List) execution.getVariable(variable);
if(usersValue==null){
Process mainProcess = repositoryService.getBpmnModel(execution.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(currentActivityId);
BpmTaskCalculateDTO calculateDTO = new BpmTaskCalculateDTO();
calculateDTO.setTaskId(userTask.getId());
@ -43,7 +42,6 @@ public class EngineExecutionStartListener implements ExecutionListener {
calculateDTO.setTaskDefinitionKey(currentActivityId);
List<BpmTaskDelegateAssigner> assigners = bpmTaskDelegate.calculateAssignerAtExecution(calculateDTO);
List<String> assigneeIdList= new ArrayList<>();
for (BpmTaskDelegateAssigner user : assigners) {
assigneeIdList.add(user.getAssignerId());

View File

@ -215,4 +215,19 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
return BpmCollectionUtils.convertMap(getProcessInstances(ids),
ProcessInstance::getProcessInstanceId);
}
/**
* 获得历史的流程实例 Map
*
* @param ids 流程实例的编号集合
* @return 历史的流程实例列表 Map
*/
public Map<String, HistoricProcessInstance> getHistoricProcessInstanceMap(Set<String> ids) {
return BpmCollectionUtils.convertMap(getHistoricProcessInstances(ids),
HistoricProcessInstance::getId);
}
public List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids) {
return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list();
}
}

View File

@ -14,6 +14,7 @@ import cn.axzo.workflow.core.service.converter.BpmTaskConvert;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.task.BpmTaskTodoBpmPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskDonePageItemRespVO;
import cn.axzo.workflow.core.service.dto.response.task.BpmTaskTodoPageItemRespVO;
import cn.azxo.framework.common.utils.StringUtils;
import cn.hutool.core.collection.CollUtil;
@ -24,10 +25,12 @@ import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -41,6 +44,7 @@ import java.util.stream.Collectors;
import static cn.axzo.workflow.core.common.BpmConstants.*;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.*;
import static cn.axzo.workflow.core.common.utils.BpmCollectionUtils.convertMap;
import static cn.axzo.workflow.core.common.utils.BpmCollectionUtils.convertSet;
@Service
@ -103,7 +107,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
List<BpmTaskTodoPageItemRespVO> bpmTaskTodoPageItemRespVOS = BpmTaskConvert.convertList1(
tasks, processInstanceMap);
Map<String, BpmProcessInstanceExtDO> instanceExtMap = BpmCollectionUtils.convertMap(
Map<String, BpmProcessInstanceExtDO> instanceExtMap = convertMap(
bpmProcessInstanceExtMapper.selectList(
new LambdaQueryWrapper<BpmProcessInstanceExtDO>().in(
BpmProcessInstanceExtDO::getProcessInstanceId, processInstanceIds)),
@ -123,7 +127,70 @@ public class BpmTaskServiceImpl implements BpmTaskService {
@Override
public BpmPageResult<BpmTaskTodoPageItemRespVO> getDoneTaskPage(BpmTaskTodoBpmPageDTO taskDonePageD) {
return null;
BpmProcessInstanceExtDO one = null;
if (org.springframework.util.StringUtils.hasLength(taskDonePageD.getCustomProInstId())) {
one = bpmProcessInstanceExtMapper.selectOne(
BpmProcessInstanceExtDO::getCustomProInstId, taskDonePageD.getCustomProInstId());
}
// 查询已办任务
HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
.finished() // 已完成
.taskAssignee(taskDonePageD.getUserId()) // 分配给自己
.orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序
if (StrUtil.isNotBlank(taskDonePageD.getName())) {
taskQuery.taskNameLike("%" + taskDonePageD.getName() + "%");
}
if (taskDonePageD.getBeginCreateTime() != null) {
taskQuery.taskCreatedAfter(taskDonePageD.getBeginCreateTime());
}
if (taskDonePageD.getEndCreateTime() != null) {
taskQuery.taskCreatedBefore(taskDonePageD.getEndCreateTime());
}
if (org.springframework.util.StringUtils.hasLength(taskDonePageD.getCategory())) {
List<String> categorys = Arrays.stream(taskDonePageD.getCategory().split(",")).map(String::trim).collect(Collectors.toList());
taskQuery.processCategoryIn(categorys);
}
if (Objects.nonNull(one)) {
taskQuery.processInstanceId(one.getProcessInstanceId());
}
// 执行查询
List<HistoricTaskInstance> tasks = taskQuery.listPage((taskDonePageD.getPageNo() - 1) * taskDonePageD.getPageSize(),
taskDonePageD.getPageSize());
if (CollUtil.isEmpty(tasks)) {
return BpmPageResult.empty(taskQuery.count());
}
// 获得 TaskExtDO Map
List<BpmTaskExtDO> bpmTaskExtDOs = taskExtMapper.selectListByTaskIds(
convertSet(tasks, HistoricTaskInstance::getId));
Map<String, BpmTaskExtDO> bpmTaskExtDOMap = convertMap(bpmTaskExtDOs, BpmTaskExtDO::getTaskId);
// 获得 ProcessInstance Map
Set<String> processInstanceIds = convertSet(tasks, HistoricTaskInstance::getProcessInstanceId);
Map<String, HistoricProcessInstance> historicProcessInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
processInstanceIds);
// 拼接数据
List<BpmTaskDonePageItemRespVO> bpmTaskDonePageItemRespVOS = BpmTaskConvert.convertList2(
tasks, bpmTaskExtDOMap, historicProcessInstanceMap);
Map<String, BpmProcessInstanceExtDO> instanceExtMap = convertMap(
bpmProcessInstanceExtMapper.selectList(
new LambdaQueryWrapper<BpmProcessInstanceExtDO>().in(
BpmProcessInstanceExtDO::getProcessInstanceId, processInstanceIds)),
BpmProcessInstanceExtDO::getProcessInstanceId, Function.identity(), (s, t) -> s);
// 设置发起人姓名
bpmTaskDonePageItemRespVOS.forEach(vo -> {
BpmTaskTodoPageItemRespVO.ProcessInstance processInstance = vo.getProcessInstance();
BpmProcessInstanceExtDO instanceExtDO = instanceExtMap.get(processInstance.getId());
processInstance.setCustomProInstId(instanceExtDO.getCustomProInstId());
processInstance.setCategory(instanceExtDO.getCategory());
processInstance.setStartUserName(instanceExtDO.getStartUserName());
processInstance.setStartTime(instanceExtDO.getCreateTime());
});
return new BpmPageResult(bpmTaskDonePageItemRespVOS, taskQuery.count());
}
@Override