Merge remote-tracking branch 'origin/feature/REQ-3769' into feature/REQ-3769

This commit is contained in:
wangli 2025-04-01 17:06:54 +08:00
commit b837b406ce
20 changed files with 696 additions and 535 deletions

View File

@ -9,6 +9,7 @@ import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
@ -322,4 +323,15 @@ public interface ProcessModelApi {
@PostMapping(value = "/api/process/model/doc/order") @PostMapping(value = "/api/process/model/doc/order")
@InvokeMode(SYNC) @InvokeMode(SYNC)
CommonResponse<Boolean> orderDoc(@Validated @RequestBody DocOrderDTO dto); CommonResponse<Boolean> orderDoc(@Validated @RequestBody DocOrderDTO dto);
/**
* 重置关联文档
*
* @param dto
* @return
*/
@Operation(summary = "重置关联文档配置")
@PostMapping(value = "/api/process/model/doc/reset")
@InvokeMode(SYNC)
CommonResponse<Boolean> resetDoc(@Validated @RequestBody DocResetDTO dto);
} }

View File

@ -174,7 +174,7 @@ public interface ProcessCategoryApi {
*/ */
@PostMapping("/api/process/category/group-with-vars/list") @PostMapping("/api/process/category/group-with-vars/list")
@InvokeMode(SYNC) @InvokeMode(SYNC)
CommonResponse<List<CategoryGroupVarItemVo>> configSearchGroupAndVars(@Validated @RequestBody CategoryGroupVarSearchDto dto); CommonResponse<List<CategoryGroupVarItemVo>> searchCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarSearchDto dto);
/** /**
* 新增或者更新分组或者变量 * 新增或者更新分组或者变量
@ -182,5 +182,5 @@ public interface ProcessCategoryApi {
* @return 是否成功 * @return 是否成功
*/ */
@PostMapping("/api/process/category/group-with-vars/upsert") @PostMapping("/api/process/category/group-with-vars/upsert")
CommonResponse<Boolean> upsertGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto); CommonResponse<Boolean> upsertCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto);
} }

View File

