Merge branch 'feature/REQ-3502' into 'master'
Feature/req 3502 See merge request universal/infrastructure/backend/workflow-engine!17
This commit is contained in:
commit
a5000681b2
2
pom.xml
2
pom.xml
@ -16,7 +16,7 @@
|
||||
<name>Workflow Engine</name>
|
||||
|
||||
<properties>
|
||||
<revision>1.5.1-SNAPSHOT</revision>
|
||||
<revision>1.5.2-SNAPSHOT</revision>
|
||||
<axzo-bom.version>2.0.0-SNAPSHOT</axzo-bom.version>
|
||||
<axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version>
|
||||
<axzo-dependencies.org.version>1.0.0-SNAPSHOT</axzo-dependencies.org.version>
|
||||
|
||||
@ -9,10 +9,10 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCan
|
||||
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.task.BpmnTaskButtonSearchDTO;
|
||||
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;
|
||||
@ -20,6 +20,7 @@ import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLo
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
|
||||
import 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;
|
||||
@ -242,4 +243,15 @@ 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);
|
||||
}
|
||||
|
||||
@ -3,25 +3,10 @@ package cn.axzo.workflow.client.feign.bpmn;
|
||||
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
|
||||
import cn.axzo.workflow.common.annotation.InvokeMode;
|
||||
import cn.axzo.workflow.common.annotation.Manageable;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.*;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.*;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -284,4 +269,5 @@ public interface ProcessTaskApi {
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<Map<String, String>> findTaskIdByInstanceIdsAndPersonId(@RequestParam(required = false) @NotEmpty(message = "流程实例 ID列表 不能为空") List<String> processInstanceIds,
|
||||
@RequestParam(required = false) @NotBlank(message = "自然人 ID 不能为空") String personId);
|
||||
|
||||
}
|
||||
|
||||
@ -199,4 +199,9 @@ 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_]";
|
||||
}
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
package cn.axzo.workflow.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum BpmnProcessTaskResultEnum {
|
||||
PENDING("PENDING", "待处理"),
|
||||
APPROVED("APPROVED", "已同意"),
|
||||
REJECTED("REJECTED", "已驳回"),
|
||||
DELETED("DELETED", "已删除"),
|
||||
CANCELED("CANCELED", "已撤销"),
|
||||
TRANSFERRED("TRANSFERRED", "已转交"),
|
||||
NONE("NONE", "没有执行动作,例如 抄送"),
|
||||
;
|
||||
/**
|
||||
* 结果
|
||||
*/
|
||||
private final String status;
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private final String desc;
|
||||
|
||||
BpmnProcessTaskResultEnum(String status, String desc) {
|
||||
this.status = status;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package cn.axzo.workflow.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum ButtonVisibleScopeEnum {
|
||||
|
||||
INITIATOR("INITIATOR", "发起人"),
|
||||
|
||||
EXECUTOR("EXECUTOR", "当前操作人"),
|
||||
;
|
||||
|
||||
/**
|
||||
* 结果
|
||||
*/
|
||||
private final String status;
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private final String desc;
|
||||
|
||||
ButtonVisibleScopeEnum(String status, String desc) {
|
||||
this.status = status;
|
||||
this.desc = desc;
|
||||
}
|
||||
}
|
||||
@ -15,6 +15,11 @@ import java.io.Serializable;
|
||||
@Accessors(chain = true)
|
||||
public class BpmnButtonMetaInfo implements Serializable {
|
||||
|
||||
public static final String BUTTON_TYPE_SYSTEM = "SYSTEM";
|
||||
public static final String BUTTON_TYPE_CUSTOM = "CUSTOM";
|
||||
|
||||
private static final long serialVersionUID = -5224316166904752829L;
|
||||
|
||||
/**
|
||||
* 按钮顺序
|
||||
*/
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
package cn.axzo.workflow.common.model.request.bpmn.task;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("获取审批任务按钮,状态入参模型")
|
||||
public class BpmnTaskButtonSearchDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -3220083731019329293L;
|
||||
|
||||
@ApiModelProperty(value = "流程实例id", required = true)
|
||||
@NotBlank(message = "流程实例id不能为空")
|
||||
private String processInstanceId;
|
||||
|
||||
@ApiModelProperty(value = "审批任务id", required = true)
|
||||
@NotBlank(message = "审批任务id不能为空")
|
||||
private String taskId;
|
||||
|
||||
private Long initiatorPersonId;
|
||||
|
||||
private Long executorPersonId;
|
||||
}
|
||||
@ -3,7 +3,12 @@ package cn.axzo.workflow.common.model.request.bpmn.task;
|
||||
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 扩展的历史任务表搜索入参模型
|
||||
@ -13,6 +18,9 @@ import lombok.Data;
|
||||
*/
|
||||
@ApiModel("扩展的历史任务表搜索入参模型")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ExtHiTaskSearchDTO {
|
||||
|
||||
@ApiModelProperty("流程实例 ID")
|
||||
@ -29,4 +37,7 @@ public class ExtHiTaskSearchDTO {
|
||||
|
||||
@ApiModelProperty("任务状态")
|
||||
private BpmnProcessInstanceResultEnum status;
|
||||
|
||||
@ApiModelProperty("需要排除的id列表")
|
||||
private List<Long> excludeIds;
|
||||
}
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
package cn.axzo.workflow.common.model.response.bpmn.task;
|
||||
|
||||
import cn.axzo.workflow.common.enums.BpmnProcessTaskResultEnum;
|
||||
import cn.axzo.workflow.common.enums.ButtonVisibleScopeEnum;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class BpmnTaskButtonVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -2701890396246979758L;
|
||||
|
||||
/**
|
||||
* 执行人任务状态
|
||||
*/
|
||||
@ApiModelProperty(value = "执行人任务执行状态")
|
||||
private BpmnProcessTaskResultEnum executorTaskResult;
|
||||
|
||||
/**
|
||||
* 发起人执行状态
|
||||
*/
|
||||
@ApiModelProperty(value = "发起人任务执行状态")
|
||||
private BpmnProcessTaskResultEnum initiatorTaskResult;
|
||||
|
||||
/**
|
||||
* 当前任务执行人以及发起人全量按钮
|
||||
*/
|
||||
@ApiModelProperty(value = "当前任务相关以及发起人的全量按钮")
|
||||
private List<BpmnButtonMetaInfoWithVisibleScope> buttons;
|
||||
|
||||
/**
|
||||
* 需要隐藏的按钮
|
||||
*/
|
||||
@ApiModelProperty(value = "需要隐藏的自定义按钮")
|
||||
private List<BpmnButtonMetaInfo> customHiddenButtons;
|
||||
|
||||
/**
|
||||
* 全量的配置按钮
|
||||
*/
|
||||
@ApiModelProperty(value = "全量的配置按钮")
|
||||
private List<BpmnButtonMetaInfo> allConfigButtons;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static final class BpmnButtonMetaInfoWithVisibleScope extends BpmnButtonMetaInfo {
|
||||
|
||||
private static final long serialVersionUID = 5758633314769798044L;
|
||||
|
||||
private List<ButtonVisibleScopeEnum> visibleScopes;
|
||||
}
|
||||
}
|
||||
@ -59,6 +59,7 @@ import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.validTask
|
||||
*/
|
||||
public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2366844598166684546L;
|
||||
private static final Logger log = LoggerFactory.getLogger(CustomApproveTaskWithFormCmd.class);
|
||||
private final String taskId;
|
||||
/**
|
||||
@ -85,12 +86,12 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implemen
|
||||
/**
|
||||
* 指定节点类型
|
||||
*/
|
||||
private List<BpmnFlowNodeType> nodeTypes;
|
||||
private final List<BpmnFlowNodeType> nodeTypes;
|
||||
|
||||
/**
|
||||
* 表单数据
|
||||
*/
|
||||
private Map<String, Object> formVariables;
|
||||
private final Map<String, Object> formVariables;
|
||||
|
||||
@Override
|
||||
public String paramToJsonString() {
|
||||
@ -183,12 +184,12 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implemen
|
||||
if (CollectionUtils.isEmpty(logs) || logs.size() != 1) {
|
||||
throw new WorkflowEngineException(FORM_FIELD_VALIDATOR_ERROR);
|
||||
}
|
||||
ExtAxProcessLog log = logs.get(0);
|
||||
Map<String, FormPermissionMetaInfo> permissionMap = log.getFormFieldPermissionConf().stream()
|
||||
ExtAxProcessLog axProcessLog = logs.get(0);
|
||||
Map<String, FormPermissionMetaInfo> permissionMap = axProcessLog.getFormFieldPermissionConf().stream()
|
||||
.collect(Collectors.toMap(FormPermissionMetaInfo::getFieldId, Function.identity(), (s, t) -> s));
|
||||
formVariables.forEach((k, v) -> {
|
||||
FormPermissionMetaInfo permission = permissionMap.getOrDefault(k, new FormPermissionMetaInfo());
|
||||
if (permission.getRequired()) {
|
||||
if (Boolean.TRUE.equals(permission.getRequired())) {
|
||||
if (Objects.isNull(v)) {
|
||||
throw new WorkflowEngineException(FORM_FIELD_VALIDATOR_ERROR);
|
||||
}
|
||||
@ -211,19 +212,21 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implemen
|
||||
.deploymentId(relation.getFormDeploymentId())
|
||||
.singleResult();
|
||||
Authentication.setAuthenticatedUserId(approver.buildAssigneeId());
|
||||
formVariables.entrySet().forEach(e -> {
|
||||
if (e.getValue() instanceof Collection) {
|
||||
List<String> convertUploads = ((Collection<?>) e.getValue()).stream().map(i -> {
|
||||
if (i instanceof String) {
|
||||
return UploadFieldDTO.toObject(String.valueOf(i)).toSpecString();
|
||||
} else {
|
||||
ObjectMapper objectMapper = SpringContextUtils.getBean(ObjectMapper.class);
|
||||
return objectMapper.convertValue(i, UploadFieldDTO.class).toSpecString();
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
e.setValue(StringUtils.collectionToCommaDelimitedString(convertUploads));
|
||||
}
|
||||
});
|
||||
if (!CollectionUtils.isEmpty(formVariables)) {
|
||||
formVariables.entrySet().forEach(e -> {
|
||||
if (e.getValue() instanceof Collection) {
|
||||
List<String> convertUploads = ((Collection<?>) e.getValue()).stream().map(i -> {
|
||||
if (i instanceof String) {
|
||||
return UploadFieldDTO.toObject(String.valueOf(i)).toSpecString();
|
||||
} else {
|
||||
ObjectMapper objectMapper = SpringContextUtils.getBean(ObjectMapper.class);
|
||||
return objectMapper.convertValue(i, UploadFieldDTO.class).toSpecString();
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
e.setValue(StringUtils.collectionToCommaDelimitedString(convertUploads));
|
||||
}
|
||||
});
|
||||
}
|
||||
taskService.completeTaskWithForm(taskId, formDefinition.getId(), null, formVariables);
|
||||
Authentication.setAuthenticatedUserId(null);
|
||||
} else {
|
||||
|
||||
@ -14,7 +14,9 @@ import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
||||
import org.flowable.engine.impl.util.CommandContextUtil;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -23,22 +25,12 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANT_CANCEL;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_DELETE_PROCESS_FLAG;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_NAME;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_DELETE_REASON;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_CANCEL;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.*;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.*;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CANCEL;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.ABORTED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.CANCELLED;
|
||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment;
|
||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.completeVirtualTask;
|
||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.createVirtualTask;
|
||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.*;
|
||||
|
||||
/**
|
||||
* 自定义的撤回流程实例的命令实现
|
||||
@ -47,6 +39,7 @@ import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.createVir
|
||||
* @since 2024/1/2 18:19
|
||||
*/
|
||||
public class CustomCancelProcessInstanceCmd extends AbstractCommand<Void> implements Serializable {
|
||||
private static final long serialVersionUID = 6556399267210245511L;
|
||||
private final String processInstanceId;
|
||||
private final String tenantId;
|
||||
private final String reason;
|
||||
@ -102,22 +95,31 @@ public class CustomCancelProcessInstanceCmd extends AbstractCommand<Void> implem
|
||||
throw new WorkflowEngineException(PROCESS_INSTANCE_CANT_CANCEL);
|
||||
}
|
||||
|
||||
|
||||
List<Task> tasks = processEngineConfiguration.getTaskService()
|
||||
.createTaskQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.active()
|
||||
.list();
|
||||
String taskDefKey = "";
|
||||
if (!CollectionUtils.isEmpty(tasks)) {
|
||||
taskDefKey = tasks.get(0).getTaskDefinitionKey();
|
||||
}
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
variables.put(INTERNAL_END_TENANT_ID, tenantId);
|
||||
variables.put(INTERNAL_END_USER_ID, initiator.buildAssigneeId());
|
||||
variables.put(INTERNAL_END_USER_NAME, initiator.getAssignerName());
|
||||
variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_CANCEL);
|
||||
variables.put(INTERNAL_PROCESS_DELETE_REASON, reason);
|
||||
variables.put(CANCEL_PROCESS_NODE_DEF_KEY_NAME, taskDefKey);
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
runtimeService.setVariables(instance.getId(), variables);
|
||||
|
||||
CommandContextUtil.getAgenda(commandContext).planOperation(new DeleteProcessInstanceOperation(commandContext,
|
||||
processInstanceId, extAxHiTaskInstService, CANCELLED));
|
||||
processInstanceId, extAxHiTaskInstService, CANCELLED));
|
||||
|
||||
// 添加自定义的节点,用于展示最后的操作
|
||||
TaskEntity task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId,
|
||||
nodeName, NODE_CANCEL.getType(), reason, initiator, CANCELLED.getStatus(), new AddComment(CANCELLED.getDesc()));
|
||||
nodeName, NODE_CANCEL.getType(), reason, initiator, CANCELLED.getStatus(), new AddComment(CANCELLED.getDesc()));
|
||||
|
||||
batchAddAttachment(commandContext, processInstanceId, task, attachmentList, initiator);
|
||||
|
||||
|
||||
@ -1,21 +1,15 @@
|
||||
package cn.axzo.workflow.core.engine.event;
|
||||
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.request.BpmnApproveConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnNoticeConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.axzo.workflow.common.code.OtherRespCode.MESSAGE_PUSH_EVENT_BUILD_ERROR;
|
||||
import static cn.axzo.workflow.common.code.OtherRespCode.MES_PUSH_OBJECT_BUILD_ERROR;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.CARBON_COPY;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.CARBON_COPY_COMPLETE;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.NOTICE;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.PENDING_COMPLETE;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.PENDING_PUSH;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.PENDING_ROLLBACK;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.SMS;
|
||||
import static cn.axzo.workflow.core.engine.event.MessagePushEventType.*;
|
||||
|
||||
/**
|
||||
* 推送事件对象构造器
|
||||
@ -36,7 +30,7 @@ public class MessagePushEventBuilder {
|
||||
case PENDING_COMPLETE:
|
||||
return createPendingCompleteEvent(assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId, taskId);
|
||||
case CARBON_COPY:
|
||||
return createCarbonCopyEvent(assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId);
|
||||
return createCarbonCopyEvent(assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId, taskId);
|
||||
case CARBON_COPY_COMPLETE:
|
||||
return createCarbonCopyCompleteEvent(assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId);
|
||||
case SMS:
|
||||
@ -84,10 +78,10 @@ public class MessagePushEventBuilder {
|
||||
public static MessagePushEventImpl createCarbonCopyEvent(List<BpmnTaskDelegateAssigner> assigners,
|
||||
BpmnNoticeConf noticeConf, String processInstanceId,
|
||||
String processDefinitionKey,
|
||||
String tenantId) {
|
||||
MessagePushEventImpl newEvent = new MessagePushEventImpl(CARBON_COPY, assigners, noticeConf,
|
||||
processInstanceId, processDefinitionKey, tenantId, null);
|
||||
return newEvent;
|
||||
String tenantId,
|
||||
String taskId) {
|
||||
return new MessagePushEventImpl(CARBON_COPY, assigners, noticeConf,
|
||||
processInstanceId, processDefinitionKey, tenantId, taskId);
|
||||
}
|
||||
|
||||
public static MessagePushEventImpl createCarbonCopyCompleteEvent(List<BpmnTaskDelegateAssigner> assigners,
|
||||
|
||||
@ -30,6 +30,8 @@ import java.util.List;
|
||||
@ToString(callSuper = true)
|
||||
public class ExtAxProcessLog extends BaseEntity<ExtAxProcessLog> {
|
||||
|
||||
private static final long serialVersionUID = 461756492937079852L;
|
||||
|
||||
/**
|
||||
* 流程实例 ID
|
||||
*/
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.workflow.core.repository.mapper;
|
||||
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
@Mapper
|
||||
@ -10,4 +11,7 @@ public interface ExtAxProcessLogMapper extends BaseMapperX<ExtAxProcessLog> {
|
||||
@Update("UPDATE ext_ax_process_log SET is_delete = 0, start_time = NOW() WHERE process_instance_id = #{processInstanceId} and task_id = #{taskId}")
|
||||
void restore(String processInstanceId, String taskId);
|
||||
|
||||
|
||||
@Select("select * from ext_ax_process_log WHERE process_instance_id = #{processInstanceId} and task_id = #{taskId}")
|
||||
ExtAxProcessLog findByProcessIdAndTaskIdWithDeleted(String processInstanceId, String taskId);
|
||||
}
|
||||
|
||||
@ -1,24 +1,11 @@
|
||||
package cn.axzo.workflow.core.service;
|
||||
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.HistoricProcessInstanceSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.*;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO;
|
||||
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.HistoricProcessInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.*;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
@ -165,4 +152,12 @@ public interface BpmnProcessInstanceService {
|
||||
* @return
|
||||
*/
|
||||
BpmnProcessInstanceLogVO getProcessInstanceLog(BpmnProcessInstanceLogQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 根据流程实例id,任务id,查询任务状态,按钮配置
|
||||
*
|
||||
* @param taskButtonsSearchDTO 请求参数
|
||||
* @return 任务按钮,状态信息
|
||||
*/
|
||||
BpmnTaskButtonVo findTaskButtons(BpmnTaskButtonSearchDTO taskButtonsSearchDTO);
|
||||
}
|
||||
|
||||
@ -1,24 +1,9 @@
|
||||
package cn.axzo.workflow.core.service;
|
||||
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnOptionalNodeDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCompleteDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnRobotTaskCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAttachmentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditWithFormDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskBackAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCommentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskCountersignDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.*;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.*;
|
||||
import org.flowable.form.api.FormInfo;
|
||||
|
||||
import java.util.List;
|
||||
@ -151,4 +136,5 @@ public interface BpmnProcessTaskService {
|
||||
String findTaskIdByInstanceIdAndPersonId(String processInstanceId, String personId);
|
||||
|
||||
Map<String, String> findTaskIdByInstanceIdsAndPersonId(List<String> processInstanceIds, String personId);
|
||||
|
||||
}
|
||||
|
||||
@ -55,8 +55,11 @@ public interface ExtAxProcessLogService {
|
||||
|
||||
List<ExtAxProcessLog> genericQuery(ExtAxProcessLog query);
|
||||
|
||||
ExtAxProcessLog findByProcessIdAndTaskIdWithDeleted(String processId, String taskId);
|
||||
|
||||
/**
|
||||
* 机器人节点会删除日志,这里仅仅为了恢复日志都删除标识,并更新时间。
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @param taskId
|
||||
*/
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
package cn.axzo.workflow.core.service.impl;
|
||||
|
||||
import cn.axzo.framework.domain.ServiceException;
|
||||
import cn.axzo.workflow.common.constant.BpmnConstants;
|
||||
import cn.axzo.workflow.common.enums.ApprovalMethodEnum;
|
||||
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
|
||||
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.enums.BpmnProcessTaskResultEnum;
|
||||
import cn.axzo.workflow.common.enums.ButtonVisibleScopeEnum;
|
||||
import cn.axzo.workflow.common.enums.WorkspaceType;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
||||
@ -23,44 +26,30 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyP
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.HistoricProcessInstanceSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.ExtHiTaskSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.category.CategorySearchDTO;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationItemResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinitionVO;
|
||||
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.HistoricProcessInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.*;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceLogVO;
|
||||
import cn.axzo.workflow.common.model.response.category.CategoryItemVO;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomAbortProcessInstanceAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomAbortProcessInstanceCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCancelProcessInstanceAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCancelProcessInstanceCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCarbonCopyUserSelectorCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomForecastUserTaskAssigneeCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.*;
|
||||
import cn.axzo.workflow.core.engine.listener.EngineExecutionStartListener;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxBpmnFormRelation;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||
import cn.axzo.workflow.core.service.CategoryService;
|
||||
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
|
||||
import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
|
||||
import cn.axzo.workflow.core.service.ExtAxProcessLogService;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricProcessInstanceConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricTaskInstanceConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnProcessInstanceAdminPageItemConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnProcessInstanceConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnProcessInstancePageItemConverter;
|
||||
import cn.axzo.workflow.core.service.*;
|
||||
import cn.axzo.workflow.core.service.converter.*;
|
||||
import cn.axzo.workflow.core.service.support.FlowNodeForecastService;
|
||||
import cn.axzo.workflow.core.service.support.ProcessGraphicService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
@ -125,55 +114,17 @@ import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.client.config.WorkflowRequestInterceptor.HEADER_SERVER_NAME;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.RUNNING_INSTANCE_ONLY_FORECAST;
|
||||
import static cn.axzo.workflow.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_IS_INVALID;
|
||||
import static cn.axzo.workflow.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_IS_SUSPENDED;
|
||||
import static cn.axzo.workflow.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_KEY_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.AND_SIGN_EXPRESSION;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.BPM_MODEL_CATEGORY;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_BUTTON_TYPE_CARBON_COPY;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_BUTTON_TYPE_CURRENT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_BUTTON_TYPE_HISTORY;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CONFIG_BUTTON_TYPE_INITIATOR;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CREATE_INSTANCE_PARAMS;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.FLOW_SERVER_VERSION_121;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_AGENT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_WORKSPACE_TYPE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.OLD_INTERNAL_INITIATOR;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.PENDING_TEMPLATE_VARIABLE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.PROCESS_OWNERSHIP_APPLICATION;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.WORKFLOW_ENGINE_VERSION;
|
||||
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.autoPassed;
|
||||
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.autoRejection;
|
||||
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.human;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AND;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.EXCEPTIONAL;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.GENERAL;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_BUSINESS;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CARBON_COPY;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_COMMENT;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_ROBOT;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_TASK;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.DELETED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.REJECTED;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.*;
|
||||
import static cn.axzo.workflow.common.code.BpmnProcessDefinitionRespCode.*;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.*;
|
||||
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.*;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.*;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.*;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.*;
|
||||
import static cn.axzo.workflow.common.enums.WorkspaceType.GOVERNMENT;
|
||||
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.countSql;
|
||||
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.sqlConnectors;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApprovalMethod;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverEmptyHandleType;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getButtonConfig;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getCarbonCopyConfigs;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getNodeType;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getProcessApproveConf;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.*;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@ -879,7 +830,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
instance = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId).singleResult();
|
||||
if (Objects.isNull(instance)) {
|
||||
if (checkAliveThrowException) {
|
||||
if (Boolean.TRUE.equals(checkAliveThrowException)) {
|
||||
throw new WorkflowEngineException(RUNNING_INSTANCE_ONLY_FORECAST);
|
||||
} else {
|
||||
return Collections.emptyList();
|
||||
@ -1004,7 +955,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
|
||||
@Override
|
||||
public Boolean checkInstanceApprover(BpmnProcessInstanceCheckApproverDTO dto) {
|
||||
if (dto.getOnlyPersonId()) {
|
||||
if (Boolean.TRUE.equals(dto.getOnlyPersonId())) {
|
||||
dto.getApprover().setOuId(null);
|
||||
}
|
||||
List<Task> list = taskService.createTaskQuery()
|
||||
@ -1069,16 +1020,164 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
.build();
|
||||
|
||||
|
||||
categoryService.get(BPM_MODEL_CATEGORY, historicProcessInstance.getProcessDefinitionKey()).ifPresent(category -> {
|
||||
logVO.setWorkspaceType(WorkspaceType.getType(Integer.valueOf(category.getWorkspaceTypeCode())));
|
||||
logVO.setCategory(category.getValue());
|
||||
});
|
||||
categoryService.get(BPM_MODEL_CATEGORY, historicProcessInstance.getProcessDefinitionKey())
|
||||
.ifPresent(category -> {
|
||||
logVO.setWorkspaceType(WorkspaceType.getType(Integer.valueOf(category.getWorkspaceTypeCode())));
|
||||
logVO.setCategory(category.getValue());
|
||||
});
|
||||
|
||||
// 根据传入的访问人计算有权限的按钮
|
||||
calcAuthorizedButtons(logVO, dto.getVisitor());
|
||||
return logVO;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BpmnTaskButtonVo findTaskButtons(BpmnTaskButtonSearchDTO taskButtonsSearchDTO) {
|
||||
BpmnTaskButtonVo bpmnTaskButtonVo = new BpmnTaskButtonVo();
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(taskButtonsSearchDTO.getProcessInstanceId())
|
||||
.includeProcessVariables()
|
||||
.singleResult();
|
||||
if (Objects.isNull(historicProcessInstance)) {
|
||||
throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, taskButtonsSearchDTO.getProcessInstanceId());
|
||||
}
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
|
||||
ExtAxHiTaskInst extAxHiTaskInst = extAxHiTaskInstService.getByTaskId(taskButtonsSearchDTO.getTaskId(), taskButtonsSearchDTO.getProcessInstanceId());
|
||||
if (extAxHiTaskInst == null) {
|
||||
log.warn("extAxHiTaskInst is null,request param:{}", JSON.toJSONString(taskButtonsSearchDTO));
|
||||
throw new ServiceException("can find extAxHiTaskInst");
|
||||
}
|
||||
if (Objects.equals(extAxHiTaskInst.getStatus(), DELETED.getStatus())) {
|
||||
ExtHiTaskSearchDTO extHiTaskSearchDTO = ExtHiTaskSearchDTO.builder()
|
||||
.processInstanceId(taskButtonsSearchDTO.getProcessInstanceId())
|
||||
.taskDefinitionKey(extAxHiTaskInst.getTaskDefinitionKey())
|
||||
.assignee(extAxHiTaskInst.getAssignee())
|
||||
.excludeIds(Collections.singletonList(extAxHiTaskInst.getId()))
|
||||
.build();
|
||||
List<ExtAxHiTaskInst> extAxHiTaskInsts = extAxHiTaskInstService.queryList(extHiTaskSearchDTO);
|
||||
log.info("extAxHiTaskInst status is DELETED, find another task list in same assignee and task def key,result is:{}", JSON.toJSONString(extAxHiTaskInsts));
|
||||
if (!CollectionUtils.isEmpty(extAxHiTaskInsts)) {
|
||||
extAxHiTaskInst = extAxHiTaskInsts.get(0);
|
||||
}
|
||||
}
|
||||
//判断节点类型
|
||||
FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(extAxHiTaskInst.getTaskDefinitionKey());
|
||||
BpmnFlowNodeType nodeType = getNodeType(flowElement).orElse(null);
|
||||
//设置任务状态
|
||||
bpmnTaskButtonVo.setExecutorTaskResult(getTaskStatus(nodeType, extAxHiTaskInst));
|
||||
String buttonConfigName = null;
|
||||
BpmnButtonConf buttonConf = getButtonConfig(bpmnModel.getMainProcess(), extAxHiTaskInst.getTaskDefinitionKey()).orElse(null);
|
||||
BpmnProcessInstanceLogVO logVO = BpmnProcessInstanceLogVO.builder()
|
||||
.id(historicProcessInstance.getId())
|
||||
.defaultButtonConf(getButtonConfig(bpmnModel.getMainProcess()).orElse(new BpmnButtonConf()))
|
||||
.calculatingButtonConf(buttonConf)
|
||||
.build();
|
||||
List<BpmnButtonMetaInfo> carbonCopyButtons = chooseButtons(logVO, CONFIG_BUTTON_TYPE_CARBON_COPY);
|
||||
List<BpmnButtonMetaInfo> initiatorButtons;
|
||||
List<BpmnButtonMetaInfo> executorButtons;
|
||||
if (Objects.equals(historicProcessInstance.getBusinessStatus(), PROCESSING.getStatus())) {
|
||||
//发起人按钮
|
||||
initiatorButtons = chooseButtons(logVO, CONFIG_BUTTON_TYPE_INITIATOR);
|
||||
if (Objects.equals(nodeType, BpmnFlowNodeType.NODE_CARBON_COPY)) {
|
||||
buttonConfigName = CONFIG_BUTTON_TYPE_CARBON_COPY;
|
||||
} else if (Objects.equals(nodeType, BpmnFlowNodeType.NODE_TASK) || //审批节点加业务节点指定审批人
|
||||
(Objects.equals(nodeType, BpmnFlowNodeType.NODE_BUSINESS) && flowElement.getClass().isAssignableFrom(UserTask.class))) {
|
||||
// 待审批的节点
|
||||
if ((Objects.equals(PROCESSING.getStatus(), extAxHiTaskInst.getStatus()))) {
|
||||
buttonConfigName = CONFIG_BUTTON_TYPE_CURRENT;
|
||||
}
|
||||
//已审批节点
|
||||
if (!Objects.equals(PROCESSING.getStatus(), extAxHiTaskInst.getStatus())) {
|
||||
buttonConfigName = CONFIG_BUTTON_TYPE_HISTORY;
|
||||
}
|
||||
} else if (Objects.equals(nodeType, BpmnFlowNodeType.NODE_STARTER)) {
|
||||
buttonConfigName = CONFIG_BUTTON_TYPE_INITIATOR;
|
||||
}
|
||||
if (!StringUtils.hasText(buttonConfigName)) {
|
||||
log.warn("can't find button config name ,req:{},extAxHiTaskInst:{}", JSON.toJSONString(taskButtonsSearchDTO), JSON.toJSONString(extAxHiTaskInst));
|
||||
throw new ServiceException("can't find button config name");
|
||||
}
|
||||
executorButtons = chooseButtons(logVO, buttonConfigName);
|
||||
} else {
|
||||
//需要判断流程是否撤回,撤回需要设置发起人状态
|
||||
if (Objects.equals(historicProcessInstance.getBusinessStatus(), CANCELLED.getStatus())) {
|
||||
Object object = historicProcessInstance.getProcessVariables().get(CANCEL_PROCESS_NODE_DEF_KEY_NAME);
|
||||
if (object instanceof String) {
|
||||
String cancelNodeKey = (String) object;
|
||||
if (StringUtils.hasText(cancelNodeKey) && cancelNodeKey.equals(extAxHiTaskInst.getTaskDefinitionKey())) {
|
||||
bpmnTaskButtonVo.setInitiatorTaskResult(BpmnProcessTaskResultEnum.CANCELED);
|
||||
}
|
||||
}
|
||||
}
|
||||
initiatorButtons = new ArrayList<>(carbonCopyButtons);
|
||||
executorButtons = new ArrayList<>(carbonCopyButtons);
|
||||
}
|
||||
|
||||
bpmnTaskButtonVo.setCustomHiddenButtons(getHiddenCustomButtons(logVO, executorButtons));
|
||||
//设置allConfigButtons
|
||||
List<BpmnButtonMetaInfo> allConfigButtons = new ArrayList<>(executorButtons);
|
||||
bpmnTaskButtonVo.setAllConfigButtons(allConfigButtons);
|
||||
Map<BpmnButtonMetaInfo, Set<ButtonVisibleScopeEnum>> metaInfoListMap = new HashMap<>();
|
||||
if (!CollectionUtils.isEmpty(executorButtons)) {
|
||||
for (BpmnButtonMetaInfo metaInfo : filterValuableButtons(executorButtons)) {
|
||||
metaInfoListMap.computeIfAbsent(metaInfo, k -> new HashSet<>()).add(ButtonVisibleScopeEnum.EXECUTOR);
|
||||
}
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(initiatorButtons)) {
|
||||
for (BpmnButtonMetaInfo metaInfo : filterValuableButtons(initiatorButtons)) {
|
||||
metaInfoListMap.computeIfAbsent(metaInfo, k -> new HashSet<>()).add(ButtonVisibleScopeEnum.INITIATOR);
|
||||
}
|
||||
}
|
||||
|
||||
List<BpmnTaskButtonVo.BpmnButtonMetaInfoWithVisibleScope> scopeButtons = metaInfoListMap.entrySet().stream()
|
||||
.map(m -> {
|
||||
BpmnTaskButtonVo.BpmnButtonMetaInfoWithVisibleScope scopeButton = BeanUtil.copyProperties(m.getKey(), BpmnTaskButtonVo.BpmnButtonMetaInfoWithVisibleScope.class);
|
||||
scopeButton.setVisibleScopes(new ArrayList<>(m.getValue()));
|
||||
return scopeButton;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
bpmnTaskButtonVo.setButtons(scopeButtons);
|
||||
return bpmnTaskButtonVo;
|
||||
}
|
||||
|
||||
private BpmnProcessTaskResultEnum getTaskStatus(BpmnFlowNodeType nodeType, ExtAxHiTaskInst axHiTaskInst) {
|
||||
String logResultStatus = axHiTaskInst.getStatus();
|
||||
if (!StringUtils.hasText(logResultStatus)) {
|
||||
log.warn("log result status is blank!");
|
||||
return null;
|
||||
}
|
||||
BpmnProcessTaskResultEnum taskResult = null;
|
||||
BpmnProcessInstanceResultEnum instanceResultEnum = BpmnProcessInstanceResultEnum.valueOf(logResultStatus);
|
||||
switch (instanceResultEnum) {
|
||||
case CANCELLED:
|
||||
taskResult = BpmnProcessTaskResultEnum.CANCELED;
|
||||
break;
|
||||
case APPROVED:
|
||||
if (Objects.equals(nodeType, BpmnFlowNodeType.NODE_CARBON_COPY)) {
|
||||
taskResult = BpmnProcessTaskResultEnum.NONE;
|
||||
} else {
|
||||
taskResult = BpmnProcessTaskResultEnum.APPROVED;
|
||||
}
|
||||
break;
|
||||
case REJECTED:
|
||||
taskResult = BpmnProcessTaskResultEnum.REJECTED;
|
||||
break;
|
||||
case TRANSFER:
|
||||
taskResult = BpmnProcessTaskResultEnum.TRANSFERRED;
|
||||
break;
|
||||
case PROCESSING:
|
||||
taskResult = BpmnProcessTaskResultEnum.PENDING;
|
||||
break;
|
||||
case DELETED:
|
||||
taskResult = BpmnProcessTaskResultEnum.DELETED;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return taskResult;
|
||||
}
|
||||
|
||||
private void calcAuthorizedButtons(BpmnProcessInstanceLogVO logVO, BpmnTaskDelegateAssigner visitor) {
|
||||
List<BpmnButtonMetaInfo> authorizedButtons = new ArrayList<>();
|
||||
if (Objects.nonNull(logVO.getDefaultButtonConf())
|
||||
@ -1148,15 +1247,22 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
|
||||
logVO.setCurrentUserButtons(authorizedButtons);
|
||||
// 有权限访问的自定义按钮
|
||||
List<String> customButtonKeys = authorizedButtons.stream()
|
||||
.filter(i -> Objects.equals(i.getType(), "CUSTOM"))
|
||||
logVO.setCustomHiddenButtons(getHiddenCustomButtons(logVO, authorizedButtons));
|
||||
}
|
||||
|
||||
private List<BpmnButtonMetaInfo> getHiddenCustomButtons(BpmnProcessInstanceLogVO logVO, List<BpmnButtonMetaInfo> bpmnButtonMetaInfos) {
|
||||
// 有权限访问的自定义按钮
|
||||
List<String> customButtonKeys = bpmnButtonMetaInfos.stream()
|
||||
.filter(i -> Objects.equals(i.getType(), BpmnButtonMetaInfo.BUTTON_TYPE_CUSTOM))
|
||||
.filter(i -> Boolean.FALSE.equals(i.getDisabled()) && Boolean.TRUE.equals(i.getChecked()))
|
||||
.map(BpmnButtonMetaInfo::getBtnKey)
|
||||
.distinct().collect(Collectors.toList());
|
||||
List<BpmnButtonMetaInfo> customButtons = logVO.getDefaultButtonConf().getInitiator().stream()
|
||||
.filter(i -> Objects.equals(i.getType(), "CUSTOM"))
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
return logVO.getDefaultButtonConf().getInitiator()
|
||||
.stream()
|
||||
.filter(i -> Objects.equals(i.getType(), BpmnButtonMetaInfo.BUTTON_TYPE_CUSTOM))
|
||||
.filter(i -> !customButtonKeys.contains(i.getBtnKey()))
|
||||
.collect(Collectors.toList());
|
||||
logVO.setCustomHiddenButtons(customButtons);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1197,6 +1303,23 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
return mergeButtons;
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤Disabled=false && Checked=true
|
||||
*
|
||||
* @param bpmnButtonMetaInfos 按钮列表
|
||||
* @return 有效的按钮列表
|
||||
*/
|
||||
private List<BpmnButtonMetaInfo> filterValuableButtons(List<BpmnButtonMetaInfo> bpmnButtonMetaInfos) {
|
||||
if (CollectionUtils.isEmpty(bpmnButtonMetaInfos)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return bpmnButtonMetaInfos.stream()
|
||||
.filter(i -> !i.getDisabled())
|
||||
.filter(BpmnButtonMetaInfo::getChecked)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static String getLe130Assignee(BpmnTaskDelegateAssigner visitor) {
|
||||
return visitor.getTenantId() + "|" + visitor.getAssignee() + "|" + visitor.getAssigneeType();
|
||||
}
|
||||
@ -1360,7 +1483,6 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
.build());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public List<AttachmentDTO> getAttachmentByType(Map<String, List<Attachment>> attachmentByTaskMap, String taskId, AttachmentTypeEnum type) {
|
||||
|
||||
@ -5,60 +5,29 @@ import cn.axzo.workflow.common.enums.BpmnCountersignTypeEnum;
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
|
||||
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.request.BpmnApproveConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnNoticeConf;
|
||||
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.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.ExtHiTaskSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.*;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationItemResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.*;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskWithFormAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskWithFormCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomBackTaskAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomBackTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCommentTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCompleteDummyTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCountersignUserTaskAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCountersignUserTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCreateDummyTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomRejectionTaskAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomRejectionTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomTransferUserTaskAsyncCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomTransferUserTaskCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.*;
|
||||
import cn.axzo.workflow.core.engine.event.MessagePushEventBuilder;
|
||||
import cn.axzo.workflow.core.engine.event.MessagePushEventImpl;
|
||||
import cn.axzo.workflow.core.engine.event.MessagePushEventType;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst;
|
||||
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessTaskService;
|
||||
import cn.axzo.workflow.core.service.ExtAxBpmnFormRelationService;
|
||||
import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
|
||||
import cn.axzo.workflow.core.service.ExtAxProcessLogService;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricAttachmentConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricTaskInstanceConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnTaskConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnTaskDonePageItemConverter;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnTaskTodoPageItemConverter;
|
||||
import cn.axzo.workflow.core.service.converter.*;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@ -69,11 +38,7 @@ import org.flowable.bpmn.model.FlowElement;
|
||||
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
|
||||
import org.flowable.common.engine.impl.identity.Authentication;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
|
||||
import org.flowable.engine.HistoryService;
|
||||
import org.flowable.engine.ManagementService;
|
||||
import org.flowable.engine.RepositoryService;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.*;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.history.HistoricProcessInstanceQuery;
|
||||
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
||||
@ -82,9 +47,7 @@ import org.flowable.engine.impl.util.ProcessDefinitionUtil;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.engine.task.Attachment;
|
||||
import org.flowable.engine.task.Comment;
|
||||
import org.flowable.form.api.FormDefinition;
|
||||
import org.flowable.form.api.FormInfo;
|
||||
import org.flowable.form.api.FormRepositoryService;
|
||||
import org.flowable.spring.SpringProcessEngineConfiguration;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.task.api.TaskInfo;
|
||||
@ -102,52 +65,22 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_TASK_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.BACK_NODE_CANNOT_REACHABLE;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.FIND_TASK_BY_PERSON_ID_ERROR;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.REACHED_BACKED_MAXIMUM_NUM;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_REMIND_ERROR_NOT_EXISTS;
|
||||
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;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.MAX_BACKED_OPERATE_COUNT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_ASSIGNEE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.WORKFLOW_ENGINE_VERSION;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_BUSINESS;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CARBON_COPY;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_EMPTY;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_TASK;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.BACKED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.DELETED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.REJECTED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.valueOfStatus;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.*;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.*;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.*;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.*;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.*;
|
||||
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.countSql;
|
||||
import static cn.axzo.workflow.common.util.BpmnNativeQueryUtil.sqlConnectors;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnCollectionUtils.convertSet;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getButtonConfig;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getProcessApproveConf;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@ -186,6 +119,8 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
private BpmnProcessDefinitionService bpmnProcessModelService;
|
||||
@Resource
|
||||
private ExtAxProcessLogService extAxProcessLogService;
|
||||
@Resource
|
||||
private ExtAxProcessLogService processLogService;
|
||||
|
||||
@Override
|
||||
public BpmPageResult<BpmnTaskTodoPageItemVO> getTodoTaskPage(BpmnTaskPageSearchDTO dto) {
|
||||
@ -350,7 +285,7 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
public void approveTaskWithForm(BpmnTaskAuditWithFormDTO dto) {
|
||||
// 表单级别暂时只允许同步
|
||||
CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
|
||||
if(Boolean.TRUE.equals(dto.getAsync())) {
|
||||
if (Boolean.TRUE.equals(dto.getAsync())) {
|
||||
commandExecutor.execute(new CustomApproveTaskWithFormAsyncCmd(dto));
|
||||
} else {
|
||||
commandExecutor.execute(new CustomApproveTaskWithFormCmd(dto));
|
||||
@ -802,21 +737,19 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + dto.getTaskDefinitionKey());
|
||||
|
||||
// 过滤出未审批的任何,用选择的方式去发送消息
|
||||
dto.getRemindTypes().forEach(type -> {
|
||||
list.forEach(task -> {
|
||||
assigners.stream().filter(i -> Objects.equals(task.getAssignee(), i.buildAssigneeId())).findAny().ifPresent(assigner -> {
|
||||
MessagePushEventImpl event = MessagePushEventBuilder.createEvent(MessagePushEventType.valueOf(type),
|
||||
Lists.newArrayList(assigner), noticeConfig.orElse(null),
|
||||
processInstance.getProcessInstanceId(),
|
||||
processInstance.getProcessDefinitionKey(),
|
||||
processInstance.getTenantId(), task.getId());
|
||||
event.setProcessInstanceId(processInstance.getProcessInstanceId());
|
||||
event.setTenantId(processInstance.getTenantId());
|
||||
event.setTaskId(task.getId());
|
||||
eventDispatcher.dispatchEvent(event, processEngineConfiguration.getEngineCfgKey());
|
||||
});
|
||||
dto.getRemindTypes().forEach(type -> list.forEach(task -> {
|
||||
assigners.stream().filter(i -> Objects.equals(task.getAssignee(), i.buildAssigneeId())).findAny().ifPresent(assigner -> {
|
||||
MessagePushEventImpl event = MessagePushEventBuilder.createEvent(MessagePushEventType.valueOf(type),
|
||||
Lists.newArrayList(assigner), noticeConfig.orElse(null),
|
||||
processInstance.getProcessInstanceId(),
|
||||
processInstance.getProcessDefinitionKey(),
|
||||
processInstance.getTenantId(), task.getId());
|
||||
event.setProcessInstanceId(processInstance.getProcessInstanceId());
|
||||
event.setTenantId(processInstance.getTenantId());
|
||||
event.setTaskId(task.getId());
|
||||
eventDispatcher.dispatchEvent(event, processEngineConfiguration.getEngineCfgKey());
|
||||
});
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -47,7 +48,8 @@ public class ExtAxHiTaskInstServiceImpl implements ExtAxHiTaskInstService {
|
||||
.eq(StringUtils.hasLength(dto.getTaskId()), "task_id", dto.getTaskId())
|
||||
.eq(Objects.nonNull(dto.getStatus()), "status", Objects.isNull(dto.getStatus()) ? "" :
|
||||
dto.getStatus().getStatus())
|
||||
.eq(StringUtils.hasLength(dto.getAssignee()), "assignee", dto.getAssignee());
|
||||
.eq(StringUtils.hasLength(dto.getAssignee()), "assignee", dto.getAssignee())
|
||||
.notIn(!CollectionUtils.isEmpty(dto.getExcludeIds()), "id", dto.getExcludeIds());
|
||||
return extAxHiTaskInstMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
@ -16,10 +16,7 @@ import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.HIDDEN_ASSIGNEE_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_ASSIGNEE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.ROBOT_ASSIGNEE_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.*;
|
||||
|
||||
/**
|
||||
* Api Log 表操服务实现
|
||||
@ -80,6 +77,11 @@ public class ExtAxProcessLogServiceImpl implements ExtAxProcessLogService {
|
||||
return extAxProcessLogMapper.selectList(buildQueryWrapper(query));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExtAxProcessLog findByProcessIdAndTaskIdWithDeleted(String processId, String taskId) {
|
||||
return extAxProcessLogMapper.findByProcessIdAndTaskIdWithDeleted(processId,taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore(String processInstanceId, String taskId) {
|
||||
batchRestore(Lists.newArrayList(new SimpleTaskDTO(processInstanceId, taskId)));
|
||||
|
||||
@ -37,6 +37,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class CreateAttachmentCmd extends AbstractCommand<Attachment> implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -2901013696126749407L;
|
||||
protected String attachmentType;
|
||||
protected String taskId;
|
||||
protected String processInstanceId;
|
||||
|
||||
@ -19,13 +19,11 @@ import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.bpmn.model.FlowElement;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -70,7 +68,7 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne
|
||||
protected List<BpmnTaskDelegateAssigner> invokeService(FlowElement flowElement, DelegateExecution execution,
|
||||
ApproverScopeDTO scopeDto) {
|
||||
|
||||
if(Boolean.TRUE.equals(supportRefreshProperties.getUseNewToAdminApi())) {
|
||||
if (Boolean.TRUE.equals(supportRefreshProperties.getUseNewToAdminApi())) {
|
||||
return invokeNewQuery(flowElement, execution, scopeDto);
|
||||
} else {
|
||||
return invokeOldQuery(flowElement, execution, scopeDto);
|
||||
@ -90,7 +88,10 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne
|
||||
.map(w -> BeanUtil.copyProperties(w, ListFlowTaskAssignerReq.OrgScope.class))
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
ListFlowTaskAssignerReq req = builder.workspaceAdmin(false).build();
|
||||
ListFlowTaskAssignerReq req = builder
|
||||
.procInstId(execution.getProcessInstanceId())
|
||||
.workspaceAdmin(false)
|
||||
.build();
|
||||
BpmnMetaParserHelper.getApproverScope((UserTask) flowElement)
|
||||
.ifPresent(i -> {
|
||||
if (Objects.equals(i, ApproverScopeEnum.projectWorkspace)) {
|
||||
@ -133,13 +134,14 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne
|
||||
}
|
||||
ListFlowTaskAssignerReq req = builder.workspaceAdmin(false).build();
|
||||
req.setProcInstId(execution.getProcessInstanceId());
|
||||
if(Objects.equals(ApproverScopeEnum.entWorkspace, approverScope.get()) && Objects.equals(ApproverSpecifyEnum.fixedPerson,optSpecify.get())) {
|
||||
req.setCooperateTypes(Sets.newHashSet(1,2,3,4,5,6,7,8,9,11,30));
|
||||
if (approverScope.isPresent() && Objects.equals(ApproverScopeEnum.entWorkspace, approverScope.get()) &&
|
||||
optSpecify.isPresent() && Objects.equals(ApproverSpecifyEnum.fixedPerson, optSpecify.get())) {
|
||||
req.setCooperateTypes(Sets.newHashSet(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 30));
|
||||
} else {
|
||||
req.setCooperateTypes(getCooperationTypes(flowElement));
|
||||
}
|
||||
// 发起人主管找其超管时,需要将发起人的数据包装进 orgScope
|
||||
if (Objects.equals(ApproverSpecifyEnum.initiatorLeader, optSpecify.get())) {
|
||||
if (optSpecify.isPresent() && Objects.equals(ApproverSpecifyEnum.initiatorLeader, optSpecify.get())) {
|
||||
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariable(INTERNAL_INITIATOR, String.class));
|
||||
Integer workspaceType = execution.getVariable(INTERNAL_PROCESS_WORKSPACE_TYPE, Integer.class);
|
||||
req.setOrgScopes(Lists.newArrayList(new ListFlowTaskAssignerReq.OrgScope(workspaceType, Long.parseLong(initiator.getTenantId()), Long.parseLong(initiator.getOuId()), null)));
|
||||
|
||||
@ -251,7 +251,8 @@ public class RocketMqMessagePushEventListener extends AbstractBpmnEventListener<
|
||||
JSONUtil.toJsonStr(event.getAssigners()), event.getProcessInstanceId());
|
||||
if (Objects.nonNull(event.getNoticeConfig().getCarbonCopy())) {
|
||||
//按人员拆分为多个批次发送消息
|
||||
getMessagePushDtoSlice(event, event.getNoticeConfig().getCarbonCopy().getCarbonCopyMessageId(), PROCESS_CARBON_COPY).forEach(dto -> sendMessageQueue(dto, PROCESS_CARBON_COPY));
|
||||
getMessagePushDtoSlice(event, event.getNoticeConfig().getCarbonCopy().getCarbonCopyMessageId(), PROCESS_CARBON_COPY)
|
||||
.forEach(dto -> sendMessageQueue(dto, PROCESS_CARBON_COPY));
|
||||
}
|
||||
log.info("RocketMqMessagePushEventListener#onCarbonCopy...end, cc' templateId: {}, receivePerson: {}, processInstanceId: {}",
|
||||
event.getNoticeConfig().getCarbonCopy().getCarbonCopyMessageId(),
|
||||
|
||||
@ -4,28 +4,13 @@ import cn.axzo.oss.http.api.ServerFileServiceApi;
|
||||
import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
|
||||
import cn.axzo.oss.http.model.ApiSignUrlDownloadResponse;
|
||||
import cn.axzo.workflow.client.feign.bpmn.ProcessInstanceApi;
|
||||
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAdminPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.HistoricProcessInstanceSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.*;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskButtonSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
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.HistoricProcessInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.*;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceLogVO;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
@ -43,20 +28,12 @@ import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
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.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@ -282,7 +259,7 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
public CommonResponse<Map<String, Object>> getProcessVariables(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId,
|
||||
@Nullable String tenantId) {
|
||||
HistoricProcessInstance processInstance = bpmnProcessInstanceService.getProcessInstance(processInstanceId,
|
||||
tenantId, true);
|
||||
tenantId, true);
|
||||
return success(processInstance.getProcessVariables());
|
||||
}
|
||||
|
||||
@ -339,6 +316,20 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
return success(log);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据任务id查询任务状态,按钮详情
|
||||
*
|
||||
* @param taskButtonsSearchDTO 请求参数
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Operation(summary = "根据流程实例id,任务id查询任务状态,按钮详情")
|
||||
@PostMapping("/task/buttons/find")
|
||||
public CommonResponse<BpmnTaskButtonVo> findProcessSingleTaskButtons(@Validated @RequestBody BpmnTaskButtonSearchDTO taskButtonsSearchDTO) {
|
||||
return success(bpmnProcessInstanceService.findTaskButtons(taskButtonsSearchDTO));
|
||||
}
|
||||
|
||||
private void resetPersonInfo(BpmnProcessInstanceLogVO log) {
|
||||
List<BpmnTaskDelegateAssigner> users = log.getTaskDetails().stream().map(BpmnTaskInstanceLogVO::getAssigneeSnapshot).filter(Objects::nonNull).filter(e -> NumberUtils.isNumber(e.getPersonId())).collect(Collectors.toList());
|
||||
users.add(log.getInitiator());
|
||||
@ -350,17 +341,17 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
|
||||
private void parseSignatureUrl(BpmnProcessInstanceLogVO log) {
|
||||
List<String> signUrls = log.getTaskDetails().stream()
|
||||
.filter(i -> StringUtils.hasText(i.getTaskId()))
|
||||
.map(BpmnTaskInstanceLogVO::getSignatureUrl)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
.filter(i -> StringUtils.hasText(i.getTaskId()))
|
||||
.map(BpmnTaskInstanceLogVO::getSignatureUrl)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(signUrls)) {
|
||||
Map<String, String> ossUrlMap = ListUtils.emptyIfNull(getSignPrivateUrl(signUrls)).stream()
|
||||
.collect(Collectors.toMap(ApiSignUrlDownloadResponse::getFileKey, ApiSignUrlDownloadResponse::getSignUrl, (s, t) -> s));
|
||||
.collect(Collectors.toMap(ApiSignUrlDownloadResponse::getFileKey, ApiSignUrlDownloadResponse::getSignUrl, (s, t) -> s));
|
||||
log.getTaskDetails().stream()
|
||||
.filter(i -> StringUtils.hasText(i.getTaskId()))
|
||||
.forEach(i -> i.setSignatureUrl(ossUrlMap.getOrDefault(i.getSignatureUrl(), null)));
|
||||
.filter(i -> StringUtils.hasText(i.getTaskId()))
|
||||
.forEach(i -> i.setSignatureUrl(ossUrlMap.getOrDefault(i.getSignatureUrl(), null)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,27 +2,10 @@ package cn.axzo.workflow.server.controller.web.bpmn;
|
||||
|
||||
import cn.axzo.workflow.client.feign.bpmn.ProcessTaskApi;
|
||||
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.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.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskPageSearchDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskRemindDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskTransferDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.*;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.BatchOperationResultVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnHistoricTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskDonePageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskTodoPageItemVO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.*;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessTaskService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
|
||||
@ -35,12 +18,7 @@ import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.form.api.FormInfo;
|
||||
import org.springframework.util.StringUtils;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Resource;
|
||||
@ -148,6 +126,7 @@ public class BpmnProcessTaskController extends BasicPopulateAvatarController imp
|
||||
|
||||
/**
|
||||
* 获取当前节点可回退节点选项列表
|
||||
*
|
||||
* @param taskId 当前任务id
|
||||
* @return 可选回退节点列表
|
||||
*/
|
||||
@ -404,4 +383,5 @@ public class BpmnProcessTaskController extends BasicPopulateAvatarController imp
|
||||
@RequestParam @NotBlank(message = "自然人 ID 不能为空") String personId) {
|
||||
return success(bpmnProcessTaskService.findTaskIdByInstanceIdsAndPersonId(processInstanceIds, personId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -171,7 +171,7 @@ public class CoreServiceCodeGeneration {
|
||||
"该类是根据 API 动态生成,不同版本可能会开放新的接口,或回收一些旧接口\r\n<p>\r\n" +
|
||||
"Auto generation by workflow engine, It cannot be manually modified");
|
||||
classOrInterfaceDeclaration.addAndGetAnnotation("org.springframework.cloud.openfeign.FeignClient")
|
||||
.addPair("name", new StringLiteralExpr("workflow-engine-starter-core"))
|
||||
.addPair("name", new StringLiteralExpr("workflow-engine"))
|
||||
.addPair("url", new StringLiteralExpr("${axzo.service.workflow-engine:http://workflow-engine:8080}"))
|
||||
.addPair("configuration", new ClassExpr(new ClassOrInterfaceType("WorkflowEngineStarterFeignConfiguration")));
|
||||
cu.addImport("cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration", false, false);
|
||||
|
||||
@ -162,7 +162,7 @@ public class ManageServiceCodeGeneration {
|
||||
"该类是根据 API 动态生成,不同版本可能会开放新的接口,或回收一些旧接口\r\n<p>\r\n" +
|
||||
"Auto generation by workflow engine, It cannot be manually modified");
|
||||
classOrInterfaceDeclaration.addAndGetAnnotation("org.springframework.cloud.openfeign.FeignClient")
|
||||
.addPair("name", new StringLiteralExpr("workflow-engine-starter-manage"))
|
||||
.addPair("name", new StringLiteralExpr("workflow-engine"))
|
||||
.addPair("url", new StringLiteralExpr("${axzo.service.workflow-engine:http://workflow-engine:8080}"))
|
||||
.addPair("configuration", new ClassExpr(new ClassOrInterfaceType("WorkflowEngineStarterFeignConfiguration")));
|
||||
cu.addImport("cn.axzo.workflow.starter.feign.ext.WorkflowEngineStarterFeignConfiguration", false, false);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user