diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCountersignUserTaskCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCountersignUserTaskCmd.java index 4d5f0a7ec..853c99ab4 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCountersignUserTaskCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCountersignUserTaskCmd.java @@ -11,6 +11,7 @@ import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; +import org.flowable.common.engine.impl.cfg.IdGenerator; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; @@ -22,10 +23,12 @@ import org.flowable.task.api.TaskInfo; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.flowable.task.service.impl.persistence.entity.TaskEntity; +import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl; import org.springframework.util.CollectionUtils; import java.io.Serializable; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,6 +38,7 @@ import java.util.stream.Collectors; import static cn.axzo.workflow.common.code.OtherRespCode.ASSIGNEE_NODE_ID_NOT_EXISTS; import static cn.axzo.workflow.common.constant.BpmnConstants.COUNTERSIGN_ASSIGNER_SHOW_NUMBER; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT; +import static cn.axzo.workflow.common.enums.BpmnCountersignTypeEnum.FORWARD_COUNTERSIGN; import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.COUNTERSIGN; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getCategoryVersion; import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment; @@ -130,9 +134,11 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand implemen switch (countersignType) { case FORWARD_COUNTERSIGN: // 加签的一种方式:前加签,具体定义由后续产品需求来定 + forwardCountSign(commandContext, task, valuTargetAssigneeList); break; case BACK_COUNTERSIGN: // 加签的另一种方式 + backCountSign(commandContext, task, valuTargetAssigneeList); break; default: // 共享签,不区分顺序 @@ -143,6 +149,57 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand implemen return null; } + /** + * 前加签 + * + * @param commandContext + * @param task + * @param valuTargetAssigneeList + */ + private void forwardCountSign(CommandContext commandContext, TaskEntity task, List valuTargetAssigneeList) { + ProcessEngineConfigurationImpl processEngineConfiguration = + CommandContextUtil.getProcessEngineConfiguration(commandContext); + IdGenerator idGenerator = processEngineConfiguration.getIdGenerator(); + TaskService taskService = processEngineConfiguration.getTaskService(); + if (task instanceof TaskEntityImpl) { + TaskEntityImpl taskEntity = (TaskEntityImpl) task; + taskEntity.setCountEnabled(true); + taskEntity.setOwner(task.getAssignee()); + taskEntity.setAssignee(null); + taskEntity.setScopeType(FORWARD_COUNTERSIGN.getType()); + taskService.saveTask(taskEntity); + + valuTargetAssigneeList.forEach(e -> { + // TODO 创建新的任务 + TaskEntityImpl subTask = (TaskEntityImpl) taskService.newTask(idGenerator.getNextId()); + subTask.setName(task.getName()); + subTask.setDescription(task.getDescription()); + subTask.setCategory(task.getCategory()); + subTask.setParentTaskId(task.getId()); + subTask.setProcessDefinitionId(task.getProcessDefinitionId()); + subTask.setProcessInstanceId(task.getProcessInstanceId()); + subTask.setTaskDefinitionKey(task.getTaskDefinitionKey()); + subTask.setTaskDefinitionId(task.getTaskDefinitionId()); + subTask.setPriority(task.getPriority()); + subTask.setCreateTime(new Date()); + subTask.setTenantId(task.getTenantId()); + subTask.setAssignee(e.buildAssigneeId()); + taskService.saveTask(subTask); + }); + } + } + + /** + * 后加签 + * + * @param commandContext + * @param task + * @param valuTargetAssigneeList + */ + private void backCountSign(CommandContext commandContext, TaskEntity task, List valuTargetAssigneeList) { + + } + /** * 共享签 * @@ -167,7 +224,6 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand implemen private void resolveOriginTask(CommandContext commandContext, ExtAxHiTaskInstService extAxHiTaskInstService, TaskService taskService, TaskEntity task) { - // 构建评论内容 StringBuilder message = new StringBuilder("添加"); int end = Math.min(targetTaskAssigneeList.size(), COUNTERSIGN_ASSIGNER_SHOW_NUMBER); //加签人员数量显示指定个数 @@ -181,6 +237,19 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand implemen message.append("等"); } message.append(targetTaskAssigneeList.size()).append("人进行审批"); + + switch (countersignType) { + case FORWARD_COUNTERSIGN: + message.append("(前加签)"); + break; + case BACK_COUNTERSIGN: + message.append("(后加签)"); + break; + default: + message.append("(并加签)"); + break; + } + Task virtualTask = createVirtualTask(commandContext, extAxHiTaskInstService, task.getProcessInstanceId(), task.getName(), task.getTaskDefinitionKey(), advice, originTaskAssignee, COUNTERSIGN.getStatus(), new AddComment(message.toString())); batchAddAttachment(commandContext, task.getProcessInstanceId(), task, attachmentList, originTaskAssignee);