@ -10,6 +10,7 @@ import java.io.Serializable;
@ApiModel("分页参数") @ApiModel("分页参数")
public class BpmPageParam implements Serializable { public class BpmPageParam implements Serializable {
private static final long serialVersionUID = -7002013785995706695L;
private static final Integer PAGE_NO = 1; private static final Integer PAGE_NO = 1;
private static final Integer PAGE_SIZE = 10; private static final Integer PAGE_SIZE = 10;
@ApiModelProperty(value = "页码,从 1 开始", required = true, example = "1") @ApiModelProperty(value = "页码,从 1 开始", required = true, example = "1")

View File

@ -20,6 +20,8 @@ import java.io.Serializable;
@Accessors(chain = true) @Accessors(chain = true)
public class BpmnModelCreateDTO implements Serializable { public class BpmnModelCreateDTO implements Serializable {
private static final long serialVersionUID = 1383240088010310865L;
@ApiModelProperty(value = "流程模型标识", example = "process_key", hidden = true) @ApiModelProperty(value = "流程模型标识", example = "process_key", hidden = true)
@Length(max = 255, message = "流程标识最长只支持255个字符") @Length(max = 255, message = "流程标识最长只支持255个字符")
private String key; private String key;

View File

@ -16,6 +16,8 @@ import lombok.experimental.Accessors;
@Accessors(chain = true) @Accessors(chain = true)
public class BpmnModelUpdateDTO extends BpmnModelCreateDTO { public class BpmnModelUpdateDTO extends BpmnModelCreateDTO {
private static final long serialVersionUID = 3661214238064751897L;
@ApiModelProperty(value = "流程模型 ID", required = true) @ApiModelProperty(value = "流程模型 ID", required = true)
private String processModelId; private String processModelId;

View File

@ -2,7 +2,10 @@ package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
/** /**
* 流程关联文档搜索入参模型 * 流程关联文档搜索入参模型
@ -12,6 +15,9 @@ import lombok.Data;
*/ */
@ApiModel("流程关联文档搜索入参模型") @ApiModel("流程关联文档搜索入参模型")
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DocQueryDTO { public class DocQueryDTO {
/** /**

View File

@ -0,0 +1,29 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ApiModel("流程关联文档重置入参模型")
@Data
public class DocResetDTO {
/**
* 业务 ID
*/
@NotBlank(message = "业务 ID 不能为空")
private String category;
/**
* 代运营模型 ID
*/
@NotBlank(message = "模型 ID 不能为空")
private String modelId;
/**
* 代运营的单位或租户ID
*/
@NotBlank(message = "工作台 ID 不能为空")
private String workspaceId;
}

View File

@ -16,6 +16,8 @@ import lombok.EqualsAndHashCode;
@Data @Data
public class DocSearchDTO extends BpmPageParam { public class DocSearchDTO extends BpmPageParam {
private static final long serialVersionUID = -308388315001754954L
;
/** /**
* 流程模型 ID * 流程模型 ID
*/ */

View File

@ -2,13 +2,19 @@ package cn.axzo.workflow.common.model.request.category;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@ApiModel("业务分类分组和变量搜索入参模型") @ApiModel("业务分类分组和变量搜索入参模型")
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CategoryGroupVarSearchDto { public class CategoryGroupVarSearchDto {
@NotNull(message = "dictId 不允许为空") @NotNull(message = "dictId 不允许为空")

View File

@ -19,7 +19,6 @@ import java.util.List;
@Builder @Builder
public class CategoryGroupVarUpsertDto { public class CategoryGroupVarUpsertDto {
@ApiModelProperty(value = "字典id") @ApiModelProperty(value = "字典id")
@Min(value = 1, message = "字典id值必须大于等1") @Min(value = 1, message = "字典id值必须大于等1")
@NotNull(message = "字典id不能为空") @NotNull(message = "字典id不能为空")

View File

@ -18,6 +18,8 @@ import lombok.ToString;
@ToString(callSuper = true) @ToString(callSuper = true)
public class ExtAxDocContent extends BaseEntity<ExtAxDocContent> { public class ExtAxDocContent extends BaseEntity<ExtAxDocContent> {
private static final long serialVersionUID = 5844913474486640969L;
/** /**
* 文档ID * 文档ID
*/ */

View File

@ -3,6 +3,8 @@ package cn.axzo.workflow.core.service;
import cn.axzo.workflow.common.enums.FileTypeEnum; import cn.axzo.workflow.common.enums.FileTypeEnum;
import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; import cn.axzo.workflow.core.repository.entity.ExtAxDocContent;
import java.util.List;
/** /**
* 文件内容表 * 文件内容表
* *
@ -17,5 +19,7 @@ public interface ExtAxDocContentService {
ExtAxDocContent deleteContent(String docId); ExtAxDocContent deleteContent(String docId);
List<ExtAxDocContent> batchDeleteContent(List<String> docIds);
String getContent(Long docId); String getContent(Long docId);
} }

View File

@ -3,6 +3,7 @@ package cn.axzo.workflow.core.service;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult; import cn.axzo.workflow.common.model.response.BpmPageResult;
@ -68,6 +69,13 @@ public interface ExtAxModelDocService {
*/ */
Boolean deleteDoc(Long docId); Boolean deleteDoc(Long docId);
/**
* 批量删除
* @param docIds 文档列表
* @return 是否成功
*/
Boolean batchDeleteDoc(List<Long> docIds);
/** /**
* 模型文档排序 * 模型文档排序
* *
@ -75,4 +83,11 @@ public interface ExtAxModelDocService {
* @return * @return
*/ */
Boolean orderDoc(DocOrderDTO dto); Boolean orderDoc(DocOrderDTO dto);
/**
* 模型文档重置
* @param dto 请求参数
* @return 是否成功
*/
Boolean resetDoc(DocResetDTO dto);
} }

View File

@ -138,7 +138,7 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
baseQuerySql.append(")"); baseQuerySql.append(")");
} }
if (Objects.nonNull(dto.getAgent())) { if (Objects.nonNull(dto.getAgent())) {
if (dto.getAgent()) { if (Boolean.TRUE.equals(dto.getAgent())) {
baseQuerySql.append(sqlConnectors(baseQuerySql)) baseQuerySql.append(sqlConnectors(baseQuerySql))
.append(" TENANT_ID_ != '' "); .append(" TENANT_ID_ != '' ");
if (!CollectionUtils.isEmpty(dto.getTenantIds())) { if (!CollectionUtils.isEmpty(dto.getTenantIds())) {

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.core.service.impl; package cn.axzo.workflow.core.service.impl;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import cn.axzo.workflow.common.enums.FileTypeEnum; import cn.axzo.workflow.common.enums.FileTypeEnum;
import cn.axzo.workflow.common.exception.WorkflowEngineException; import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; import cn.axzo.workflow.core.repository.entity.ExtAxDocContent;
@ -10,7 +11,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_CONTENT_DATA_ERROR; import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_CONTENT_DATA_ERROR;
@ -54,6 +57,14 @@ public class ExtAxDocContentServiceImpl implements ExtAxDocContentService {
return entity; return entity;
} }
@Override
public List<ExtAxDocContent> batchDeleteContent(List<String> docIds) {
List<ExtAxDocContent> entities = extAxDocContentMapper.selectList(new LambdaQueryWrapper<ExtAxDocContent>()
.in(ExtAxDocContent::getFileId, docIds));
extAxDocContentMapper.deleteBatchIds(entities.stream().map(BaseEntity::getId).collect(Collectors.toList()));
return entities;
}
@Override @Override
public String getContent(Long docId) { public String getContent(Long docId) {
ExtAxDocContent content = extAxDocContentMapper.selectOne(ExtAxDocContent::getFileId, docId); ExtAxDocContent content = extAxDocContentMapper.selectOne(ExtAxDocContent::getFileId, docId);

View File

@ -7,6 +7,7 @@ import cn.axzo.workflow.common.exception.WorkflowEngineException;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult; import cn.axzo.workflow.common.model.response.BpmPageResult;
@ -14,11 +15,13 @@ import cn.axzo.workflow.common.model.response.bpmn.model.doc.DocBaseVO;
import cn.axzo.workflow.core.repository.entity.ExtAxDocContent; import cn.axzo.workflow.core.repository.entity.ExtAxDocContent;
import cn.axzo.workflow.core.repository.entity.ExtAxModelDoc; import cn.axzo.workflow.core.repository.entity.ExtAxModelDoc;
import cn.axzo.workflow.core.repository.mapper.ExtAxModelDocMapper; import cn.axzo.workflow.core.repository.mapper.ExtAxModelDocMapper;
import cn.axzo.workflow.core.service.BpmnProcessModelService;
import cn.axzo.workflow.core.service.ExtAxDocContentService; import cn.axzo.workflow.core.service.ExtAxDocContentService;
import cn.axzo.workflow.core.service.ExtAxModelDocService; import cn.axzo.workflow.core.service.ExtAxModelDocService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinition;
@ -26,6 +29,7 @@ import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -33,6 +37,7 @@ import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS; import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_NOT_EXISTS; import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_NOT_EXISTS;
@ -63,9 +68,7 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService {
public BpmPageResult<DocBaseVO> docPage(DocSearchDTO dto) { public BpmPageResult<DocBaseVO> docPage(DocSearchDTO dto) {
Page<ExtAxModelDoc> page = extAxModelDocMapper.selectPage(new Page<>(dto.getPageNo(), dto.getPageSize()), Page<ExtAxModelDoc> page = extAxModelDocMapper.selectPage(new Page<>(dto.getPageNo(), dto.getPageSize()),
buildQueryWrapper(BeanMapper.copyBean(dto, ExtAxModelDoc.class))); buildQueryWrapper(BeanMapper.copyBean(dto, ExtAxModelDoc.class)));
List<DocBaseVO> list = BeanMapper.copyList(page.getRecords(), DocBaseVO.class, (s, t) -> { List<DocBaseVO> list = BeanMapper.copyList(page.getRecords(), DocBaseVO.class, (s, t) -> t.setFileType(FileTypeEnum.valueOfType(s.getFileType())));
t.setFileType(FileTypeEnum.valueOfType(s.getFileType()));
});
return new BpmPageResult<>(list, page.getTotal()); return new BpmPageResult<>(list, page.getTotal());
} }
@ -93,9 +96,7 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService {
query.setStatus(true); query.setStatus(true);
query.setTenantId(processDefinition.getTenantId()); query.setTenantId(processDefinition.getTenantId());
List<ExtAxModelDoc> docs = extAxModelDocMapper.selectList(buildQueryWrapper(query)); List<ExtAxModelDoc> docs = extAxModelDocMapper.selectList(buildQueryWrapper(query));
return BeanMapper.copyList(docs, DocBaseVO.class, (s, t) -> { return BeanMapper.copyList(docs, DocBaseVO.class, (s, t) -> t.setFileType(FileTypeEnum.valueOfType(s.getFileType())));
t.setFileType(FileTypeEnum.valueOfType(s.getFileType()));
});
} }
@Override @Override
@ -211,6 +212,26 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService {
return extAxModelDocMapper.deleteById(docId) > 0; return extAxModelDocMapper.deleteById(docId) > 0;
} }
@Override
public Boolean batchDeleteDoc(List<Long> docIds) {
if (CollectionUtils.isEmpty(docIds)) {
return true;
}
List<ExtAxModelDoc> entities = extAxModelDocMapper.selectBatchIds(docIds);
if (CollectionUtils.isEmpty(entities)) {
return true;
}
List<ExtAxModelDoc> hiprintList = entities.stream()
.filter(entity -> Objects.equals(FileTypeEnum.HIPRINT, FileTypeEnum.valueOfType(entity.getFileType())))
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(hiprintList)) {
extAxDocContentService.batchDeleteContent(hiprintList.stream()
.map(ExtAxModelDoc::getFileRelationId)
.collect(Collectors.toList()));
}
return extAxModelDocMapper.deleteBatchIds(docIds) > 0;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean orderDoc(DocOrderDTO dto) { public Boolean orderDoc(DocOrderDTO dto) {
@ -244,4 +265,25 @@ public class ExtAxModelDocServiceImpl implements ExtAxModelDocService {
extAxModelDocMapper.updateById(doc); extAxModelDocMapper.updateById(doc);
return true; return true;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean resetDoc(DocResetDTO dto) {
DocSearchDTO docSearchDTO = new DocSearchDTO();
docSearchDTO.setModelId(dto.getModelId());
docSearchDTO.setPageNo(1);
docSearchDTO.setPageSize(999);
BpmPageResult<DocBaseVO> docBaseVOBpmPageResult = this.docPage(docSearchDTO);
List<DocBaseVO> docBaseVOS = ListUtils.emptyIfNull(docBaseVOBpmPageResult.getList());
//先删除
if (!CollectionUtils.isEmpty(docBaseVOS)) {
this.batchDeleteDoc(docBaseVOS.stream().map(DocBaseVO::getId).collect(Collectors.toList()));
}
//通用模板的文档
List<DocBaseVO> commonDocBaseVos = this.docList(DocQueryDTO.builder().processDefinitionKey(dto.getCategory()).build());
if (!CollectionUtils.isEmpty(commonDocBaseVos)) {
//todo 需要克隆
}
return true;
}
} }

View File

@ -15,6 +15,7 @@ import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocOrderDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocResetDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocSearchDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO; import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
@ -477,4 +478,11 @@ public class BpmnProcessModelController implements ProcessModelApi {
public CommonResponse<Boolean> orderDoc(@Validated @RequestBody DocOrderDTO dto) { public CommonResponse<Boolean> orderDoc(@Validated @RequestBody DocOrderDTO dto) {
return success(modelDocService.orderDoc(dto)); return success(modelDocService.orderDoc(dto));
} }
@Override
@Operation(summary = "重置模版关联文档")
@PostMapping(value = "/doc/reset")
public CommonResponse<Boolean> resetDoc(@Validated @RequestBody DocResetDTO dto) {
return success(modelDocService.resetDoc(dto));
}
} }

View File

@ -229,7 +229,7 @@ public class ProcessCategoryController implements ProcessCategoryApi {
@Operation(summary = "业务分类黑白名单查询") @Operation(summary = "业务分类黑白名单查询")
@PostMapping("/group-with-vars/list") @PostMapping("/group-with-vars/list")
@Override @Override
public CommonResponse<List<CategoryGroupVarItemVo>> configSearchGroupAndVars(@Validated @RequestBody CategoryGroupVarSearchDto dto) { public CommonResponse<List<CategoryGroupVarItemVo>> searchCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarSearchDto dto) {
return success(categoryGroupService.searchGroupAndVarList(dto)); return success(categoryGroupService.searchGroupAndVarList(dto));
} }
@ -241,7 +241,7 @@ public class ProcessCategoryController implements ProcessCategoryApi {
@Operation(summary = "业务分类黑白名单查询") @Operation(summary = "业务分类黑白名单查询")
@PostMapping("/group-with-vars/upsert") @PostMapping("/group-with-vars/upsert")
@Override @Override
public CommonResponse<Boolean> upsertGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto) { public CommonResponse<Boolean> upsertCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto) {
return success(categoryGroupService.upsertGroupAndVars(dto)); return success(categoryGroupService.upsertGroupAndVars(dto));
} }
} }

View File

@ -88,136 +88,6 @@ public interface WorkflowCoreService {
@Operation(summary = "业务节点设置审批人,不支持重复调用设置审批人,需一次性传入所有审批人") @Operation(summary = "业务节点设置审批人,不支持重复调用设置审批人,需一次性传入所有审批人")
Boolean setAssignee(@Validated @RequestBody BpmnActivitySetAssigneeDTO dto); Boolean setAssignee(@Validated @RequestBody BpmnActivitySetAssigneeDTO dto);
/**
* 创建流程前的节点列表
* 用于发起人自选
*
* @return
*/
@Operation(summary = "创建审批流程前,返回模型节点列表以及节点能否设置审批人")
@PostMapping("/api/process/instance/create/before")
@InvokeMode(SYNC)
List<NodesByModelVO> nodesBeforeCreateProcessInstance(@Validated @RequestBody BeforeProcessInstanceCreateDTO 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);
/**
* 根据任务id查询任务状态按钮详情
*
* @param taskButtonsSearchDTO 请求参数
* @return
*/
@Operation(summary = "根据任务id查询任务状态按钮详情")
@PostMapping("/api/process/instance/task/buttons/find")
@InvokeMode(SYNC)
BpmnTaskButtonVo findProcessSingleTaskButtons(@Validated @RequestBody BpmnTaskButtonSearchDTO taskButtonsSearchDTO);
/**
* 更新指定流程表单最后一次编辑的内容
*
* @param dto
* @return
*/
@Operation(summary = "更新指定流程表单最后一次编辑的内容")
@PostMapping("/api/process/instance/form/variable/update")
@InvokeMode(SYNC)
Boolean updateInstanceFormVariables(@Validated @RequestBody FormVariablesUpdateDTO dto);
/** /**
* 同意 * 同意
* *
@ -364,6 +234,136 @@ public interface WorkflowCoreService {
@PostMapping("/api/process/task/robot/complete") @PostMapping("/api/process/task/robot/complete")
Boolean completeRobotTask(@Validated @RequestBody BpmnRobotTaskCompleteDTO dto); Boolean completeRobotTask(@Validated @RequestBody BpmnRobotTaskCompleteDTO dto);
/**
* 创建流程前的节点列表
* 用于发起人自选
*
* @return
*/
@Operation(summary = "创建审批流程前,返回模型节点列表以及节点能否设置审批人")
@PostMapping("/api/process/instance/create/before")
@InvokeMode(SYNC)
List<NodesByModelVO> nodesBeforeCreateProcessInstance(@Validated @RequestBody BeforeProcessInstanceCreateDTO 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);
/**
* 根据任务id查询任务状态按钮详情
*
* @param taskButtonsSearchDTO 请求参数
* @return
*/
@Operation(summary = "根据任务id查询任务状态按钮详情")
@PostMapping("/api/process/instance/task/buttons/find")
@InvokeMode(SYNC)
BpmnTaskButtonVo findProcessSingleTaskButtons(@Validated @RequestBody BpmnTaskButtonSearchDTO taskButtonsSearchDTO);
/**
* 更新指定流程表单最后一次编辑的内容
*
* @param dto
* @return
*/
@Operation(summary = "更新指定流程表单最后一次编辑的内容")
@PostMapping("/api/process/instance/form/variable/update")
@InvokeMode(SYNC)
Boolean updateInstanceFormVariables(@Validated @RequestBody FormVariablesUpdateDTO dto);
/** /**
* 强制使用异步模式调用该方法请在调用真实方法前调用该方法 * 强制使用异步模式调用该方法请在调用真实方法前调用该方法
* <pre> * <pre>

View File

@ -33,6 +33,8 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
import cn.axzo.workflow.common.model.request.category.CategoryConfigCreateDTO; import cn.axzo.workflow.common.model.request.category.CategoryConfigCreateDTO;
import cn.axzo.workflow.common.model.request.category.CategoryConfigSearchDTO; import cn.axzo.workflow.common.model.request.category.CategoryConfigSearchDTO;
import cn.axzo.workflow.common.model.request.category.CategoryCreateDTO; import cn.axzo.workflow.common.model.request.category.CategoryCreateDTO;
import cn.axzo.workflow.common.model.request.category.CategoryGroupVarSearchDto;
import cn.axzo.workflow.common.model.request.category.CategoryGroupVarUpsertDto;
import cn.axzo.workflow.common.model.request.category.CategorySearchDTO; import cn.axzo.workflow.common.model.request.category.CategorySearchDTO;
import cn.axzo.workflow.common.model.request.category.CategoryUpdateDTO; import cn.axzo.workflow.common.model.request.category.CategoryUpdateDTO;
import cn.axzo.workflow.common.model.request.es.InstanceSearchReqDTO; import cn.axzo.workflow.common.model.request.es.InstanceSearchReqDTO;
@ -54,6 +56,7 @@ 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.BpmnTaskInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO; import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
import cn.axzo.workflow.common.model.response.category.CategoryConfigItemVO; import cn.axzo.workflow.common.model.response.category.CategoryConfigItemVO;
import cn.axzo.workflow.common.model.response.category.CategoryGroupVarItemVo;
import cn.axzo.workflow.common.model.response.category.CategoryItemVO; import cn.axzo.workflow.common.model.response.category.CategoryItemVO;
import cn.axzo.workflow.common.model.response.es.ProcessInstanceDocumentVO; import cn.axzo.workflow.common.model.response.es.ProcessInstanceDocumentVO;
import cn.axzo.workflow.common.model.response.form.FormVO; import cn.axzo.workflow.common.model.response.form.FormVO;
@ -93,229 +96,91 @@ import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
@org.springframework.cloud.openfeign.FeignClient(name = "workflow-engine", url = "${axzo.service.workflow-engine:http://workflow-engine:8080}", configuration = WorkflowEngineStarterFeignConfiguration.class) @org.springframework.cloud.openfeign.FeignClient(name = "workflow-engine", url = "${axzo.service.workflow-engine:http://workflow-engine:8080}", configuration = WorkflowEngineStarterFeignConfiguration.class)
public interface WorkflowManageService { public interface WorkflowManageService {
@Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
@GetMapping("/api/print/admin/template/exists")
@InvokeMode(SYNC)
Boolean hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
@Operation(summary = "获取打印模板中可打印的字段")
@PostMapping("/api/print/admin/fields")
@InvokeMode(SYNC)
List<PrintFieldDTO> getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
@Operation(summary = "获取指定流程下用于替换打印的相关变量")
@GetMapping("/api/print/admin/field/variables")
@InvokeMode(SYNC)
Map<String, Object> getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
/** /**
* 查询管理员 * 获取活跃的流程定义分页
* @param dto 管理员数据
* @return 管理员id
*/ */
@PostMapping("/api/process/admin/query") @GetMapping("/api/process/definition/page")
@InvokeMode(SYNC) @InvokeMode(SYNC)
List<ProcessAdminVo> queryProcessAdmins(@RequestBody ProcessAdminQueryDTO dto); BpmPageResult<BpmnProcessDefinitionVO> getProcessDefinitionPage(@Validated @RequestBody BpmnProcessDefinitionPageDTO dto);
/** /**
* 查询管理员 * 通过模型 ID 更新流程定义
* @param dto 管理员数据
* @return 管理员id
*/
@PostMapping("/api/process/admin/query/count")
@InvokeMode(SYNC)
Integer queryProcessAdminsCount(@RequestBody ProcessAdminQueryDTO dto);
/**
* 添加管理员
* @param dto 管理员数据
* @return 管理员id
*/
@PostMapping("/api/process/admin/create")
@InvokeMode(SYNC)
Long createProcessAdmin(@RequestBody ProcessAdminCreateDTO dto);
/**
* 批量添加管理员
* @param dtos
* @return
*/
@PostMapping("/api/process/admin/batch/create")
@InvokeMode(SYNC)
Void batchCreateProcessAdmin(@RequestBody List<ProcessAdminCreateDTO> dtos);
/**
* 删除管理员
* @param id 配置表id
* @return
*/
@DeleteMapping("/api/process/admin/delete")
@InvokeMode(SYNC)
Integer deleteCommonProcessAdmin(@RequestParam Long id);
/**
* 根据条件删除管理员
* @param dto 删除条件
* @return
*/
@DeleteMapping("/api/process/admin/delete/criteria")
@InvokeMode(SYNC)
Integer deleteProcessAdminCriteria(@RequestBody ProcessAdminDeleteDTO dto);
/**
* 删除管理员
* @param ids 管理员配置id列表
* @return
*/
@DeleteMapping("/api/process/admin/batch/delete")
@InvokeMode(SYNC)
Integer batchDeleteProcessAdmin(@RequestBody List<Long> ids);
/**
* 该功能应该利用引擎的 TimerBoundaryEvent 来实现但为了简便先利用引擎的任务调度来实现
*
* @return
*/
@PostMapping("/api/process/activity/timeout/trigger")
@Manageable
@Operation(summary = "设置指定业务节点定时继续往下执行")
Boolean setTimeoutTrigger(@Validated @RequestBody BpmnActivityTimeoutTriggerDTO dto);
/**
* 为指定业务节点设置定时回调
*
* @return
*/
@Manageable
@PostMapping("/api/process/activity/timeout/callback")
@Operation(summary = "设置指定业务节点定时回调")
Boolean setTimeoutCallback(@Validated @RequestBody BpmnActivityTimeoutCallbackDTO dto);
@PostMapping("/api/form/admin/form/page")
@InvokeMode(SYNC)
List<FormVO> formPage(@Validated @RequestBody FormSearchDTO dto);
@PostMapping("/api/form/admin/start/form")
@InvokeMode(SYNC)
FormDefinitionVO getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto);
/**
* 查询指定审批实例的表单模型和数据
* <p>
* dto 中的 processInstanceId taskId至少有一个属性有值一般建议直接使用实例 ID
* 当传入 taskId 将只查询该任务绑定的表单模型和数据
* *
* @param dto * @param dto
* @return * @return
*/ */
@PostMapping("/api/form/admin/instance/render") @PutMapping("/api/process/definition/update")
@InvokeMode(SYNC) @InvokeMode(SYNC)
FormInstanceVO getFormInstance(@Validated @RequestBody FormDetailDTO dto); Boolean updateProcessDefinition(@Validated @RequestBody BpmnProcessDefinitionUpdateDTO dto);
/** /**
* ES 中搜索符合条件的实例纬度数据 * 获得指定定义编号对应的流程定义内容
* *
* @param dto * @param processDefinitionId 编号
* @return 流程定义
*/
@GetMapping("/api/process/definition/get")
@InvokeMode(SYNC)
BpmnProcessDefinitionVO getProcessDefinition(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId);
/**
* 获得 deploymentId 对应的 ProcessDefinition
*
* @param deploymentId 部署编号
* @return 流程定义
*/
@GetMapping("/api/process/definition/getByDeploymentId")
@InvokeMode(SYNC)
BpmnProcessDefinitionVO getProcessDefinitionByDeploymentId(@NotBlank(message = "流程部署 ID 不能为空") @RequestParam String deploymentId);
/**
* 获得流程定义标识对应的激活的流程定义
*
* @param key 流程定义的标识
* @return 流程定义
*/
@GetMapping("/api/process/definition/active/getByKey")
@InvokeMode(SYNC)
BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key);
/**
* 挂起/激活流程
* 激活SuspensionState.ACTIVE.getStateCode()
* 挂起SuspensionState.SUSPENDED.getStateCode()
* {@see SuspensionState}
*/
@PutMapping("/api/process/definition/state/update")
@InvokeMode(SYNC)
Boolean getActiveProcessDefinitionByKey(@NotBlank(message = "流程定义ID不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer state);
/**
* 获取指定模型的定义 ID
*
* @return 流程定义ID
*/
@GetMapping("/api/process/definition/active/getByCategory")
@InvokeMode(SYNC)
String getActiveProcessDefinitionId(@RequestParam(required = false) String tenantId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String category);
/**
* 获取指定模型激活的流程定义 JSON 模型
*
* @return 流程定义ID
*/
@GetMapping("/api/process/definition/active/json/model")
@InvokeMode(SYNC)
BpmnModelUpdateDTO getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String key, @RequestParam(required = false) String tenantId);
/**
* 删除流程部署及定义
*
* @param deploymentId 流程定义部署 ID
* @param cascade 是否级联参数定义对应的流程实例及 job 等管理内容
* @return * @return
*/ */
@PostMapping("/api/es/instance/search") @GetMapping("/api/process/definition/delete")
@InvokeMode(SYNC) @InvokeMode(SYNC)
BpmPageResult<ProcessInstanceDocumentVO> searchInstanceInEs(@Validated @RequestBody InstanceSearchReqDTO dto); Void delete(@NotBlank(message = "流程定义部署 ID 不能为空") String deploymentId, @RequestParam(required = false) Boolean cascade);
@DeleteMapping("/api/process/instance/super/cancel")
@Manageable
Boolean superCancelProcessInstance(@Validated @RequestBody SuperBpmnProcessInstanceCancelDTO dto);
/**
* 查询所有的审批流
*
* @return
*/
@Operation(summary = "查询所有的审批流")
@PostMapping("/api/process/instance/page/all")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnProcessInstanceAdminPageItemVO> getAllProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceAdminPageReqVO dto);
/**
* 我发起的审批列表
*/
@Operation(summary = "我发起的审批列表")
@PostMapping("/api/process/instance/page/my")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnProcessInstancePageItemVO> getMyProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceMyPageReqVO dto);
/**
* 更新流程定义的状态
*
* @param processDefinitionId 流程定义的编号
* @param status 1, "active"; 2, "suspended"
*/
@Operation(summary = "更新指定流程定义的版本的状态, 处于 suspended 状态的流程模型将不能再发起实例")
@PutMapping("/api/process/instance/status/update")
@Manageable
@InvokeMode(SYNC)
Boolean updateProcessStatus(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer status);
/**
* 获取审批流程实例的运行图
*
* @param processInstanceId
* @param tenantId
* @return
*/
@Operation(summary = "获取审批流程实例的运行图")
@GetMapping("/api/process/instance/graphical")
@Manageable
@InvokeMode(SYNC)
ObjectNode processInstanceGraphical(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 推断指定流程实例的所有节点执行顺序
*
* @return
*/
@Operation(summary = "推断指定流程实例的所有节点执行顺序")
@GetMapping("/api/process/instance/node/forecasting")
@Manageable
@InvokeMode(SYNC)
List<ProcessNodeDetailVO> processInstanceNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 推断指定流程实例的过滤掉部分节点执行顺序
*
* @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数
* 如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点
* @return
*/
@Operation(summary = "推断指定流程实例的过滤掉部分节点执行顺序")
@GetMapping("/api/process/instance/node/filter/forecasting")
@Manageable
@InvokeMode(SYNC)
List<ProcessNodeDetailVO> processInstanceFilterNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId, @RequestParam(required = false, defaultValue = "false") Boolean allNode, @Nullable @RequestParam(required = false) List<String> nodeDefinitionKeys);
/**
* 查询实例的租户集合
*
* @return
*/
@Operation(summary = "查询实例的租户集合")
@GetMapping("/api/process/instance/tenant/ids")
@Manageable
@InvokeMode(SYNC)
List<String> getTenantIds();
/**
* 校验指定流程实例下,是否存在指定的审批人正处理待审批
*
* @return true 是在当前流程实例中,存在指定的审批人
*/
@Operation(summary = "校验指定流程实例下,是否存在指定的审批人")
@PostMapping("/api/process/instance/check/approver")
@Manageable
@InvokeMode(SYNC)
Boolean checkInstanceApprover(@Validated @RequestBody BpmnProcessInstanceCheckApproverDTO dto);
/** /**
* 将死信队列中的任务转移到正常 JOB 队列中 * 将死信队列中的任务转移到正常 JOB 队列中
@ -349,6 +214,25 @@ public interface WorkflowManageService {
@Manageable @Manageable
String getDeadLetterJobExceptionStacktraceByJobId(@RequestParam String jobId); String getDeadLetterJobExceptionStacktraceByJobId(@RequestParam String jobId);
/**
* 获取流程操作按钮列表
*
* @return 流程操作按钮列表
*/
@GetMapping("/api/process/config/button/list")
@InvokeMode(SYNC)
List<BpmnButtonMetaInfo> getDefaultButtons();
/**
* ES 中搜索符合条件的实例纬度数据
*
* @param dto
* @return
*/
@PostMapping("/api/es/instance/search")
@InvokeMode(SYNC)
BpmPageResult<ProcessInstanceDocumentVO> searchInstanceInEs(@Validated @RequestBody InstanceSearchReqDTO dto);
/** /**
* 获取指定业务分类 * 获取指定业务分类
* *
@ -487,13 +371,291 @@ public interface WorkflowManageService {
Boolean checkCategoryStatus(@RequestParam Long tenantId, @RequestParam String categoryCode); Boolean checkCategoryStatus(@RequestParam Long tenantId, @RequestParam String categoryCode);
/** /**
* 获取流程操作按钮列表 * 查询分类对应的分组以及分组下的变量
* * @param dto 请求参数
* @return 流程操作按钮列表 * @return 分组以及分组下的变量
*/ */
@GetMapping("/api/process/config/button/list") @PostMapping("/api/process/category/group-with-vars/list")
@InvokeMode(SYNC) @InvokeMode(SYNC)
List<BpmnButtonMetaInfo> getDefaultButtons(); List<CategoryGroupVarItemVo> searchCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarSearchDto dto);
/**
* 新增或者更新分组或者变量
* @param dto 请求参数
* @return 是否成功
*/
@PostMapping("/api/process/category/group-with-vars/upsert")
Boolean upsertCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto);
/**
* 该功能应该利用引擎的 TimerBoundaryEvent 来实现但为了简便先利用引擎的任务调度来实现
*
* @return
*/
@PostMapping("/api/process/activity/timeout/trigger")
@Manageable
@Operation(summary = "设置指定业务节点定时继续往下执行")
Boolean setTimeoutTrigger(@Validated @RequestBody BpmnActivityTimeoutTriggerDTO dto);
/**
* 为指定业务节点设置定时回调
*
* @return
*/
@Manageable
@PostMapping("/api/process/activity/timeout/callback")
@Operation(summary = "设置指定业务节点定时回调")
Boolean setTimeoutCallback(@Validated @RequestBody BpmnActivityTimeoutCallbackDTO dto);
/**
* 为指定流程新增变量
*/
@PostMapping("/api/process/variable/create/{executionId}")
@InvokeMode(SYNC)
Void createVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable);
/**
* 仅更新流程已存在的变量
*
* @param executionId
* @param restVariable
* @return
*/
@PostMapping("/api/process/variable/update/{executionId}")
@InvokeMode(SYNC)
Void updateVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable);
/**
* 批量删除流程变量
*/
@DeleteMapping("/api/process/variable/delete/{executionId}")
@InvokeMode(SYNC)
Void deleteVariables(@PathVariable("executionId") String executionId, @RequestParam String variableNames, @RequestParam(value = "scope", required = false) String scope);
@Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
@GetMapping("/api/print/admin/template/exists")
@InvokeMode(SYNC)
Boolean hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
@Operation(summary = "获取打印模板中可打印的字段")
@PostMapping("/api/print/admin/fields")
@InvokeMode(SYNC)
List<PrintFieldDTO> getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
@Operation(summary = "获取指定流程下用于替换打印的相关变量")
@GetMapping("/api/print/admin/field/variables")
@InvokeMode(SYNC)
Map<String, Object> getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
/**
* 催办
*
* @param dto
* @return
*/
@Operation(summary = "审批流程催办")
@PostMapping("/api/process/task/remind")
@Manageable
@InvokeMode(SYNC)
Boolean remindTask(@Validated @RequestBody BpmnTaskRemindDTO dto);
/**
* 添加附件
*
* @param dto
* @return
*/
@Operation(summary = "添加附件")
@PostMapping("/api/process/task/attachment")
@Manageable
Void addAttachment(@Validated @RequestBody BpmnTaskAttachmentDTO dto);
/**
* 待审核列表
*/
@Operation(summary = "待审核列表")
@GetMapping("/api/process/task/page/todo")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnTaskTodoPageItemVO> getTodoTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto);
/**
* 已完成的审批列表
*/
@Operation(summary = "已完成的审批列表")
@GetMapping("/api/process/task/page/done")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnTaskDonePageItemVO> getDoneTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto);
/**
* 获取指定流程实例的审批过程信息
* <p>
* 同一层级结构
*/
@Operation(summary = "获取指定流程实例的审批过程信息")
@GetMapping("/api/process/task/list/flat")
@Manageable
@InvokeMode(SYNC)
List<BpmnHistoricTaskInstanceVO> getTaskListFlatByProcessInstanceId(@NotBlank(message = "流程实例 ID " + "不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 获取指定流程实例的审批过程信息
* <p>
* 分组结构
*/
@Operation(summary = "获取指定流程实例的审批过程信息")
@GetMapping("/api/process/task/list/group")
@Manageable
@InvokeMode(SYNC)
List<BpmnHistoricTaskInstanceGroupVO> getTaskListGroupByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 获取实例正在审核的人列表
*/
@Operation(summary = "获取实例正在审核的人列表")
@GetMapping("/api/process/task/active/list")
@Manageable
@InvokeMode(SYNC)
List<BpmnTaskInstanceVO> getActiveTasksByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @NotBlank(message = "租户不能为空") @RequestParam String tenantId);
/**
* 根据实例 ID 和自然人 ID 查询对应待处理的任务 ID
*
* @return
*/
@Operation(summary = "根据实例 ID 和自然人 ID 查询对应待处理的任务 ID")
@GetMapping("/api/process/task/find")
@Manageable
@InvokeMode(SYNC)
String findTaskIdByInstanceIdAndPersonId(@RequestParam(required = false) @NotBlank(message = "流程实例 ID 不能为空") String processInstanceId, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId);
/**
* 根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID
*
* @return
*/
@Operation(summary = "根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID")
@GetMapping("/api/process/task/batch/find")
@Manageable
@InvokeMode(SYNC)
Map<String, String> findTaskIdByInstanceIdsAndPersonId(@RequestParam(required = false) @NotEmpty(message = "流程实例 ID列表 不能为空") List<String> processInstanceIds, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId);
@PostMapping("/api/form/admin/form/page")
@InvokeMode(SYNC)
List<FormVO> formPage(@Validated @RequestBody FormSearchDTO dto);
@PostMapping("/api/form/admin/start/form")
@InvokeMode(SYNC)
FormDefinitionVO getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto);
/**
* 查询指定审批实例的表单模型和数据
* <p>
* dto 中的 processInstanceId taskId至少有一个属性有值一般建议直接使用实例 ID
* 当传入 taskId 将只查询该任务绑定的表单模型和数据
*
* @param dto
* @return
*/
@PostMapping("/api/form/admin/instance/render")
@InvokeMode(SYNC)
FormInstanceVO getFormInstance(@Validated @RequestBody FormDetailDTO dto);
@DeleteMapping("/api/process/instance/super/cancel")
@Manageable
Boolean superCancelProcessInstance(@Validated @RequestBody SuperBpmnProcessInstanceCancelDTO dto);
/**
* 查询所有的审批流
*
* @return
*/
@Operation(summary = "查询所有的审批流")
@PostMapping("/api/process/instance/page/all")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnProcessInstanceAdminPageItemVO> getAllProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceAdminPageReqVO dto);
/**
* 我发起的审批列表
*/
@Operation(summary = "我发起的审批列表")
@PostMapping("/api/process/instance/page/my")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnProcessInstancePageItemVO> getMyProcessInstancePage(@Validated @RequestBody BpmnProcessInstanceMyPageReqVO dto);
/**
* 更新流程定义的状态
*
* @param processDefinitionId 流程定义的编号
* @param status 1, "active"; 2, "suspended"
*/
@Operation(summary = "更新指定流程定义的版本的状态, 处于 suspended 状态的流程模型将不能再发起实例")
@PutMapping("/api/process/instance/status/update")
@Manageable
@InvokeMode(SYNC)
Boolean updateProcessStatus(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer status);
/**
* 获取审批流程实例的运行图
*
* @param processInstanceId
* @param tenantId
* @return
*/
@Operation(summary = "获取审批流程实例的运行图")
@GetMapping("/api/process/instance/graphical")
@Manageable
@InvokeMode(SYNC)
ObjectNode processInstanceGraphical(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 推断指定流程实例的所有节点执行顺序
*
* @return
*/
@Operation(summary = "推断指定流程实例的所有节点执行顺序")
@GetMapping("/api/process/instance/node/forecasting")
@Manageable
@InvokeMode(SYNC)
List<ProcessNodeDetailVO> processInstanceNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 推断指定流程实例的过滤掉部分节点执行顺序
*
* @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数
* 如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点
* @return
*/
@Operation(summary = "推断指定流程实例的过滤掉部分节点执行顺序")
@GetMapping("/api/process/instance/node/filter/forecasting")
@Manageable
@InvokeMode(SYNC)
List<ProcessNodeDetailVO> processInstanceFilterNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, @Nullable @RequestParam(required = false) String tenantId, @RequestParam(required = false, defaultValue = "false") Boolean allNode, @Nullable @RequestParam(required = false) List<String> nodeDefinitionKeys);
/**
* 查询实例的租户集合
*
* @return
*/
@Operation(summary = "查询实例的租户集合")
@GetMapping("/api/process/instance/tenant/ids")
@Manageable
@InvokeMode(SYNC)
List<String> getTenantIds();
/**
* 校验指定流程实例下,是否存在指定的审批人正处理待审批
*
* @return true 是在当前流程实例中,存在指定的审批人
*/
@Operation(summary = "校验指定流程实例下,是否存在指定的审批人")
@PostMapping("/api/process/instance/check/approver")
@Manageable
@InvokeMode(SYNC)
Boolean checkInstanceApprover(@Validated @RequestBody BpmnProcessInstanceCheckApproverDTO dto);
/** /**
* 流程模型列表 * 流程模型列表
@ -736,209 +898,67 @@ public interface WorkflowManageService {
Boolean orderDoc(@Validated @RequestBody DocOrderDTO dto); Boolean orderDoc(@Validated @RequestBody DocOrderDTO dto);
/** /**
* 为指定流程新增变量 * 查询管理员
* @param dto 管理员数据
* @return 管理员id
*/ */
@PostMapping("/api/process/variable/create/{executionId}") @PostMapping("/api/process/admin/query")
@InvokeMode(SYNC) @InvokeMode(SYNC)
Void createVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable); List<ProcessAdminVo> queryProcessAdmins(@RequestBody ProcessAdminQueryDTO dto);
/** /**
* 仅更新流程已存在的变量 * 查询管理员
* * @param dto 管理员数据
* @param executionId * @return 管理员id
* @param restVariable */
@PostMapping("/api/process/admin/query/count")
@InvokeMode(SYNC)
Integer queryProcessAdminsCount(@RequestBody ProcessAdminQueryDTO dto);
/**
* 添加管理员
* @param dto 管理员数据
* @return 管理员id
*/
@PostMapping("/api/process/admin/create")
@InvokeMode(SYNC)
Long createProcessAdmin(@RequestBody ProcessAdminCreateDTO dto);
/**
* 批量添加管理员
* @param dtos
* @return * @return
*/ */
@PostMapping("/api/process/variable/update/{executionId}") @PostMapping("/api/process/admin/batch/create")
@InvokeMode(SYNC) @InvokeMode(SYNC)
Void updateVariable(@PathVariable @NotBlank(message = "流程实例 ID 不能为空") String executionId, @RequestBody @Validated RestBpmnProcessVariable restVariable); Void batchCreateProcessAdmin(@RequestBody List<ProcessAdminCreateDTO> dtos);
/** /**
* 批量删除流程变量 * 删除管理员
*/ * @param id 配置表id
@DeleteMapping("/api/process/variable/delete/{executionId}")
@InvokeMode(SYNC)
Void deleteVariables(@PathVariable("executionId") String executionId, @RequestParam String variableNames, @RequestParam(value = "scope", required = false) String scope);
/**
* 催办
*
* @param dto
* @return * @return
*/ */
@Operation(summary = "审批流程催办") @DeleteMapping("/api/process/admin/delete")
@PostMapping("/api/process/task/remind")
@Manageable
@InvokeMode(SYNC) @InvokeMode(SYNC)
Boolean remindTask(@Validated @RequestBody BpmnTaskRemindDTO dto); Integer deleteCommonProcessAdmin(@RequestParam Long id);
/** /**
* 添加附件 * 根据条件删除管理员
* * @param dto 删除条件
* @param dto
* @return * @return
*/ */
@Operation(summary = "添加附件") @DeleteMapping("/api/process/admin/delete/criteria")
@PostMapping("/api/process/task/attachment")
@Manageable
Void addAttachment(@Validated @RequestBody BpmnTaskAttachmentDTO dto);
/**
* 待审核列表
*/
@Operation(summary = "待审核列表")
@GetMapping("/api/process/task/page/todo")
@Manageable
@InvokeMode(SYNC) @InvokeMode(SYNC)
BpmPageResult<BpmnTaskTodoPageItemVO> getTodoTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto); Integer deleteProcessAdminCriteria(@RequestBody ProcessAdminDeleteDTO dto);
/** /**
* 已完成的审批列表 * 删除管理员
*/ * @param ids 管理员配置id列表
@Operation(summary = "已完成的审批列表")
@GetMapping("/api/process/task/page/done")
@Manageable
@InvokeMode(SYNC)
BpmPageResult<BpmnTaskDonePageItemVO> getDoneTaskPage(@Validated @RequestBody BpmnTaskPageSearchDTO dto);
/**
* 获取指定流程实例的审批过程信息
* <p>
* 同一层级结构
*/
@Operation(summary = "获取指定流程实例的审批过程信息")
@GetMapping("/api/process/task/list/flat")
@Manageable
@InvokeMode(SYNC)
List<BpmnHistoricTaskInstanceVO> getTaskListFlatByProcessInstanceId(@NotBlank(message = "流程实例 ID " + "不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 获取指定流程实例的审批过程信息
* <p>
* 分组结构
*/
@Operation(summary = "获取指定流程实例的审批过程信息")
@GetMapping("/api/process/task/list/group")
@Manageable
@InvokeMode(SYNC)
List<BpmnHistoricTaskInstanceGroupVO> getTaskListGroupByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId);
/**
* 获取实例正在审核的人列表
*/
@Operation(summary = "获取实例正在审核的人列表")
@GetMapping("/api/process/task/active/list")
@Manageable
@InvokeMode(SYNC)
List<BpmnTaskInstanceVO> getActiveTasksByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @NotBlank(message = "租户不能为空") @RequestParam String tenantId);
/**
* 根据实例 ID 和自然人 ID 查询对应待处理的任务 ID
*
* @return * @return
*/ */
@Operation(summary = "根据实例 ID 和自然人 ID 查询对应待处理的任务 ID") @DeleteMapping("/api/process/admin/batch/delete")
@GetMapping("/api/process/task/find")
@Manageable
@InvokeMode(SYNC) @InvokeMode(SYNC)
String findTaskIdByInstanceIdAndPersonId(@RequestParam(required = false) @NotBlank(message = "流程实例 ID 不能为空") String processInstanceId, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId); Integer batchDeleteProcessAdmin(@RequestBody List<Long> ids);
/**
* 根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID
*
* @return
*/
@Operation(summary = "根据实例 ID列表 和自然人 ID 查询对应待处理的任务 ID")
@GetMapping("/api/process/task/batch/find")
@Manageable
@InvokeMode(SYNC)
Map<String, String> findTaskIdByInstanceIdsAndPersonId(@RequestParam(required = false) @NotEmpty(message = "流程实例 ID列表 不能为空") List<String> processInstanceIds, @RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId);
/**
* 获取活跃的流程定义分页
*/
@GetMapping("/api/process/definition/page")
@InvokeMode(SYNC)
BpmPageResult<BpmnProcessDefinitionVO> getProcessDefinitionPage(@Validated @RequestBody BpmnProcessDefinitionPageDTO dto);
/**
* 通过模型 ID 更新流程定义
*
* @param dto
* @return
*/
@PutMapping("/api/process/definition/update")
@InvokeMode(SYNC)
Boolean updateProcessDefinition(@Validated @RequestBody BpmnProcessDefinitionUpdateDTO dto);
/**
* 获得指定定义编号对应的流程定义内容
*
* @param processDefinitionId 编号
* @return 流程定义
*/
@GetMapping("/api/process/definition/get")
@InvokeMode(SYNC)
BpmnProcessDefinitionVO getProcessDefinition(@NotBlank(message = "流程定义 ID 不能为空") @RequestParam String processDefinitionId);
/**
* 获得 deploymentId 对应的 ProcessDefinition
*
* @param deploymentId 部署编号
* @return 流程定义
*/
@GetMapping("/api/process/definition/getByDeploymentId")
@InvokeMode(SYNC)
BpmnProcessDefinitionVO getProcessDefinitionByDeploymentId(@NotBlank(message = "流程部署 ID 不能为空") @RequestParam String deploymentId);
/**
* 获得流程定义标识对应的激活的流程定义
*
* @param key 流程定义的标识
* @return 流程定义
*/
@GetMapping("/api/process/definition/active/getByKey")
@InvokeMode(SYNC)
BpmnProcessDefinitionVO getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key);
/**
* 挂起/激活流程
* 激活SuspensionState.ACTIVE.getStateCode()
* 挂起SuspensionState.SUSPENDED.getStateCode()
* {@see SuspensionState}
*/
@PutMapping("/api/process/definition/state/update")
@InvokeMode(SYNC)
Boolean getActiveProcessDefinitionByKey(@NotBlank(message = "流程定义ID不能为空") @RequestParam String processDefinitionId, @NotNull(message = "状态不能为空") @RequestParam Integer state);
/**
* 获取指定模型的定义 ID
*
* @return 流程定义ID
*/
@GetMapping("/api/process/definition/active/getByCategory")
@InvokeMode(SYNC)
String getActiveProcessDefinitionId(@RequestParam(required = false) String tenantId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String category);
/**
* 获取指定模型激活的流程定义 JSON 模型
*
* @return 流程定义ID
*/
@GetMapping("/api/process/definition/active/json/model")
@InvokeMode(SYNC)
BpmnModelUpdateDTO getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId, @NotBlank(message = "分类不能为空") @RequestParam(required = false) String key, @RequestParam(required = false) String tenantId);
/**
* 删除流程部署及定义
*
* @param deploymentId 流程定义部署 ID
* @param cascade 是否级联参数定义对应的流程实例及 job 等管理内容
* @return
*/
@GetMapping("/api/process/definition/delete")
@InvokeMode(SYNC)
Void delete(@NotBlank(message = "流程定义部署 ID 不能为空") String deploymentId, @RequestParam(required = false) Boolean cascade);
/** /**
* 强制使用同步模式调用该方法请在调用真实方法前调用该方法 * 强制使用同步模式调用该方法请在调用真实方法前调用该方法