feat(REQ-3004) - 测试表单引擎
This commit is contained in:
parent
99b773b49f
commit
d11c420f39
@ -113,7 +113,7 @@ public interface ProcessDefinitionApi {
|
||||
@GetMapping("/api/process/definition/active/json/model")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<BpmnModelUpdateDTO> getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId,
|
||||
@NotBlank(message = "分类不能为空") @RequestParam(required = false) String category,
|
||||
@NotBlank(message = "分类不能为空") @RequestParam(required = false) String key,
|
||||
@RequestParam(required = false) String tenantId);
|
||||
|
||||
/**
|
||||
|
||||
@ -6,6 +6,7 @@ import cn.axzo.workflow.common.enums.ApproverScopeEnum;
|
||||
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
|
||||
import cn.axzo.workflow.common.model.request.form.FormFieldPermissionConf;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@ -140,5 +141,6 @@ public class BpmnJsonNodeProperty {
|
||||
* 表单字段权限配置
|
||||
*/
|
||||
@ApiModelProperty(value = "表单字段权限控制")
|
||||
private FormFieldPermissionConf formFieldPermissionConf;
|
||||
private FormFieldPermissionConf fieldPermission;
|
||||
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ public class BpmnModelSearchDTO extends BpmPageParam {
|
||||
* 标识
|
||||
*/
|
||||
@ApiModelProperty(value = "流程模型标识", example = "process1641042089407", notes = "精准匹配")
|
||||
private String key;
|
||||
private List<String> keys;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
|
||||
@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 表单字段权限配置
|
||||
@ -27,34 +27,34 @@ import java.util.Map;
|
||||
public class FormFieldPermissionConf implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
/**
|
||||
* 发起人的表单字段权限
|
||||
*/
|
||||
@ApiModelProperty(value = "发起人的表单字段权限")
|
||||
private Map<String, Integer> initiator;
|
||||
private List<FormPermissionMetaInfo> initiator;
|
||||
|
||||
/**
|
||||
* 审批人的表单字段权限
|
||||
*/
|
||||
@ApiModelProperty(value = "审批人的表单字段权限")
|
||||
private Map<String, Integer> current;
|
||||
private List<FormPermissionMetaInfo> current;
|
||||
|
||||
/**
|
||||
* 历史审批人的表单字段权限
|
||||
*/
|
||||
@ApiModelProperty(value = "历史审批人的表单字段权限")
|
||||
private Map<String, Integer> history;
|
||||
private List<FormPermissionMetaInfo> history;
|
||||
|
||||
/**
|
||||
* 抄送人的表单字段权限
|
||||
*/
|
||||
@ApiModelProperty(value = "抄送人的表单字段权限")
|
||||
private Map<String, Integer> carbonCopy;
|
||||
private List<FormPermissionMetaInfo> carbonCopy;
|
||||
|
||||
/**
|
||||
* 管理员的字段权限
|
||||
*/
|
||||
@ApiModelProperty(value = "管理员的字段权限")
|
||||
private Map<String, Integer> admin;
|
||||
private List<FormPermissionMetaInfo> admin;
|
||||
|
||||
}
|
||||
|
||||
@ -3,7 +3,9 @@ package cn.axzo.workflow.common.model.request.form;
|
||||
import cn.axzo.workflow.common.model.request.form.definition.FormFieldsDTO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.Valid;
|
||||
@ -19,6 +21,8 @@ import java.util.List;
|
||||
@ApiModel("新版本的表单定义模型 JSON 结构")
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class FormJsonModel implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package cn.axzo.workflow.common.model.request.form;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 表单字段权限信息
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2024-11-07 11:09
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class FormPermissionMetaInfo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 字段标识
|
||||
*/
|
||||
private String fieldKey;
|
||||
|
||||
/**
|
||||
* 只读
|
||||
*/
|
||||
private Boolean readOnly = true;
|
||||
|
||||
/**
|
||||
* 可编辑必填
|
||||
*/
|
||||
private Boolean editRequired = false;
|
||||
|
||||
/**
|
||||
* 可编辑非必填
|
||||
*/
|
||||
private Boolean editable = false;
|
||||
|
||||
/**
|
||||
* 隐藏
|
||||
*/
|
||||
private Boolean hidden = false;
|
||||
}
|
||||
@ -10,6 +10,7 @@ import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonNode;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnNoticeConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.request.form.FormFieldPermissionConf;
|
||||
import cn.axzo.workflow.core.converter.json.AbstractBpmnJsonConverter;
|
||||
import cn.axzo.workflow.core.converter.json.BoundaryEventJsonConverter;
|
||||
import cn.axzo.workflow.core.converter.json.EndEventJsonConverter;
|
||||
@ -67,6 +68,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.APPROVE_SUPPORT_BATCH_OPERATION;
|
||||
@ -761,7 +763,10 @@ public final class BpmnJsonConverterUtil {
|
||||
getNoticeConfig(bpmnModel.getMainProcess());
|
||||
BpmnJsonModel bpmnJsonModel = convertToJson(bpmnModel);
|
||||
|
||||
|
||||
// FlowElement flowElement = bpmnModel.getFlowElement("node_350687681316");
|
||||
FlowElement flowElement = bpmnModel.getFlowElement("node_429076682717");
|
||||
Optional<FormFieldPermissionConf> formFieldPermissionConf =
|
||||
BpmnMetaParserHelper.getFormFieldPermissionConf(flowElement);
|
||||
// ServiceTask serviceTask = (ServiceTask) bpmnModel.getFlowElement("node_946990365785");
|
||||
// Optional<List<BpmnCarbonCopyConf>> carbonCopyConfigs = BpmnMetaParserHelper.getCarbonCopyConfigs
|
||||
// (serviceTask);
|
||||
|
||||
@ -20,6 +20,8 @@ import cn.axzo.workflow.common.model.request.bpmn.BpmnNoticeProperty;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnNoticeReceiver;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnPendingProperty;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnSmsProperty;
|
||||
import cn.axzo.workflow.common.model.request.form.FormFieldPermissionConf;
|
||||
import cn.axzo.workflow.common.model.request.form.FormPermissionMetaInfo;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
import org.flowable.bpmn.model.ExtensionElement;
|
||||
@ -61,6 +63,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_CARBON_COPY_
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_FIELD;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_FIELD_META;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_FIELD_OPTION;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_FIELD_PERMISSION;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_NODE_TYPE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_NOTICE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.ELEMENT_ATTRIBUTE_CHECKED;
|
||||
@ -422,4 +425,9 @@ public final class BpmnMetaParserHelper {
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public static Optional<FormFieldPermissionConf> getFormFieldPermissionConf(FlowElement flowElement) {
|
||||
return defaultValid(flowElement, CONFIG_FIELD_PERMISSION).map(element-> JSON.parseObject(element.getElementText(), FormFieldPermissionConf.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.workflow.core.converter.json;
|
||||
|
||||
import cn.axzo.framework.jackson.utility.JSON;
|
||||
import cn.axzo.workflow.common.enums.ApprovalMethodEnum;
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
|
||||
@ -71,8 +72,8 @@ public class UserTaskJsonConverter extends AbstractBpmnJsonConverter<UserTask> {
|
||||
//以下是保存配置信息, 引擎完全不会 care 这里的信息
|
||||
// "设置审批人"
|
||||
setApprovalExtensionElement(node, userTask);
|
||||
// "权限设置"
|
||||
setFieldExtensionElement(node, userTask);
|
||||
// "表单权限设置"
|
||||
setFormFieldExtensionElement(node, userTask);
|
||||
// "高级设置",包含按钮配置,自动过审配置
|
||||
setAdvancedExtensionElement(node, userTask);
|
||||
// "待办消息模板配置"
|
||||
@ -157,13 +158,14 @@ public class UserTaskJsonConverter extends AbstractBpmnJsonConverter<UserTask> {
|
||||
userTask.addExtensionElement(autoApprovalExtensionElement);
|
||||
}
|
||||
|
||||
private static void setFieldExtensionElement(BpmnJsonNode node, UserTask userTask) {
|
||||
private static void setFormFieldExtensionElement(BpmnJsonNode node, UserTask userTask) {
|
||||
if (Objects.isNull(node.getProperty())) {
|
||||
return;
|
||||
}
|
||||
ExtensionElement fieldElement = new ExtensionElement();
|
||||
fieldElement.setName(CONFIG_FIELD_PERMISSION);
|
||||
fieldElement.setElementText(node.getProperty().getFieldPermission());
|
||||
fieldElement.setElementText(Objects.nonNull(node.getProperty().getFieldPermission()) ?
|
||||
JSON.toJSONString(node.getProperty().getFieldPermission()) : null);
|
||||
userTask.addExtensionElement(fieldElement);
|
||||
}
|
||||
|
||||
|
||||
@ -78,7 +78,7 @@ public interface BpmnProcessDefinitionService {
|
||||
* 获取指定模型激活的定义 ID
|
||||
* @return 流程定义ID
|
||||
*/
|
||||
String getActiveProcessDefinitionId(String tenantId, String category);
|
||||
String getActiveProcessDefinitionId(String tenantId, String key);
|
||||
|
||||
void updateProcessDefinition(BpmnProcessDefinitionUpdateDTO dto);
|
||||
|
||||
|
||||
@ -12,6 +12,7 @@ import org.flowable.engine.RepositoryService;
|
||||
import org.flowable.engine.repository.Model;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Resource;
|
||||
@ -40,16 +41,18 @@ public class AggregateModelServiceImpl implements AggregateModelService {
|
||||
public String createBpmnAndFormModel(BpmnModelCreateDTO dto) {
|
||||
String bpmModelId = bpmnProcessModelService.createBpmModel(dto);
|
||||
|
||||
Model formModel = repositoryService.createModelQuery().modelKey(dto.getKey()).modelCategory(FORM_FILE_SUFFIX).singleResult();
|
||||
FormModelUpdateDTO formModelDto = new FormModelUpdateDTO();
|
||||
formModelDto.setKey(dto.getKey());
|
||||
formModelDto.setName(dto.getName());
|
||||
formModelDto.setFormFields(dto.getFormJsonModel().getFormFields());
|
||||
if (Objects.isNull(formModel)) {
|
||||
formModelService.createFormModel(formModelDto);
|
||||
} else {
|
||||
formModelDto.setFormModelId(formModel.getId());
|
||||
formModelService.updateFormModel(formModelDto);
|
||||
if (!CollectionUtils.isEmpty(dto.getFormJsonModel().getFormFields())) {
|
||||
Model formModel = repositoryService.createModelQuery().modelKey(dto.getKey()).modelCategory(FORM_FILE_SUFFIX).singleResult();
|
||||
FormModelUpdateDTO formModelDto = new FormModelUpdateDTO();
|
||||
formModelDto.setKey(dto.getKey());
|
||||
formModelDto.setName(dto.getName());
|
||||
formModelDto.setFormFields(dto.getFormJsonModel().getFormFields());
|
||||
if (Objects.isNull(formModel)) {
|
||||
formModelService.createFormModel(formModelDto);
|
||||
} else {
|
||||
formModelDto.setFormModelId(formModel.getId());
|
||||
formModelService.updateFormModel(formModelDto);
|
||||
}
|
||||
}
|
||||
return bpmModelId;
|
||||
}
|
||||
@ -59,11 +62,14 @@ public class AggregateModelServiceImpl implements AggregateModelService {
|
||||
public String updateBpmnAndFormModel(BpmnModelUpdateDTO dto) {
|
||||
bpmnProcessModelService.updateBpmModel(dto);
|
||||
|
||||
FormModelUpdateDTO formModel = new FormModelUpdateDTO();
|
||||
formModel.setKey(dto.getKey());
|
||||
formModel.setName(dto.getName());
|
||||
formModel.setFormFields(dto.getFormJsonModel().getFormFields());
|
||||
formModelService.updateFormModel(formModel);
|
||||
// 如果没有表单字段就操作表单模型
|
||||
if (!CollectionUtils.isEmpty(dto.getFormJsonModel().getFormFields())) {
|
||||
FormModelUpdateDTO formModel = new FormModelUpdateDTO();
|
||||
formModel.setKey(dto.getKey());
|
||||
formModel.setName(dto.getName());
|
||||
formModel.setFormFields(dto.getFormJsonModel().getFormFields());
|
||||
formModelService.updateFormModel(formModel);
|
||||
}
|
||||
return dto.getProcessModelId();
|
||||
}
|
||||
|
||||
|
||||
@ -234,16 +234,16 @@ public class BpmnProcessDefinitionServiceImpl implements BpmnProcessDefinitionSe
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getActiveProcessDefinitionId(String tenantId, String category) {
|
||||
public String getActiveProcessDefinitionId(String tenantId, String key) {
|
||||
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
|
||||
.processDefinitionTenantId(tenantId)
|
||||
.processDefinitionCategory(category)
|
||||
.processDefinitionKey(key)
|
||||
.latestVersion()
|
||||
.list();
|
||||
if (!CollectionUtils.isEmpty(list) && list.size() != 1) {
|
||||
throw new WorkflowEngineException(PROCESS_DEFINITION_RESULT_TOO_MANY, tenantId, category);
|
||||
throw new WorkflowEngineException(PROCESS_DEFINITION_RESULT_TOO_MANY, tenantId, key);
|
||||
} else if (CollectionUtils.isEmpty(list)) {
|
||||
throw new WorkflowEngineException(PROCESS_DEFINITION_HAS_DIRTY_DATA, category);
|
||||
throw new WorkflowEngineException(PROCESS_DEFINITION_HAS_DIRTY_DATA, key);
|
||||
} else {
|
||||
return list.get(0).getId();
|
||||
}
|
||||
|
||||
@ -98,10 +98,17 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
|
||||
.append(" b.status = #{status}");
|
||||
query.parameter("status", dto.getStatus() == 1);
|
||||
}
|
||||
if (StringUtils.hasLength(dto.getKey())) {
|
||||
if (!CollectionUtils.isEmpty(dto.getKeys())) {
|
||||
baseQuerySql.append(sqlConnectors(baseQuerySql))
|
||||
.append(" a.KEY_ = #{key}");
|
||||
query.parameter("key", dto.getKey());
|
||||
.append(" a.KEY_ in (");
|
||||
for (int i = 0; i < dto.getKeys().size(); i++) {
|
||||
baseQuerySql.append("#{KEY_").append(i).append("}");
|
||||
if (i < dto.getKeys().size() - 1) {
|
||||
baseQuerySql.append(",");
|
||||
}
|
||||
query.parameter("KEY_" + i, dto.getKeys().get(i));
|
||||
}
|
||||
baseQuerySql.append(")");
|
||||
}
|
||||
if (StringUtils.hasLength(dto.getName())) {
|
||||
baseQuerySql.append(sqlConnectors(baseQuerySql))
|
||||
|
||||
@ -34,8 +34,10 @@ import java.util.Objects;
|
||||
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.FORM_FILE_SUFFIX;
|
||||
import static cn.axzo.workflow.common.constant.MetaInfoConstants.MODEL_DESCRIPTION;
|
||||
import static cn.axzo.workflow.common.constant.MetaInfoConstants.MODEL_TYPE;
|
||||
import static cn.axzo.workflow.common.constant.MetaInfoConstants.MODEL_TYPE_FORM;
|
||||
import static cn.axzo.workflow.common.constant.MetaInfoConstants.MODEL_TYPE_PROCESS;
|
||||
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.countSql;
|
||||
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.sqlConnectors;
|
||||
|
||||
@ -64,28 +66,21 @@ public class FormModelServiceImpl implements FormModelService {
|
||||
.modelCategory(FORM_FILE_SUFFIX)
|
||||
.modelTenantId(dto.getTenantId())
|
||||
.singleResult();
|
||||
if (Objects.nonNull(persistModel)) {
|
||||
throw new WorkflowEngineException(FORM_MODEL_EXISTS);
|
||||
}
|
||||
Map<String, String> metaInfoMap = new HashMap<>();
|
||||
metaInfoMap.put(MODEL_TYPE, MODEL_TYPE_FORM);
|
||||
|
||||
Model model = repositoryService.newModel();
|
||||
model.setKey(dto.getKey());
|
||||
model.setCategory(FORM_FILE_SUFFIX);
|
||||
model.setName(dto.getName());
|
||||
model.setTenantId(dto.getTenantId());
|
||||
model.setMetaInfo(JSONUtil.toJsonStr(metaInfoMap));
|
||||
repositoryService.saveModel(model);
|
||||
persistModel.setKey(dto.getKey());
|
||||
persistModel.setCategory(FORM_FILE_SUFFIX);
|
||||
persistModel.setName(dto.getName());
|
||||
persistModel.setTenantId(dto.getTenantId());
|
||||
repositoryService.saveModel(persistModel);
|
||||
|
||||
FormDefinitionDTO formDefinition = new FormDefinitionDTO();
|
||||
formDefinition.setKey(dto.getKey());
|
||||
formDefinition.setName(dto.getName());
|
||||
formDefinition.setVersion(model.getVersion());
|
||||
formDefinition.setVersion(persistModel.getVersion());
|
||||
formDefinition.setFields(dto.getFormFields());
|
||||
|
||||
repositoryService.addModelEditorSource(model.getId(), JSON.toJSONString(formDefinition).getBytes(StandardCharsets.UTF_8));
|
||||
return model.getId();
|
||||
repositoryService.addModelEditorSource(persistModel.getId(), JSON.toJSONString(formDefinition).getBytes(StandardCharsets.UTF_8));
|
||||
return persistModel.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -98,10 +93,17 @@ public class FormModelServiceImpl implements FormModelService {
|
||||
.modelTenantId(dto.getTenantId())
|
||||
.singleResult();
|
||||
if (Objects.isNull(model)) {
|
||||
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
|
||||
model = repositoryService.newModel();
|
||||
}
|
||||
model.setName(dto.getName());
|
||||
model.setKey(dto.getKey());
|
||||
model.setCategory(FORM_FILE_SUFFIX);
|
||||
|
||||
Map<String, String> metaInfoMap = new HashMap<>();
|
||||
metaInfoMap.put(MODEL_TYPE, MODEL_TYPE_FORM);
|
||||
|
||||
model.setMetaInfo(JSONUtil.toJsonStr(metaInfoMap));
|
||||
model.setTenantId(dto.getTenantId());
|
||||
repositoryService.saveModel(model);
|
||||
|
||||
FormDefinitionDTO formDefinition = new FormDefinitionDTO();
|
||||
@ -119,10 +121,17 @@ public class FormModelServiceImpl implements FormModelService {
|
||||
StringBuilder baseQuerySql = new StringBuilder("SELECT * FROM ")
|
||||
.append(tableName);
|
||||
NativeModelQuery query = repositoryService.createNativeModelQuery();
|
||||
if (StringUtils.hasLength(dto.getKey())) {
|
||||
if (!CollectionUtils.isEmpty(dto.getKeys())) {
|
||||
baseQuerySql.append(sqlConnectors(baseQuerySql))
|
||||
.append(" KEY_ = #{key}");
|
||||
query.parameter("key", dto.getKey());
|
||||
.append(" a.KEY_ in (");
|
||||
for (int i = 0; i < dto.getKeys().size(); i++) {
|
||||
baseQuerySql.append("#{KEY_").append(i).append("}");
|
||||
if (i < dto.getKeys().size() - 1) {
|
||||
baseQuerySql.append(",");
|
||||
}
|
||||
query.parameter("KEY_" + i, dto.getKeys().get(i));
|
||||
}
|
||||
baseQuerySql.append(")");
|
||||
}
|
||||
if (StringUtils.hasLength(dto.getName())) {
|
||||
baseQuerySql.append(sqlConnectors(baseQuerySql))
|
||||
@ -213,7 +222,7 @@ public class FormModelServiceImpl implements FormModelService {
|
||||
.deploy();
|
||||
|
||||
model.setDeploymentId(deploy.getId());
|
||||
repositoryService.saveModel(model);
|
||||
// repositoryService.saveModel(model);
|
||||
|
||||
return deploy.getId();
|
||||
}
|
||||
|
||||
@ -180,19 +180,19 @@ public class BpmnProcessDefinitionController implements ProcessDefinitionApi {
|
||||
*
|
||||
* @param modelId 模型 ID
|
||||
* @param tenantId 租户 ID
|
||||
* @param category 业务分类
|
||||
* @param key 业务分类
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取指定模型激活的流程定义 JSON 模型")
|
||||
@GetMapping("/active/json/model")
|
||||
@Override
|
||||
public CommonResponse<BpmnModelUpdateDTO> getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId,
|
||||
@NotBlank(message = "分类不能为空") @RequestParam(required = false) String category,
|
||||
@NotBlank(message = "分类不能为空") @RequestParam(required = false) String key,
|
||||
@RequestParam(required = false) String tenantId) {
|
||||
String finalTenantId = StringUtils.hasText(tenantId) ? tenantId : "";
|
||||
BpmnModelDetailVO modelDetail = bpmnProcessModelService.getById(modelId, finalTenantId);
|
||||
String activeProcessDefinitionId = bpmnProcessDefinitionService.getActiveProcessDefinitionId(finalTenantId,
|
||||
category);
|
||||
key);
|
||||
|
||||
BpmnProcessDefinitionVO processDefinition =
|
||||
bpmnProcessDefinitionService.getProcessDefinition(activeProcessDefinitionId);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -2427,7 +2427,24 @@
|
||||
"multiMode": "AND",
|
||||
"approverEmptyHandleType": "autoPassed",
|
||||
"emptyApproverSpecify": null,
|
||||
"fieldPermission": null,
|
||||
"fieldPermission": {
|
||||
"initiator": [
|
||||
{
|
||||
"fieldKey": "field_1",
|
||||
"readOnly": true,
|
||||
"editRequired": false,
|
||||
"editable": false,
|
||||
"hidden": false
|
||||
},
|
||||
{
|
||||
"fieldKey": "field_1",
|
||||
"readOnly": true,
|
||||
"editRequired": false,
|
||||
"editable": false,
|
||||
"hidden": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"buttonPermission": {
|
||||
"initiator": [
|
||||
{
|
||||
|
||||
@ -6,10 +6,43 @@ import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC;
|
||||
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
|
||||
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
|
||||
import cn.axzo.workflow.common.annotation.Manageable;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import cn.axzo.workflow.common.annotation.InvokeMode;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceAdminPageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO;
|
||||
@ -21,45 +54,12 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceAdminPageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
|
||||
|
||||
/**
|
||||
* Workflow Engine Starter Core Service
|
||||
@ -71,6 +71,135 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
|
||||
@org.springframework.cloud.openfeign.FeignClient(name = "workflow-engine-starter-core", url = "${axzo.service.workflow-engine:http://workflow-engine:8080}", configuration = WorkflowEngineStarterFeignConfiguration.class)
|
||||
public interface WorkflowCoreService {
|
||||
|
||||
/**
|
||||
* 业务节点唤醒, 该节点废弃,请换成 {@link ProcessActivityApi#trigger(cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO)} 接口
|
||||
* <p>
|
||||
* 当模型中使用了“业务节点”,且设置了“不设置审批人”模式,则当业务监听到 PROCESS_ACTIVITY_START 事件时,可通过该接口推动流程继续运行
|
||||
*/
|
||||
@Deprecated
|
||||
@GetMapping("/api/process/activity/trigger")
|
||||
Boolean trigger(@NotBlank(message = "触发 ID 不能为空") @RequestParam String triggerId);
|
||||
|
||||
/**
|
||||
* 业务节点唤醒
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/process/activity/trigger")
|
||||
Boolean trigger(@Validated @RequestBody BpmnActivityTriggerDTO dto);
|
||||
|
||||
/**
|
||||
* 业务节点设置审批人, 不支持重复设置
|
||||
* <p>
|
||||
* 当模型中使用了“业务节点”,且设置了“业务指定审批人”模式,则当业务监听到 PROCESS_ACTIVITY_WAIT_ASSIGNEE 事件时,可通过该接口设置动态设置审批人
|
||||
* <p>
|
||||
* <strong color=orange>注意:如果调用接口时,传入的审批人集合为空,流程引擎将对该审批流程实例自动中止。</strong>
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/process/activity/assignee/set")
|
||||
@Operation(summary = "业务节点设置审批人,不支持重复调用设置审批人,需一次性传入所有审批人")
|
||||
Boolean setAssignee(@Validated @RequestBody BpmnActivitySetAssigneeDTO dto);
|
||||
|
||||
/**
|
||||
* 创建审批流程
|
||||
*
|
||||
* <pre>
|
||||
* MQ 触发规则:
|
||||
* 1. 当前流程实例会依次触发 process-instance-created 和 process-instance-started 事件
|
||||
* 2. 第一个审批任务会依次触发 process-task-assigned 和 process-task-created 事件
|
||||
* </pre>
|
||||
*
|
||||
* @param dto {@link BpmnProcessInstanceCreateDTO}
|
||||
*/
|
||||
@Operation(summary = "创建审批流程, MQ 触发规则:1. 当前流程实例会依次触发 process-instance-created 和 process-instance-started 事件,2. 第一个审批任务会依次触发 process-task-assigned 和 process-task-created 事件")
|
||||
@PostMapping("/api/process/instance/create")
|
||||
@InvokeMode(SYNC)
|
||||
String createProcessInstance(@Validated @RequestBody BpmnProcessInstanceCreateDTO dto);
|
||||
|
||||
/**
|
||||
* 发起人主动撤回审核
|
||||
*
|
||||
* <pre>
|
||||
* MQ 触发规则:
|
||||
* 1. 当前流程实例中现存的任务会依次触发 process-task-deleted 事件
|
||||
* 2. 当前流程实例会触发 process-instance-cancelled 事件
|
||||
* </pre>
|
||||
*
|
||||
* @param dto {@link BpmnProcessInstanceCancelDTO}
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "发起人主动撤回审核,MQ 触发规则:1. 当前流程实例中现存的任务会依次触发 process-task-deleted 事件,2. 当前流程实例会触发 process-instance-cancelled 事件")
|
||||
@DeleteMapping("/api/process/instance/cancel")
|
||||
Boolean cancelProcessInstance(@Validated @RequestBody BpmnProcessInstanceCancelDTO dto);
|
||||
|
||||
/**
|
||||
* 中止流程实例
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "中止流程实例")
|
||||
@DeleteMapping("/api/process/instance/abort")
|
||||
Boolean abortProcessInstance(@Validated @RequestBody BpmnProcessInstanceAbortDTO dto);
|
||||
|
||||
/**
|
||||
* 批量中止流程实例
|
||||
*
|
||||
* @param dtos
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "批量中止流程实例")
|
||||
@DeleteMapping("/api/process/instance/batch/abort")
|
||||
BatchOperationResultVO batchAbortProcessInstance(@Validated @RequestBody List<BpmnProcessInstanceAbortDTO> dtos);
|
||||
|
||||
/**
|
||||
* 抄送流程实例(未实现)
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "抄送流程实例")
|
||||
@PostMapping("/api/process/instance/carbon-copy")
|
||||
@Deprecated
|
||||
Boolean carbonCopyProcessInstance(@Validated @RequestBody BpmnProcessInstanceCarbonCopyDTO dto);
|
||||
|
||||
/**
|
||||
* 获得流程实例
|
||||
*
|
||||
* @param dto {@link BpmnProcessInstanceQueryDTO} 可根据 Id,BusinessKey进行查询
|
||||
* @return 流程实例, 租户Id不必传
|
||||
*/
|
||||
@Operation(summary = "获得流程实例")
|
||||
@GetMapping("/api/process/instance/get")
|
||||
@InvokeMode(SYNC)
|
||||
BpmnProcessInstanceVO getProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 获取指定流程实例的流程变量
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @param tenantId
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取指定流程实例的流程变量")
|
||||
@GetMapping("/api/process/instance/cooperation-org")
|
||||
@InvokeMode(SYNC)
|
||||
Map<String, Object> getProcessVariables(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
|
||||
|
||||
/**
|
||||
* 获取指定流程的日志
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取指定流程的日志")
|
||||
@PostMapping("/api/process/instance/logs")
|
||||
@InvokeMode(SYNC)
|
||||
BpmnProcessInstanceLogVO getProcessInstanceLogs(@Validated @RequestBody BpmnProcessInstanceLogQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 同意
|
||||
*
|
||||
@ -196,135 +325,6 @@ public interface WorkflowCoreService {
|
||||
@PostMapping("/api/process/task/robot/complete")
|
||||
Boolean completeRobotTask(@Validated @RequestBody BpmnRobotTaskCompleteDTO dto);
|
||||
|
||||
/**
|
||||
* 创建审批流程
|
||||
*
|
||||
* <pre>
|
||||
* MQ 触发规则:
|
||||
* 1. 当前流程实例会依次触发 process-instance-created 和 process-instance-started 事件
|
||||
* 2. 第一个审批任务会依次触发 process-task-assigned 和 process-task-created 事件
|
||||
* </pre>
|
||||
*
|
||||
* @param dto {@link BpmnProcessInstanceCreateDTO}
|
||||
*/
|
||||
@Operation(summary = "创建审批流程, MQ 触发规则:1. 当前流程实例会依次触发 process-instance-created 和 process-instance-started 事件,2. 第一个审批任务会依次触发 process-task-assigned 和 process-task-created 事件")
|
||||
@PostMapping("/api/process/instance/create")
|
||||
@InvokeMode(SYNC)
|
||||
String createProcessInstance(@Validated @RequestBody BpmnProcessInstanceCreateDTO dto);
|
||||
|
||||
/**
|
||||
* 发起人主动撤回审核
|
||||
*
|
||||
* <pre>
|
||||
* MQ 触发规则:
|
||||
* 1. 当前流程实例中现存的任务会依次触发 process-task-deleted 事件
|
||||
* 2. 当前流程实例会触发 process-instance-cancelled 事件
|
||||
* </pre>
|
||||
*
|
||||
* @param dto {@link BpmnProcessInstanceCancelDTO}
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "发起人主动撤回审核,MQ 触发规则:1. 当前流程实例中现存的任务会依次触发 process-task-deleted 事件,2. 当前流程实例会触发 process-instance-cancelled 事件")
|
||||
@DeleteMapping("/api/process/instance/cancel")
|
||||
Boolean cancelProcessInstance(@Validated @RequestBody BpmnProcessInstanceCancelDTO dto);
|
||||
|
||||
/**
|
||||
* 中止流程实例
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "中止流程实例")
|
||||
@DeleteMapping("/api/process/instance/abort")
|
||||
Boolean abortProcessInstance(@Validated @RequestBody BpmnProcessInstanceAbortDTO dto);
|
||||
|
||||
/**
|
||||
* 批量中止流程实例
|
||||
*
|
||||
* @param dtos
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "批量中止流程实例")
|
||||
@DeleteMapping("/api/process/instance/batch/abort")
|
||||
BatchOperationResultVO batchAbortProcessInstance(@Validated @RequestBody List<BpmnProcessInstanceAbortDTO> dtos);
|
||||
|
||||
/**
|
||||
* 抄送流程实例(未实现)
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "抄送流程实例")
|
||||
@PostMapping("/api/process/instance/carbon-copy")
|
||||
@Deprecated
|
||||
Boolean carbonCopyProcessInstance(@Validated @RequestBody BpmnProcessInstanceCarbonCopyDTO dto);
|
||||
|
||||
/**
|
||||
* 获得流程实例
|
||||
*
|
||||
* @param dto {@link BpmnProcessInstanceQueryDTO} 可根据 Id,BusinessKey进行查询
|
||||
* @return 流程实例, 租户Id不必传
|
||||
*/
|
||||
@Operation(summary = "获得流程实例")
|
||||
@GetMapping("/api/process/instance/get")
|
||||
@InvokeMode(SYNC)
|
||||
BpmnProcessInstanceVO getProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 获取指定流程实例的流程变量
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @param tenantId
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取指定流程实例的流程变量")
|
||||
@GetMapping("/api/process/instance/cooperation-org")
|
||||
@InvokeMode(SYNC)
|
||||
Map<String, Object> getProcessVariables(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
|
||||
|
||||
/**
|
||||
* 获取指定流程的日志
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取指定流程的日志")
|
||||
@PostMapping("/api/process/instance/logs")
|
||||
@InvokeMode(SYNC)
|
||||
BpmnProcessInstanceLogVO getProcessInstanceLogs(@Validated @RequestBody BpmnProcessInstanceLogQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 业务节点唤醒, 该节点废弃,请换成 {@link ProcessActivityApi#trigger(cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO)} 接口
|
||||
* <p>
|
||||
* 当模型中使用了“业务节点”,且设置了“不设置审批人”模式,则当业务监听到 PROCESS_ACTIVITY_START 事件时,可通过该接口推动流程继续运行
|
||||
*/
|
||||
@Deprecated
|
||||
@GetMapping("/api/process/activity/trigger")
|
||||
Boolean trigger(@NotBlank(message = "触发 ID 不能为空") @RequestParam String triggerId);
|
||||
|
||||
/**
|
||||
* 业务节点唤醒
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/process/activity/trigger")
|
||||
Boolean trigger(@Validated @RequestBody BpmnActivityTriggerDTO dto);
|
||||
|
||||
/**
|
||||
* 业务节点设置审批人, 不支持重复设置
|
||||
* <p>
|
||||
* 当模型中使用了“业务节点”,且设置了“业务指定审批人”模式,则当业务监听到 PROCESS_ACTIVITY_WAIT_ASSIGNEE 事件时,可通过该接口设置动态设置审批人
|
||||
* <p>
|
||||
* <strong color=orange>注意:如果调用接口时,传入的审批人集合为空,流程引擎将对该审批流程实例自动中止。</strong>
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/process/activity/assignee/set")
|
||||
@Operation(summary = "业务节点设置审批人,不支持重复调用设置审批人,需一次性传入所有审批人")
|
||||
Boolean setAssignee(@Validated @RequestBody BpmnActivitySetAssigneeDTO dto);
|
||||
|
||||
/**
|
||||
* 强制使用‘异步’模式调用该方法,请在调用真实方法前调用该方法
|
||||
* <pre>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user