add 添加流程办理校验,添加部署后如果流程定义最高版本有表单配置将此版本配置同步到部署得流程定义

This commit is contained in:
gssong 2024-03-25 23:30:05 +08:00
parent 11615685b7
commit ab2af1669c
3 changed files with 40 additions and 1 deletions

View File

@ -20,8 +20,11 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.bo.ModelBo; import org.dromara.workflow.domain.bo.ModelBo;
import org.dromara.workflow.domain.bo.WfFormDefinitionBo;
import org.dromara.workflow.domain.vo.ModelVo; import org.dromara.workflow.domain.vo.ModelVo;
import org.dromara.workflow.domain.vo.WfFormDefinitionVo;
import org.dromara.workflow.service.IActModelService; import org.dromara.workflow.service.IActModelService;
import org.dromara.workflow.service.IWfFormDefinitionService;
import org.dromara.workflow.utils.ModelUtils; import org.dromara.workflow.utils.ModelUtils;
import org.dromara.workflow.utils.QueryUtils; import org.dromara.workflow.utils.QueryUtils;
import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.BpmnModel;
@ -52,6 +55,7 @@ import java.util.zip.ZipOutputStream;
public class ActModelServiceImpl implements IActModelService { public class ActModelServiceImpl implements IActModelService {
private final RepositoryService repositoryService; private final RepositoryService repositoryService;
private final IWfFormDefinitionService iWfFormDefinitionService;
/** /**
* 分页查询模型 * 分页查询模型
@ -249,6 +253,7 @@ public class ActModelServiceImpl implements IActModelService {
} }
// 查询模型的基本信息 // 查询模型的基本信息
Model model = repositoryService.getModel(id); Model model = repositoryService.getModel(id);
ProcessDefinition processDefinition = QueryUtils.definitionQuery().processDefinitionKey(model.getKey()).latestVersion().singleResult();
// xml资源的名称 对应act_ge_bytearray表中的name_字段 // xml资源的名称 对应act_ge_bytearray表中的name_字段
String processName = model.getName() + ".bpmn20.xml"; String processName = model.getName() + ".bpmn20.xml";
// 调用部署相关的api方法进行部署流程定义 // 调用部署相关的api方法进行部署流程定义
@ -271,6 +276,17 @@ public class ActModelServiceImpl implements IActModelService {
// 更新分类 // 更新分类
ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult();
repositoryService.setProcessDefinitionCategory(definition.getId(), model.getCategory()); repositoryService.setProcessDefinitionCategory(definition.getId(), model.getCategory());
if (processDefinition != null) {
WfFormDefinitionVo definitionVo = iWfFormDefinitionService.getByDefId(processDefinition.getId());
if (definitionVo != null) {
WfFormDefinitionBo wfFormDefinition = new WfFormDefinitionBo();
wfFormDefinition.setDefinitionId(definition.getId());
wfFormDefinition.setProcessKey(definition.getKey());
wfFormDefinition.setPath(definitionVo.getPath());
wfFormDefinition.setRemark(definitionVo.getRemark());
iWfFormDefinitionService.saveOrUpdate(wfFormDefinition);
}
}
return true; return true;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -34,6 +34,7 @@ import org.dromara.workflow.mapper.ActHiTaskinstMapper;
import org.dromara.workflow.mapper.ActTaskMapper; import org.dromara.workflow.mapper.ActTaskMapper;
import org.dromara.workflow.service.IActTaskService; import org.dromara.workflow.service.IActTaskService;
import org.dromara.workflow.service.IWfTaskBackNodeService; import org.dromara.workflow.service.IWfTaskBackNodeService;
import org.dromara.workflow.utils.ModelUtils;
import org.dromara.workflow.utils.QueryUtils; import org.dromara.workflow.utils.QueryUtils;
import org.dromara.workflow.utils.WorkflowUtils; import org.dromara.workflow.utils.WorkflowUtils;
import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.api.FlowableObjectNotFoundException;
@ -45,6 +46,7 @@ import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.identitylink.api.history.HistoricIdentityLink;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery; import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
@ -210,6 +212,15 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
} else { } else {
List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list(); List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
for (Task t : list) {
if (ModelUtils.isUserTask(t.getProcessDefinitionId(), t.getTaskDefinitionKey())) {
List<HistoricIdentityLink> links = historyService.getHistoricIdentityLinksForTask(t.getId());
if (CollUtil.isEmpty(links)) {
throw new ServiceException("下一节点【" + t.getName() + "】没有办理人!");
}
}
}
if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) { if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) {
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), LoginHelper.getLoginUser().getNickname() + "【抄送】给" + String.join(",", StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserName))); taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), LoginHelper.getLoginUser().getNickname() + "【抄送】给" + String.join(",", StreamUtils.toList(completeTaskBo.getWfCopyList(), WfCopy::getUserName)));

View File

@ -218,4 +218,16 @@ public class ModelUtils {
FlowElement flowElement = process.getFlowElement(flowElementId); FlowElement flowElement = process.getFlowElement(flowElementId);
return flowElement.getExtensionElements(); return flowElement.getExtensionElements();
} }
/**
* 判断当前节点是否为用户任务
*
* @param processDefinitionId 流程定义id
* @param taskDefinitionKey 流程定义id
*/
public static boolean isUserTask(String processDefinitionId, String taskDefinitionKey) {
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(taskDefinitionKey);
return flowNode instanceof UserTask;
}
} }