diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..e9297d1 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..e9297d1 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..09afac3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -409,21 +410,27 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } hisFlowList.add(flowTask); } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..e9297d1 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..09afac3 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -409,21 +410,27 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } hisFlowList.add(flowTask); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..cc18fd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -741,10 +741,10 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + //默认或签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 if ("1".equals(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); - } else if ("3".equals(examineMode)) { + } else if (StringUtils.isEmpty(examineMode) || "3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 //nrOfCompletedInstances:已完成的实例数量,nrOfInstances:实例总数 multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfCompletedInstances/nrOfInstances > 0}");