Merge branch 'feature/countersign_ext' into dev

This commit is contained in:
wangli 2025-10-10 15:28:39 +08:00
commit e555b06a85

View File

@ -11,6 +11,7 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.BpmnModel; 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.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService; 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.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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.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.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.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.common.enums.BpmnProcessInstanceResultEnum.COUNTERSIGN;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getCategoryVersion; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getCategoryVersion;
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment; import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment;
@ -130,9 +134,11 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
switch (countersignType) { switch (countersignType) {
case FORWARD_COUNTERSIGN: case FORWARD_COUNTERSIGN:
// 加签的一种方式前加签具体定义由后续产品需求来定 // 加签的一种方式前加签具体定义由后续产品需求来定
forwardCountSign(commandContext, task, valuTargetAssigneeList);
break; break;
case BACK_COUNTERSIGN: case BACK_COUNTERSIGN:
// 加签的另一种方式 // 加签的另一种方式
backCountSign(commandContext, task, valuTargetAssigneeList);
break; break;
default: default:
// 共享签不区分顺序 // 共享签不区分顺序
@ -143,6 +149,57 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
return null; return null;
} }
/**
* 前加签
*
* @param commandContext
* @param task
* @param valuTargetAssigneeList
*/
private void forwardCountSign(CommandContext commandContext, TaskEntity task, List<BpmnTaskDelegateAssigner> 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<BpmnTaskDelegateAssigner> valuTargetAssigneeList) {
}
/** /**
* 共享签 * 共享签
* *
@ -167,7 +224,6 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
private void resolveOriginTask(CommandContext commandContext, ExtAxHiTaskInstService extAxHiTaskInstService, private void resolveOriginTask(CommandContext commandContext, ExtAxHiTaskInstService extAxHiTaskInstService,
TaskService taskService, TaskEntity task) { TaskService taskService, TaskEntity task) {
// 构建评论内容
StringBuilder message = new StringBuilder("添加"); StringBuilder message = new StringBuilder("添加");
int end = Math.min(targetTaskAssigneeList.size(), COUNTERSIGN_ASSIGNER_SHOW_NUMBER); int end = Math.min(targetTaskAssigneeList.size(), COUNTERSIGN_ASSIGNER_SHOW_NUMBER);
//加签人员数量显示指定个数 //加签人员数量显示指定个数
@ -181,6 +237,19 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
message.append(""); message.append("");
} }
message.append(targetTaskAssigneeList.size()).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 virtualTask = createVirtualTask(commandContext, extAxHiTaskInstService, task.getProcessInstanceId(), task.getName(),
task.getTaskDefinitionKey(), advice, originTaskAssignee, COUNTERSIGN.getStatus(), new AddComment(message.toString())); task.getTaskDefinitionKey(), advice, originTaskAssignee, COUNTERSIGN.getStatus(), new AddComment(message.toString()));
batchAddAttachment(commandContext, task.getProcessInstanceId(), task, attachmentList, originTaskAssignee); batchAddAttachment(commandContext, task.getProcessInstanceId(), task, attachmentList, originTaskAssignee);