diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java index 99d3c414e..a3fc696a1 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; import lombok.Getter; import java.util.Arrays; +import java.util.Objects; /** * @author syl @@ -34,7 +35,10 @@ public enum WorkspaceType { } public static WorkspaceType getType(Integer code) { - return fromValue(String.valueOf(code)); + return Arrays.stream(values()) + .filter(e -> Objects.equals(code, e.getCode())) + .findFirst() + .orElse(UN_KNOW); } @JsonCreator(mode = JsonCreator.Mode.DELEGATING) @@ -43,8 +47,9 @@ public enum WorkspaceType { return UN_KNOW; } return Arrays.stream(values()) - .filter(e -> e.getCode().toString().equalsIgnoreCase(value)) + .filter(e -> e.name().equalsIgnoreCase(value)) .findFirst() .orElse(UN_KNOW); } + } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/task/BpmnTaskInstanceVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/task/BpmnTaskInstanceVO.java index 0fe553f29..5b731d161 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/task/BpmnTaskInstanceVO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/task/BpmnTaskInstanceVO.java @@ -1,5 +1,6 @@ package cn.axzo.workflow.common.model.response.bpmn.task; +import cn.axzo.workflow.common.enums.BpmnFlowNodeMode; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -82,4 +83,7 @@ public class BpmnTaskInstanceVO { */ @ApiModelProperty(value = "自定义分类") private String category; + + @ApiModelProperty(value = "节点多人签法") + private BpmnFlowNodeMode nodeMode; } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessTaskServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessTaskServiceImpl.java index 6f6982648..55b9a048f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessTaskServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessTaskServiceImpl.java @@ -2,6 +2,7 @@ package cn.axzo.workflow.core.service.impl; import cn.axzo.framework.domain.ServiceException; import cn.axzo.workflow.common.enums.BpmnCountersignTypeEnum; +import cn.axzo.workflow.common.enums.BpmnFlowNodeMode; import cn.axzo.workflow.common.enums.BpmnFlowNodeType; import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; import cn.axzo.workflow.common.exception.WorkflowEngineException; @@ -68,6 +69,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.flowable.bpmn.model.BaseElement; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.UserTask; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.interceptor.CommandExecutor; import org.flowable.engine.HistoryService; @@ -122,6 +124,7 @@ import static cn.axzo.workflow.common.code.BpmnTaskRespCode.FIND_TASK_BY_PERSON_ import static cn.axzo.workflow.common.code.BpmnTaskRespCode.REACHED_BACKED_MAXIMUM_NUM; import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_COMPLETE_FAIL_NOT_EXISTS; import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_HAS_BEEN_COMPLETE; +import static cn.axzo.workflow.common.constant.BpmnConstants.AND_SIGN_EXPRESSION; import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_ADVICE; import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_COMMENT_EXT; import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC; @@ -760,11 +763,24 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService { query.taskTenantId(tenantId); } List vos = bpmnTaskConverter.toVos(query.list()); + if (CollectionUtils.isEmpty(vos)) { + return vos; + } List snapshotTaskIds = vos.stream().map(i -> INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getTaskId()).collect(Collectors.toList()); Map instanceMap = runtimeService.getVariableInstances(processInstanceId, snapshotTaskIds); - vos.forEach(i -> i.setAssigner(BpmnTaskDelegateAssigner.toObjectCompatible(instanceMap.get(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getTaskId()).getValue()))); + BpmnModel bpmnModel = repositoryService.getBpmnModel(vos.get(0).getProcessDefinitionId()); + for (BpmnTaskInstanceVO vo : vos) { + BpmnFlowNodeMode flowNodeMode = BpmnFlowNodeMode.UNKNOWN; + FlowElement flowElement = bpmnModel.getFlowElement(vos.get(0).getTaskDefinitionKey()); + if (flowElement instanceof UserTask) { + UserTask userTask = (UserTask) flowElement; + flowNodeMode = Objects.equals(userTask.getLoopCharacteristics().getCompletionCondition(), AND_SIGN_EXPRESSION) ? BpmnFlowNodeMode.AND : BpmnFlowNodeMode.OR; + } + vo.setNodeMode(flowNodeMode); + vo.setAssigner(BpmnTaskDelegateAssigner.toObjectCompatible(instanceMap.get(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + vo.getTaskId()).getValue())); + } return vos; } diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java index 3e24bc1ab..b48c01d52 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowCoreService.java @@ -1,79 +1,130 @@ package cn.axzo.workflow.starter.api; +import cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration; +import cn.axzo.workflow.common.util.ThreadUtil; + +import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.ASYNC; +import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC; + +import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient; import cn.axzo.workflow.common.annotation.InvokeMode; -import cn.axzo.workflow.common.model.dto.CommonDingTalkDTO; -import cn.axzo.workflow.common.model.dto.SignFileDTO; -import cn.axzo.workflow.common.model.dto.SimpleDocDTO; +import cn.axzo.workflow.common.annotation.Manageable; import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO; -import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO; -import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO; -import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.print.Print4ProcessLogDTO; +import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintProcessLogPdfDTO; import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO; import cn.axzo.workflow.common.model.request.bpmn.print.QueryProcessLogPdfDTO; +import cn.axzo.workflow.common.model.response.bpmn.process.PrintData4LogVO; +import cn.axzo.workflow.common.model.response.print.ProcessLogPdfResultDTO; +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 cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutCallbackDTO; +import cn.axzo.workflow.common.model.request.bpmn.activity.BpmnActivityTimeoutTriggerDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO; +import cn.axzo.workflow.common.enums.AdminDataSource; +import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; +import cn.axzo.workflow.common.model.dto.CommonDingTalkDTO; +import cn.axzo.workflow.common.model.request.feature.DingTalkStarterAlterDTO; +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.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.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.BpmnProcessInstanceVariablesUpdateDTO; +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.BpmnActivitySetAssigneeDTO; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO; +import cn.axzo.workflow.common.model.request.form.ConditionPermissionMetaInfo; +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 com.fasterxml.jackson.databind.node.ObjectNode; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PutMapping; + +import javax.annotation.Nullable; +import javax.validation.constraints.NotNull; + +import 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.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.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.BpmnTaskButtonSearchDTO; 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.request.feature.DingTalkStarterAlterDTO; -import cn.axzo.workflow.common.model.request.form.ConditionPermissionMetaInfo; -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.FormVariablesUpdateDTO; -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.bpmn.BatchOperationResultVO; -import cn.axzo.workflow.common.model.response.bpmn.model.doc.DocBaseVO; -import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO; -import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO; -import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO; -import cn.axzo.workflow.common.model.response.bpmn.process.doc.DocPendingVO; -import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo; -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.axzo.workflow.common.model.response.print.ProcessLogPdfResultDTO; -import cn.axzo.workflow.common.util.ThreadUtil; -import cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration; -import io.swagger.v3.oas.annotations.Operation; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO; -import javax.annotation.Nullable; -import javax.validation.constraints.NotBlank; -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; +import javax.validation.constraints.NotEmpty; /** * Workflow Engine Starter Core Service diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java index a45992542..dfcdc1f10 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/api/WorkflowManageService.java @@ -941,7 +941,7 @@ public interface WorkflowManageService { @GetMapping("/api/process/task/active/list") @Manageable @InvokeMode(SYNC) - List getActiveTasksByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @NotBlank(message = "租户不能为空") @RequestParam String tenantId); + List getActiveTasksByProcessInstanceId(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @RequestParam(required = false) String tenantId); /** * 根据实例 ID 和自然人 ID 查询对应待处理的任务 ID