Merge branch '1.5.2-SNAPSHOT'

This commit is contained in:
wangli 2025-07-31 10:21:59 +08:00
commit 3a8e82d203
340 changed files with 12518 additions and 1492 deletions

3
.gitignore vendored
View File

@ -38,4 +38,5 @@ application-local.yml
*.log
rebel.xml
.flattened-pom.xml
.flattened-pom.xml
.DS_Store

19
pom.xml
View File

@ -16,7 +16,7 @@
<name>Workflow Engine</name>
<properties>
<revision>1.5.1-SNAPSHOT</revision>
<revision>1.5.2-SNAPSHOT</revision>
<axzo-bom.version>2.0.0-SNAPSHOT</axzo-bom.version>
<axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version>
<axzo-dependencies.org.version>1.0.0-SNAPSHOT</axzo-dependencies.org.version>
@ -30,6 +30,7 @@
<javaparse.version>3.26.0</javaparse.version>
<elasticsearch.version>7.10.2</elasticsearch.version>
<easy-es.version>2.0.0</easy-es.version>
<xxl-job.version>2.5.0</xxl-job.version>
</properties>
<dependencyManagement>
@ -48,6 +49,12 @@
<version>${axzo-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
@ -161,6 +168,16 @@
<artifactId>org-api</artifactId>
<version>${axzo-dependencies.org.version}</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job.version}</version>
</dependency>
<dependency>
<groupId>cn.axzo.nanopart</groupId>
<artifactId>doc-api</artifactId>
<version>${axzo-dependencies.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -13,7 +13,6 @@ import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
@ -84,7 +83,7 @@ public class WorkflowEngineClientAutoConfiguration {
Map<String, String> env = new HashMap<>();
env.put("create", "true");
try {
FileSystem zipfs = FileSystems.newFileSystem(location.toURI(), env);
FileSystems.newFileSystem(location.toURI(), env);
} catch (Exception e1) {
log.error("linux env create new FS error: {}", e1.getMessage());
}
@ -102,7 +101,7 @@ public class WorkflowEngineClientAutoConfiguration {
Map<String, String> env = new HashMap<>();
env.put("create", "true");
try {
FileSystem zipfs = FileSystems.newFileSystem(location.toURI(), env);
FileSystems.newFileSystem(location.toURI(), env);
} catch (Exception e) {
log.error("linux env create new FS error: {}", e.getMessage());
}

View File

@ -24,6 +24,7 @@ public class WorkflowRequestInterceptor implements RequestInterceptor {
public static final String HEADER_HTTP_CLIENT_VALUE = "WorkflowEngine-Feign";
public static final String HEADER_API_VERSION = "Service-Version";
public static final String HEADER_SERVER_NAME = "X-SERVER-NAME";
public static final String HEADER_W_E = "WE";
@Override

View File

@ -3,7 +3,6 @@ package cn.axzo.workflow.client.feign.bpmn;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.enums.RpcInvokeModeEnum;
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;

View File

@ -1,7 +1,6 @@
package cn.axzo.workflow.client.feign.bpmn;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.client.config.CommonFeignConfiguration;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.request.bpmn.definition.BpmnProcessDefinitionUpdateDTO;
@ -10,7 +9,6 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessDefinitionP
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
@ -20,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
@ -81,7 +80,8 @@ public interface ProcessDefinitionApi {
*/
@GetMapping("/api/process/definition/active/getByKey")
@InvokeMode(SYNC)
CommonResponse<BpmnProcessDefinitionVO> getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key);
CommonResponse<BpmnProcessDefinitionVO> getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key,
@RequestParam(required = false, defaultValue = NO_TENANT_ID) String tenantId);
/**

View File

@ -3,23 +3,34 @@ package cn.axzo.workflow.client.feign.bpmn;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.dto.SignFileDTO;
import cn.axzo.workflow.common.model.dto.SimpleDocDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
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.request.bpmn.process.SuperBpmnProcessInstanceCancelDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.doc.ApproverReadStatusDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.doc.ChangeApproverReadStatusDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.doc.ProcessDocQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
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.NodesByModelVO;
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
import cn.axzo.workflow.common.model.response.bpmn.process.doc.DocPendingVO;
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo;
import cn.azxo.framework.common.model.CommonResponse;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.v3.oas.annotations.Operation;
@ -48,6 +59,18 @@ import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
//@FeignClient(name = "workflow-engine", url = "${axzo.service.workflow-engine:http://workflow-engine:8080}", configuration = CommonFeignConfiguration.class)
@WorkflowEngineFeignClient
public interface ProcessInstanceApi {
/**
* 创建流程前的节点列表
* 用于发起人自选
*
* @return
*/
@Operation(summary = "创建审批流程前,返回模型节点列表以及节点能否设置审批人")
@PostMapping("/api/process/instance/create/before")
@InvokeMode(SYNC)
CommonResponse<List<NodesByModelVO>> nodesBeforeCreateProcessInstance(@Validated @RequestBody BeforeProcessInstanceCreateDTO dto);
/**
* 创建审批流程
*
@ -80,6 +103,10 @@ public interface ProcessInstanceApi {
@DeleteMapping("/api/process/instance/cancel")
CommonResponse<Boolean> cancelProcessInstance(@Validated @RequestBody BpmnProcessInstanceCancelDTO dto);
@DeleteMapping("/api/process/instance/super/cancel")
@Manageable
CommonResponse<Boolean> superCancelProcessInstance(@Validated @RequestBody SuperBpmnProcessInstanceCancelDTO dto);
/**
* 中止流程实例
*
@ -222,7 +249,7 @@ public interface ProcessInstanceApi {
CommonResponse<List<String>> getTenantIds();
/**
* 校验指定流程实例下,是否存在指定的审批人
* 校验指定流程实例下,是否存在指定的审批人正处理待审批
*
* @return true 是在当前流程实例中,存在指定的审批人
*/
@ -242,4 +269,64 @@ public interface ProcessInstanceApi {
@PostMapping("/api/process/instance/logs")
@InvokeMode(SYNC)
CommonResponse<BpmnProcessInstanceLogVO> getProcessInstanceLogs(@Validated @RequestBody BpmnProcessInstanceLogQueryDTO dto);
/**
* 根据任务id查询任务状态按钮详情
*
* @param taskButtonsSearchDTO 请求参数
* @return
*/
@Operation(summary = "根据任务id查询任务状态按钮详情")
@PostMapping("/api/process/instance/task/buttons/find")
@InvokeMode(SYNC)
CommonResponse<BpmnTaskButtonVo> findProcessSingleTaskButtons(@Validated @RequestBody BpmnTaskButtonSearchDTO taskButtonsSearchDTO);
/**
* 更新指定流程表单最后一次编辑的内容
*
* @param dto
* @return
*/
@Operation(summary = "更新指定流程表单最后一次编辑的内容")
@PostMapping("/api/process/instance/form/variable/update")
@InvokeMode(SYNC)
CommonResponse<Boolean> updateInstanceFormVariables(@Validated @RequestBody FormVariablesUpdateDTO dto);
/**
* 签署业务流程实例在审批待办中查询使用的文档列表
*
* @return
*/
@Operation(summary = "签署业务流程实例在审批待办中查询使用的文档列表")
@PostMapping("/api/process/instance/select/doc/list")
@InvokeMode(SYNC)
CommonResponse<List<DocPendingVO>> processInstanceSelectDocs(@Validated @RequestBody ProcessDocQueryDTO dto);
/**
* 获取审批人阅读状态
*
* @return
*/
@Operation(summary = "获取审批人阅读状态")
@PostMapping("/api/process/instance/approver/read/status")
@InvokeMode(SYNC)
CommonResponse<List<SimpleDocDTO>> approverReadStatus(@Validated @RequestBody ApproverReadStatusDTO dto);
/**
* 修改审批人关联文档阅读状态
*/
@Operation(summary = "修改审批人关联文档阅读状态")
@PostMapping("/api/process/instance/approver/read/status/change")
@InvokeMode(SYNC)
CommonResponse<Boolean> approveReadStatusChange(@Validated @RequestBody ChangeApproverReadStatusDTO dto);
/**
* 获取签署业务流程最后替换的文档 fileKey 集合
*
* @return
*/
@Operation(summary = "获取签署业务流程最后替换的文档 fileKey 集合")
@GetMapping("/api/process/instance/final/docs")
@InvokeMode(SYNC)
CommonResponse<List<SignFileDTO>> getProcessInstanceFinalDocs(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId);
}

View File

@ -6,9 +6,23 @@ import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelSearchDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.BpmnModelUpdateDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocByIdDTO;
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.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.DocStatusDTO;
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocTenantQueryDTO;
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.PrintTemplateConfigUpsertDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.RestPrintTemplateConfigDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelDetailVO;
import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelExtVO;
import cn.axzo.workflow.common.model.response.bpmn.model.doc.DocBaseVO;
import cn.axzo.workflow.common.model.response.print.PrintModelDTO;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.validation.annotation.Validated;
@ -168,8 +182,23 @@ public interface ProcessModelApi {
@PostMapping("/api/process/model/changeStatus")
@InvokeMode(SYNC)
CommonResponse<Boolean> changeStatus(@NotBlank(message = "模型 ID 不能为空") @RequestParam String modelId,
@NotNull(message = "状态不能为空") @RequestParam Integer status,
@RequestParam(required = false) String operator);
@NotNull(message = "状态不能为空") @RequestParam Integer status,
@RequestParam(required = false) String operator);
/**
* 修改模型打印开关状态
*
* @param modelId
* @param status
* @param operator
* @return
*/
@Operation(summary = "修改模型打印开关状态")
@PostMapping("/api/process/model/print/changeStatus")
@InvokeMode(SYNC)
CommonResponse<Boolean> changePrintStatus(@NotBlank(message = "模型 ID 不能为空") @RequestParam String modelId,
@NotNull(message = "状态不能为空") @RequestParam Integer status,
@RequestParam(required = false) String operator);
/**
* 查询流程模型使用的分类列表
@ -190,4 +219,174 @@ public interface ProcessModelApi {
@GetMapping("/api/process/model/tenant/ids")
@InvokeMode(SYNC)
CommonResponse<List<String>> getModelTenantIds();
/**
* 打印模板配置内容更新保存
*
* @param dto
* @return
*/
@Operation(summary = "打印模板配置内容更新保存")
@PostMapping("/api/process/model/print/template/upsert")
@InvokeMode(SYNC)
CommonResponse<Void> printTemplateConfig(@Validated @RequestBody PrintTemplateConfigUpsertDTO dto);
/**
* 获取打印模板配置内容
*
* @param dto
* @return
*/
@Operation(summary = "获取打印模板配置内容")
@PostMapping("/api/process/model/print/template/config/query")
@InvokeMode(SYNC)
CommonResponse<PrintModelDTO> getPrintTemplateConfig(@Validated @RequestBody PrintTemplateConfigQueryDTO dto);
/**
* 代运营充值的打印模板
*
* @param dto
* @return
*/
@Operation(summary = "代运营重置打印模板")
@PostMapping(value = "/api/process/model/print/template/config/reset")
@InvokeMode(SYNC)
CommonResponse<Boolean> resetPrintTemplateConfig(@Validated @RequestBody RestPrintTemplateConfigDTO dto);
/**
* 搜索文档列表
*
* @param dto
* @return
*/
@Operation(summary = "搜索文档列表")
@PostMapping(value = "/api/process/model/doc/page")
@InvokeMode(SYNC)
CommonResponse<BpmPageResult<DocBaseVO>> docPage(@Validated @RequestBody DocSearchDTO dto);
/**
* 获取指定 docIds 文档列表
*
* @return
*/
@Operation(summary = "获取指定 docIds 文档列表")
@PostMapping(value = "/api/process/model/doc/ids")
@InvokeMode(SYNC)
CommonResponse<List<DocBaseVO>> docByIds(@Validated @RequestBody DocByIdDTO dto);
/**
* 获取指定模板的原始文档列表
*
* @param dto
* @return
*/
@Operation(summary = "根据业务 ID 获取模型文档列表,自动适配公共模板和代运营")
@PostMapping(value = "/api/process/model/doc/list")
@InvokeMode(SYNC)
CommonResponse<List<DocBaseVO>> docList(@Validated @RequestBody DocQueryDTO dto);
/**
* 获取关联 HiPrint 类型文档模板内容
*
* @param fileRelationId
* @return
*/
@Operation(summary = "获取关联 HiPrint 类型文档模板内容")
@PostMapping(value = "/api/process/model/hi-print/content/get")
@InvokeMode(SYNC)
CommonResponse<String> getHiPrintContent(@RequestParam String fileRelationId);
/**
* 添加关联文档
*
* @return
*/
@Operation(summary = "添加关联文档")
@PutMapping(value = "/api/process/model/doc/create")
@InvokeMode(SYNC)
CommonResponse<Boolean> createDoc(@Validated @RequestBody DocCreateDTO dto);
/**
* 修改关联文档
*
* @return
*/
@Operation(summary = "修改关联文档")
@PostMapping(value = "/api/process/model/doc/update")
@InvokeMode(SYNC)
CommonResponse<Boolean> updateDoc(@Validated @RequestBody DocUpdateDTO dto);
/**
* 克隆关联文档
*
* @param docId
* @return
*/
@Operation(summary = "克隆关联文档")
@PostMapping(value = "/api/process/model/doc/clone")
@InvokeMode(SYNC)
CommonResponse<Boolean> cloneDoc(@RequestParam("id") Long docId);
/**
* 删除关联文档
*
* @return
*/
@Operation(summary = "删除指定文档")
@DeleteMapping(value = "/api/process/model/doc/delete")
@InvokeMode(SYNC)
CommonResponse<Boolean> deleteDoc(@RequestParam("id") Long docId);
/**
* 关联文档配置排序
*
* @param dto
* @return
*/
@Operation(summary = "关联文档配置排序")
@PostMapping(value = "/api/process/model/doc/order")
@InvokeMode(SYNC)
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);
/**
* 设置关联文档的停启用状态
*
* @param dto
* @return
*/
@Operation(summary = "设置关联文档的停启用状态")
@PostMapping(value = "/api/process/model/doc/status")
@InvokeMode(SYNC)
CommonResponse<Boolean> statusDoc(@Validated @RequestBody DocStatusDTO dto);
/**
* 设置关联文档的必选状态
*
* @return
*/
@Operation(summary = "设置关联文档的必选状态")
@PostMapping(value = "/api/process/model/doc/require")
@InvokeMode(SYNC)
CommonResponse<Boolean> requireDoc(@Validated @RequestBody DocStatusDTO dto);
/**
* 特殊的查询设置过关联过文档的工作台 ID 集合
*
* @return
*/
@Operation(summary = "特殊的查询设置过关联过文档的工作台 ID 集合")
@PostMapping(value = "/api/process/model/has/docs/tenantId")
@InvokeMode(SYNC)
CommonResponse<List<Long>> hasFilesTenantIds(@Validated @RequestBody DocTenantQueryDTO dto);
}

View File

@ -3,25 +3,10 @@ package cn.axzo.workflow.client.feign.bpmn;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
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;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO;
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.request.bpmn.task.*;
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 cn.axzo.workflow.common.model.response.bpmn.task.*;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.validation.annotation.Validated;
@ -104,6 +89,15 @@ public interface ProcessTaskApi {
@PostMapping("/api/process/task/back")
CommonResponse<Boolean> backTask(@Validated @RequestBody BpmnTaskBackAuditDTO dto);
/**
* 用于系统内部操作跳转到指定节点
* @param dto 请求参数
* @return 是否成功
*/
@Operation(summary = "系统操作回退任务到指定节点")
@PostMapping("/api/process/task/system/back")
CommonResponse<Boolean> systemBackTask(@Validated @RequestBody BpmnNodeBackSystemOperateDTO dto);
/**
* 驳回
*
@ -284,4 +278,5 @@ public interface ProcessTaskApi {
@InvokeMode(SYNC)
CommonResponse<Map<String, String>> findTaskIdByInstanceIdsAndPersonId(@RequestParam(required = false) @NotEmpty(message = "流程实例 ID列表 不能为空") List<String> processInstanceIds,
@RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId);
}

View File

@ -1,12 +1,10 @@
package cn.axzo.workflow.client.feign.bpmn;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.client.config.CommonFeignConfiguration;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.request.bpmn.RestBpmnProcessVariable;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;

View File

@ -0,0 +1,45 @@
package cn.axzo.workflow.client.feign.manage;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
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 java.util.List;
import java.util.Map;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
* 打印相关的 API
*
* @author wangli
* @since 2025-01-16 17:35
*/
@WorkflowEngineFeignClient
@Manageable
public interface PrintAdminApi {
@Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
@GetMapping("/api/print/admin/template/exists")
@InvokeMode(SYNC)
CommonResponse<Boolean> hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
@Operation(summary = "获取打印模板中可打印的字段")
@PostMapping("/api/print/admin/fields")
@InvokeMode(SYNC)
CommonResponse<List<PrintFieldDTO>> getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
@Operation(summary = "获取指定流程下用于替换打印的相关变量")
@GetMapping("/api/print/admin/field/variables")
@InvokeMode(SYNC)
CommonResponse<Map<String, Object>> getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
}

View File

@ -1,31 +1,20 @@
package cn.axzo.workflow.client.feign.manage;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.client.config.CommonFeignConfiguration;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
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.CategoryCreateDTO;
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.*;
import cn.axzo.workflow.common.model.response.BpmPageResult;
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.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.*;
/**
@ -177,4 +166,21 @@ public interface ProcessCategoryApi {
@GetMapping("/api/process/category/check/status")
@InvokeMode(SYNC)
CommonResponse<Boolean> checkCategoryStatus(@RequestParam Long tenantId, @RequestParam String categoryCode);
/**
* 查询分类对应的分组以及分组下的变量
* @param dto 请求参数
* @return 分组以及分组下的变量
*/
@PostMapping("/api/process/category/group-with-vars/list")
@InvokeMode(SYNC)
CommonResponse<List<CategoryGroupVarItemVo>> searchCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarSearchDto dto);
/**
* 新增或者更新分组或者变量
* @param dto 请求参数
* @return 是否成功
*/
@PostMapping("/api/process/category/group-with-vars/upsert")
CommonResponse<Boolean> upsertCategoryGroupAndVars(@Validated @RequestBody CategoryGroupVarUpsertDto dto);
}

