Compare commits

..

9 Commits

554 changed files with 16053 additions and 26062 deletions

3
.gitignore vendored
View File

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

View File

@ -1,18 +1,4 @@
# Change logs
### 1.5.1-SNAPSHOT
> - 集成表单引擎
> - 新增表单组件文本框和附件的支撑
### 1.5.0-SNAPSHOT
> - 新增 ElasticSearch 组件支撑
> - 提供 ES 相关的搜索查询功能
### 1.4.1-SNAPSHOT
> - 配合 REQ-2616 完成工程完结需求
> - 新增业务节点定时回调功能
### 1.4.0-SNAPSHOT

40
pom.xml
View File

@ -13,13 +13,12 @@
<artifactId>workflow-engine</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<name>Workflow Engine</name>
<name>workflow-engine</name>
<properties>
<revision>1.5.4-SNAPSHOT</revision>
<revision>1.5.0-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>
<feign-httpclient.version>11.8</feign-httpclient.version>
<lombok.version>1.18.22</lombok.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
@ -30,9 +29,6 @@
<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>
<workflow-engine-common.version>0.0.1-SNAPSHOT</workflow-engine-common.version>
<adapter.version>2.0.1-SNAPSHOT</adapter.version>
</properties>
<dependencyManagement>
@ -51,12 +47,6 @@
<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>
@ -76,11 +66,6 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>workflow-engine-common</artifactId>
<version>${workflow-engine-common.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>workflow-engine-form</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@ -165,26 +150,6 @@
<artifactId>riven-api</artifactId>
<version>${axzo-dependencies.version}</version>
</dependency>
<dependency>
<groupId>cn.axzo.org</groupId>
<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>
<dependency>
<groupId>cn.axzo.infra</groupId>
<artifactId>adapter</artifactId>
<version>${adapter.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -228,7 +193,6 @@
<module>workflow-engine-api</module>
<module>workflow-engine-axzo-ext</module>
<module>workflow-engine-common</module>
<module>workflow-engine-form</module>
<module>workflow-engine-core</module>
<module>workflow-engine-elasticsearch</module>
<module>workflow-engine-server</module>

View File

@ -21,7 +21,7 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>workflow-engine-common</artifactId>
<version>${workflow-engine-common.version}</version>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>

View File

@ -13,6 +13,7 @@ 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;
@ -83,7 +84,7 @@ public class WorkflowEngineClientAutoConfiguration {
Map<String, String> env = new HashMap<>();
env.put("create", "true");
try {
FileSystems.newFileSystem(location.toURI(), env);
FileSystem zipfs = FileSystems.newFileSystem(location.toURI(), env);
} catch (Exception e1) {
log.error("linux env create new FS error: {}", e1.getMessage());
}
@ -101,7 +102,7 @@ public class WorkflowEngineClientAutoConfiguration {
Map<String, String> env = new HashMap<>();
env.put("create", "true");
try {
FileSystems.newFileSystem(location.toURI(), env);
FileSystem zipfs = FileSystems.newFileSystem(location.toURI(), env);
} catch (Exception e) {
log.error("linux env create new FS error: {}", e.getMessage());
}

View File

@ -24,7 +24,6 @@ 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

@ -1,7 +1,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.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO;
import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO;
@ -17,9 +16,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
* 流程活动的 API
*
@ -37,8 +33,6 @@ public interface ProcessActivityApi {
*/
@Deprecated
@GetMapping("/api/process/activity/trigger")
@Manageable
@InvokeMode(SYNC)
CommonResponse<Boolean> trigger(@NotBlank(message = "触发 ID 不能为空") @RequestParam String triggerId);
/**
@ -48,7 +42,6 @@ public interface ProcessActivityApi {
* @return
*/
@PostMapping("/api/process/activity/trigger")
@InvokeMode(SYNC)
CommonResponse<Boolean> trigger(@Validated @RequestBody BpmnActivityTriggerDTO dto);
@ -64,7 +57,6 @@ public interface ProcessActivityApi {
*/
@PostMapping("/api/process/activity/assignee/set")
@Operation(summary = "业务节点设置审批人,不支持重复调用设置审批人,需一次性传入所有审批人")
@InvokeMode(SYNC)
CommonResponse<Boolean> setAssignee(@Validated @RequestBody BpmnActivitySetAssigneeDTO dto);
/**
@ -73,8 +65,8 @@ public interface ProcessActivityApi {
* @return
*/
@PostMapping("/api/process/activity/timeout/trigger")
@Manageable
@Operation(summary = "设置指定业务节点定时继续往下执行")
@InvokeMode(SYNC)
CommonResponse<Boolean> setTimeoutTrigger(@Validated @RequestBody BpmnActivityTimeoutTriggerDTO dto);
/**
@ -82,8 +74,8 @@ public interface ProcessActivityApi {
*
* @return
*/
@Manageable
@PostMapping("/api/process/activity/timeout/callback")
@Operation(summary = "设置指定业务节点定时回调")
@InvokeMode(SYNC)
CommonResponse<Boolean> setTimeoutCallback(@Validated @RequestBody BpmnActivityTimeoutCallbackDTO dto);
}

View File

@ -1,6 +1,7 @@
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;
@ -9,6 +10,7 @@ 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;
@ -18,7 +20,6 @@ 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;
/**
@ -80,8 +81,7 @@ public interface ProcessDefinitionApi {
*/
@GetMapping("/api/process/definition/active/getByKey")
@InvokeMode(SYNC)
CommonResponse<BpmnProcessDefinitionVO> getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key,
@RequestParam(required = false, defaultValue = NO_TENANT_ID) String tenantId);
CommonResponse<BpmnProcessDefinitionVO> getActiveProcessDefinitionByKey(@NotBlank(message = "模型定义KEY不能为空") @RequestParam String key);
/**
@ -113,7 +113,7 @@ public interface ProcessDefinitionApi {
@GetMapping("/api/process/definition/active/json/model")
@InvokeMode(SYNC)
CommonResponse<BpmnModelUpdateDTO> getActiveProcessDefinitionJsonModel(@NotBlank(message = "模型 ID 不能为空") @RequestParam(required = false) String modelId,
@NotBlank(message = "分类不能为空") @RequestParam(required = false) String key,
@NotBlank(message = "分类不能为空") @RequestParam(required = false) String category,
@RequestParam(required = false) String tenantId);
/**

View File

@ -3,37 +3,23 @@ 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.log.LogApproveSearchDTO;
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.BpmnProcessInstanceBatchQueryDTO;
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.ExtProcessLogVO;
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;
@ -51,7 +37,6 @@ import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
@ -63,18 +48,6 @@ 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);
/**
* 创建审批流程
*
@ -105,13 +78,8 @@ public interface ProcessInstanceApi {
*/
@Operation(summary = "发起人主动撤回审核,MQ 触发规则:1. 当前流程实例中现存的任务会依次触发 process-task-deleted 事件,2. 当前流程实例会触发 process-instance-cancelled 事件")
@DeleteMapping("/api/process/instance/cancel")
@InvokeMode(ASYNC)
CommonResponse<Boolean> cancelProcessInstance(@Validated @RequestBody BpmnProcessInstanceCancelDTO dto);
@DeleteMapping("/api/process/instance/super/cancel")
@Manageable
CommonResponse<Boolean> superCancelProcessInstance(@Validated @RequestBody SuperBpmnProcessInstanceCancelDTO dto);
/**
* 中止流程实例
*
@ -120,7 +88,6 @@ public interface ProcessInstanceApi {
*/
@Operation(summary = "中止流程实例")
@DeleteMapping("/api/process/instance/abort")
@InvokeMode(ASYNC)
CommonResponse<Boolean> abortProcessInstance(@Validated @RequestBody BpmnProcessInstanceAbortDTO dto);
/**
@ -131,7 +98,6 @@ public interface ProcessInstanceApi {
*/
@Operation(summary = "批量中止流程实例")
@DeleteMapping("/api/process/instance/batch/abort")
@InvokeMode(ASYNC)
CommonResponse<BatchOperationResultVO> batchAbortProcessInstance(@Validated @RequestBody List<BpmnProcessInstanceAbortDTO> dtos);
/**
@ -156,17 +122,6 @@ public interface ProcessInstanceApi {
@InvokeMode(SYNC)
CommonResponse<BpmnProcessInstanceVO> getProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceQueryDTO dto);
/**
* 批量获得流程实例
*
* @param dto
* @return
*/
@Operation(summary = "批量获得流程实例")
@PostMapping("/api/process/instance/batch/get")
@InvokeMode(SYNC)
CommonResponse<List<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto);
/**
* 获取指定流程实例的流程变量
*
@ -180,6 +135,18 @@ public interface ProcessInstanceApi {
CommonResponse<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/form/create")
@Manageable
@InvokeMode(SYNC)
CommonResponse<String> createProcessInstanceWith(@Validated @RequestBody BpmnProcessInstanceCreateWithFormDTO dto);
/**
* 查询所有的审批流
*
@ -267,12 +234,13 @@ public interface ProcessInstanceApi {
CommonResponse<List<String>> getTenantIds();
/**
* 校验指定流程实例下,是否存在指定的审批人正处理待审批
* 校验指定流程实例下,是否存在指定的审批人
*
* @return true 是在当前流程实例中,存在指定的审批人
*/
@Operation(summary = "校验指定流程实例下,是否存在指定的审批人")
@PostMapping("/api/process/instance/check/approver")
@Manageable
@InvokeMode(SYNC)
CommonResponse<Boolean> checkInstanceApprover(@Validated @RequestBody BpmnProcessInstanceCheckApproverDTO dto);
@ -286,76 +254,4 @@ 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);
/**
* 查询 ExtAxProcessLog 表中审批人的冗余信息
*
* @param dto
* @return
*/
@Operation(summary = "查询 ExtAxProcessLog 表中审批人的冗余信息")
@GetMapping("/api/process/instance/log/approve/ext")
@Manageable
@InvokeMode(SYNC)
CommonResponse<List<ExtProcessLogVO>> getProcessLogByInstanceIdAndPersonId(@Validated @RequestBody LogApproveSearchDTO dto);
}

View File

@ -1,29 +1,18 @@
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.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.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.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@ -180,24 +169,9 @@ public interface ProcessModelApi {
@Operation(summary = "修改模型状态")
@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);
/**
* 修改模型打印开关状态
*
* @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);
CommonResponse<Void> changeStatus(@NotBlank(message = "模型 ID 不能为空") @RequestParam String modelId,
@NotNull(message = "状态不能为空") @RequestParam Integer status,
@RequestParam(required = false) String operator);
/**
* 查询流程模型使用的分类列表
@ -218,163 +192,4 @@ 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/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,19 +3,16 @@ 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.BpmnNodeBackSystemOperateDTO;
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.BpmnTaskResetApproversDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
@ -38,7 +35,6 @@ import javax.validation.constraints.NotEmpty;
import java.util.List;
import java.util.Map;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
@ -65,20 +61,8 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "同意MQ 触发规则:1. 当前审批任务会依次触发 process-task-completed 和 process-task-deleted 事件(如果有下一级审批,则会触发第 2.1 点中的事件,如果当前审核任务最后一级审批,则会触发第 2.2 点中的事件)2.1. 下一级审批任务会依次触发 process-task-assigned 和 process-task-created 事件2.2. 流程实例正常结束会触发 process-instance-completed 事件")
@PostMapping("/api/process/task/approve")
@InvokeMode(ASYNC)
CommonResponse<Boolean> approveTask(@Validated @RequestBody BpmnTaskAuditDTO dto);
/**
* 同意时并提交表单数据
*
* @param dto
* @return
*/
@Operation(summary = "同意时并提交表单")
@PostMapping("/api/process/task/form/approve")
@InvokeMode(ASYNC)
CommonResponse<Boolean> approveTaskWithForm(@Validated @RequestBody BpmnTaskAuditWithFormDTO dto);
/**
* 批量同意
*
@ -87,42 +71,26 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "批量同意")
@PostMapping("/api/process/task/batch/approve")
@InvokeMode(ASYNC)
CommonResponse<BatchOperationResultVO> batchApproveTask(@Validated @RequestBody List<BpmnTaskAuditDTO> dtos);
/**
* 获取当前节点可回退节点选项列表
*
* @param taskId 当前任务id
* @return 可以回退节点列表
*/
@Operation(summary = "获取当前节点可回退节点选项列表")
@GetMapping("/api/process/task/back/optional/nodes")
@InvokeMode(SYNC)
CommonResponse<List<BpmnOptionalNodeDTO>> getBackOptionalNodes(@RequestParam @NotBlank(message = "任务id不能为空") String taskId);
/**
* 回退到指定节点
*
* @param dto
* @return
*/
@Operation(summary = "回退")
@PostMapping("/api/process/task/back")
@InvokeMode(ASYNC)
CommonResponse<Boolean> backTask(@Validated @RequestBody BpmnTaskBackAuditDTO dto);
/**
* 用于系统内部操作跳转到指定节点
*
* @param dto 请求参数
* @return 是否成功
*/
@Operation(summary = "系统操作回退任务到指定节点")
@PostMapping("/api/process/task/system/back")
@InvokeMode(ASYNC)
CommonResponse<Boolean> systemBackTask(@Validated @RequestBody BpmnNodeBackSystemOperateDTO dto);
/**
* 驳回
*
@ -134,7 +102,6 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "驳回MQ 触发规则1. 当前审批任务会触发 process-task-deleted 事件, 2. 当前流程实例会触发 process-instance-rejected 事件")
@PostMapping("/api/process/task/reject")
@InvokeMode(ASYNC)
CommonResponse<Boolean> rejectTask(@Validated @RequestBody BpmnTaskAuditDTO dto);
/**
@ -144,7 +111,6 @@ public interface ProcessTaskApi {
* @return
*/
@PostMapping("/api/process/task/batch/reject")
@InvokeMode(ASYNC)
CommonResponse<BatchOperationResultVO> batchRejectTask(@Validated @RequestBody List<BpmnTaskAuditDTO> dtos);
/**
@ -155,7 +121,6 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "直接修改审批任务的审批人")
@PostMapping("/api/process/task/transfer")
@InvokeMode(ASYNC)
CommonResponse<Boolean> transferTask(@Validated @RequestBody BpmnTaskTransferDTO dto);
/**
@ -166,7 +131,6 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "批量修改审批任务的审批人")
@PostMapping("/api/process/task/batch/transfer")
@InvokeMode(ASYNC)
CommonResponse<BatchOperationResultVO> batchTransferTask(@Validated @RequestBody List<BpmnTaskTransferDTO> dtos);
/**
@ -177,7 +141,6 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "审批流程评论")
@PostMapping("/api/process/task/comment")
@InvokeMode(ASYNC)
CommonResponse<Boolean> commentTask(@Validated @RequestBody BpmnTaskCommentDTO dto);
/**
@ -188,20 +151,8 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "审批流程加签")
@PostMapping("/api/process/task/countersign")
@InvokeMode(ASYNC)
CommonResponse<Boolean> countersignTask(@Validated @RequestBody BpmnTaskCountersignDTO dto);
/**
* 重置节点审批人提级审批
*
* @param dto
* @return
*/
@Operation(summary = "重置节点审批人(提级审批)")
@PostMapping("/api/process/task/approvers/reset")
@InvokeMode(ASYNC)
CommonResponse<Boolean> resetTaskApprovers(@Validated @RequestBody BpmnTaskResetApproversDTO dto);
/**
* 催办
*
@ -210,6 +161,7 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "审批流程催办")
@PostMapping("/api/process/task/remind")
@Manageable
@InvokeMode(SYNC)
CommonResponse<Boolean> remindTask(@Validated @RequestBody BpmnTaskRemindDTO dto);
@ -221,7 +173,6 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "创建机器人节点, 暂停流程任务")
@PostMapping("/api/process/task/robot/create")
@InvokeMode(ASYNC)
CommonResponse<String> createRobotTask(@Validated @RequestBody BpmnRobotTaskCreateDTO dto);
/**
@ -232,7 +183,6 @@ public interface ProcessTaskApi {
*/
@Operation(summary = "完成机器人节点, 继续流程任务")
@PostMapping("/api/process/task/robot/complete")
@InvokeMode(ASYNC)
CommonResponse<Boolean> completeRobotTask(@Validated @RequestBody BpmnRobotTaskCompleteDTO dto);
/**
@ -321,5 +271,4 @@ 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,10 +1,12 @@
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

@ -1,83 +0,0 @@
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.form.definition.StartFormSearchDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormDetailDTO;
import cn.axzo.workflow.common.model.request.form.instance.FormSearchDTO;
import cn.axzo.workflow.common.model.request.form.instance.FromDataSearchDTO;
import cn.axzo.workflow.common.model.request.form.model.WpsFileConfigVariableDTO;
import cn.axzo.workflow.common.model.response.form.FormVO;
import cn.axzo.workflow.common.model.response.form.definition.FormDefinitionVO;
import cn.axzo.workflow.common.model.response.form.instance.FormDataVO;
import cn.axzo.workflow.common.model.response.form.instance.FormInstanceVO;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
* 表达实例相关 API, 这里主要用于表单与流程的集成所需的 API
* <p>
* 如果想单独创建表单实例建议在 Form 包中单独提供 API
*
* @author wangli
* @since 2024-11-11 20:08
*/
@WorkflowEngineFeignClient
public interface FormAdminApi {
@PostMapping("/api/form/admin/form/page")
@InvokeMode(SYNC)
@Manageable
CommonResponse<List<FormVO>> formPage(@Validated @RequestBody FormSearchDTO dto);
/**
* 获取指定审批业务的流程表单设置
*
* @param dto
* @return
*/
@PostMapping("/api/form/admin/start/form")
@InvokeMode(SYNC)
CommonResponse<FormDefinitionVO> getFormDefinition(@Validated @RequestBody StartFormSearchDTO dto);
/**
* 查询指定审批实例的表单模型和数据
* <p>
* dto 中的 processInstanceId taskId至少有一个属性有值一般建议直接使用实例 ID
* 当传入 taskId 将只查询该任务绑定的表单模型和数据
*
* @param dto
* @return
*/
@PostMapping("/api/form/admin/instance/render")
@InvokeMode(SYNC)
CommonResponse<FormInstanceVO> getFormInstance(@Validated @RequestBody FormDetailDTO dto);
/**
* 获取指定表单审批的实例数据
*
* @param dto
* @return
*/
@PostMapping("/api/form/admin/instance/form/data")
@InvokeMode(SYNC)
CommonResponse<List<FormDataVO>> getFormData(@Validated @RequestBody FromDataSearchDTO dto);
/**
* 获取 WPS 文档中所有可配置的流程相关变量
*
* @param dto
* @return
*/
@PostMapping("/api/form/admin/wps/file/config/variables")
@InvokeMode(SYNC)
CommonResponse<List<PrintFieldDTO>> getWpsFileConfigVariables(@Validated @RequestBody WpsFileConfigVariableDTO dto);
}

View File

@ -1,50 +0,0 @@
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.enums.AdminDataSource;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.model.request.feature.DingTalkStarterAlterDTO;
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 static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
* 一些功能性 API
*
* @author wangli
* @since 2025-09-02 14:40
*/
@WorkflowEngineFeignClient
public interface FunctionApi {
@Operation(summary = "获取指定枚举类型的枚举值信息")
@GetMapping("/api/function/enum/admin-data-source/get")
@Manageable
@InvokeMode(SYNC)
CommonResponse<AdminDataSource> getAdminDataSourceEnum(@RequestParam String enumValue);
@Operation(summary = "获取指定枚举类型的枚举值信息")
@GetMapping("/api/function/enum/process-instance-result/get")
@Manageable
@InvokeMode(SYNC)
CommonResponse<BpmnProcessInstanceResultEnum> getFileTypeEnum(@RequestParam String enumValue);
/**
* 用于 Starter 检测必接事件的告警
*
* @param dto
* @return
*/
@Operation(summary = "发送钉钉消息")
@PostMapping("/api/function/dingtalk/alter")
@InvokeMode(SYNC)
CommonResponse<Boolean> sendDingtalk(@Validated @RequestBody DingTalkStarterAlterDTO dto);
}

View File

@ -1,77 +0,0 @@
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.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
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
public interface PrintAdminApi {
/**
* 查询指定审批流程是否能打印打印开关是否开启是否存在打印模板
*
* @param processInstanceId
* @return
*/
@Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
@GetMapping("/api/print/admin/template/exists")
@InvokeMode(SYNC)
CommonResponse<Boolean> hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
/**
* 打印模板配置内容更新保存
*
* @param dto
* @return
*/
@Operation(summary = "打印模板配置内容更新保存")
@PostMapping("/api/print/admin/template/upsert")
@InvokeMode(SYNC)
CommonResponse<Void> printTemplateConfig(@Validated @RequestBody PrintTemplateConfigUpsertDTO dto);
/**
* 获取打印模板中可打印的字段
*
* @param dto
* @return
*/
@Operation(summary = "获取打印模板中可打印的字段")
@PostMapping("/api/print/admin/fields")
@Manageable
@InvokeMode(SYNC)
CommonResponse<List<PrintFieldDTO>> getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
/**
* 获取指定流程下用于替换打印的相关变量
*
* @param processInstanceId
* @return
*/
@Operation(summary = "获取指定流程下用于替换打印的相关变量")
@GetMapping("/api/print/admin/field/variables")
@Manageable
@InvokeMode(SYNC)
CommonResponse<Map<String, Object>> getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId,
@RequestParam(required = false, defaultValue = "true") Boolean throwException);
}

