Merge branch 'feature/REQ-3023' into 'master'

Feature/req 3023

See merge request universal/infrastructure/backend/workflow-engine!15
This commit is contained in:
金海洋 2024-12-25 02:07:39 +00:00
commit 41ff7bca68
8 changed files with 44 additions and 42 deletions

View File

@ -8,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 推动业务节点继续执行
@ -20,7 +21,9 @@ import javax.validation.constraints.NotBlank;
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BpmnActivityTriggerDTO {
public class BpmnActivityTriggerDTO implements Serializable {
private static final long serialVersionUID = 1759998765977414031L;
/**
* 业务节点的触发 ID
@ -34,4 +37,9 @@ public class BpmnActivityTriggerDTO {
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
private Boolean async = true;
/**
* 流程定义节点id
*/
private String activityId;
}

View File

@ -75,6 +75,9 @@ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavi
eventDispatcher.dispatchEvent(new ExtTaskInstUpdateEvent(execution.getProcessInstanceId(),
receiveTask.getId(), task.getId(), APPROVED),
processEngineConfiguration.getEngineCfgKey());
// 解决两个业务节点相邻时无法正确的往下流转的问题
TaskHelper.deleteTask(task, null, true, true, true);
} else {
log.warn("ReceiveTask is null, executionId: {}, activityId: {}", execution.getId(),
execution.getCurrentActivityId());

View File

@ -5,6 +5,7 @@ import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.engine.job.AsyncActivityTriggerJobHandler;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
@ -30,6 +31,7 @@ import static cn.axzo.workflow.common.code.BpmnTaskRespCode.ACTIVITY_TRIGGER_NOT
*/
public class CustomActivityTriggerAsyncCmd extends AbstractCommand<String> implements Serializable {
private static final long serialVersionUID = 4037000685442842145L;
private static final Logger log = LoggerFactory.getLogger(CustomActivityTriggerAsyncCmd.class);
private final BpmnActivityTriggerDTO dto;
@ -46,9 +48,11 @@ public class CustomActivityTriggerAsyncCmd extends AbstractCommand<String> imple
public String execute(CommandContext commandContext) {
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
Execution execution = runtimeService.createExecutionQuery().executionId(dto.getTriggerId()).singleResult();
if (Objects.isNull(execution)) {
TaskEntity task = (TaskEntity) processEngineConfiguration.getTaskService().createTaskQuery()
.executionId(dto.getTriggerId())
.taskDefinitionKey(StringUtils.isBlank(dto.getActivityId()) ? null : dto.getActivityId())
.singleResult();
if (Objects.isNull(task)) {
throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId());
}
@ -59,7 +63,10 @@ public class CustomActivityTriggerAsyncCmd extends AbstractCommand<String> imple
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
TaskService taskService = processEngineConfiguration.getTaskService();
TaskEntity task = (TaskEntity) taskService.createTaskQuery().executionId(dto.getTriggerId()).singleResult();
TaskEntity task = (TaskEntity) taskService.createTaskQuery()
.executionId(dto.getTriggerId())
.taskDefinitionKey(StringUtils.isBlank(dto.getActivityId()) ? null : dto.getActivityId())
.singleResult();
JobService jobService = processEngineConfiguration.getJobServiceConfiguration().getJobService();
JobEntity job = jobService.createJob();

View File

@ -1,8 +1,9 @@
package cn.axzo.workflow.core.engine.cmd;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
@ -14,8 +15,8 @@ import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.util.Objects;
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.ACTIVITY_TRIGGER_NOT_EXISTS;
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.addComment;
/**
@ -26,6 +27,7 @@ import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.addCommen
*/
public class CustomActivityTriggerCmd extends AbstractCommand<Void> implements Serializable {
private static final long serialVersionUID = 5806130509691903321L;
private static final Logger log = LoggerFactory.getLogger(CustomActivityTriggerCmd.class);
private final BpmnActivityTriggerDTO dto;
@ -41,10 +43,12 @@ public class CustomActivityTriggerCmd extends AbstractCommand<Void> implements S
@Override
public Void execute(CommandContext commandContext) {
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
CommandContextUtil.getProcessEngineConfiguration(commandContext);
TaskEntity task = (TaskEntity) processEngineConfiguration.getTaskService()
.createTaskQuery().executionId(dto.getTriggerId()).singleResult();
TaskEntity task = (TaskEntity) processEngineConfiguration.getTaskService().createTaskQuery()
.executionId(dto.getTriggerId())
.taskDefinitionKey(StringUtils.isBlank(dto.getActivityId()) ? null : dto.getActivityId())
.singleResult();
if (Objects.isNull(task)) {
throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId());
}

View File

@ -3,7 +3,6 @@ package cn.axzo.workflow.core.engine.cmd;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.common.model.request.form.FormPermissionMetaInfo;
import cn.axzo.workflow.common.util.ExpressionUtil;
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
import cn.axzo.workflow.core.common.utils.FormHelper;
import cn.axzo.workflow.core.repository.entity.ExtAxBpmnFormRelation;
@ -22,29 +21,18 @@ import org.flowable.form.api.FormDefinition;
import org.flowable.form.api.FormEngineConfigurationApi;
import org.flowable.form.api.FormInstanceInfo;
import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.api.FormService;
import org.flowable.form.model.FormField;
import org.flowable.form.model.SimpleFormModel;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_COMPLETE_FAIL_NOT_EXISTS;
import static cn.axzo.workflow.common.code.FormInstanceRespCode.FORM_PARAM_ERROR;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_DEFAULT_VALUE;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_EDITABLE;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_HIDDEN;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_READONLY;
import static cn.axzo.workflow.common.constant.FormConstants.FIELD_PROPERTY_REQUIRED;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
@ -201,7 +189,9 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
Map<String, List<BpmnTaskDelegateAssigner>> assignerMap = new HashMap<>();
logs.forEach(e -> {
if (assignerMap.containsKey(e.getActivityId())) {
assignerMap.get(e.getActivityId()).addAll(e.getAssigneeFull());
if (!CollectionUtils.isEmpty(e.getAssigneeFull())) {
assignerMap.get(e.getActivityId()).addAll(e.getAssigneeFull());
}
} else {
assignerMap.put(e.getActivityId(), new ArrayList<>(ListUtils.emptyIfNull(e.getAssigneeFull())));
}
@ -238,7 +228,7 @@ public class GetFormInstanceAndPermissionCmd implements Command<FormInstanceInfo
FormDefinition formDefinition = formRepositoryService.createFormDefinitionQuery().deploymentId(relation.getFormDeploymentId()).singleResult();
// 获取表单定义+字段内容
return commandContext.getCommandExecutor().execute(new CustomGetFormInstanceModelCmd(null, null, formDefinition.getId(), taskId, processInstanceId, instance.getTenantId() ,null, false ));
return commandContext.getCommandExecutor().execute(new CustomGetFormInstanceModelCmd(null, null, formDefinition.getId(), taskId, processInstanceId, instance.getTenantId(), null, false));
}
private void preCheckParam() {

View File

@ -71,7 +71,7 @@ public class AsyncTermNodeAlterJobHandler extends AbstractJobHandler implements
alterDTO.setTaskId(task.getId());
alterDTO.setStartTime(task.getCreateTime());
alterDTO.setPrettyStartTime(DateUtil.formatDateTime(task.getCreateTime()));
if (refreshProperties.getSendDingTalk()) {
if (Boolean.TRUE.equals(refreshProperties.getSendDingTalk())) {
alter.invoke(alterDTO);
}
}

View File

@ -11,6 +11,7 @@ import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.Process;
@ -29,22 +30,11 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import static cn.axzo.workflow.common.constant.BpmnConstants.AND_SIGN_EXPRESSION;
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_ADVICE;
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
import static cn.axzo.workflow.common.constant.BpmnConstants.HIDDEN_ASSIGNEE_ID;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_ASSIGNEE;
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
import static cn.axzo.workflow.common.constant.BpmnConstants.*;
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.nobody;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AND;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.GENERAL;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.*;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.DELETED;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.*;
import static cn.axzo.workflow.core.common.enums.BpmnProcessTaskResultEnum.PENDING;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApprovalMethod;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getNodeType;
@ -147,7 +137,7 @@ public class TaskEntityEventHandle implements EntityEventHandle<TaskEntity> {
BpmnTaskDelegateAssigner assignee = BpmnTaskDelegateAssigner.toObjectCompatible(taskEntity.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + taskEntity.getId()));
if (Objects.nonNull(assignee) && !Objects.equals(NO_ASSIGNEE, assignee.buildAssigneeId())) {
update.setAssigneeFull(Lists.newArrayList(assignee));
update.setAssigneeId(Long.valueOf(assignee.getPersonId()));
update.setAssigneeId(NumberUtils.isDigits(assignee.getPersonId()) ? Long.valueOf(assignee.getPersonId()) : null);
update.setAssigneeTenantId(assignee.getTenantId());
update.setAssigneeName(assignee.getAssignerName());
update.setAssigneeOuId(assignee.getOuId());

View File

@ -62,7 +62,7 @@ public class BpmnProcessActivityController extends BasicPopulateAvatarController
@Deprecated
public CommonResponse<Boolean> trigger(@NotBlank(message = "触发 ID 不能为空") @RequestParam String triggerId) {
log.info("业务节点唤醒 trigger2 ===>>>参数:{}", triggerId);
return trigger(new BpmnActivityTriggerDTO(triggerId, true));
return trigger(new BpmnActivityTriggerDTO(triggerId, true, null));
}
/**