Merge branch 'feature/REQ-4418' into feature/REQ-4418_Enum
# Conflicts: # workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ApproverSpecifyEnum.java
This commit is contained in:
commit
89a005469c
@ -9,6 +9,7 @@ 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;
|
||||
@ -155,6 +156,17 @@ public interface ProcessInstanceApi {
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<BpmnProcessInstanceVO> getProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 批量获得流程实例
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "批量获得流程实例")
|
||||
@PostMapping("/api/process/instance/batch/get")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<List<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 获取指定流程实例的流程变量
|
||||
*
|
||||
|
||||
@ -16,7 +16,6 @@ import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocStatusDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocTenantQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.model.doc.DocUpdateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.RestPrintTemplateConfigDTO;
|
||||
import cn.axzo.workflow.common.model.response.BpmPageResult;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.model.BpmnModelDetailVO;
|
||||
@ -220,17 +219,6 @@ public interface ProcessModelApi {
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<List<String>> getModelTenantIds();
|
||||
|
||||
/**
|
||||
* 打印模板配置内容更新保存
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "打印模板配置内容更新保存")
|
||||
@PostMapping("/api/process/model/print/template/upsert")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<Void> printTemplateConfig(@Validated @RequestBody PrintTemplateConfigUpsertDTO dto);
|
||||
|
||||
/**
|
||||
* 获取打印模板配置内容
|
||||
*
|
||||
|
||||
@ -5,6 +5,7 @@ import cn.axzo.workflow.common.annotation.InvokeMode;
|
||||
import cn.axzo.workflow.common.annotation.Manageable;
|
||||
import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -26,20 +27,50 @@ import static cn.axzo.workflow.common.enums.RpcInvokeModeEnum.SYNC;
|
||||
* @since 2025-01-16 17:35
|
||||
*/
|
||||
@WorkflowEngineFeignClient
|
||||
@Manageable
|
||||
public interface PrintAdminApi {
|
||||
/**
|
||||
* 查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "查询指定审批流程是否能打印,打印开关是否开启,是否存在打印模板")
|
||||
@GetMapping("/api/print/admin/template/exists")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<Boolean> hasPrintTemplate(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
|
||||
|
||||
/**
|
||||
* 打印模板配置内容更新保存
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "打印模板配置内容更新保存")
|
||||
@PostMapping("/api/print/admin/template/upsert")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<Void> printTemplateConfig(@Validated @RequestBody PrintTemplateConfigUpsertDTO dto);
|
||||
|
||||
/**
|
||||
* 获取打印模板中可打印的字段
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取打印模板中可打印的字段")
|
||||
@PostMapping("/api/print/admin/fields")
|
||||
@Manageable
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<List<PrintFieldDTO>> getPrintFields(@Validated @RequestBody PrintFieldQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 获取指定流程下用于替换打印的相关变量
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取指定流程下用于替换打印的相关变量")
|
||||
@GetMapping("/api/print/admin/field/variables")
|
||||
@Manageable
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<Map<String, Object>> getPrintFieldVariables(@NotBlank(message = "流程实例不能为空") @RequestParam String processInstanceId);
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ public enum ApproverSpecifyEnum {
|
||||
initiator_v2("initiator_v2", "发起人自己", 2),
|
||||
initiatorLeader_v2("initiatorLeader_v2", "发起人主管", 2),
|
||||
fixedPerson_v2("fixedPerson_v2", "固定人员", 2),
|
||||
preAllNodApprover_v2("preAllNodeApprover_v2", "所有前序节点审批人", 2),
|
||||
preAllNodeApprover_v2("preAllNodeApprover_v2", "所有前序节点审批人", 2),
|
||||
@JsonEnumDefaultValue
|
||||
unknown("unknown", "未知", 1),
|
||||
;
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
package cn.axzo.workflow.common.model.request.bpmn.process;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 批量查询流程实例的入参模型
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/7/14 10:12
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("批量查询流程实例的入参模型")
|
||||
@Accessors(chain = true)
|
||||
public class BpmnProcessInstanceBatchQueryDTO {
|
||||
|
||||
/**
|
||||
* 流程实例 ID 列表
|
||||
*/
|
||||
@NotEmpty(message = "流程实例 ID 列表不能为空")
|
||||
@Size(max = 20, message = "一次性查询不能超过 20个")
|
||||
private List<String> processInstanceIds;
|
||||
|
||||
/**
|
||||
* 是否包含流程变量,默认 false
|
||||
* <p>
|
||||
* 注意:开启后可能会严重影响查询性能,
|
||||
*/
|
||||
private Boolean hasVariables;
|
||||
}
|
||||
@ -81,6 +81,11 @@ public class ProcessInstanceDTO implements Serializable {
|
||||
*/
|
||||
private String businessProcessInstanceName;
|
||||
|
||||
/**
|
||||
* 模型定义的原始名称
|
||||
*/
|
||||
private String definitionName;
|
||||
|
||||
/**
|
||||
* 发起人信息
|
||||
*/
|
||||
|
||||
@ -320,7 +320,7 @@ public class ServiceTaskJsonConverter extends AbstractBpmnJsonConverter<ServiceT
|
||||
break;
|
||||
case fixedPerson_v2:
|
||||
break;
|
||||
case preAllNodApprover_v2:
|
||||
case preAllNodeApprover_v2:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@ -24,12 +24,21 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.*;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.*;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANT_ABORT;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.CLOSE_PROCESS_ASSIGNER;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_DELETE_PROCESS_FLAG;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_DELETE_REASON;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_ABORT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_ASSIGNEE_SKIP_FLAT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_ABORT;
|
||||
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.*;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 自定义的中止流程实例的命令实现
|
||||
@ -119,7 +128,9 @@ public class CustomAbortProcessInstanceCmd extends AbstractCommand<Void> impleme
|
||||
batchAddAttachment(commandContext, task.getProcessInstanceId(), task, attachmentList, assigner);
|
||||
completeVirtualTask(commandContext, task);
|
||||
|
||||
if (Objects.nonNull(assigner)) {
|
||||
runtimeService.setVariable(processInstanceId, CLOSE_PROCESS_ASSIGNER, assigner);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -161,7 +161,9 @@ public class CustomApproveTaskCmd extends AbstractCommand<Void> implements Seria
|
||||
|
||||
resetApproverNode(task.getProcessInstanceId());
|
||||
|
||||
if (Objects.nonNull(approver)) {
|
||||
runtimeService.setVariable(task.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, approver);
|
||||
}
|
||||
|
||||
executeSynchronous(task, taskService, runtimeService);
|
||||
return null;
|
||||
|
||||
@ -180,7 +180,9 @@ public class CustomApproveTaskWithFormCmd extends AbstractCommand<Void> implemen
|
||||
|
||||
resetApproverNode(task.getProcessInstanceId());
|
||||
|
||||
if (Objects.nonNull(approver)) {
|
||||
runtimeService.setVariable(task.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, approver);
|
||||
}
|
||||
|
||||
executeSynchronous(task, taskService, runtimeService, commandContext, historicTaskInstance.getTenantId());
|
||||
return null;
|
||||
|
||||
@ -140,7 +140,9 @@ public class CustomCancelProcessInstanceCmd extends AbstractCommand<Void> implem
|
||||
|
||||
completeVirtualTask(commandContext, task);
|
||||
|
||||
if (Objects.nonNull(initiator)) {
|
||||
runtimeService.setVariable(task.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, initiator);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -125,7 +125,9 @@ public class CustomRejectionTaskCmd extends AbstractCommand<Void> implements Ser
|
||||
variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_REJECT);
|
||||
variables.put(INTERNAL_PROCESS_DELETE_REASON, reason);
|
||||
runtimeService.setVariables(task.getProcessInstanceId(), variables);
|
||||
if (Objects.nonNull(approver)) {
|
||||
runtimeService.setVariable(task.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, approver);
|
||||
}
|
||||
CommandContextUtil.getAgenda(commandContext)
|
||||
.planOperation(new DeleteProcessInstanceOperation(commandContext, task.getProcessInstanceId(),
|
||||
extAxHiTaskInstService, REJECTED));
|
||||
|
||||
@ -87,7 +87,7 @@ public class CustomTransferUserTaskAsyncCmd extends AbstractCommand<Void> implem
|
||||
private void validTargetAssigneeNodeId(String processDefinitionId) {
|
||||
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
|
||||
Integer categoryVersion = getCategoryVersion(bpmnModel.getMainProcess()).orElse(0);
|
||||
if (categoryVersion > 0 && StringUtils.isNotBlank(dto.getTargetAssigner().getNodeId())) {
|
||||
if (categoryVersion > 0 && StringUtils.isBlank(dto.getTargetAssigner().getNodeId())) {
|
||||
throw new WorkflowEngineException(ASSIGNEE_NODE_ID_NOT_EXISTS, "审批人");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.workflow.core.engine.tx.listener;
|
||||
|
||||
import cn.axzo.framework.jackson.utility.JSON;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskAsyncCmd;
|
||||
@ -53,7 +54,7 @@ public class AutoPassTransactionListener implements TransactionListener {
|
||||
RuntimeService runtimeService = springProcessEngineConfiguration.getRuntimeService();
|
||||
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(
|
||||
runtimeService.getVariable(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId()));
|
||||
|
||||
log.info("auto pass transaction listener, assigner: {}", JSON.toJSONString(assigner));
|
||||
CommandConfig commandConfig = new CommandConfig().transactionRequired();
|
||||
CommandExecutor commandExecutor = springProcessEngineConfiguration.getCommandExecutor();
|
||||
BpmnTaskAuditDTO pass = new BpmnTaskAuditDTO();
|
||||
|
||||
@ -3,6 +3,7 @@ package cn.axzo.workflow.core.service;
|
||||
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.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
@ -136,6 +137,14 @@ public interface BpmnProcessInstanceService {
|
||||
*/
|
||||
BpmnProcessInstanceVO getProcessInstanceVO(BpmnProcessInstanceQueryDTO dto);
|
||||
|
||||
/**
|
||||
* 批量获得流程实例 VO 信息
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
List<BpmnProcessInstanceVO> getBatchProcessInstanceVO(BpmnProcessInstanceBatchQueryDTO dto);
|
||||
|
||||
ObjectNode getProcessInstanceGraphical(String processInstanceId, @Nullable String tenantId);
|
||||
|
||||
BpmPageResult<HistoricProcessInstanceVO> historicProcessInstancePage(HistoricProcessInstanceSearchDTO dto);
|
||||
@ -184,6 +193,7 @@ public interface BpmnProcessInstanceService {
|
||||
|
||||
/**
|
||||
* 获取指定流程实例对应的模型 ID
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @return
|
||||
*/
|
||||
|
||||
@ -22,6 +22,7 @@ import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
|
||||
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.BpmnProcessInstanceCarbonCopyDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
@ -93,6 +94,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
@ -829,6 +831,61 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
processInstance.getProcessDefinitionKey()), runningTasks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BpmnProcessInstanceVO> getBatchProcessInstanceVO(BpmnProcessInstanceBatchQueryDTO dto) {
|
||||
List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery().processInstanceIds(Sets.newHashSet(dto.getProcessInstanceIds())).list();
|
||||
Map<String, Map<String, Object>> variableMaps = historyService.createNativeHistoricVariableInstanceQuery()
|
||||
.sql("select * from act_hi_varinst where PROC_INST_ID_ in (#{ids}) and (NAME_ = '" + INTERNAL_INITIATOR + "' or NAME_ = '" + OLD_INTERNAL_INITIATOR + "' or NAME_ = '" + WORKFLOW_ENGINE_VERSION + "')")
|
||||
.parameter("ids", dto.getProcessInstanceIds()).list()
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(HistoricVariableInstance::getProcessInstanceId, Collectors.toMap(HistoricVariableInstance::getVariableName, HistoricVariableInstance::getValue, (s, t) -> s)));
|
||||
Map<String, Task> taskMaps = taskService.createTaskQuery().processInstanceIdIn(dto.getProcessInstanceIds())
|
||||
.active()
|
||||
.list()
|
||||
.stream().collect(Collectors.groupingBy(
|
||||
Task::getProcessInstanceId,
|
||||
Collectors.collectingAndThen(
|
||||
Collectors.maxBy(Comparator.comparing(Task::getCreateTime)),
|
||||
Optional::get
|
||||
)
|
||||
));
|
||||
|
||||
|
||||
Map<String, CategoryItemVO> categoryMaps = categoryService.getByValues(processInstanceList.stream().map(HistoricProcessInstance::getProcessDefinitionKey).filter(StringUtils::hasText).distinct().collect(Collectors.toList()))
|
||||
.stream()
|
||||
.filter(i -> Objects.equals(i.getType(), BPM_MODEL_CATEGORY))
|
||||
.collect(Collectors.toMap(CategoryItemVO::getValue, Function.identity(), (s, t) -> s));
|
||||
return processInstanceList.stream().map(e -> {
|
||||
BpmnProcessInstanceVO vo = new BpmnProcessInstanceVO();
|
||||
vo.setId(e.getId());
|
||||
vo.setName(e.getName());
|
||||
vo.setCategory(e.getProcessDefinitionKey());
|
||||
CategoryItemVO category = categoryMaps.getOrDefault(e.getProcessDefinitionKey(), null);
|
||||
if (Objects.nonNull(category)) {
|
||||
vo.setCategoryDesc(category.getLabel());
|
||||
vo.setWorkspaceType(WorkspaceType.getType(Integer.valueOf(category.getWorkspaceTypeCode())));
|
||||
}
|
||||
vo.setResult(BpmnProcessInstanceResultEnum.valueOfStatus(e.getBusinessStatus()));
|
||||
vo.setCreateAt(e.getStartTime());
|
||||
vo.setEndTime(e.getEndTime());
|
||||
vo.setProcessDefinitionKey(e.getProcessDefinitionKey());
|
||||
vo.setProcessDefinitionId(e.getProcessDefinitionId());
|
||||
vo.setBusinessKey(e.getBusinessKey());
|
||||
vo.setBusinessStatus(e.getBusinessStatus());
|
||||
vo.setTenantId(e.getTenantId());
|
||||
Task task = taskMaps.getOrDefault(e.getId(), null);
|
||||
if (Objects.nonNull(task)) {
|
||||
vo.setCurrentDefinitionKey(task.getTaskDefinitionKey());
|
||||
}
|
||||
Map<String, Object> variables = variableMaps.getOrDefault(e.getId(), Collections.emptyMap());
|
||||
if (!CollectionUtils.isEmpty(variables)) {
|
||||
vo.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(variables.getOrDefault(INTERNAL_INITIATOR, variables.getOrDefault(OLD_INTERNAL_INITIATOR, null))));
|
||||
vo.setWorkflowEngineVersion(variables.getOrDefault(WORKFLOW_ENGINE_VERSION, "").toString());
|
||||
}
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得流程实例 Map
|
||||
*
|
||||
|
||||
@ -104,7 +104,8 @@ public class BasedIdentityV2TaskAssigneeSelector extends AbstractBpmnTaskAssigne
|
||||
break;
|
||||
case pre_node_approver:
|
||||
log.info("executing role v2 with pre_node_approver");
|
||||
BpmnTaskDelegateAssigner lastOperationApprover = execution.getVariable(CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class);
|
||||
BpmnTaskDelegateAssigner lastOperationApprover =
|
||||
BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariables().get(CLOSE_PROCESS_ASSIGNER));
|
||||
if (Objects.isNull(lastOperationApprover)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@ -125,7 +125,8 @@ public class BasedPositionV2TaskAssigneeSelector extends AbstractBpmnTaskAssigne
|
||||
case pre_node_approver:
|
||||
log.info("executing position v2 with pre_node_approver");
|
||||
Optional<ApproverSpecifyRangeUnitEnum> approverSpecifyRangeUnit4PreNodeApprover = getApproverSpecifyRangeUnit(flowElement);
|
||||
BpmnTaskDelegateAssigner lastOperationApprover = execution.getVariable(CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class);
|
||||
BpmnTaskDelegateAssigner lastOperationApprover =
|
||||
BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariables().get(CLOSE_PROCESS_ASSIGNER));
|
||||
if (Objects.isNull(lastOperationApprover)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ public class BasedPreAllNodeTaskAssigneeSelector extends AbstractBpmnTaskAssigne
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return ApproverSpecifyEnum.preAllNodApprover_v2.getType();
|
||||
return ApproverSpecifyEnum.preAllNodeApprover_v2.getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -18,6 +18,7 @@ import com.google.common.collect.Sets;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.bpmn.model.FlowElement;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -55,6 +56,8 @@ import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getSpecial
|
||||
public class BasedRoleV2TaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector {
|
||||
@Resource
|
||||
private OrgNodeUserApi orgNodeUserApi;
|
||||
@Resource
|
||||
private RuntimeService runtimeService;
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
@ -124,7 +127,9 @@ public class BasedRoleV2TaskAssigneeSelector extends AbstractBpmnTaskAssigneeSel
|
||||
case pre_node_approver:
|
||||
log.info("executing role v2 with pre_node_approver");
|
||||
Optional<ApproverSpecifyRangeUnitEnum> approverSpecifyRangeUnit4PreNodeApprover = getApproverSpecifyRangeUnit(flowElement);
|
||||
BpmnTaskDelegateAssigner lastOperationApprover = execution.getVariable(CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class);
|
||||
BpmnTaskDelegateAssigner lastOperationApprover =
|
||||
BpmnTaskDelegateAssigner.toObjectCompatible(runtimeService.getVariable(execution.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class));
|
||||
log.info("lastOperationApprover:{}", JSON.toJSONString(lastOperationApprover));
|
||||
if (Objects.isNull(lastOperationApprover)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@ -85,7 +85,8 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
|
||||
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
|
||||
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
|
||||
.setBusinessKey(((ExecutionEntityImpl) event.getEntity()).getBusinessKey())
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) event.getEntity()).getName());
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) event.getEntity()).getName())
|
||||
.setDefinitionName(mainProcess.getName());
|
||||
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
|
||||
BpmnMetaParserHelper.getSignConfig(mainProcess).ifPresent(dto::setSignConf);
|
||||
|
||||
@ -154,7 +155,8 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
|
||||
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
|
||||
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
|
||||
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName());
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName())
|
||||
.setDefinitionName(mainProcess.getName());
|
||||
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
|
||||
BpmnMetaParserHelper.getSignConfig(mainProcess).ifPresent(dto::setSignConf);
|
||||
|
||||
@ -194,7 +196,8 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
|
||||
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
|
||||
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
|
||||
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName());
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName())
|
||||
.setDefinitionName(mainProcess.getName());
|
||||
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
|
||||
BpmnMetaParserHelper.getSignConfig(mainProcess).ifPresent(dto::setSignConf);
|
||||
|
||||
@ -229,7 +232,8 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
|
||||
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
|
||||
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
|
||||
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName());
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName())
|
||||
.setDefinitionName(mainProcess.getName());
|
||||
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
|
||||
BpmnMetaParserHelper.getSignConfig(mainProcess).ifPresent(dto::setSignConf);
|
||||
|
||||
@ -264,7 +268,8 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
|
||||
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
|
||||
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
|
||||
.setBusinessKey(((ExecutionEntityImpl) event.getEntity()).getProcessInstanceBusinessKey())
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) event.getEntity()).getName());
|
||||
.setBusinessProcessInstanceName(((ExecutionEntityImpl) event.getEntity()).getName())
|
||||
.setDefinitionName(mainProcess.getName());
|
||||
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
|
||||
BpmnMetaParserHelper.getSignConfig(mainProcess).ifPresent(dto::setSignConf);
|
||||
|
||||
|
||||
@ -32,6 +32,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.NO_ASSIGNEE;
|
||||
@ -89,13 +90,23 @@ public class CheckApproverServiceImpl implements CheckApproverService {
|
||||
return exists.get();
|
||||
}
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
|
||||
processEngineConfiguration.getActivityInstanceEntityManager()
|
||||
.findActivityInstancesByProcessInstanceId(delegateTask.getProcessInstanceId(), false)
|
||||
List<ActivityInstanceEntity> actInsts = processEngineConfiguration.getActivityInstanceEntityManager()
|
||||
.findActivityInstancesByProcessInstanceId(delegateTask.getProcessInstanceId(), false);
|
||||
|
||||
actInsts.stream().map(i -> new StringBuilder()
|
||||
.append(i.getActivityId()).append(":")
|
||||
.append(i.getActivityType()).append(":")
|
||||
.append(i.getEndTime()))
|
||||
.collect(Collectors.toList())
|
||||
.forEach(i -> log.info("checkApproveServiceImpl inst: {}", i.toString()));
|
||||
|
||||
actInsts
|
||||
.stream()
|
||||
.filter(i -> !Objects.equals(i.getActivityId(), userTask.getId()))
|
||||
.filter(i -> !Objects.equals(i.getActivityType(), "exclusiveGateway"))
|
||||
.filter(i -> !Objects.equals(i.getActivityType(), "sequenceFlow"))
|
||||
.filter(i -> !Objects.equals(i.getActivityType(), "startEvent"))
|
||||
.filter(i -> Objects.nonNull(i.getEndTime()))
|
||||
.max(Comparator.comparing(ActivityInstanceEntity::getEndTime))
|
||||
.ifPresent(i -> {
|
||||
log.info("CheckApproverServiceImpl#checkApproverExists...上一个节点ID:{},类型:{}", i.getActivityId(), i.getActivityType());
|
||||
|
||||
@ -295,6 +295,9 @@ public class TestController {
|
||||
if (!StringUtils.hasText(keyword)) {
|
||||
return "命令不能为空";
|
||||
}
|
||||
if (StringUtils.hasText(date)) {
|
||||
return ShellUtil.grepLog(profile, keyword, StringUtils.hasText(date) ? DateUtil.parseDate(date) : new Date(), grepKeyword);
|
||||
}
|
||||
String s = ShellUtil.grepRealTimeLog(profile, keyword);
|
||||
if (StringUtils.hasText(s)) {
|
||||
return s;
|
||||
|
||||
@ -13,6 +13,7 @@ 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;
|
||||
@ -281,6 +282,20 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
return success(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量获得流程实例
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "批量获得流程实例")
|
||||
@GetMapping("/batch/get")
|
||||
@Override
|
||||
public CommonResponse<List<BpmnProcessInstanceVO>> getBatchProcessInstanceVO(@Validated @RequestBody BpmnProcessInstanceBatchQueryDTO dto) {
|
||||
log.info("批量获得历史的流程实例 getProcessInstanceVO===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
return success(bpmnProcessInstanceService.getBatchProcessInstanceVO(dto));
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新指定流程定义的版本的状态, 处于 suspended 状态的流程模型将不能再发起实例
|
||||
*
|
||||
|
||||
@ -410,21 +410,6 @@ public class BpmnProcessModelController implements ProcessModelApi {
|
||||
return success(bpmnProcessModelService.getTenantIds());
|
||||
}
|
||||
|
||||
/**
|
||||
* 打印模板配置内容
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "打印模板配置内容")
|
||||
@PostMapping("/print/template/upsert")
|
||||
@Override
|
||||
public CommonResponse<Void> printTemplateConfig(@Validated @RequestBody PrintTemplateConfigUpsertDTO dto) {
|
||||
log.info("操作打印模板配置内容: {}", JSON.toJSONString(dto));
|
||||
bpmnProcessModelService.printTemplateConfig(dto);
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取打印模板配置内容
|
||||
*
|
||||
|
||||
@ -9,6 +9,7 @@ import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.dto.print.FieldAttributeDTO;
|
||||
import cn.axzo.workflow.common.model.dto.print.PrintFieldDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.common.model.request.category.CategoryGroupVarSearchDto;
|
||||
@ -20,6 +21,7 @@ import cn.axzo.workflow.core.engine.cmd.CustomGetFormInstanceLatestValuesCmd;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomGetProcessInstanceVariablesCmd;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessModelService;
|
||||
import cn.axzo.workflow.core.service.CategoryGroupService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
import cn.axzo.workflow.server.common.util.RpcExternalUtil;
|
||||
@ -130,6 +132,8 @@ public class PrintAdminController implements PrintAdminApi {
|
||||
private BpmnProcessInstanceService bpmnProcessInstanceService;
|
||||
@Resource
|
||||
private CategoryGroupService categoryGroupService;
|
||||
@Resource
|
||||
private BpmnProcessModelService bpmnProcessModelService;
|
||||
|
||||
/**
|
||||
* 查询指定流程实例是否能使用打印
|
||||
@ -144,6 +148,20 @@ public class PrintAdminController implements PrintAdminApi {
|
||||
return CommonResponse.success(bpmnProcessInstanceService.hasPrintTemplate(processInstanceId, null));
|
||||
}
|
||||
|
||||
/**
|
||||
* 打印模板配置内容
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "打印模板配置内容")
|
||||
@PostMapping("/template/upsert")
|
||||
@Override
|
||||
public CommonResponse<Void> printTemplateConfig(@Validated @RequestBody PrintTemplateConfigUpsertDTO dto) {
|
||||
log.info("操作打印模板配置内容: {}", JSON.toJSONString(dto));
|
||||
bpmnProcessModelService.printTemplateConfig(dto);
|
||||
return success();
|
||||
}
|
||||
/**
|
||||
* 获取打印模板中可打印的字段, 或者是 WPS 模板中可配置的变量字段
|
||||
*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user