View File

@ -1,12 +1,10 @@
package cn.axzo.workflow.client.feign.manage;
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
import cn.axzo.workflow.client.config.CommonFeignConfiguration;
import cn.axzo.workflow.common.annotation.InvokeMode;
import cn.axzo.workflow.common.annotation.Manageable;
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;

View File

@ -4,7 +4,6 @@ import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import cn.axzo.workflow.common.enums.AdminDataSource;
import cn.axzo.workflow.common.enums.AdminRoleType;
import cn.axzo.workflow.common.enums.AdminTypeEnum;
import cn.axzo.workflow.common.enums.WorkspaceType;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -26,8 +26,12 @@ public enum BpmnInstanceRespCode implements IModuleRespCode {
PROCESS_INSTANCE_CANT_START("011", "流程实例不能启动"),
TASK_CANT_COMMENT_INSTANCE_NOT_EXISTS("012", "流程实例【{}】不存在, 不能评论"),
RUNNING_INSTANCE_ONLY_FORECAST("013", "仅运行中的实例可以推测"),
ENGINE_EXEC_EXCEPTION("014", "引擎内部异常"),
ENGINE_EXEC_EXCEPTION("014", "引擎内部异常:【{}】"),
PROCESS_TASK_NOT_EXISTS("015", "流程任务不存在或已处理"),
PROCESS_DOC_READ_PARAM_ERROR("016", "查询审批人阅读状态参数丢失自然人 ID 数据"),
PROCESS_DOC_ID_NOT_IN_MODEL("017", "当前流程中,不存在指定文档"),
PROCESS_SIGN_DATA_NOT_EXISTS("018", "签署业务审批未获取到初始模板复制数据"),
PROCESS_INSTANCE_CANT_REMIND("019", "流程实例【{}】不存在, 不能评论"),
;
private final String code;
private final String message;

View File

@ -18,7 +18,16 @@ public enum BpmnModelRespCode implements IModuleRespCode {
MODEL_KEY_NOT_EXISTS("003", "流程模型KEY【{}】不存在"),
MODEL_NOT_EXISTS("004", "流程模型不存在"),
BPMN_BYTES_NOT_EXISTS("005", "模型定义内容字节码不存在"),
MODEL_IS_DISABLE("006", "模型已经被停用")
MODEL_IS_DISABLE("006", "模型已经被停用"),
MODEL_FILE_TAG_DUPLICATE("007", "模型关联的文档业务标签重复"),
MODEL_FILE_TAG_EXISTS("008", "模型关联的文档业务标签已存在"),
MODEL_FILE_NOT_EXISTS("009", "模型关联的文档不存在或已被删除"),
MODEL_FILE_CLONE_ERROR("010", "克隆文档失败, 原因:【{}】"),
MODEL_FILE_TYPE_CLONE_NOT_SUPPORT("011", "不支持的文档类型克隆"),
MODEL_FILE_CONTENT_DATA_ERROR("012", "文档内容数据异常"),
MODEL_FILE_QUERY_ERROR("013", "文档搜索参数实例 ID 和业务 ID 不能同时为空"),
MODEL_FILE_HIPRINT_ID_INVAILD("014", "查询HiPrint文档主键参数非法"),
MODEL_FILE_REPLACE_CONTENT_ERROR("015", "替换文档变量失败,原因:【{}】"),
;
private final String code;

View File

@ -22,7 +22,8 @@ public enum BpmnProcessDefinitionRespCode implements IModuleRespCode {
PROCESS_DEFINITION_KEY_NOT_MATCH("007", "流程定义的标识不一致, 请修改 BPMN 流程图"),
PROCESS_DEFINITION_NAME_NOT_MATCH("008", "流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图"),
PROCESS_DEFINITION_HAS_DIRTY_DATA("009", "流程定义KEY【{}】存在脏数据,当前模型没有流程定义内容"),
PROCESS_DEFINITION_IS_INVALID("010", "暂时无法发起,请先配置流程模型")
PROCESS_DEFINITION_IS_INVALID("010", "暂时无法发起,请先配置流程模型"),
PROCESS_DEFINITION_ID_ILLEGAL("011", "流程定义 ID 数据不合法")
;
private final String code;
private final String message;

View File

@ -41,6 +41,7 @@ public enum BpmnTaskRespCode implements IModuleRespCode {
BACK_NODE_CANNOT_REACHABLE("024", "退回节点【{}】不可达,不允许退回"),
REACHED_BACKED_MAXIMUM_NUM("025", "达到回退操作次数上限【{}】次"),
TRANSFER_TO_SELF("026", "任务不能转交给自己"),
REMIND_TASK_TOO_MANY("027", "催办任务数据异常")
;
private final String code;

View File

@ -16,6 +16,13 @@ public enum FormInstanceRespCode implements IModuleRespCode {
FORM_PARAM_ERROR("001", "流程实例 ID 和任务 ID 不能都为空"),
FORM_FIELD_NOT_FOUND("002", "无法获取全量表单字段权限配置信息"),
FORM_FIELD_VALIDATOR_ERROR("003", "表单字段校验不通过"),
FORM_INSTANCE_PARSE_ERROR("004", "表单实例数据解析错误"),
FORM_INSTANCE_DATA_NOT_FOUND("005", "未找到指定实例【{}】的表单数据"),
FORM_DATA_PARSE_ERROR("006", "表单数据解析异常"),
FORM_DATA_PARSE_ERROR_BY_UPLOAD("007", "表单上传组件的数据解析异常"),
FORM_DATA_PARSE_ERROR_BY_IMAGE("008", "表单图片组件的数据解析异常"),
FORM_DATA_PARSE_ERROR_BY_CUSTOM_COMPONENT("009", "表单自定义组件的数据解析异常"),
FORM_DATA_PARSE_ERROR_BY_AMOUNT("010", "表单金额组件的数据解析异常"),
;
private final String code;

View File

@ -13,7 +13,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum FormModelRespCode implements IModuleRespCode {
FORM_MODEL_NOT_EXISTS("001", "表单模型不存在"),
FORM_MODEL_NOT_EXISTS("001", "表单模型不存在,请检查审批模板的字段管理Tab页"),
FORM_MODEL_ID_NOT_EXISTS("002", "表单模型ID【{}】不存在"),
FORM_MODEL_EXISTS("003", "表单模型已存在"),
;

View File

@ -19,7 +19,9 @@ public enum OtherRespCode implements IModuleRespCode {
CLIENT_VERSION_SUPPORT("004", "客户端 JAR 包版本不支持,请升级到 {} 版本, 当前版本 {}"),
MICRO_SERVER_NEED_REBUILD("005", "微服务 {} 需要重新编译发布, 如果是本地调用,请访问 WebApi 接口在现有的接口地址前加上“web/v1/”即可"),
MESSAGE_PUSH_EVENT_BUILD_ERROR("006", "不能使用 createEvent 函数创建`发送待办`的事件, 请调用 createPendingPushEvent 函数"),
ASYNC_JOB_EXECUTION_ERROR("007", "获取指定实例 ID【{}】的锁失败")
ASYNC_JOB_EXECUTION_ERROR("007", "获取指定实例 ID【{}】的锁失败"),
ILLEGAL_PARAM_ERROR("008", "非法的参数:【{}】"),
MESSAGE_IM_EVENT_BUILD_ERROR("009", "不能使用 createEvent 函数创建`IM 消息`的事件, 请调用 createIMEvent 函数"),
;
private final String code;

View File

@ -9,6 +9,7 @@ public interface BpmnConstants {
/**
* 引擎自己的隐藏指令
*/
String ADSCRIPTION_TENANT_ID = "adscriptionTenantId";
String FLOWABLE_SKIP_EXPRESSION_ENABLE = "[_FLOWABLE_SKIP_EXPRESSION_ENABLED_]";
String MQ_UNIQUE_ID = "[_MQ_UNIQUE_ID_]";
String PROCESS_OWNERSHIP_APPLICATION = "[_PROCESS_OWNERSHIP_APPLICATION_]";
@ -33,6 +34,7 @@ public interface BpmnConstants {
String INTERNAL_PROCESS_AGENT = "[_INTERNAL_PROCESS_AGENT]";
String CREATE_INSTANCE_PARAMS = "[_CREATE_INSTANCE_PARAMS]";
String INTERNAL_PROCESS_WORKSPACE_TYPE = "[_INTERNAL_PROCESS_WORKSPACE_TYPE]";
String INTERNAL_PROCESS_BIZ_TYPE = "[_INTERNAL_PROCESS_BIZ_TYPE]";
// 用于多实例审批时,保存计算出来的审批人
String INTERNAL_TASK_RELATION_ASSIGNEE_LIST_INFO = "[_ASSIGNEE_LIST_INFO_]";
// 单任务节点,
@ -41,6 +43,8 @@ public interface BpmnConstants {
String OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT = "[_ASSIGNEE_INFO_SNAPSHOT_]";
String INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT = "[_ACTIVITY_INFO_SNAPSHOT_]";
String BIZ_NODE_ALTER = "[_BIZ_NODE_ALTER_]";
String INITIATOR_SPECIFY = "[_INITIATOR_SPECIFY_]";
String SIGNATURE_COLLECTION = "[_SIGNATURE_COLLECTION_]";
String PROCESS_PREFIX = "Flowable";
@Deprecated
String OLD_TASK_ASSIGNEE_SKIP_FLAT = "taskSkip";
@ -54,12 +58,14 @@ public interface BpmnConstants {
String ROBOT_ASSIGNEE_ID = NO_TENANT_ID + "|" + ROBOT_ASSIGNEE + "|" + ROBOT_ASSIGNEE_TYPE;
String HIDDEN_ASSIGNEE_ID = NO_TENANT_ID + "|hidden|" + TASK_ASSIGNEE_SKIP_FLAT;
String NO_ASSIGNEE = "|";
String FLOW_MODEL_BIZ_TYPE = "modelType";
String FLOW_NODE_JSON = "jsonValue";
String FLOW_SERVER_VERSION = "serverVersion";
String FLOW_SERVER_VERSION_121 = "1.2.1";
String FLOW_SERVER_VERSION_130 = "1.3.0";
// 1.4.2 开始启用新版本日志
String FLOW_SERVER_VERSION_142 = "1.4.2";
String CONFIG_SIGN = "signConfig";
String CONFIG_NOTICE = "noticeConfig";
String CONFIG_APPROVE = "approveConfig";
String TEMPLATE_NOTICE_MESSAGE_CONFIG = "noticeMessageConfig";
@ -71,6 +77,7 @@ public interface BpmnConstants {
String TEMPLATE_NOTICE_MESSAGE_DESTINATION_POSITIONS = "positions";
String TEMPLATE_NOTICE_MESSAGE_DESTINATION_ASSIGNERS = "assigners";
String TEMPLATE_PENDING_MESSAGE_ID = "pendingMessageId";
String TEMPLATE_SIGN_PENDING_MESSAGE_ID = "signPendingMessageId";
String TEMPLATE_CARBON_COPY_MESSAGE_ID = "carbonCopyMessageId";
String TEMPLATE_SMS_MESSAGE_ID = "smsMessageId";
String APPROVE_SUPPORT_BATCH_OPERATION = "supportBatchOperation";
@ -84,10 +91,14 @@ public interface BpmnConstants {
String CONFIG_BUTTON_META = "button";
String CONFIG_FIELD = "fieldConfig";
String CONFIG_APPROVAL_METHOD = "approvalMethod";
String CONFIG_SIGN_APPROVER_LIMIT = "signApproverLimit";
String CONFIG_SIGN_APPROVER_ORG_LIMIT = "orgLimit";
String CONFIG_SIGN_APPROVER_ROLE_LIMIT = "roleLimit";
String CONFIG_APPROVER_SCOPE = "approverScope";
String CONFIG_APPROVER_SPECIFY = "approverSpecify";
String CONFIG_APPROVER_MODE_TYPE = "approverModeType";
String CONFIG_APPROVER_EMPTY_HANDLE_TYPE = "approverEmptyHandleType";
String CONFIG_ACTIVITY_SIGNATURE = "signature";
String CONFIG_FIELD_META = "field";
String CONFIG_FIELD_PERMISSION = "fieldPermission";
String CONFIG_FIELD_OPTION = "option";
@ -96,6 +107,7 @@ public interface BpmnConstants {
String CONFIG_BUTTON_TYPE_CURRENT = "current";
String CONFIG_BUTTON_TYPE_HISTORY = "history";
String CONFIG_BUTTON_TYPE_CARBON_COPY = "carbonCopy";
String CONFIG_SIGN_TYPE = "signType";
String ELEMENT_ATTRIBUTE_NAME = "name";
String ELEMENT_ATTRIBUTE_VALUE = "value";
String ELEMENT_ATTRIBUTE_DESC = "desc";
@ -112,6 +124,7 @@ public interface BpmnConstants {
String BPM_ALLOW_SKIP_USER_TASK = "_INTERNAL_SKIP_USER_TASK_";
String AUTO_APPROVAL_TYPE = "autoApprovalType";
String PROCESS_CLOSING_TYPE = "[_PROCESS_CLOSING_TYPE]";
String SKIP_MQ = "skipMQ";
/**
* 用于国内审批节点填写审批建议
* <p>
@ -199,4 +212,28 @@ public interface BpmnConstants {
* ouId+workspaceId 下限制人员数量为20
*/
Integer MAX_ORG_WORKSPACE_ADMIN_COUNT = 20;
/**
* 发起人撤回时当前流程停留住的节点定义key
*/
String CANCEL_PROCESS_NODE_DEF_KEY_NAME = "[_CANCEL_PROCESS_NODE_DEF_KEY_]";
// 被转交人
String TRANSFER_TO = "[TRANSFER_TO_]";
// 转交时的意见
String TRANSFER_TO_ADVICE = "[TRANSFER_TO_ADVICE]";
// 结束流程的最后一个操作人
String CLOSE_PROCESS_ASSIGNER = "[_CLOSE_PROCESS_ASSIGNER_]";
/**
* 签署业务发起流程实例时重新选择的文档tag 集合
*/
String SIGN_PROCESS_ENABLE_DOC_IDS = "[_SIGN_PROCESS_ENABLE_DOC_IDS_]";
/**
* 签署业务基于业务自定义变量的传入
*/
String SIGN_VARIABLE = "[_SIGN_VARIABLES_]";
/**
* 签署人
*/
String SIGNATORIES = "[_SIGNATORIES_]";
String TASK_SUBMIT_FORM_VARIABLE = "[_TASK_SUBMIT_FORM_VARIABLE_]";
}

View File

@ -17,4 +17,13 @@ public interface FormConstants {
String FIELD_PROPERTY_HIDDEN = "hidden";
String FIELD_PROPERTY_DEFAULT_VALUE= "defaultValue";
String FORM_FIELD_TYPE_INPUT = "input";
String FORM_FIELD_TYPE_TEXTAREA = "textarea";
String FORM_FIELD_TYPE_IMAGE = "image";
String FORM_FIELD_TYPE_CUSTOM_COMPONENT = "customComponent";
String FORM_FIELD_TYPE_TASK_ORDER = "taskOrder";
String FORM_FIELD_TYPE_RECTIFY_ORDER = "rectifyOrder";
String FORM_FIELD_TYPE_CHANGE_SIGNATURE_ORDER = "changeSignatureOrder";
}

View File

@ -0,0 +1,12 @@
package cn.axzo.workflow.common.constant;
/**
* 自定义的流程回退及转发事件常亮
*
* @author wangli
* @since 2025-01-20 14:06
*/
public interface TaskListenerExtConstants {
String EVENTNAME_TRANSFER = "process-task-transfer";
String EVENTNAME_FALLBACK = "process-task-fallback";
}

View File

@ -25,4 +25,40 @@ public interface VariableConstants {
String VAR_PROCESS_RESULT = "processResult";
String VAR_OPERATOR_TYPE = "operatorType";
String VAR_USER_AGREE_SIGNATURE = "userAgreeSignature";
//=============== 打印时的变量集合中 key 的命名 =================
String VAR_PREFIX = "业务变量";
String PRINT_VAR_PROCESS_DEFINITION_KEY = "processDefinitionKey";
String PRINT_VAR_PROCESS_DEFINITION_KEY_DESC = "业务名称";
String PRINT_VAR_PROCESS_INSTANCE_ID = "processInstanceId";
String PRINT_VAR_PROCESS_INSTANCE_ID_DESC = "审批编号";
String PRINT_VAR_PROCESS_START_TIME = "startTime";
String PRINT_VAR_PROCESS_START_TIME_DESC = "发起时间";
String PRINT_VAR_PROCESS_END_TIME = "endTime";
String PRINT_VAR_PROCESS_END_TIME_DESC = "审批结束时间";
String PRINT_VAR_PROCESS_INITIATOR = "initiator";
String PRINT_VAR_PROCESS_INITIATOR_DESC = "发起者";
String PRINT_VAR_PROCESS_INITIATOR_NAME = "initiatorName";
String PRINT_VAR_PROCESS_INITIATOR_NAME_DESC = "发起人姓名";
String PRINT_VAR_PROCESS_INITIATOR_POSITION = "initiatorPosition";
String PRINT_VAR_PROCESS_INITIATOR_POSITION_DESC = "发起人岗位";
String PRINT_VAR_PROCESS_INITIATOR_PHONE = "initiatorPhone";
String PRINT_VAR_PROCESS_INITIATOR_PHONE_DESC = "发起人联系方式";
String PRINT_VAR_PROCESS_LOGS = "processLogs";
String PRINT_VAR_PROCESS_LOGS_DESC = "审批日志";
String PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME = "activityName";
String PRINT_VAR_PROCESS_LOG_ACTIVITY_NAME_DESC = "节点名称";
String PRINT_VAR_PROCESS_LOG_APPROVER_NAME = "approverName";
String PRINT_VAR_PROCESS_LOG_APPROVER_NAME_DESC = "审批人";
String PRINT_VAR_PROCESS_LOG_UNIT = "unit";
String PRINT_VAR_PROCESS_LOG_UNIT_DESC = "单位";
String PRINT_VAR_PROCESS_LOG_POSITION = "position";
String PRINT_VAR_PROCESS_LOG_POSITION_DESC = "岗位";
String PRINT_VAR_PROCESS_LOG_ADVICE = "advice";
String PRINT_VAR_PROCESS_LOG_ADVICE_DESC = "审批意见";
String PRINT_VAR_PROCESS_LOG_OPERATION_TIME = "operationTime";
String PRINT_VAR_PROCESS_LOG_OPERATION_TIME_DESC = "审批时间";
String PRINT_VAR_PROCESS_LOG_SIGNATURE = "signature";
String PRINT_VAR_PROCESS_LOG_SIGNATURE_DESC = "电子签名";
}

View File

@ -13,9 +13,12 @@ public enum ApprovalMethodEnum {
human("human", "人工审批", ""),
autoPassed("autoPassed", "自动通过", "[仅审批节点可能选该值]"),
autoPassed_empty("autoPassed", "自动通过", "该枚举仅日志处理使用"),
autoRejection("autoRejection", "自动驳回", "[仅审批节点可能选该值]"),
autoRejection_empty("autoRejection", "自动驳回", "该枚举仅日志处理使用"),
nobody("nobody", "不设置审批人", "[仅业务节点可能有该值]"),
bizSpecify("bizSpecify", "业务指定审批人", "[仅业务节点可能有该值]"),
transferToAdmin("transferToAdmin", "转办给管理员", "该枚举仅日志处理使用"),
;
private String type;

View File

@ -15,6 +15,9 @@ public enum ApproverSpecifyEnum {
initiatorLeaderRecursion("initiatorLeaderRecursion", "发起人多级主管"),
fixedPerson("fixedPerson", "固定人员"),
preNodeSpecified("preNodeSpecified", "上级节点指定"),
initiatorSpecified("initiatorSpecified", "发起时指定"),
// 该枚举目前主要为了区别签署业务与审批业务的不同配法选择该项时意味着该节点是由二方后端自由消费 BpmnSignApproverLimit 配置
signerRelated("signerRelated", "签署人相关组织"),
;
private String type;
private String desc;

View File

@ -1,6 +1,13 @@
package cn.axzo.workflow.common.enums;
import com.google.common.collect.Lists;
import java.util.List;
import static cn.axzo.workflow.common.enums.BusinessTypeEnum.APPROVAL;
import static cn.axzo.workflow.common.enums.BusinessTypeEnum.SIGN;
/**
* Flowable Event Enum For RocketMQ
*
@ -11,39 +18,51 @@ public enum BpmnButtonEnum {
/**
* 同意按钮
*/
BPMN_APPROVE(1, "BPMN_APPROVE", "同意"),
BPMN_APPROVE(1, "BPMN_APPROVE", "同意", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 驳回按钮
*/
BPMN_REJECT(2, "BPMN_REJECT", "驳回"),
BPMN_REJECT(2, "BPMN_REJECT", "驳回", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 确认签署
*/
BPMN_CONFIRM_SIGN(3, "BPMN_CONFIRM_SIGN", "确认签署", Lists.newArrayList(SIGN)),
/**
* 查看文档
*/
BPMN_VIEW_DOC(4, "BPMN_VIEW_DOC", "查看文档", Lists.newArrayList(SIGN)),
/**
* 撤回按钮
*/
BPMN_REVOCATION(3, "BPMN_REVOCATION", "撤回"),
BPMN_REVOCATION(5, "BPMN_REVOCATION", "撤回", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 转交按钮
*/
BPMN_TRANSFER(4, "BPMN_TRANSFER", "转交"),
BPMN_TRANSFER(6, "BPMN_TRANSFER", "转交", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 加签按钮
*/
BPMN_COUNTERSIGN(5, "BPMN_COUNTERSIGN", "加签"),
BPMN_COUNTERSIGN(7, "BPMN_COUNTERSIGN", "加签", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 评论按钮
*/
BPMN_COMMENT(6, "BPMN_COMMENT", "评论"),
BPMN_COMMENT(8, "BPMN_COMMENT", "评论", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 回退按钮
*/
BPMN_ROLLBACK(7, "BPMN_ROLLBACK", "回退"),
BPMN_ROLLBACK(9, "BPMN_ROLLBACK", "回退", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 抄送按钮
*/
BPMN_COPY(8, "BPMN_COPY", "抄送"),
BPMN_COPY(10, "BPMN_COPY", "抄送", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 催办按钮
*/
BPMN_REMIND(11, "BPMN_REMIND", "催办", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 管理员转交按钮
*/
BPMN_ADMIN_TRANSFER(9, "BPMN_ADMIN_TRANSFER", "管理员转交");
BPMN_ADMIN_TRANSFER(90, "BPMN_ADMIN_TRANSFER", "管理员转交", Lists.newArrayList());
public int getOrder() {
@ -58,15 +77,21 @@ public enum BpmnButtonEnum {
return btnName;
}
public List<BusinessTypeEnum> getSupportBizType() {
return supportBizType;
}
private final int order;
private final String btnKey;
private final String btnName;
private final List<BusinessTypeEnum> supportBizType;
BpmnButtonEnum(int order, String btnKey, String btnName) {
BpmnButtonEnum(int order, String btnKey, String btnName, List<BusinessTypeEnum> supportBizType) {
this.order = order;
this.btnKey = btnKey;
this.btnName = btnName;
this.supportBizType = supportBizType;
}
}

View File

@ -16,6 +16,7 @@ public enum BpmnFlowNodeType {
NODE_PARALLEL("NODE_PARALLEL", "并行节点 - 隶属于并行网关"),
NODE_TASK("NODE_TASK", "审核节点"),
NODE_BUSINESS("NODE_BUSINESS", "业务节点"),
NODE_SIGN("NODE_SIGN", "签署确认节点"),
NODE_CARBON_COPY("NODE_CARBON_COPY", "抄送节点"),
NODE_TRIGGER("NODE_TRIGGER", "触发器节点"),
NODE_ROBOT("NODE_ROBOT", "机器人节点"),

View File

@ -44,7 +44,7 @@ public enum BpmnProcessInstanceResultEnum {
* @param result 结果
* @return 是否
*/
public static boolean isEndResult(Integer result) {
public static boolean isEndResult(String result) {
return Arrays.asList(PROCESSING.getStatus(), APPROVED.getStatus(), REJECTED.getStatus(),
CANCELLED.getStatus()).contains(result);
}

View File

@ -0,0 +1,29 @@
package cn.axzo.workflow.common.enums;
import lombok.Getter;
@Getter
public enum BpmnProcessTaskResultEnum {
PENDING("PENDING", "待处理"),
APPROVED("APPROVED", "已同意"),
REJECTED("REJECTED", "已驳回"),
DELETED("DELETED", "已删除"),
CANCELED("CANCELED", "已撤销"),
TRANSFERRED("TRANSFERRED", "已转交"),
NONE("NONE", "没有执行动作,例如 抄送"),
;
/**
* 结果
*/
private final String status;
/**
* 描述
*/
private final String desc;
BpmnProcessTaskResultEnum(String status, String desc) {
this.status = status;
this.desc = desc;
}
}

View File

@ -0,0 +1,42 @@
package cn.axzo.workflow.common.enums;
import java.util.Arrays;
import java.util.Objects;
/**
* 签署方式
*
* @author wangli
* @since 2025-03-25 17:00
*/
public enum BpmnSignType {
SINGLE("SINGLE", "指定人群,所有人共同签署一份文件"),
MULTI("MULTI", "指定人群,每人签署一份文件"),
;
private final String type;
private final String desc;
BpmnSignType(String type, String desc) {
this.type = type;
this.desc = desc;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public static BpmnSignType valueOfType(String type) {
return Arrays.stream(BpmnSignType.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -0,0 +1,18 @@
package cn.axzo.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Getter
public enum BusinessTypeEnum {
SIGN("sign", "签署业务"),
APPROVAL("approval", "审批业务");
private String type;
private String desc;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.workflow.common.enums;
import lombok.Getter;
@Getter
public enum ButtonVisibleScopeEnum {
INITIATOR("INITIATOR", "发起人"),
EXECUTOR("EXECUTOR", "当前操作人"),
;
/**
* 结果
*/
private final String status;
/**
* 描述
*/
private final String desc;
ButtonVisibleScopeEnum(String status, String desc) {
this.status = status;
this.desc = desc;
}
}

View File

@ -0,0 +1,45 @@
package cn.axzo.workflow.common.enums;
import cn.axzo.framework.rocketmq.Event;
/**
* 流程模型关联的文档变更 MQ 事件枚举定义
*
* @author wangli
* @since 2025-04-07 16:46
*/
public enum DocChangeEventEnum {
DOC_CHANGE("doc", "doc-change", "模型关联文档变更"),
;
private final String module;
private final String tag;
private final String desc;
private Event.EventCode eventCode;
DocChangeEventEnum(String module, String tag, String desc) {
this.eventCode = Event.EventCode.builder()
.module(module)
.name(tag)
.build();
this.module = module;
this.tag = tag;
this.desc = desc;
}
public String getModule() {
return module;
}
public String getTag() {
return tag;
}
public String getDesc() {
return desc;
}
public Event.EventCode getEventCode() {
return eventCode;
}
}

View File

@ -0,0 +1,11 @@
package cn.axzo.workflow.common.enums;
/**
* 模型扩展表的状态枚举
*
* @author wangli
* @since 2025-01-15 09:46
*/
public enum ExtModelStateFieldEnum {
status, printStatus
}

View File

@ -0,0 +1,46 @@
package cn.axzo.workflow.common.enums;
import java.util.Arrays;
import java.util.Objects;
/**
* 文档类型枚举
*
* @author wangli
* @since 2025-03-27 09:55
*/
public enum FileTypeEnum {
WORD("word", "文本", ".docx"),
EXCEL("excel", "表格", ".xlsx"),
HIPRINT("hiprint", "智能文档", ""),
PDF("pdf", "PDF", ".pdf"),
;
private final String type;
private final String desc;
private final String suffix;
FileTypeEnum(String type, String desc, String suffix) {
this.type = type;
this.desc = desc;
this.suffix = suffix;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public String getSuffix() {
return suffix;
}
public static FileTypeEnum valueOfType(String type) {
return Arrays.stream(FileTypeEnum.values())
.filter(i -> Objects.equals(i.getType().toUpperCase(), type.toUpperCase()))
.findAny()
.orElse(null);
}
}

View File

@ -0,0 +1,39 @@
package cn.axzo.workflow.common.enums;
import java.util.Arrays;
import java.util.Objects;
/**
* 模型业务类型枚举
*
* @author wangli
* @since 2025-03-26 11:49
*/
public enum ModelBizTypeEnum {
SIGN("SIGN", "签署业务"),
FLOWABLE("FLOWABLE", "审批业务"),
;
private final String type;
private final String desc;
ModelBizTypeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public static ModelBizTypeEnum valueOfType(String type) {
return Arrays.stream(ModelBizTypeEnum.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -0,0 +1,12 @@
package cn.axzo.workflow.common.enums;
/**
* 顺序操作枚举
*
* @author wangli
* @since 2025-03-31 16:35
*/
public enum OrderEnum {
UP, DOWN
}

View File

@ -0,0 +1,19 @@
package cn.axzo.workflow.common.enums;
/**
* 打印字段的类型枚举
*
* @author wangli
* @since 2025-01-16 18:19
*/
public enum PrintFieldCategoryEnum {
// 表单变量
form,
// 流程内系统变量
system,
// 电子签名变量
signature,
// 签署业务自定义变量
sign
}

View File

@ -17,6 +17,7 @@ public enum ProcessMessagePushEventEnum {
PROCESS_CARBON_COPY("process-push", "process-carbon-copy", "抄送流程"),
PROCESS_CARBON_COPY_COMPLETE("process-push", "process-carbon-copy-complete", "完成抄送"),
PROCESS_PUSH_SMS("process-push", "process-push-sms", "短信推送"),
PROCESS_PUSH_IM("process-push", "process-push-im", "IM 推送"),
;

View File

@ -2,6 +2,9 @@ package cn.axzo.workflow.common.enums;
import cn.axzo.framework.rocketmq.Event;
import static cn.axzo.workflow.common.constant.TaskListenerExtConstants.EVENTNAME_FALLBACK;
import static cn.axzo.workflow.common.constant.TaskListenerExtConstants.EVENTNAME_TRANSFER;
/**
* 流程任务节点相关的 MQ 事件枚举定义
*
@ -12,6 +15,8 @@ public enum ProcessTaskEventEnum {
PROCESS_TASK_ASSIGNED("process-task", "process-task-assigned", "流程任务已分配"),
PROCESS_TASK_CREATED("process-task", "process-task-created", "流程任务已创建"),
PROCESS_TASK_TRANSFER("process-task", EVENTNAME_TRANSFER, "流程任务已转交"),
PROCESS_TASK_FALLBACK("process-task", EVENTNAME_FALLBACK, "流程任务已回退"),
PROCESS_TASK_COMPLETED("process-task", "process-task-completed", "流程任务已结束"),
PROCESS_TASK_DELETED("process-task", "process-task-deleted", "流程任务已删除"),
;
@ -45,4 +50,5 @@ public enum ProcessTaskEventEnum {
public Event.EventCode getEventCode() {
return eventCode;
}
}

View File

@ -0,0 +1,51 @@
package cn.axzo.workflow.common.enums;
import java.util.Arrays;
import java.util.Objects;
/**
* 签署确认节点的审批人层级范围限制
*
* @author wangli
* @since 2025-03-26 14:30
*/
public enum SignApproverOrgLimitEnum {
LV_0("LV_0", "当前组织", 0),
LV_1("LV_1", "上1级组织", 1),
LV_2("LV_2", "上2级组织", 2),
LV_3("LV_3", "上3级组织", 3),
LV_4("LV_4", "上4级组织", 4),
LV_5("LV_5", "上5级组织", 5),
;
private final String type;
private final String desc;
private final Integer code;
SignApproverOrgLimitEnum(String type, String desc, Integer code) {
this.type = type;
this.desc = desc;
this.code = code;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public Integer getCode() {
return code;
}
public static SignApproverOrgLimitEnum valueOfType(String type) {
return Arrays.stream(SignApproverOrgLimitEnum.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -0,0 +1,39 @@
package cn.axzo.workflow.common.enums;
import java.util.Arrays;
import java.util.Objects;
/**
* 签署确认节点的审批人层级范围限制
*
* @author wangli
* @since 2025-03-26 14:30
*/
public enum SignApproverRoleLimitEnum {
LEADER("LEADER", "负责人"),
;
private final String type;
private final String desc;
SignApproverRoleLimitEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public static SignApproverRoleLimitEnum valueOfType(String type) {
return Arrays.stream(SignApproverRoleLimitEnum.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -0,0 +1,21 @@
package cn.axzo.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 模版上变量字段类型
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
public enum VarTypeEnum {
TEXT("text", "文本"),
PICTURE("picture", "图片");
private String type;
private String desc;
}

View File

@ -19,6 +19,11 @@ public class WorkflowEngineException extends ServiceException {
this.code = code.getRespCode();
}
public WorkflowEngineException(IRespCode code, Throwable cause, String... params) {
super(doFormat(code.getCode(), code.getMessage(), params), cause);
this.code = code.getRespCode();
}
@Override
public String getCode() {
return this.code;

View File

@ -0,0 +1,33 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 金额字段值类型
*
* @author wangli
* @since 2025-05-16 17:21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AmountFieldDTO implements Serializable {
private static final long serialVersionUID = -3519991080707599177L;
/**
* 小写
*/
private BigDecimal standardNumerals;
/**
* 大写
*/
private String uppercaseNumerals;
}

View File

@ -0,0 +1,28 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 模型关联文档变更事件内部传输对象
*
* @author wangli
* @since 2025-04-07 16:53
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BizDocDTO implements Serializable {
private String archiveName;
private String archiveCode;
private Boolean enabled;
}

View File

@ -0,0 +1,69 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 通讯录组件返回的人员信息模型
*
* @author wangli
* @since 2025-05-15 14:04
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ContactsPersonDTO {
/**
* xx:xx:xx
*/
private String nodeId;
/**
* 身份 ID
*/
private Long identityId;
/**
* 身份类型
*/
private Integer identityType;
/**
* 真实姓名
*/
private String realName;
/**
* 自然人 ID
*/
private Long personId;
/**
* 人员所在的节点 ID
*/
private Long orgNodeId;
/**
* 人员所在的单位 ID
*/
private Long ouId;
/**
* 人员所在的单位名称
*/
private String ouName;
/**
* 人员所在的工作台 ID
*/
private Long workspaceId;
/**
* 人员所在的工作台类型
*/
private Integer workspaceType;
}

View File

@ -0,0 +1,60 @@
package cn.axzo.workflow.common.model.dto;
import cn.axzo.workflow.common.enums.FileTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 签署文件记录信息
*
* @author wangli
* @since 2025-04-03 11:21
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SignFileDTO implements Serializable {
private static final long serialVersionUID = -8709597975507074853L;
/**
* 文件模板主键 ID
*/
private Long id;
/**
* 文件名称,可能会包含变量
*/
private String fileName;
/**
* 模板名称
*/
private String templateName;
/**
* 文件的标签
*/
private String fileTag;
/**
* 文件 code
*/
private String fileCode;
/**
* 文件的类型
*/
private FileTypeEnum fileType;
/**
* 替换变量后的文件 fileKey
*/
private String fileKey;
}

View File

@ -0,0 +1,45 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* 节点的电子签名数据
*
* @author wangli
* @since 2025-01-15 20:11
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SignatureDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 节点 ID
*/
private String activityId;
/**
* 节点名称
*/
private String activityName;
/**
* 签名图片数据有序集合
*/
private List<SignDetail> signatures;
@Data
@Accessors(chain = true)
public static class SignDetail implements Serializable {
private static final long serialVersionUID = 1L;
private String signature;
private String advice;
}
}

View File

@ -0,0 +1,37 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 审批人在不同任务下关联文档的阅读状态
*
* @author wangli
* @since 2025-04-08 13:59
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SimpleDocDTO implements Serializable {
/**
* 关联的文档 ID
*/
private Long id;
/**
* 关联的文档业务标签
*/
private String tag;
/**
* 阅读状态 true 已读
*/
private Boolean readStatus;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 业务节点添加定时任务的模型
*
* @author wangli
* @since 2025-03-19 16:33
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TermNodeAddTimerJobDTO implements Serializable {
private String processInstanceId;
private String activityId;
private String timeCycle;
}

View File

@ -1,10 +1,12 @@
package cn.axzo.workflow.common.model.dto;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 上传附件字段类型
*
@ -14,9 +16,10 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Deprecated // 这个类型不应该产生建议后面迭代替换为 AttachmentDTO
public class UploadFieldDTO {
@Builder
public class UploadFieldDTO implements Serializable {
private static final long serialVersionUID = -1L;
/**
* 文件名称
*/
@ -25,24 +28,11 @@ public class UploadFieldDTO {
/**
* 文件类型
*/
private String fileType;
private String fileUrl;
/**
* 文件 oss key
*/
private String fileKey;
public String toString() {
return JSON.toJSONString(this);
}
public String toSpecString() {
return this.toString().replaceAll(",", "|");
}
public static UploadFieldDTO toObject(String str) {
str = str.trim().replaceAll("\\|",",");
return JSON.parseObject(str, UploadFieldDTO.class);
}
}

View File

@ -0,0 +1,44 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 从流程实例中获取变量携带数据类型的对象
*
* @author wangli
* @since 2025-04-09 11:46
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class VariableObjectDTO {
public enum Type {
img, text, obj, signatureAndAdvice
}
/**
* 变量 key
*/
private String key;
/**
* 变量中文名
*/
private String desc;
/**
* 变量值
*/
private Object value;
/**
* 变量类型
*/
@Builder.Default
private Type type = Type.text;
}

View File

@ -68,6 +68,7 @@ public class HistoricProcessInstanceSearchForEsDTO {
* <p>
* 默认是查询开始时间之后
*/
@Builder.Default
private TimeQueryDirection startTimeDirection = TimeQueryDirection.AFTER;
/**
@ -80,16 +81,19 @@ public class HistoricProcessInstanceSearchForEsDTO {
* <p>
* 默认是查询结束时间点之前
*/
@Builder.Default
private TimeQueryDirection endTimeDirection = TimeQueryDirection.BEFORE;
/**
* 是否包含流程变量
*/
@Builder.Default
private Boolean hasVariables = false;
/**
* 用于覆盖同步逻辑中的PageSize,一般不需要传
*/
@Builder.Default
private Integer overPageSize = 50;
}

View File

@ -0,0 +1,31 @@
package cn.axzo.workflow.common.model.dto.print;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* 字段属性
*
* @author wangli
* @since 2025-01-16 17:31
*/
@Data
@ApiModel("打印时的字段的扩展属性模型")
@NoArgsConstructor
@Accessors(chain = true)
public class FieldAttributeDTO {
/**
* 属性 code
*/
private String code;
/**
* 属性名称
*/
private String name;
private String fieldFormType;
}

View File

@ -0,0 +1,46 @@
package cn.axzo.workflow.common.model.dto.print;
import cn.axzo.workflow.common.enums.PrintFieldCategoryEnum;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 打印时的字段模型
*
* @author wangli
* @since 2025-01-16 17:09
*/
@ApiModel("打印时的字段模型")
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class PrintFieldDTO {
/**
* 字段中文名称
*/
private String name;
/**
* 字段类型表单字段系统字段
*/
private PrintFieldCategoryEnum fieldCategoryType;
/**
* 用于替换是变量名
*/
private String code;
/**
* 字段的表单的类型
*/
private String fieldFormType;
/**
* 复杂组件的扩展字段例如自定义组件审批日志组件等
*/
private List<FieldAttributeDTO> attributes;
}

View File

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

View File

@ -1,9 +1,12 @@
package cn.axzo.workflow.common.model.request.bpmn;
import cn.axzo.workflow.common.enums.BusinessTypeEnum;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 按钮元数据
@ -15,6 +18,11 @@ import java.io.Serializable;
@Accessors(chain = true)
public class BpmnButtonMetaInfo implements Serializable {
public static final String BUTTON_TYPE_SYSTEM = "SYSTEM";
public static final String BUTTON_TYPE_CUSTOM = "CUSTOM";
private static final long serialVersionUID = -5224316166904752829L;
/**
* 按钮顺序
*/
@ -45,4 +53,9 @@ public class BpmnButtonMetaInfo implements Serializable {
*/
private String type;
/**
* 按钮支持的业务类型
*/
private List<BusinessTypeEnum> supportBizType = new ArrayList<>();
}

View File

@ -27,6 +27,11 @@ public class BpmnJsonModel implements Serializable {
@ApiModelProperty(value = "流程的 Json 结构")
private BpmnJsonNode node;
/**
* 签署配置, 可为空只有签署业务才有该配置
*/
@ApiModelProperty(value = "签署配置")
private BpmnSignConf signConf;
/**
* 通知管理配置
*/

View File

@ -45,13 +45,19 @@ public class BpmnJsonNodeProperty {
//************* 审批人指定Start **************//
/**
* 审批人指定: position(指定岗位), role(指定角色), identity(指定身份), initiatorLeader(发起人主管), initiatorLeaderRecursion(发起人多级主管),
* fixedPerson(固定人员)
* fixedPerson(固定人员) initiatorSpecified(发起人自选) signerRelated(签署人相关组织)
*/
@ApiModelProperty(value = "任务节点: 审批人指定", notes = "position: 指定岗位, role: 指定角色, identity: 指定身份, initiatorLeader: " +
"发起人主管, initiatorLeaderRecursion: 发起人多级主管, fixedPerson: 固定人员")
"发起人主管, initiatorLeaderRecursion: 发起人多级主管, fixedPerson: 固定人员, initiatorSpecified: 发起人自选, signerRelated: 签署人相关组织")
@NotBlank(message = "审批人指定不能为空")
private ApproverSpecifyEnum approverSpecify;
/**
* 签署确认节点的审批人限定规则
*/
@ApiModelProperty(value = "签署确认节点的审批人限定规则")
private BpmnSignApproverLimit signApproverLimit;
/**
* 具体的配置值
* <p>
@ -94,6 +100,11 @@ public class BpmnJsonNodeProperty {
private String emptyApproverSpecify;
//************* 审批人为空时的策略End **************//
/**
* 电子签名开关
*/
@ApiModelProperty(value = "电子签名")
private Boolean signature;
/**
* 按钮权限

View File

@ -0,0 +1,44 @@
package cn.axzo.workflow.common.model.request.bpmn;
import cn.axzo.workflow.common.enums.SignApproverOrgLimitEnum;
import cn.axzo.workflow.common.enums.SignApproverRoleLimitEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* JSON 版本的 BPMN 协议模型中的确认人限定规则
*
* @author wangli
* @since 2025-03-26 20:05
*/
@ApiModel("JSON 版本的 BPMN 协议模型中的确认人限定规则")
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class BpmnSignApproverLimit {
/**
* 签署确认节点下人的组织限定规则
* <p>
* LV_0("LV_0", "当前组织"),
* LV_1("LV_1", "上1级组织"),
* LV_2("LV_2", "上2级组织"),
* LV_3("LV_3", "上3级组织"),
* LV_4("LV_4", "上4级组织"),
* LV_5("LV_5", "上5级组织"),
*/
@ApiModelProperty(value = "签署确认节点下人的组织限定规则")
private SignApproverOrgLimitEnum orgLimit;
/**
* 签署确认节点下人的角色限定规则
* <p>
* INITIATOR_SPECIFIED("INITIATOR_SPECIFIED", "发起人自选"),
* LEADER("LEADER", "负责人"),
*/
@ApiModelProperty(value = "签署确认节点下人的角色限定规则")
private SignApproverRoleLimitEnum roleLimit;
}

View File

@ -0,0 +1,40 @@
package cn.axzo.workflow.common.model.request.bpmn;
import cn.axzo.workflow.common.enums.BpmnSignType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 流程定义中的签署配置
*
* @author wangli
* @since 2025-03-25 16:56
*/
@ApiModel("JSON 版本的 BPMN 协议模型中的签署管理")
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class BpmnSignConf implements Serializable {
private static final long serialVersionUID = -6015492451455020117L;
/**
* 签署方式
* <p>
* SINGLE("SINGLE", "指定人群,所有人共同签署一份文件"),
* MULTI("MULTI", "指定人群,每人签署一份文件"),
*/
@ApiModelProperty(value = "签署方式")
private BpmnSignType signType;
/**
* 签署业务待办模板
*/
@ApiModelProperty(value = "签署业务待办模板")
private BpmnSignPendingProperty signPendingProperty;
}

View File

@ -0,0 +1,37 @@
package cn.axzo.workflow.common.model.request.bpmn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* JSON 版本的 BPMN 协议模型中的签署的待办
*
* @author wangli
* @since 2025-03-25 17:09
*/
@ApiModel("JSON 版本的 BPMN 协议模型中的签署的待办")
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class BpmnSignPendingProperty implements Serializable {
private static final long serialVersionUID = -6015492451455020117L;
/**
* 待办消息模板 ID
*/
@ApiModelProperty(value = "待办消息模板 ID")
@NotBlank(message = "待办消息模板 ID 不能为空")
private String pendingMessageId;
/**
* 用于前端回显数据, 服务端不解析
*/
@ApiModelProperty(value = "用于前端回显数据, 服务端不解析")
private String viewJson;
}

View File

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

View File

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

View File

@ -0,0 +1,27 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 获取文档
*
* @author wangli
* @since 2025-04-16 20:18
*/
@ApiModel("获取文档")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DocByIdDTO {
private List<Long> ids;
}

View File

@ -0,0 +1,40 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* 克隆文档
*
* @author wangli
* @since 2025-04-18 11:30
*/
@ApiModel("克隆文档")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DocCloneDTO {
/**
* 文档 ID
*/
private Long docId;
/**
* 克隆好的文档归属模型 ID
*/
private String targetModelId;
/**
* 克隆好的文档归属租户
*/
private String targetTenantId;
/**
* 克隆好的文档的 tag
*/
private String targetFileTag;
}

View File

@ -0,0 +1,121 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import cn.axzo.workflow.common.enums.FileTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 创建模型关联的文档
*
* @author wangli
* @since 2025-03-27 14:50
*/
@ApiModel("创建模型关联的文档")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class DocCreateDTO implements Serializable {
/**
* 关联到的模型 ID
*/
@ApiModelProperty(value = "文档被关联到的模型 ID")
@NotBlank(message = "模型 ID 不能为空")
private String modelId;
/**
* 模型对应业务 KEY
*/
@ApiModelProperty(value = "模型对应的业务 ID")
@NotBlank(message = "模型 KEY 不能为空")
private String modelKey;
/**
* 文档关联ID
* <p>
* word/excel 对应 wps Id
* hp 对应是content 表的主键前端新建时不回传
* pdf 对应 oss 中的 fileKey
*/
@ApiModelProperty(value = "底层文件关联标识")
private String fileRelationId;
/**
* 文件名称
*/
@ApiModelProperty(value = "文件名称")
private String fileName;
/**
* 模板名称
*/
@ApiModelProperty(value = "模板名称")
private String templateName;
/**
* 自动归档位置(本期不实现)
*/
private String location;
/**
* 文档类型
* <p>
* WORD("word", "文本"),
* EXCEL("excel", "表格"),
* HIPRINT("hiprint", "智能文档"),
* PDF("pdf", "PDF"),
*/
@ApiModelProperty(value = "文件类型")
private FileTypeEnum fileType;
/**
* 业务标签
*/
@ApiModelProperty(value = "业务标签")
private String tag;
/**
* 启用状态
*/
@Builder.Default
@ApiModelProperty(value = "启用状态")
private Boolean status = true;
/**
* 是否是临时文件
*/
@Builder.Default
@ApiModelProperty(value = "是否是临时文件,默认 false")
private Boolean tempFile = false;
/**
* 是否必选
*/
@Builder.Default
@ApiModelProperty(value = "是否必选")
private Boolean require = false;
/**
* HiPrint文件类型需要回传
*/
@ApiModelProperty(value = "HiPrint文件类型需要回传,其他类型无视该字段")
private String content;
/**
* 租户 ID
*/
@ApiModelProperty(value = "租户 ID")
@Builder.Default
private String tenantId = NO_TENANT_ID;
}

View File

@ -0,0 +1,36 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import cn.axzo.workflow.common.enums.OrderEnum;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
/**
* 模型关联的文档排序
*
* @author wangli
* @since 2025-03-31 16:32
*/
@ApiModel("模型关联的文档排序")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class DocOrderDTO implements Serializable {
private static final long serialVersionUID = -4783444148609103421L;
/**
* 文档主键 ID
*/
private Long id;
/**
* 操作顺序
*/
private OrderEnum order;
}

View File

@ -0,0 +1,44 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 流程关联文档搜索入参模型
*
* @author wangli
* @since 2025-03-31 09:46
*/
@ApiModel("流程关联文档搜索入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DocQueryDTO {
/**
* 流程实例 ID
*/
@ApiModelProperty(value = "流程实例 ID")
private String processInstanceId;
/**
* 流程定义 KEY业务 ID
*/
@ApiModelProperty(value = "流程定义 KEY业务 ID")
private String processDefinitionKey;
/**
* 租户 ID对应工作台 ID
*/
@ApiModelProperty(value = "租户 ID对应工作台 ID")
private String tenantId;
@ApiModelProperty(value = "是否包含临时文档")
@Builder.Default
private Boolean tempFile = false;
}

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

@ -0,0 +1,34 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import cn.axzo.workflow.common.model.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 流程关联文档搜索入参模型
*
* @author wangli
* @since 2025-03-31 09:46
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("流程关联文档搜索入参模型")
@Data
public class DocSearchDTO extends BpmPageParam {
private static final long serialVersionUID = -308388315001754954L;
/**
* 流程模型 ID
*/
@ApiModelProperty(value = "模型 ID")
private String modelId;
@ApiModelProperty(value = "租户 ID")
private String tenantId = NO_TENANT_ID;
@ApiModelProperty(value = "是否包含临时文档")
private Boolean tempFile = false;
}

View File

@ -0,0 +1,32 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 流程关联文档状态变更入参模型
*
* @author wangli
* @since 2025-04-07 11:44
*/
@ApiModel("流程关联文档状态变更入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DocStatusDTO {
/**
* 文档 ID
*/
@ApiModelProperty(value = "文档 ID")
private Long id;
/**
* 状态 true 启用 false 停用
*/
private Boolean status;
}

View File

@ -0,0 +1,30 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* 查询指定业务下设置过关联文档的代运营项目集合入参
*
* @author wangli
* @since 2025-04-10 17:57
*/
@ApiModel("查询指定业务下设置过关联文档的代运营项目集合入参")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DocTenantQueryDTO {
/**
* 业务ID
*/
@NotBlank(message = "业务 ID 不能为空")
private String processDefinitionKey;
}

View File

@ -0,0 +1,30 @@
package cn.axzo.workflow.common.model.request.bpmn.model.doc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
/**
* 创建模型关联的文档
*
* @author wangli
* @since 2025-03-27 14:50
*/
@ApiModel("创建模型关联的文档")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class DocUpdateDTO extends DocCreateDTO implements Serializable {
@ApiModelProperty(value = "主键ID")
private Long id;
}

View File

@ -0,0 +1,44 @@
package cn.axzo.workflow.common.model.request.bpmn.print;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* 获取指定打印模板可打印的字段集合的查询入参模型
*
* @author wangli
* @since 2025-01-16 17:42
*/
@ApiModel("获取指定打印模板可打印的字段集合的查询入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PrintFieldQueryDTO {
/**
* 模板定义 KEY
*/
@ApiModelProperty(value = "流程模板 KEY")
@NotBlank(message = "流程模板 KEY 不能为空")
private String processDefinitionKey;
/**
* 租户 ID
*/
@ApiModelProperty(value = "租户 ID")
private String tenantId;
/**
* 是否抛出内部异常
*/
@ApiModelProperty(value = "是否报错内部异常")
@Builder.Default
private Boolean throwException = true;
}

View File

@ -0,0 +1,48 @@
package cn.axzo.workflow.common.model.request.bpmn.print;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 获取打印模板配置内容入参模型
*
* @author wangli
* @since 2025-01-20 16:53
*/
@ApiModel("获取打印模板配置内容入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PrintTemplateConfigQueryDTO {
/**
* 审批模型 ID
*/
@ApiModelProperty(value = "审批模型 ID")
private String modelId;
/**
* 流程实例 ID
*/
@ApiModelProperty(value = "流程实例 ID")
private String processInstanceId;
/**
* 业务 ID
*/
@ApiModelProperty(value = "业务 ID")
private String processDefinitionKey;
/**
* 租户 ID配置 processDefinitionKey 使用
*/
@ApiModelProperty(value = "租户 ID")
private String tenantId = NO_TENANT_ID;
}

View File

@ -0,0 +1,46 @@
package cn.axzo.workflow.common.model.request.bpmn.print;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 打印模板配置内容入参模型
*
* @author wangli
* @since 2025-01-20 16:44
*/
@ApiModel("打印模板配置内容入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PrintTemplateConfigUpsertDTO {
/**
* 审批模型 ID
*/
@ApiModelProperty("审批模型 ID")
private String modelId;
/**
* 打印文件名称
*/
@ApiModelProperty(value = "打印文件名称")
private String printFileName;
/**
* 打印模板名称
*/
@ApiModelProperty(value = "打印模板名称")
private String printTemplateName;
/**
* 打印模板配置内容
*/
@ApiModelProperty(value = "打印模板配置内容")
private String printTemplateConfig;
}

View File

@ -0,0 +1,39 @@
package cn.axzo.workflow.common.model.request.bpmn.print;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* 重置打印模型代运营专用
*
* @author wangli
* @since 2025-01-20 19:55
*/
@ApiModel("打印模板配置内容入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RestPrintTemplateConfigDTO {
/**
* 模板的定义 ID
*/
@ApiModelProperty(value = "模板的定义 ID")
@NotBlank(message = "模型定义 ID 不能为空")
private String processDefinitionKey;
/**
* 代运营模型 ID
*/
@ApiModelProperty(value = "代运营模型 ID")
@NotBlank(message = "代运营模板 ID不能为空")
private String modelId;
}

View File

@ -0,0 +1,68 @@
package cn.axzo.workflow.common.model.request.bpmn.process;
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* 创建审批流程前的入参模型
*
* @author wangli
* @since 2025-01-15 10:21
*/
@ApiModel("创建流程实例前的入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BeforeProcessInstanceCreateDTO {
/**
* 流程定义的标识
* <p>
* [对应 OMS 系统中审批业务的业务 ID]
*/
@ApiModelProperty(value = "业务 ID")
@NotEmpty(message = "流程定义的标识不能为空")
private String processDefinitionKey;
/**
* 发起流程实例归属租户 ID
* <p>
* 为空时,默认是编辑公共流程模型, 如果是代运营创建,则必填
* <h1 color=red>建议都传值在安心筑中对应工作台 ID</h1>
*/
@ApiModelProperty(value = "发起的审批是属于哪个租户")
@NotBlank(message = "工作台 ID 不能为空")
private String tenantId;
/**
* 组织关系
* <p>
* 用于流程引擎计算对应节点的审批人, 例如第一个审批节点配置的是劳务分包的岗位,第二个审批节点配置的专业分包的角色,
* 那么, 组织关系就需要传入劳务分包的信息以及专业分包的信息,如果还有更多的审批节点配置,以此类推.
* 同时该属性还会用于计算抄送人以及消息通知的目标接收人
*/
@ApiModelProperty(value = "组织关系")
private CooperationOrgDTO cooperationOrg;
@ApiModelProperty(value = "发起人信息")
@Valid
private BpmnTaskDelegateAssigner initiator;
/**
* 最后响应的结果中过滤出需要的类型
*/
@ApiModelProperty(value = "流程节点过滤类型")
private List<BpmnFlowNodeType> filter;
}

View File

@ -98,5 +98,6 @@ public class BpmnProcessInstanceAbortDTO {
* 是否异步执行
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = true;
}

View File

@ -4,6 +4,7 @@ import cn.axzo.workflow.common.model.request.BpmPageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.Date;
@ -15,11 +16,13 @@ import java.util.List;
* @author wangli
* @since 06/03/2024 2:35pm
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("用于超管查询所有的流程实例入参模型")
@Data
@ToString(callSuper = true)
public class BpmnProcessInstanceAdminPageReqVO extends BpmPageParam {
private static final long serialVersionUID = 5051264217867881829L;
/**
* 流程实例 ID
*/

View File

@ -5,12 +5,13 @@ import cn.axzo.workflow.common.constraint.AttachmentValidator;
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.common.valid.group.ValidGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
@ -28,21 +29,21 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class BpmnProcessInstanceCancelDTO {
/**
* 流程实例的编号
*/
@ApiModelProperty(value = "流程实例编号", example = "11")
@NotBlank(message = "流程实例编号不能为空")
@NotBlank(message = "流程实例编号不能为空", groups = {ValidGroup.Insert.class, ValidGroup.Update.class})
private String processInstanceId;
/**
* 工作台 ID
*/
@ApiModelProperty(value = "工作台 ID")
@NotBlank(message = "工作台不能为空")
@NotBlank(message = "工作台不能为空", groups = ValidGroup.Insert.class)
private String tenantId;
/**
@ -55,12 +56,12 @@ public class BpmnProcessInstanceCancelDTO {
* 附件列表
*/
@ApiModelProperty(value = "附件列表")
@Size(max = 11, message = "附件数量超过限制")
@Size(max = 11, message = "附件数量超过限制", groups = {ValidGroup.Insert.class, ValidGroup.Update.class})
@AttachmentValidator(types = {
@AttachmentTypeValidator(type = AttachmentTypeEnum.image, max = 5),
@AttachmentTypeValidator(type = AttachmentTypeEnum.file, max = 5),
@AttachmentTypeValidator(type = AttachmentTypeEnum.signature, max = 1)}
)
, groups = {ValidGroup.Insert.class, ValidGroup.Update.class})
private List<AttachmentDTO> attachmentList;
/**
@ -75,7 +76,7 @@ public class BpmnProcessInstanceCancelDTO {
*/
@ApiModelProperty(value = "审批流程发起人信息")
@Valid
@NotNull(message = "审批流程的发起人不能为空")
@NotNull(message = "审批流程的发起人不能为空", groups = {ValidGroup.Insert.class, ValidGroup.Update.class})
private BpmnTaskDelegateAssigner initiator;

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.common.model.request.bpmn.process;
import cn.axzo.workflow.common.constant.BpmnConstants;
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
@ -14,6 +15,7 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -50,14 +52,28 @@ public class BpmnProcessInstanceCreateDTO extends BpmnProcessInstanceCreateWithF
@NotBlank(message = "工作台 ID 不能为空")
private String tenantId;
/**
* 流程在发起时指定审批人
*/
@ApiModelProperty(value = "发起时指定节点的审批人")
private Map</*节点标识*/String, List<BpmnTaskDelegateAssigner>> specifyAssignerMap;
/**
* 流程实例关联的变量
*/
@Builder.Default
private Map<String, Object> variables = new HashMap<>();
/**
* 业务管理中定义变量的入参
*/
@Builder.Default
private Map<String, Object> bizCustomVariables = new HashMap<>();
/**
* 待办相关的变量,如路由参数, 模板参数等等
*/
@Builder.Default
private Map<String, Object> pendingVariables = new HashMap<>();
/**
@ -94,6 +110,19 @@ public class BpmnProcessInstanceCreateDTO extends BpmnProcessInstanceCreateWithF
* 是否异步执行该异步是引擎的一种运行模式
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = true;
/**
* 签署业务发起时可基于模型启用的模板再勾选使用本次发起时选择的文档标签
*/
@ApiModelProperty(value = "签署业务发起时,选择的文档")
private List<Long> docIds;
/**
* 仅针对签署业务设置审批完成后的最终签署人列表该属性仅为透传业务消费时请从 MQ 广播事件中的 variables 中通过 key= {@link BpmnConstants#SIGNATORIES } 获取
*/
@ApiModelProperty(value = "签署业务,最终签署人")
private List<BpmnTaskDelegateAssigner> signatories;
}

View File

@ -1,12 +1,10 @@
package cn.axzo.workflow.common.model.request.bpmn.process;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
import java.util.Map;
/**
@ -17,10 +15,23 @@ import java.util.Map;
*/
@ApiModel("创建工作流实例同时携带表单的入参模型")
@Data
public class BpmnProcessInstanceCreateWithFormDTO {
public class BpmnProcessInstanceCreateWithFormDTO {
/**
* 审批使用了表单请一定注意传参
* <p>
* 图片类型和附件类型组件请用 @see {@link UploadFieldDTO} 对象集合传入
* <pre>
* // form_image 为表单项的 key value UploadFileDTO 对象集合如果前端使用了组件一般建议回传所有属性特殊情况下可以只传 fileUrl
* "form_image": [{
* "fileName": "",
* "fileUrl": "http://gips2.baidu.com/it/u=195724436,3554684702&fm=3028&app=3028&f=JPEG&fmt=auto?w=1280&h=960",
* "fileKey": 123
* }]
* </pre>
*/
@ApiModelProperty(value = "通过表单创建流程时传入的初始表单数据")
private Map<String, Object> startFormVariables = new HashMap<>();
private Map<String, Object> startFormVariables;
/**
* 工作流实例集成表单后,可以通过表单 key 组装成的变量存入该变量的值,可用于后续流程的流转
* <p>

View File

@ -44,6 +44,7 @@ public class BpmnProcessInstanceLogQueryDTO {
* 返回结果中是否包含按钮
*/
@ApiModelProperty(value = "返回结果中是否包含按钮", notes = "如果访问者为空,该属性为 true 时,同样也不会返回按钮")
@Builder.Default
private Boolean hasButton = false;
/**

View File

@ -0,0 +1,24 @@
package cn.axzo.workflow.common.model.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 获取流程实例中变量集合的入参模型
*
* @author wangli
* @since 2025-01-16 17:05
*/
@ApiModel("获取流程实例中变量集合的入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BpmnProcessInstanceVariablesDTO {
private String processInstanceId;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.workflow.common.model.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* 取消流程实例的入参模型
*
* @author wangli
* @since 2023/7/17 09:34
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("取消流程实例的入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class SuperBpmnProcessInstanceCancelDTO extends BpmnProcessInstanceCancelDTO {
private Boolean superAdmin;
}

View File

@ -0,0 +1,40 @@
package cn.axzo.workflow.common.model.request.bpmn.process.doc;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 签署业务流程实例查询审批的关联文档阅读状态入参
*
* @author wangli
* @since 2025-04-08 11:27
*/
@ApiModel("签署业务流程实例,查询审批的关联文档阅读状态入参")
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class ApproverReadStatusDTO {
/**
* 流程实例 ID
*/
@ApiModelProperty(value = "流程实例 ID")
@NotBlank(message = "流程实例 ID 不能为空")
private String processInstanceId;
/**
* 访问人
*/
@ApiModelProperty(value = "访问人")
@NotNull(message = "访问人信息不能为空")
private BpmnTaskDelegateAssigner assigner;
}

View File

@ -0,0 +1,36 @@
package cn.axzo.workflow.common.model.request.bpmn.process.doc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
/**
* 签署业务流程实例更新审批的关联文档阅读状态入参
*
* @author wangli
* @since 2025-04-08 14:50
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("签署业务流程实例,更新审批的关联文档阅读状态入参")
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class ChangeApproverReadStatusDTO extends ApproverReadStatusDTO {
/**
* 文档ID
*/
@ApiModelProperty(value = "文档 ID")
@NotNull(message = "文档 ID 不能为空")
private Long docId;
@ApiModelProperty(value = "阅读状态")
@NotNull(message = "阅读状态不能为空")
private Boolean readStatus;
}

View File

@ -0,0 +1,39 @@
package cn.axzo.workflow.common.model.request.bpmn.process.doc;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* 签署业务流程实例在审批待办中查询文档列表的入参
*
* @author wangli
* @since 2025-04-03 16:30
*/
@ApiModel("签署业务流程实例,在审批待办中查询文档列表的入参")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ProcessDocQueryDTO {
/**
* 流程实例 ID
*/
@ApiModelProperty(value = "流程实例 ID")
@NotBlank(message = "流程实例 ID 不能为空")
private String processInstanceId;
/**
* 只有当该属性传值后响应模型中才会返回阅读状态信息
*/
@ApiModelProperty(value = "访问者")
private BpmnTaskDelegateAssigner assigner;
}

View File

@ -65,4 +65,10 @@ public class AttachmentDTO implements Serializable {
@IndexField(fieldType = FieldType.KEYWORD)
private String url;
/**
* 文件 OSS fileKey
*/
@ApiModelProperty(value = "附件 oss 的 fileKey")
private String fileKey;
}

View File

@ -7,7 +7,6 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.List;
@ -62,12 +61,14 @@ public class BpmnActivitySetAssigneeDTO {
* <p>
* 如果业务不能接受,请自己主动去重后提交.
*/
@Builder.Default
private Boolean serverSideDeduplication = false;
/**
* 是否异步执行
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = false;
}

View File

@ -36,6 +36,7 @@ public class BpmnActivityTriggerDTO implements Serializable {
* 是否异步执行
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = true;
/**

View File

@ -0,0 +1,67 @@
package cn.axzo.workflow.common.model.request.bpmn.task;
import cn.axzo.workflow.common.constraint.AttachmentTypeValidator;
import cn.axzo.workflow.common.constraint.AttachmentValidator;
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
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.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* 审批节点退回模型
*
*/
@ApiModel("审批节点退回模型")
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class BpmnNodeBackSystemOperateDTO implements Serializable {
private static final long serialVersionUID = -4160538355403179298L;
@ApiModelProperty(value = "流程实例id", required = true)
@NotBlank(message = "流程实例id不能为空")
private String processInstanceId;
@ApiModelProperty(value = "当前流程节点id", required = true)
@NotBlank(message = "当前节点id不能为空")
private String currentActivityId;
@ApiModelProperty(value = "目标流程节点id", required = true)
@NotBlank(message = "目标流程节点id不能为空")
private String toActivityId;
@ApiModelProperty(value = "可以指定任务处理", required = true)
private List<String> targetTaskIds;
@ApiModelProperty(value = "意见")
private String advice;
@ApiModelProperty(value = "操作描述")
private String operationDesc;
@ApiModelProperty(value = "操作人")
private BpmnTaskDelegateAssigner operator;
/**
* 附件列表
*/
@ApiModelProperty(value = "附件列表")
@Size(max = 11, message = "附件数量超过限制")
@AttachmentValidator(types = {
@AttachmentTypeValidator(type = AttachmentTypeEnum.image, max = 5),
@AttachmentTypeValidator(type = AttachmentTypeEnum.file, max = 5),
@AttachmentTypeValidator(type = AttachmentTypeEnum.signature, max = 1)}
)
private List<AttachmentDTO> attachmentList;
}

View File

@ -71,5 +71,6 @@ public class BpmnRobotTaskCompleteDTO {
* 是否异步执行
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = false;
}

View File

@ -51,5 +51,6 @@ public class BpmnRobotTaskCreateDTO {
* 是否异步执行
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = false;
}

View File

@ -78,6 +78,7 @@ public class BpmnTaskAuditDTO {
* 是否异步执行
*/
@ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
@Builder.Default
private Boolean async = true;
/**

Some files were not shown because too many files have changed in this diff Show More