View File

@ -1,20 +1,31 @@
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.*;
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.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.*;
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 java.util.List;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.*;
import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
/**
@ -166,21 +177,4 @@ 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,10 +1,12 @@
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

@ -14,7 +14,7 @@
<dependency>
<groupId>cn.axzo.workflow</groupId>
<artifactId>workflow-engine-common</artifactId>
<version>${workflow-engine-common.version}</version>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>cn.axzo.basics</groupId>

View File

@ -4,6 +4,7 @@ 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

@ -12,7 +12,6 @@
<artifactId>workflow-engine-common</artifactId>
<packaging>jar</packaging>
<name>workflow Engine Common</name>
<version>${workflow-engine-common.version}</version>
<dependencies>
<dependency>

View File

@ -1,52 +0,0 @@
package cn.axzo.workflow.common.code;
import cn.axzo.framework.domain.web.code.IModuleRespCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 表单实例相关响应码
*
* @author wangli
* @since 2024-11-13 14:34
*/
@Getter
@AllArgsConstructor
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;
private final String message;
@Override
public String getModuleCode() {
return "13";
}
@Override
public String getProjectCode() {
return "998";
}
@Override
public String getCode() {
return code;
}
@Override
public String getMessage() {
return message;
}
}

View File

@ -9,7 +9,6 @@ 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_]";
@ -34,7 +33,6 @@ 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_]";
// 单任务节点,
@ -43,8 +41,6 @@ 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";
@ -58,15 +54,12 @@ 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 FLOW_CATEGORY_VERSION = "categoryVersion";
String CONFIG_SIGN = "signConfig";
String CONFIG_NOTICE = "noticeConfig";
String CONFIG_APPROVE = "approveConfig";
String TEMPLATE_NOTICE_MESSAGE_CONFIG = "noticeMessageConfig";
@ -78,12 +71,8 @@ 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 TEMPLATE_UPGRADE_APPROVAL_CONF = "upgradeApprovalConf";
String TEMPLATE_UPGRADE_APPROVAL_LIMIT_CONF = "limitConfig";
String TEMPLATE_UPGRADE_APPROVAL_SPECIFY_VALUE = "specifyValue";
String APPROVE_SUPPORT_BATCH_OPERATION = "supportBatchOperation";
String APPROVE_USER_AGREE_SIGNATURE = "userAgreeSignature";
String CONFIG_BUTTON = "buttonConfig";
@ -95,23 +84,10 @@ 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_APPROVE_SPECIFY_RANGE = "approverSpecifyRange";
String CONFIG_APPROVE_SPECIFY_COOPERATE_TYPE = "approverSpecifyCooperateType";
String CONFIG_APPROVE_SPECIFY_RANGE_ORG_LIMIT = "approverSpecifyRangeOrgLimit";
String CONFIG_APPROVE_SPECIFY_RANGE_UNIT = "approverSpecifyRangeUnit";
String CONFIG_INITIATOR_SPECIFIED_RANGE = "initiatorSpecifiedRange";
String CONFIG_INITIATOR_SPECIFIED_FILTER = "initiatorSpecifiedFilter";
String CONFIG_INITIATOR_SPECIFIED_EXCLUDE_IDENTITY_TYPES = "excludeIdentityTypes";
String CONFIG_INITIATOR_SPECIFIED_EXCLUDE_COOPERATE_TYPES = "excludeCooperateShipTypes";
String CONFIG_INITIATOR_LEADER_RANGE_UNIT = "initiatorLeaderRangeUnit";
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";
@ -120,9 +96,6 @@ 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 CONFIG_AREA_FILTER_ENABLE = "areaFilterEnable";
String CONFIG_SPECIALTY_FILTER_ENABLE = "specialtyFilterEnable";
String ELEMENT_ATTRIBUTE_NAME = "name";
String ELEMENT_ATTRIBUTE_VALUE = "value";
String ELEMENT_ATTRIBUTE_DESC = "desc";
@ -132,9 +105,6 @@ public interface BpmnConstants {
String ELEMENT_ATTRIBUTE_CHECKED = "checked";
String ELEMENT_ATTRIBUTE_DISABLED = "disabled";
String ELEMENT_ATTRIBUTE_TYPE = "type";
String ELEMENT_ATTRIBUTE_ORG_LIMIT = "orgLimit";
String ELEMENT_ATTRIBUTE_APPROVER_SPECIFY = "approverSpecify";
String ELEMENT_ATTRIBUTE_APPROVER_SPECIFY_RANGE = "approverSpecifyRange";
String START_EVENT_ID = "startEventNode";
String SEQUENCE_FLOW_ID = "SequenceFlowId";
String END_EVENT_ID = "endEventNode";
@ -142,7 +112,6 @@ 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>
@ -215,10 +184,6 @@ public interface BpmnConstants {
* 加签显示人员数量
*/
Integer COUNTERSIGN_ASSIGNER_SHOW_NUMBER = 2;
/**
* 重置任务审批人显示人员数量
*/
Integer RESET_TASK_ASSIGNER_SHOW_NUMBER = 2;
/**
* 回退操作次数上限
@ -234,32 +199,4 @@ 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_]";
/**
* 提级审批变量标识
*/
String SUPPORT_UPGRADE_VARIABLE = "[_SUPPORT_UPGRADE_]";
}

View File

@ -1,29 +0,0 @@
package cn.axzo.workflow.common.constant;
/**
* 表单引擎相关的常量
*
* @author wangli
* @since 2024-11-05 10:20
*/
public interface FormConstants {
String FIELD_PROPERTY_REQUIRED = "required";
String FIELD_PROPERTY_EDITABLE = "editable";
String FIELD_PROPERTY_READONLY = "readonly";
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

@ -1,12 +0,0 @@
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,40 +25,4 @@ 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

@ -1,72 +0,0 @@
package cn.axzo.workflow.common.constraint;
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.List;
/**
* 附件校验器
*
* @author wangli
* @since 2024/4/22 15:15
*/
public class AttachmentConstraintValidator implements ConstraintValidator<AttachmentValidator, List<AttachmentDTO>> {
private AttachmentTypeValidator[] typeConstraints;
@Override
public void initialize(AttachmentValidator constraintAnnotation) {
this.typeConstraints = constraintAnnotation.types();
}
@Override
public boolean isValid(List<AttachmentDTO> attachments, ConstraintValidatorContext context) {
if (attachments == null || attachments.isEmpty()) {
return true; // No attachments, so no validation needed
}
boolean isValid = true;
for (AttachmentTypeValidator typeConstraint : typeConstraints) {
AttachmentTypeEnum type = typeConstraint.type();
int minAllowed = typeConstraint.min();
int maxAllowed = typeConstraint.max();
int count = getCountOfType(attachments, type);
// Check if min or max is not limited
boolean minNotLimited = minAllowed == -1;
boolean maxNotLimited = maxAllowed == Integer.MAX_VALUE;
if (!minNotLimited && count < minAllowed) {
addErrorMessage(context, typeConstraint.type().getDesc() + "数量最小支持" + minAllowed + "");
isValid = false; // Validation failed due to min limit
}
if (!maxNotLimited && count > maxAllowed) {
addErrorMessage(context, typeConstraint.type().getDesc() + "数量最大支持" + maxAllowed + "");
isValid = false; // Validation failed due to max limit
}
}
return isValid; // Validation passed
}
// Helper method to count attachments of a specific type
private int getCountOfType(List<AttachmentDTO> attachments, AttachmentTypeEnum type) {
int count = 0;
for (AttachmentDTO attachment : attachments) {
if (attachment.getType().equals(type)) {
count++;
}
}
return count;
}
private void addErrorMessage(ConstraintValidatorContext context, String message) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(message)
.addConstraintViolation();
}
}

View File

@ -1,41 +0,0 @@
package cn.axzo.workflow.common.constraint;
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 工作流主要操作时, 附件的校验
*
* @author wangli
* @since 2024/4/22 15:17
*/
@Target({ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AttachmentTypeValidator {
/**
* 指定的附件类型
*
* @return
*/
AttachmentTypeEnum type();
/**
* 最小个数: -1 不限制
*
* @return
*/
int min() default -1;
/**
* 最大个数: -1 不限制
*
* @return
*/
int max() default Integer.MAX_VALUE;
}

View File

@ -1,31 +0,0 @@
package cn.axzo.workflow.common.constraint;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 工作流主要操作时, 附件的校验
*
* @author wangli
* @since 2024/4/22 15:17
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = AttachmentConstraintValidator.class)
@Documented
public @interface AttachmentValidator {
String message() default "附件校验不通过";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
AttachmentTypeValidator[] types();
}

View File

@ -1,18 +1,11 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
@Getter
public enum AdminDataSource {
SYSTEM_ENTRY("systemEntry", "系统录入"),
USER_ENTRY("userEntry", "用户手动录入"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知"),
;
USER_ENTRY("userEntry", "用户手动录入");
private final String type;
private final String desc;
@ -21,15 +14,4 @@ public enum AdminDataSource {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AdminDataSource fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(AdminDataSource.values())
.filter(v -> v.getType().equalsIgnoreCase(value) || v.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,19 +1,13 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
@Getter
public enum AdminRoleType {
ORGANIZATION_ADMIN("organizationAdmin", "单位超管"),
ORG_WORKSPACE_ADMIN("organizationWorkspaceAdmin", "项目内单位负责人"),
WORKSPACE_ADMIN("workspaceAdmin", "项目超管"),
OTHER("other", "其他用户"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知");
OTHER("other", "其他用户");
private final String type;
private final String desc;
@ -22,15 +16,4 @@ public enum AdminRoleType {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AdminRoleType fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(AdminRoleType.values())
.filter(v -> v.getType().equalsIgnoreCase(value) || v.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,21 +1,14 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 审批管理员类型
*/
@Getter
public enum AdminTypeEnum {
SUPER_ADMIN("super_admin", "超级管理员"),
COMMON_ADMIN("common_admin", "普通管理员"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知"),
;
COMMON_ADMIN("common_admin", "普通管理员");
private final String type;
private final String desc;
@ -24,15 +17,4 @@ public enum AdminTypeEnum {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AdminTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(AdminTypeEnum.values())
.filter(v -> v.getType().equalsIgnoreCase(value) || v.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,10 +1,7 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* 审批方式枚举
@ -12,23 +9,18 @@ import java.util.Arrays;
* @author wangli
* @since 2023/11/16 10:10
*/
@Getter
public enum ApprovalMethodEnum {
human("human", "人工审批", ""),
autoPassed("autoPassed", "自动通过", "[仅审批节点可能选该值]"),
autoPassed_empty("autoPassed", "自动通过", "该枚举仅日志处理使用"),
autoRejection("autoRejection", "自动驳回", "[仅审批节点可能选该值]"),
autoRejection_empty("autoRejection", "自动驳回", "该枚举仅日志处理使用"),
nobody("nobody", "不设置审批人", "[仅业务节点可能有该值]"),
bizSpecify("bizSpecify", "业务指定审批人", "[仅业务节点可能有该值]"),
transferToAdmin("transferToAdmin", "转办给管理员", "该枚举仅日志处理使用"),
@JsonEnumDefaultValue
unknown("unknown", "未知", "兜底");
;
private final String type;
private final String desc;
private final String remark;
private String type;
private String desc;
private String remark;
ApprovalMethodEnum(String type, String desc, String remark) {
this.type = type;
@ -36,18 +28,34 @@ public enum ApprovalMethodEnum {
this.remark = remark;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ApprovalMethodEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public static ApprovalMethodEnum valueOfType(String type) {
return fromValue(type);
return Arrays.stream(ApprovalMethodEnum.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -1,26 +1,17 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 审批人为空时的处理方式枚举
*
* @author wangli
* @since 2023/11/16 10:22
*/
@Getter
public enum ApproverEmptyHandleTypeEnum {
autoPassed("autoPassed", "自动通过"),
autoRejection("autoRejection", "自动驳回"),
autoSkipped("autoSkipped", "自动跳过"),
transferToAdmin("transferToAdmin", "转交给管理员"),
specifyAssignee("specifyAssignee", "指定审批人"),
@JsonEnumDefaultValue
unknown("unknown", "未知"),
;
private String type;
private String desc;
@ -30,15 +21,19 @@ public enum ApproverEmptyHandleTypeEnum {
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ApproverEmptyHandleTypeEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

View File

@ -1,9 +1,5 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
@ -13,15 +9,12 @@ import java.util.Objects;
* @author wangli
* @since 2023/11/16 10:14
*/
@Getter
public enum ApproverScopeEnum {
entWorkspace("entWorkspace", "企业工作台", "entWorkspaceProcessor"),
govWorkspace("govWorkspace", "政务工作台", "govWorkspaceProcessor"),
projectWorkspace("projectWorkspace", "项目工作台", "projectWorkspaceProcessor"),
preTaskUser("preTaskUser", "上节点审批人所在单位", "preTaskUserProcessor"),
preTaskSpecified("preTaskSpecified", "上节点审批人指定", "preTaskUserProcessor"),
@JsonEnumDefaultValue
unknown("unknown", "未知", "unknownProcessor"),
projectWorkspace("projectWorkspace", "项目工作台","projectWorkspaceProcessor"),
preTaskUser("preTaskUser", "上节点审批人所在单位","preTaskUserProcessor"),
preTaskSpecified("preTaskSpecified", "上节点审批人指定","preTaskUserProcessor"),
;
private final String type;
private final String desc;
@ -33,15 +26,20 @@ public enum ApproverScopeEnum {
this.processor = processor;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ApprovalMethodEnum fromValue(String value) {
if (value == null) {
return ApprovalMethodEnum.unknown;
}
return Arrays.stream(ApprovalMethodEnum.values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(ApprovalMethodEnum.unknown);
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public String getProcessor() {
return processor;
}
public boolean selectWorkspace() {
return this == ApproverScopeEnum.projectWorkspace;
}
public static ApproverScopeEnum valueOfProcessor(String processor) {

View File

@ -1,62 +1,42 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 审批人指定枚举
*
* @author wangli
* @since 2023/11/16 10:16
*/
@Getter
public enum ApproverSpecifyEnum {
position("position", "指定岗位", 1),
role("role", "指定角色", 1),
identity("identity", "指定身份", 1),
initiatorLeader("initiatorLeader", "发起人主管", 1),
initiatorLeaderRecursion("initiatorLeaderRecursion", "发起人多级主管", 1),
fixedPerson("fixedPerson", "固定人员", 1),
preNodeSpecified("preNodeSpecified", "上级节点指定", 1),
initiatorSpecified("initiatorSpecified", "发起时指定", 1),
// 该枚举目前主要为了区别签署业务与审批业务的不同配法选择该项时意味着该节点是由二方后端自由消费 BpmnSignApproverLimit 配置
signerRelated("signerRelated", "签署人相关组织", 1),
// 新配置规则的审批人指定方式
position_v2("position_v2", "指定岗位", 2),
role_v2("role_v2", "指定角色", 2),
identity_v2("identity_v2", "指定身份", 2),
initiatorSpecified_v2("initiatorSpecified_v2", "发起人自选", 2),
initiator_v2("initiator_v2", "发起人自己", 2),
initiatorLeader_v2("initiatorLeader_v2", "发起人主管", 2),
fixedPerson_v2("fixedPerson_v2", "固定人员", 2),
preAllNodeApprover_v2("preAllNodeApprover_v2", "所有前序节点审批人", 2),
@JsonEnumDefaultValue
unknown("unknown", "未知", 1),
position("position", "指定岗位"),
role("role", "指定角色"),
identity("identity", "指定身份"),
initiatorLeader("initiatorLeader", "发起人主管"),
initiatorLeaderRecursion("initiatorLeaderRecursion", "发起人多级主管"),
fixedPerson("fixedPerson", "固定人员"),
preNodeSpecified("preNodeSpecified", "上级节点指定"),
;
private String type;
private String desc;
private final String type;
private final String desc;
private final Integer version;
ApproverSpecifyEnum(String type, String desc, Integer version) {
ApproverSpecifyEnum(String type, String desc) {
this.type = type;
this.desc = desc;
this.version = version;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ApproverSpecifyEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

View File

@ -1,45 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 审批人指定的二次范围限定枚举
*
* @author wangli
* @since 2025-08-13 14:32
*/
@Getter
public enum ApproverSpecifyRangeEnum {
within_the_project("within_the_project", "项目内岗位"),
within_the_project_construction_units("within_the_project_construction_units", "项目内参建单位的企业岗位"),
specified_org("specified_org", "审批单指定的末级组织"),
initiator("initiator", "审批单发起人"),
pre_node_approver("pre_node_approver", "上节点审批人"),
@JsonEnumDefaultValue
unknown("unknown", "未知"),
;
private final String type;
private final String desc;
ApproverSpecifyRangeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ApproverSpecifyRangeEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
}
}

View File

@ -1,46 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 审批人指定的范围单位枚举
*
* @author wangli
* @since 2025-08-13 15:05
*/
@Getter
public enum ApproverSpecifyRangeUnitEnum {
in_project("in_project", "项目内", null),
in_ent("in_ent", "企业内", null),
in_group_lv_1("in_group_lv_1", "集团岗位,上一级", 1),
in_group_lv_2("in_group_lv_2", "集团岗位,上二级", 2),
in_group_lv_3("in_group_lv_3", "集团岗位,上三级", 3),
in_group_lv_4("in_group_lv_4", "集团岗位,上四级", 4),
in_group_lv_top("in_group_lv_top", "集团岗位,总公司", Integer.MAX_VALUE),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知范围", null);
private final String type;
private final String desc;
private final Integer value;
ApproverSpecifyRangeUnitEnum(String type, String desc, Integer value) {
this.type = type;
this.desc = desc;
this.value = value;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ApproverSpecifyRangeUnitEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,43 +1,39 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 附件类型枚举
*
* @author wangli
* @since 2023/11/22 23:19
*/
@Getter
public enum AttachmentTypeEnum {
image("image", "图片"),
file("file", "文件"),
signature("signature", "签名"),
@JsonEnumDefaultValue
unknown("unknown", "未知"),
;
private final String type;
private final String desc;
private String type;
private String desc;
AttachmentTypeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AttachmentTypeEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

View File

@ -1,10 +1,7 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import org.springframework.util.StringUtils;
/**
* 自动过审参数
@ -14,10 +11,7 @@ import java.util.Arrays;
public enum AutoApprovalTypeEnum {
NO_AUTO_APPROVAL("noAutoApproval", "不自动过审"),
CONTINUOUS_NODES_AUTO_APPROVAL("continuousNodesAutoApproval", "连续节点自动过审"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知"),
;
CONTINUOUS_NODES_AUTO_APPROVAL("continuousNodesAutoApproval", "连续节点自动过审");
private final String type;
private final String desc;
@ -28,17 +22,14 @@ public enum AutoApprovalTypeEnum {
}
public static AutoApprovalTypeEnum fromType(String type) {
return fromValue(type);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static AutoApprovalTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
if (!StringUtils.hasText(type)) {
return null;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
for (AutoApprovalTypeEnum typeEnum : AutoApprovalTypeEnum.values()) {
if (typeEnum.type.equals(type)) {
return typeEnum;
}
}
return null;
}
}

View File

@ -1,106 +1,72 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import com.google.common.collect.Lists;
import lombok.Getter;
import java.util.Arrays;
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
*
* @author wangli
* @since 2023/9/4 10:38
*/
@Getter
public enum BpmnButtonEnum {
/**
* 同意按钮
*/
BPMN_APPROVE(1, "BPMN_APPROVE", "同意", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_APPROVE(1, "BPMN_APPROVE", "同意"),
/**
* 驳回按钮
*/
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_REJECT(2, "BPMN_REJECT", "驳回"),
/**
* 撤回按钮
*/
BPMN_REVOCATION(5, "BPMN_REVOCATION", "撤回", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_REVOCATION(3, "BPMN_REVOCATION", "撤回"),
/**
* 转交按钮
*/
BPMN_TRANSFER(6, "BPMN_TRANSFER", "转交", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_TRANSFER(4, "BPMN_TRANSFER", "转交"),
/**
* 加签按钮
*/
BPMN_COUNTERSIGN(7, "BPMN_COUNTERSIGN", "加签", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_COUNTERSIGN(5, "BPMN_COUNTERSIGN", "加签"),
/**
* 评论按钮
*/
BPMN_COMMENT(8, "BPMN_COMMENT", "评论", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_COMMENT(6, "BPMN_COMMENT", "评论"),
/**
* 回退按钮
*/
BPMN_ROLLBACK(9, "BPMN_ROLLBACK", "回退", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_ROLLBACK(7, "BPMN_ROLLBACK", "回退"),
/**
* 抄送按钮
*/
BPMN_COPY(10, "BPMN_COPY", "抄送", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 提级审批按钮
*/
BPMN_UPGRADE(12, "BPMN_UPGRADE", "提级审批", Lists.newArrayList(APPROVAL, SIGN)),
/**
* 催办按钮
*/
BPMN_REMIND(11, "BPMN_REMIND", "催办", Lists.newArrayList(APPROVAL, SIGN)),
BPMN_COPY(8, "BPMN_COPY", "抄送"),
/**
* 管理员转交按钮
*/
BPMN_ADMIN_TRANSFER(90, "BPMN_ADMIN_TRANSFER", "管理员转交", Lists.newArrayList()),
/**
* 兜底
*/
@JsonEnumDefaultValue
UNKNOWN(99, "UNKNOWN", "未知", Lists.newArrayList()),
;
BPMN_ADMIN_TRANSFER(9, "BPMN_ADMIN_TRANSFER", "管理员转交");
public int getOrder() {
return order;
}
public String getBtnKey() {
return btnKey;
}
public String getBtnName() {
return btnName;
}
private final int order;
private final String btnKey;
private final String btnName;
private final List<BusinessTypeEnum> supportBizType;
BpmnButtonEnum(int order, String btnKey, String btnName, List<BusinessTypeEnum> supportBizType) {
BpmnButtonEnum(int order, String btnKey, String btnName) {
this.order = order;
this.btnKey = btnKey;
this.btnName = btnName;
this.supportBizType = supportBizType;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnButtonEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getBtnKey().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,18 +1,12 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* 加签类型
*
* @author zuoqinbo
*/
@Getter
public enum BpmnCountersignTypeEnum {
/**
* 向前加签
@ -26,11 +20,6 @@ public enum BpmnCountersignTypeEnum {
* 共享加签
*/
SHARE_COUNTERSIGN("SHARE_COUNTERSIGN", "共享加签"),
/**
* 兜底
*/
@JsonEnumDefaultValue
UNKNOW("UNKNOW", "未知"),
;
private final String type;
@ -41,6 +30,14 @@ public enum BpmnCountersignTypeEnum {
this.desc = desc;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public static BpmnCountersignTypeEnum valueOfType(String countersignType) {
if (StringUtils.isBlank(countersignType)) {
return null;
@ -53,15 +50,4 @@ public enum BpmnCountersignTypeEnum {
}
return null;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnCountersignTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOW;
}
return Arrays.stream(values())
.filter(v -> v.getType().equalsIgnoreCase(value) || v.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOW);
}
}

View File

@ -1,42 +1,48 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
@Getter
public enum BpmnFlowNodeMode {
GENERAL("GENERAL", "普通节点"),
OR("OR", "或签节点"),
AND("AND", "会签节点"),
EXCEPTIONAL("EXCEPTIONAL", "异常"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知"),
;
private final String type;
private final String desc;
private String type;
private String desc;
BpmnFlowNodeMode(String type, String desc) {
this.type = type;
this.desc = desc;
}
public static BpmnFlowNodeMode valueOfType(String type) {
return fromValue(type);
public boolean isEqual(String type) {
return this.type.equals(type);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnFlowNodeMode fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static BpmnFlowNodeMode valueOfType(String type) {
return Arrays.stream(BpmnFlowNodeMode.values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -1,14 +1,11 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.Objects;
@Getter
public enum BpmnFlowNodeType {
//0 发起人 1审批 2抄送 3条件 4路由
@ -19,7 +16,6 @@ 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", "机器人节点"),
@ -28,33 +24,53 @@ public enum BpmnFlowNodeType {
NODE_ALTER("NODE_ALTER", "告警节点"),
NODE_CANCEL("NODE_CANCEL", "撤回节点"),
NODE_EMPTY("NODE_EMPTY", "空节点"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知");
;
private final String type;
private final String desc;
private String type;
private String desc;
BpmnFlowNodeType(String type, String desc) {
this.type = type;
this.desc = desc;
}
public boolean isEqual(String type) {
return this.type.equals(type);
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static BpmnFlowNodeType getByType(String type) {
return fromValue(type);
if (!StringUtils.hasText(type)) {
return null;
}
BpmnFlowNodeType[] values = BpmnFlowNodeType.values();
for (BpmnFlowNodeType value : values) {
if (value.getType().equals(type)) {
return value;
}
}
return null;
}
public static BpmnFlowNodeType valueOfType(String type) {
return fromValue(type);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnFlowNodeType fromValue(String value) {
if (!StringUtils.hasText(value)) {
return UNKNOWN;
}
return Arrays.stream(BpmnFlowNodeType.values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -1,11 +1,5 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import static cn.axzo.workflow.common.constant.BpmnConstants.TEMPLATE_NOTICE_MESSAGE_CONFIG;
import static cn.axzo.workflow.common.constant.BpmnConstants.TEMPLATE_PENDING_MESSAGE_ID;
import static cn.axzo.workflow.common.constant.BpmnConstants.TEMPLATE_SMS_MESSAGE_ID;
@ -16,14 +10,11 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.TEMPLATE_SMS_MESSAG
* @author wangli
* @since 2023/11/22 11:02
*/
@Getter
public enum BpmnNoticeEnum {
notice("notice", TEMPLATE_NOTICE_MESSAGE_CONFIG, "通知模板"),
pending("pending", TEMPLATE_PENDING_MESSAGE_ID, "待办模板"),
sms("sms", TEMPLATE_SMS_MESSAGE_ID, "短信模板"),
@JsonEnumDefaultValue
unknown("unknown", "unknown", "未知类型"),
;
private final String key;
private final String configName;
@ -35,14 +26,15 @@ public enum BpmnNoticeEnum {
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnNoticeEnum fromValue(String key) {
if (key == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getKey().equalsIgnoreCase(key) || e.name().equalsIgnoreCase(key))
.findFirst()
.orElse(unknown);
public String getKey() {
return key;
}
public String getConfigName() {
return configName;
}
public String getDesc() {
return desc;
}
}

View File

@ -1,12 +1,7 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
@Getter
public enum BpmnProcessInstanceResultEnum {
PROCESSING("PROCESSING", "审批中"),
APPROVED("APPROVED", "已通过"),
@ -16,11 +11,8 @@ public enum BpmnProcessInstanceResultEnum {
ABORTED("ABORTED", "已中止"),
TRANSFER("TRANSFER", "已转交"),
COUNTERSIGN("COUNTERSIGN", "已加签"),
UPGRADED("UPGRADED", "已提级"),
COMMENTED("COMMENTED", "已评论"),
DELETED("DELETED", "已删除"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知"),
;
/**
* 结果
@ -36,8 +28,25 @@ public enum BpmnProcessInstanceResultEnum {
this.desc = desc;
}
public static BpmnProcessInstanceResultEnum valueOfDesc(String desc) {
return Arrays.stream(values()).filter(it -> it.getDesc().equals(desc)).findFirst().orElse(DELETED);
public String getStatus() {
return status;
}
public String getDesc() {
return desc;
}
/**
* 判断该结果是否已经处于 End 最终结果
* <p>
* 主要用于一些结果更新的逻辑如果已经是最终结果就不再进行更新
*
* @param result 结果
* @return 是否
*/
public static boolean isEndResult(Integer result) {
return Arrays.asList(PROCESSING.getStatus(), APPROVED.getStatus(), REJECTED.getStatus(),
CANCELLED.getStatus()).contains(result);
}
public static BpmnProcessInstanceResultEnum valueOfStatus(String status) {
@ -45,15 +54,8 @@ public enum BpmnProcessInstanceResultEnum {
.orElse(DELETED);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnProcessInstanceResultEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(BpmnProcessInstanceResultEnum.values())
.filter(e -> e.getStatus().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
public static BpmnProcessInstanceResultEnum valueOfDesc(String desc) {
return Arrays.stream(values()).filter(it -> it.getDesc().equals(desc)).findFirst()
.orElse(DELETED);
}
}

View File

@ -1,45 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
@Getter
public enum BpmnProcessTaskResultEnum {
PENDING("PENDING", "待处理"),
APPROVED("APPROVED", "已同意"),
REJECTED("REJECTED", "已驳回"),
DELETED("DELETED", "已删除"),
CANCELED("CANCELED", "已撤销"),
TRANSFERRED("TRANSFERRED", "已转交"),
NONE("NONE", "没有执行动作,例如 抄送"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知"),
;
/**
* 结果
*/
private final String status;
/**
* 描述
*/
private final String desc;
BpmnProcessTaskResultEnum(String status, String desc) {
this.status = status;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnProcessTaskResultEnum fromValue(String status) {
if (status == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getStatus().equalsIgnoreCase(status) || e.name().equalsIgnoreCase(status))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,17 +1,10 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 加签类型
*
* @author zuoqinbo
*/
@Getter
public enum BpmnReminderType {
/**
* 短信
@ -20,10 +13,7 @@ public enum BpmnReminderType {
/**
* 站内信
*/
INBOX_MESSAGE("INBOX_MESSAGE", "站内信"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知"),
;
INBOX_MESSAGE("INBOX_MESSAGE", "站内信");
private String type;
private String desc;
@ -33,15 +23,24 @@ public enum BpmnReminderType {
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnReminderType fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
public boolean isEqual(String type) {
return this.type.equals(type);
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

View File

@ -1,47 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 签署方式
*
* @author wangli
* @since 2025-03-25 17:00
*/
@Getter
public enum BpmnSignType {
SINGLE("SINGLE", "指定人群,所有人共同签署一份文件"),
MULTI("MULTI", "指定人群,每人签署一份文件"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知"),
;
private final String type;
private final String desc;
BpmnSignType(String type, String desc) {
this.type = type;
this.desc = desc;
}
public static BpmnSignType valueOfType(String type) {
return fromValue(type);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BpmnSignType fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(BpmnSignType.values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,35 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
@Getter
public enum BusinessTypeEnum {
SIGN("sign", "签署业务"),
APPROVAL("approval", "审批业务"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知");
private final String type;
private final String desc;
BusinessTypeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static BusinessTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(v -> v.getType().equalsIgnoreCase(value) || v.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,41 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
@Getter
public enum ButtonVisibleScopeEnum {
INITIATOR("INITIATOR", "发起人"),
EXECUTOR("EXECUTOR", "当前操作人"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知");
/**
* 结果
*/
private final String status;
/**
* 描述
*/
private final String desc;
ButtonVisibleScopeEnum(String status, String desc) {
this.status = status;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ButtonVisibleScopeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getStatus().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,10 +1,7 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* 抄送对象类型枚举
@ -12,7 +9,6 @@ import java.util.Arrays;
* @author wangli
* @since 12/03/2024 09:33
*/
@Getter
public enum CarbonCopyObjectType {
// 单位下
ent_role("ent_role", "role", "单位内指定角色", "entWorkspaceProcessor"),
@ -37,14 +33,12 @@ public enum CarbonCopyObjectType {
approver("approver", "approver", "审批人", "common"),
ent_initiator_leader("ent_initiator_leader", "initiatorLeader", "单位内发起人主管", "entWorkspaceProcessor"),
project_initiator_leader("project_initiator_leader", "initiatorLeader", "项目部内发起人主管", "projectWorkspaceProcessor"),
;
@JsonEnumDefaultValue
unknown("unknown", "unknown", "未知", "unknownProcessor");
private final String type;
private final String simpleType;
private final String desc;
private final String processor;
private String type;
private String simpleType;
private String desc;
private String processor;
CarbonCopyObjectType(String type, String simpleType, String desc, String processor) {
this.type = type;
@ -53,19 +47,43 @@ public enum CarbonCopyObjectType {
this.processor = processor;
}
public static CarbonCopyObjectType valueOfType(String type) {
return fromValue(type);
public String getType() {
return type;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static CarbonCopyObjectType fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
public void setType(String type) {
this.type = type;
}
public String getSimpleType() {
return simpleType;
}
public void setSimpleType(String simpleType) {
this.simpleType = simpleType;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getProcessor() {
return processor;
}
public void setProcessor(String processor) {
this.processor = processor;
}
public static CarbonCopyObjectType valueOfType(String type) {
return Arrays.stream(CarbonCopyObjectType.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
}

View File

@ -1,55 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 参建单位类型枚举
* <p>
* 拷贝自 cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipTypeEnum
*
* @author wangli
* @since 2025-08-13 14:51
*/
@Getter
public enum CooperateShipTypeEnum {
PROJ_PRIMARY_CONTRACTING_UNIT(1, "施工总承包"),
PROJ_CONSTRUCTION_UNIT(2, "建设单位"),
PROJ_SUPERVISION_UNIT(3, "监理单位"),
PROJ_LABOR_SUBCONTRACTING(4, "劳务分包"),
PROJ_PROFESSIONAL_SUBCONTRACTING(5, "专业承包"),
OMS(6, "OMS"),
ENT_COMMON(7, "企业通用"),
ENT_TEAM(8, "企业内班组"),
PROJ_TEAM(9, "项目内班组"),
ENT_GROUP(10, "企业内小组"),
PROJ_GROUP(11, "项目内小组"),
SURVEY_UNIT(12, "地勘单位"),
DESIGN_UNIT(13, "设计单位"),
OTHER(30, "其他"),
@JsonEnumDefaultValue
UNKNOWN(99, "未知");
private final Integer code;
private final String desc;
CooperateShipTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static CooperateShipTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,45 +0,0 @@
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

@ -1,34 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 模型扩展表的状态枚举
*
* @author wangli
* @since 2025-01-15 09:46
*/
@Getter
public enum ExtModelStateFieldEnum {
status,
printStatus,
@JsonEnumDefaultValue
unknown,
;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ExtModelStateFieldEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(ExtModelStateFieldEnum.values())
.filter(e -> e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
}
}

View File

@ -1,59 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 文档类型枚举
*
* @author wangli
* @since 2025-03-27 09:55
*/
@Getter
public enum FileTypeEnum {
WORD("word", "文本", ".docx"),
EXCEL("excel", "表格", ".xlsx"),
HIPRINT("hiprint", "智能文档", ""),
PDF("pdf", "PDF", ".pdf"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知", ""),
;
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 static FileTypeEnum valueOfType(String type) {
return fromValue(type);
}
public static FileTypeEnum valueOfLikeSuffix(String suffix) {
if (suffix == null) {
return UNKNOWN;
}
return Arrays.stream(FileTypeEnum.values())
.filter(e -> e.getSuffix().contains(suffix))
.findFirst()
.orElse(UNKNOWN);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static FileTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(FileTypeEnum.values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,143 +0,0 @@
package cn.axzo.workflow.common.enums;
import cn.axzo.workflow.common.model.dto.AmountFieldDTO;
import cn.axzo.workflow.common.model.dto.ContactsPersonDTO;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 流程引擎表单字段类型枚举
* <p>
* 参考文档{@see https://alidocs.dingtalk.com/i/nodes/ZgpG2NdyVXKy17o6fQ5nKGvMWMwvDqPk}
*
* @author wangli
* @since 2025-08-04 11:44
*/
public enum FormFieldTypeEnum {
input("input", "文本", new TypeReference<String>() {
}),
textarea("textarea", "多行文本", new TypeReference<String>() {
}),
upload("upload", "上传文件", new TypeReference<List<UploadFieldDTO>>() {
}),
image("image", "图片", new TypeReference<List<UploadFieldDTO>>() {
}),
date("date", "日期", new TypeReference<String>() {
}),
customComponent("customComponent", "自定义组件", new TypeReference<List<Map<String, Object>>>() {
}),
taskOrder("taskOrder", "任务顺序", new TypeReference<Map<String, Object>>() {
}),
rectifyOrder("rectifyOrder", "整改顺序", new TypeReference<Map<String, Object>>() {
}),
changeSignatureOrder("changeSignatureOrder", "变更签署顺序", new TypeReference<Map<String, Object>>() {
}),
contacts("contacts", "联系人", new TypeReference<List<ContactsPersonDTO>>() {
}),
amount("amount", "金额", new TypeReference<AmountFieldDTO>() {
}),
decimal("decimal", "小数", new TypeReference<Map<String, Object>>() {
}),
;
private final String type;
private final String desc;
private final TypeReference<?> typeReference;
FormFieldTypeEnum(String type, String desc, TypeReference<?> typeReference) {
this.type = type;
this.desc = desc;
this.typeReference = typeReference;
}
public String getType() {
return type;
}
public String getDesc() {
return desc;
}
public TypeReference<?> getTypeReference() {
return typeReference;
}
public static FormFieldTypeEnum valueOfType(String type) {
return Arrays.stream(FormFieldTypeEnum.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
public static Object parseValue(String type, Object fieldValue, Map<String, Object> fieldParams) {
FormFieldTypeEnum fieldType = valueOfType(type);
if (fieldType == null) {
return null;
}
TypeReference<?> typeReference = fieldType.getTypeReference();
if (typeReference == null || typeReference.getType() == null) {
return fieldValue;
}
if (fieldValue == null) {
return null;
}
ObjectMapper objectMapper = new ObjectMapper();
try {
// 如果已经是目标类型直接返回
if (objectMapper.constructType(typeReference.getType()).getRawClass().isInstance(fieldValue)) {
return fieldValue;
}
// 先转为字符串再反序列化
String json = fieldValue.toString();
if (!(fieldValue instanceof String)) {
json = objectMapper.writeValueAsString(fieldValue);
}
Object defaultValue = handleDefault(fieldParams, json, fieldType);
if (Objects.nonNull(defaultValue)) {
return fieldValue;
}
if (Objects.equals(type, "decimal")) {
// 特殊处理 decimal 类型确保返回的 Map 包含 unit 字段
Map<String, Object> decimalMap = new HashMap<>();
decimalMap.put("value", fieldValue);
decimalMap.put("unit", fieldParams.getOrDefault("unit", ""));
return decimalMap;
}
return objectMapper.readValue(json, typeReference);
} catch (Exception e) {
throw new RuntimeException("字段值解析失败: " + fieldValue, e);
}
}
private static Object handleDefault(Map<String, Object> fieldParams, String json, FormFieldTypeEnum fieldType) {
if (Objects.equals("[]", json)) {
switch (fieldType) {
case upload:
case image:
case customComponent:
case taskOrder:
case rectifyOrder:
case changeSignatureOrder:
case contacts:
// 对于这些类型返回空列表而不是空字符串
return Collections.emptyList();
case decimal:
HashMap<String, Object> map = new HashMap<>();
map.put("value", 0);
map.put("unit", fieldParams.getOrDefault("unit", ""));
return map;
default:
return "";
}
}
return null;
}
}

View File

@ -1,42 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 新版配置下的发起人自选的范围限定枚举
*
* @author wangli
* @since 2025-08-13 15:13
*/
@Getter
public enum InitiatorSpecifiedRangeEnum {
self_and_children_in_project("self_and_children_in_project", "项目内本组织及其下属组织所有成员"),
self_in_project("self_in_project", "项目内本组织所有成员"),
in_project("in_project", "项目内所有成员"),
in_ent("in_ent", "企业内所有成员"),
@JsonEnumDefaultValue
unknown("unknown", "未知"),
;
private final String type;
private final String desc;
InitiatorSpecifiedRangeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static InitiatorSpecifiedRangeEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
}
}

View File

@ -1,45 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 模型业务类型枚举
*
* @author wangli
* @since 2025-03-26 11:49
*/
@Getter
public enum ModelBizTypeEnum {
SIGN("SIGN", "签署业务"),
FLOWABLE("FLOWABLE", "审批业务"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知"),
;
private final String type;
private final String desc;
ModelBizTypeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
public static ModelBizTypeEnum valueOfType(String type) {
return fromValue(type);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static ModelBizTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,32 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 顺序操作枚举
*
* @author wangli
* @since 2025-03-31 16:35
*/
@Getter
public enum OrderEnum {
UP, DOWN,
@JsonEnumDefaultValue
UNKNOWN;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static OrderEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,42 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 打印字段的类型枚举
*
* @author wangli
* @since 2025-01-16 18:19
*/
@Getter
public enum PrintFieldCategoryEnum {
// 表单变量
form,
// 流程内系统变量
system,
// 电子签名变量
signature,
// 签署业务自定义变量
sign,
// 审批业务的变量
biz_variable,
@JsonEnumDefaultValue
unknown,
;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static PrintFieldCategoryEnum fromValue(String value) {
if (value == null) {
return unknown;
}
return Arrays.stream(values())
.filter(e -> e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(unknown);
}
}

View File

@ -17,7 +17,6 @@ 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,9 +2,6 @@ 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 事件枚举定义
*
@ -15,8 +12,6 @@ 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", "流程任务已删除"),
;
@ -50,5 +45,4 @@ public enum ProcessTaskEventEnum {
public Event.EventCode getEventCode() {
return eventCode;
}
}

View File

@ -1,52 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 签署确认节点的审批人层级范围限制
*
* @author wangli
* @since 2025-03-26 14:30
*/
@Getter
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),
LV_ALL("LV_ALL", "所有组织", -1),
LV_TOP("LV_TOP", "顶层组织", Integer.MAX_VALUE),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知层级", null);
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 static SignApproverOrgLimitEnum valueOfType(String type) {
return fromValue(type);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static SignApproverOrgLimitEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,47 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* 签署确认节点的审批人层级范围限制
*
* @author wangli
* @since 2025-03-26 14:30
*/
@Getter
public enum SignApproverRoleLimitEnum {
LEADER("LEADER", "负责人"),
@JsonEnumDefaultValue
UNKNOWN("UNKNOWN", "未知");
private final String type;
private final String desc;
SignApproverRoleLimitEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
public static SignApproverRoleLimitEnum valueOfType(String type) {
return Arrays.stream(SignApproverRoleLimitEnum.values())
.filter(i -> Objects.equals(i.getType(), type))
.findAny()
.orElse(null);
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static SignApproverRoleLimitEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,11 +1,5 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 时间查询方向
* <p>
@ -15,22 +9,8 @@ import java.util.Arrays;
* @author wangli
* @since 2024-09-29 09:56
*/
@Getter
public enum TimeQueryDirection {
BEFORE,
AFTER,
@JsonEnumDefaultValue
UNKNOWN,
;
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static TimeQueryDirection fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,39 +0,0 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.Getter;
import java.util.Arrays;
/**
* 模版上变量字段类型
*/
@Getter
public enum VarTypeEnum {
TEXT("text", "文本"),
PICTURE("picture", "图片"),
@JsonEnumDefaultValue
UNKNOWN("unknown", "未知"),
;
private final String type;
private final String desc;
VarTypeEnum(String type, String desc) {
this.type = type;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static VarTypeEnum fromValue(String value) {
if (value == null) {
return UNKNOWN;
}
return Arrays.stream(values())
.filter(e -> e.getType().equalsIgnoreCase(value) || e.name().equalsIgnoreCase(value))
.findFirst()
.orElse(UNKNOWN);
}
}

View File

@ -1,7 +1,6 @@
package cn.axzo.workflow.common.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
@ -11,6 +10,7 @@ import java.util.Arrays;
* @date 2023/11/21
*/
@Getter
@AllArgsConstructor
public enum WorkspaceType {
/**
@ -21,30 +21,15 @@ public enum WorkspaceType {
PROJECT(2, "项目"),
GOVERNMENT(3, "政务监管平台"),
OMS(6, "oms工作台"),
@JsonEnumDefaultValue
UN_KNOW(0, "未知"),
;
private final Integer code;
private final String desc;
WorkspaceType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static WorkspaceType getType(Integer code) {
return fromValue(String.valueOf(code));
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static WorkspaceType fromValue(String value) {
if (value == null) {
return UN_KNOW;
}
return Arrays.stream(values())
.filter(e -> e.getCode().toString().equalsIgnoreCase(value))
return Arrays.stream(values()).filter(it -> it.getCode().equals(code))
.findFirst()
.orElse(UN_KNOW);
.orElse(null);
}
}

View File

@ -1,23 +0,0 @@
package cn.axzo.workflow.common.model;
import lombok.Data;
/**
* 节点检测告警对象
*
* @author wangli
* @since 2024-09-13 11:37
*/
@Data
public class NextNodePreCheckAlterDTO {
private String processDefinitionKey;
private String processDefinitionName;
private String processInstanceId;
private String activityId;
private String errorMsg;
}

View File

@ -12,11 +12,6 @@ import java.util.Date;
*/
@Data
public class AlterDTO {
private String processDefinitionKey;
private String processDefinitionName;
private String processInstanceId;
private String activityId;

View File

@ -1,33 +0,0 @@
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

@ -1,28 +0,0 @@
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

@ -1,28 +0,0 @@
package cn.axzo.workflow.common.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 模型与表单的创建模型
*
* @author wangli
* @since 2024-11-07 18:48
*/
@Data
@Accessors(chain = true)
public class BpmnFormRelationCreateDTO {
@ApiModelProperty(value = "业务标识")
private String key;
@ApiModelProperty(value = "模型定义ID")
private String bpmnDefinitionId;
@ApiModelProperty(value = "表单部署ID")
private String formDeploymentId;
@ApiModelProperty(value = "租户 ID")
private String tenantId;
}

View File

@ -1,43 +0,0 @@
package cn.axzo.workflow.common.model.dto;
import cn.axzo.workflow.common.model.request.BpmPageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID;
/**
* 搜索
*
* @author wangli
* @date 2024/11/08
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class BpmnFormRelationSearchDTO extends BpmPageParam {
/**
* 业务标识
*/
@ApiModelProperty(value = "业务标识")
private String key;
/**
* 审批模型定义 ID
*/
@ApiModelProperty(value = "审批模型定义 ID")
private String bpmnDefinitionId;
/**
* 表单定义部署 ID
*/
@ApiModelProperty(value = "表单定义部署 ID")
private String formDeploymentId;
/**
* 租户 ID
*/
@ApiModelProperty(value = "租户 ID")
private String tenantId = NO_TENANT_ID;
}

View File

@ -1,71 +0,0 @@
package cn.axzo.workflow.common.model.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 通讯录组件返回的人员信息模型
*
* @author wangli
* @since 2025-05-15 14:04
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
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

@ -23,22 +23,6 @@ import java.util.List;
@Builder
public class CooperationOrgDTO implements Serializable {
private static final long serialVersionUID = 4739924705980062997L;
/**
* 叶子节点ID末级节点仅限用于新的项目配置模式
* <p>
* 该参数的用意是基于组织架构的一条线审批而叶子节点则是为了确认最底层人岗架会基于 nodeId 向上推出线的范围
*/
private Long nodeId;
/**
* 基于人权事的指定某些管理管辖人员
*/
private List<String> includeAreaCodes;
/**
* 基于人权事的指定专业管辖人员
*/
private List<String> includeSpecialtyCodes;
/**
* 企业组织架构范围

View File

@ -1,34 +0,0 @@
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-06-23 19:35
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class JobInfo implements Serializable {
private static final long serialVersionUID = -6092011348559752255L;
/**
* 岗位名称
*/
private String jobName;
/**
* 岗位编码
*/
private String jobCode;
}

View File

@ -1,34 +0,0 @@
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-06-23 19:35
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class NodeInfo implements Serializable {
private static final long serialVersionUID = -6092011348559752255L;
/**
* 岗位名称
*/
private Long nodeId;
/**
* 岗位编码
*/
private String nodeName;
}

View File

@ -1,71 +0,0 @@
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-06-23 18:31
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class OrgSnapshotInfo implements Serializable {
private static final long serialVersionUID = -2898438378034300663L;
/**
* 工作台名称
*/
private String workspaceName;
/**
* 工作台 ID
*/
private String workspaceId;
/**
* 工作台类型
*/
private Integer workspaceType;
/**
* 参建单位类型
*/
private Integer cooperationType;
/**
* 参建单位名称
*/
private String ouName;
/**
* 参建单位 ID
*/
private String ouId;
/**
* 顶级节点 ID
*/
private String topNodeId;
/**
* 部门快照信息集合
*/
private List<NodeInfo> nodeInfos;
/**
* 岗位快照信息集合
*/
private List<JobInfo> jobInfos;
}

View File

@ -1,55 +0,0 @@
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-06-23 18:23
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class OrgStructureSnapshotInfo implements Serializable {
private static final long serialVersionUID = 4199079714585922731L;
/**
* 审批人姓名
*/
private String personName;
/**
* 头像(仅为审批任务被接受那一刻的电话不可作为对外展示数据)
*/
private String avatarUrl;
/**
* 手机号(仅为审批任务被接受那一刻的电话不可作为对外展示数据)
*/
private String phone;
/**
* 审批人顶级节点 ID
*/
private Long topNodeId;
/**
* 工作台类型
*/
private int workspaceType;
/**
* 组织快照信息
*/
private OrgSnapshotInfo snapshotInfo;
}

View File

@ -1,60 +0,0 @@
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

@ -1,45 +0,0 @@
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

@ -1,37 +0,0 @@
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

@ -1,26 +0,0 @@
package cn.axzo.workflow.common.model.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 简单的任务模型
*
* @author wangli
* @since 2024-12-09 14:30
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SimpleTaskDTO {
/**
* 流程实例 ID
*/
private String processInstanceId;
/**
* 任务 ID
*/
private String taskId;
}

View File

@ -1,29 +0,0 @@
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 processDefinitionId;
private String activityId;
private String activityName;
private Integer delayTime;
private String timeUnit;
}

View File

@ -1,38 +0,0 @@
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 2024-11-22 14:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UploadFieldDTO implements Serializable {
private static final long serialVersionUID = -1L;
/**
* 文件名称
*/
private String fileName;
/**
* 文件类型
*/
private String fileUrl;
/**
* 文件 oss key
*/
private String fileKey;
}

View File

@ -1,44 +0,0 @@
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,7 +68,6 @@ public class HistoricProcessInstanceSearchForEsDTO {
* <p>
* 默认是查询开始时间之后
*/
@Builder.Default
private TimeQueryDirection startTimeDirection = TimeQueryDirection.AFTER;
/**
@ -81,19 +80,16 @@ 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

@ -1,31 +0,0 @@
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

@ -1,46 +0,0 @@
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,7 +10,6 @@ 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

@ -9,9 +9,6 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static cn.axzo.workflow.common.enums.BpmnButtonEnum.BPMN_UPGRADE;
/**
* 流程定义中的按钮配置
@ -81,11 +78,4 @@ public class BpmnButtonConf implements Serializable {
this.carbonCopy = carbonCopy;
}
public void removeUpGradeButton() {
// 移除升级按钮
this.initiator.removeIf(button -> Objects.equals(BPMN_UPGRADE.getBtnKey(), button.getType()));
this.current.removeIf(button -> Objects.equals(BPMN_UPGRADE.getBtnKey(), button.getType()));
this.history.removeIf(button -> Objects.equals(BPMN_UPGRADE.getBtnKey(), button.getType()));
this.carbonCopy.removeIf(button -> Objects.equals(BPMN_UPGRADE.getBtnKey(), button.getType()));
}
}

View File

@ -1,12 +1,9 @@
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;
/**
* 按钮元数据
@ -18,11 +15,6 @@ import java.util.List;
@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;
/**
* 按钮顺序
*/
@ -47,19 +39,10 @@ public class BpmnButtonMetaInfo implements Serializable {
* 是否禁用勾选
*/
private Boolean disabled;
/**
* 是否隐藏按钮
*/
private Boolean hidden = false;
/**
* 按钮类型 SYSTEM/CUSTOM
*/
private String type;
/**
* 按钮支持的业务类型
*/
private List<BusinessTypeEnum> supportBizType = new ArrayList<>();
}

View File

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

View File

@ -4,13 +4,8 @@ import cn.axzo.workflow.common.enums.ApprovalMethodEnum;
import cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum;
import cn.axzo.workflow.common.enums.ApproverScopeEnum;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.enums.ApproverSpecifyRangeEnum;
import cn.axzo.workflow.common.enums.ApproverSpecifyRangeUnitEnum;
import cn.axzo.workflow.common.enums.AutoApprovalTypeEnum;
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
import cn.axzo.workflow.common.enums.CooperateShipTypeEnum;
import cn.axzo.workflow.common.enums.InitiatorSpecifiedRangeEnum;
import cn.axzo.workflow.common.enums.SignApproverOrgLimitEnum;
import cn.axzo.workflow.common.model.request.form.FormPermissionMetaInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -50,56 +45,13 @@ public class BpmnJsonNodeProperty {
//************* 审批人指定Start **************//
/**
* 审批人指定: position(指定岗位), role(指定角色), identity(指定身份), initiatorLeader(发起人主管), initiatorLeaderRecursion(发起人多级主管),
* fixedPerson(固定人员) initiatorSpecified(发起人自选) signerRelated(签署人相关组织)
* fixedPerson(固定人员)
*/
@ApiModelProperty(value = "任务节点: 审批人指定", notes = "position: 指定岗位, role: 指定角色, identity: 指定身份, initiatorLeader: " +
"发起人主管, initiatorLeaderRecursion: 发起人多级主管, fixedPerson: 固定人员, initiatorSpecified: 发起人自选, signerRelated: 签署人相关组织")
"发起人主管, initiatorLeaderRecursion: 发起人多级主管, fixedPerson: 固定人员")
@NotBlank(message = "审批人指定不能为空")
private ApproverSpecifyEnum approverSpecify;
//*************** 针对新配置中的岗位角色身份的扩展配置 Start ****************
@ApiModelProperty(value = "任务节点:对选择的 approverSpecify 做的二次范围限定配置")
private ApproverSpecifyRangeEnum approverSpecifyRange;
/**
* cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipTypeEnum
*/
@ApiModelProperty(value = "任务节点: 当选择approverSpecifyRange的值为positions_within_the_project_construction_units做的二次范围限定配置的级联选择")
private CooperateShipTypeEnum cooperateShipType;
@ApiModelProperty(value = "任务节点: 当选择approverSpecifyRange的值为specified_org做的二次范围限定配置的级联选择的值")
private SignApproverOrgLimitEnum approverSpecifyRangeOrgLimit;
/**
* 该属性 approverSpecify = initiatorLeader_v2 也会被应用为限定单位内主管还是项目内主管
*/
@ApiModelProperty(value = "任务节点: 当选择approverSpecifyRange的值为specified_org做的二次范围限定配置的级联选择的值")
private ApproverSpecifyRangeUnitEnum approverSpecifyRangeUnit;
//*************** 针对新配置中的岗位角色身份的扩展配置 End ****************
//*************** approverSpecify initiatorSpecified_v2 发起人自选时的一些扩展配置 Start ****************
@ApiModelProperty(value = "任务节点: 当选择approverSpecify的值为 initiatorSpecified_v2做的范围选择的值")
private InitiatorSpecifiedRangeEnum initiatorSpecifyRange;
@ApiModelProperty(value = "是否开起发起人的筛选策略")
private Boolean initiatorSpecifiedFilter;
/**
* 需要排除的身份类型
*/
@ApiModelProperty(value = "需要排除的身份类型")
private List<String> excludeIdentityTypes;
/**
* 需要排查的参建单位类型
*/
@ApiModelProperty(value = "需要排除的参建单位类型")
private List<String> excludeCooperateShipTypes;
//*************** approverSpecify initiatorSpecified_v2 发起人自选时的一些扩展配置 End ****************
/**
* 签署确认节点的审批人限定规则
*/
@ApiModelProperty(value = "签署确认节点的审批人限定规则")
private BpmnSignApproverLimit signApproverLimit;
/**
* 具体的配置值
* <p>
@ -142,17 +94,12 @@ public class BpmnJsonNodeProperty {
private String emptyApproverSpecify;
//************* 审批人为空时的策略End **************//
/**
* 电子签名开关
*/
@ApiModelProperty(value = "电子签名")
private Boolean signature;
/**
* 提级审批配置
* 表单字段权限, JSON 格式,按照 UI 进行自定义组装, 引擎不做任何解析, 之后的需求会让业务方前端开发来消费这里的配置
*/
@ApiModelProperty(value = "提级审批配置")
private BpmnUpgradeApprovalConf upgradeApprovalConf;
@ApiModelProperty(value = "发起人节点/任务节点: 字段权限集合", notes = "后端不做任何解析, 前端给什么样,就返什么样")
private String fieldPermission;
/**
* 按钮权限
@ -189,28 +136,15 @@ public class BpmnJsonNodeProperty {
//************* 抄送节点Start **************//
/**
* 抄送节点配置,老的配置
* 抄送节点配置
*/
@ApiModelProperty(value = "抄送节点: 多组配置,最多五组")
private List<BpmnCarbonCopyConf> carbonCopyConf;
//************* 抄送节点Start **************//
/**
* 表单字段权限配置
* 发起时使用的表单 key
*/
@ApiModelProperty(value = "表单字段权限控制")
private List<FormPermissionMetaInfo> fieldPermission;
/**
* 区域过滤开关
*/
@ApiModelProperty(value = "区域过滤开关", notes = "true: 开启区域过滤, false: 关闭区域过滤")
private Boolean areaFilterEnable;
/**
* 专业过滤开关
*/
@ApiModelProperty(value = "专业过滤开关", notes = "true: 开启专业过滤, false: 关闭专业过滤")
private Boolean specialtyFilterEnable;
@ApiModelProperty(value = "发起时使用的表单 key")
private String formKey;
}

View File

@ -1,44 +0,0 @@
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

@ -1,40 +0,0 @@
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

@ -1,37 +0,0 @@
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

@ -1,45 +0,0 @@
package cn.axzo.workflow.common.model.request.bpmn;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.enums.SignApproverOrgLimitEnum;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* JSON 版本的 BPMN 协议模型中的提级审批配置模型
*
* @author wangli
* @since 2025-06-20 11:32
*/
@ApiModel("JSON 版本的 BPMN 协议模型中的提级审批配置模型")
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class BpmnUpgradeApprovalConf implements Serializable {
private static final long serialVersionUID = 36282987684860776L;
/**
* 是否已开启
*/
private Boolean enabled;
/**
* 提级审批的审批人层级范围限制
*/
private SignApproverOrgLimitEnum orgLimit;
/**
* 提级审批的审批人指定方式
*/
private ApproverSpecifyEnum approverSpecify;
/**
* 提级审批的审批人指定具体值
*/
private String specifyValue;
}

View File

@ -47,12 +47,6 @@ public class BpmnProcessDefinitionUpdateDTO {
@ApiModelProperty(value = "描述")
private String description;
/**
* 表单 KEY
*/
@ApiModelProperty(value = "表单 KEY")
private String formKey;
/**
* 模型定义内容
*/

View File

@ -1,57 +0,0 @@
package cn.axzo.workflow.common.model.request.bpmn.log;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
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-07-07 19:40
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LogApproveSearchDTO {
@ApiModelProperty("流程实例 ID")
@NotBlank(message = "流程实例 ID 不能为空")
private String processInstanceId;
/**
* 审批任务 ID如果有值优先使用 taskId 查询
* <p>
* 如果没有值 personIdtenantIdouId 一定不能为 null
*/
@ApiModelProperty("审批任务 ID")
private String taskId;
/**
* 如果没传 taskId那么该属性必有值
*/
@ApiModelProperty("审批人 PersonId")
private String personId;
/**
* 如果没传 taskId那么该属性必有值
*/
@ApiModelProperty("审批人 tenantId")
private String tenantId;
/**
* 如果没传 taskId那么该属性应该有值如果是工人可以没有值
*/
@ApiModelProperty("审批人 ouId")
private String ouId;
@ApiModelProperty("指定状态,如果为空,默认指定审批中状态的数据")
private BpmnProcessInstanceResultEnum status;
}

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