Skip to content

Commit b0ec98d

Browse files
committed
1 parent 44651db commit b0ec98d

File tree

5 files changed

+740
-15
lines changed

5 files changed

+740
-15
lines changed

springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/FlowRecordService.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class FlowRecordService {
2424
private final FlowOperatorRepository flowOperatorRepository;
2525
private final String processId;
2626
private final IFlowOperator createOperator;
27-
private final IFlowOperator currentOperator;
27+
private IFlowOperator currentOperator;
2828
private final BindDataSnapshot snapshot;
2929
private final Opinion opinion;
3030
private final FlowWork flowWork;
@@ -183,4 +183,7 @@ private List<FlowRecord> triggerNextNode(long preId, FlowNode currentNode, IFlow
183183
return records;
184184
}
185185

186+
public void changeCurrentOperator(IFlowOperator flowOperator) {
187+
this.currentOperator = flowOperator;
188+
}
186189
}

springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/FlowService.java

+16-14
Original file line numberDiff line numberDiff line change
@@ -368,16 +368,20 @@ public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData b
368368
// 与当前流程同级的流程记录
369369
List<FlowRecord> historyRecords = flowRecordRepository.findFlowRecordByPreId(flowRecord.getPreId());
370370

371+
// 提交流程
372+
flowRecord.submitRecord(currentOperator, snapshot, opinion, flowNextStep);
373+
flowRecordRepository.update(flowRecord);
374+
371375
// 会签处理流程
372376
if (flowNode.isSign()) {
373377
// 会签下所有人尚未提交时,不执行下一节点
374-
boolean allDone = historyRecords.stream().filter(FlowRecord::isTransfer).allMatch(FlowRecord::isDone);
378+
boolean allDone = historyRecords.stream().filter(item->!item.isTransfer()).allMatch(FlowRecord::isDone);
375379
if (!allDone) {
376380
// 流程尚未审批结束直接退出
377381
return;
378382
}
379383
// 会签下所有人都同意,再执行下一节点
380-
boolean allPass = historyRecords.stream().filter(FlowRecord::isTransfer).allMatch(FlowRecord::isPass);
384+
boolean allPass = historyRecords.stream().filter(item->!item.isTransfer()).allMatch(FlowRecord::isPass);
381385
if (!allPass) {
382386
flowNextStep = false;
383387
}
@@ -408,31 +412,29 @@ public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData b
408412
EventPusher.push(new FlowApprovalEvent(FlowApprovalEvent.STATE_FINISH, flowRecord, currentOperator));
409413
return;
410414
}
411-
// 提交流程
412-
flowRecord.submitRecord(currentOperator, snapshot, opinion, flowNextStep);
413-
flowRecordRepository.update(flowRecord);
414415

415416
// 拥有退出条件 或审批通过时,匹配下一节点
416417
if (flowWork.hasBackRelation() || flowNextStep) {
417418

419+
FlowRecordService flowRecordService = new FlowRecordService(flowOperatorRepository, processId, createOperator, currentOperator, snapshot, opinion, flowWork, flowNextStep, historyRecords);
420+
FlowNode nextNode = flowRecordService.matcherNextNode(flowNode);
421+
if (nextNode == null) {
422+
throw new IllegalArgumentException("next node not found");
423+
}
424+
418425
IFlowOperator flowOperator = currentOperator;
419426
// 退回流程 并且 也设置了退回节点
420427
if (!flowNextStep && flowWork.hasBackRelation()) {
421-
if (flowNode.isAnyOperatorMatcher()) {
428+
if (nextNode.isAnyOperatorMatcher()) {
422429
// 如果是任意人员操作时则需要指定为当时审批人员为当前审批人员
423430
FlowRecord preFlowRecord = flowRecordRepository.getFlowRecordById(flowRecord.getPreId());
424-
while (!preFlowRecord.isTransfer() && preFlowRecord.getNodeCode().equals(flowNode.getCode())) {
425-
preFlowRecord = flowRecordRepository.getFlowRecordById(flowRecord.getPreId());
431+
while (preFlowRecord.isTransfer() || !preFlowRecord.getNodeCode().equals(nextNode.getCode())) {
432+
preFlowRecord = flowRecordRepository.getFlowRecordById(preFlowRecord.getPreId());
426433
}
427434
flowOperator = flowOperatorRepository.getFlowOperatorById(preFlowRecord.getCurrentOperatorId());
428435
}
429436
}
430-
431-
FlowRecordService flowRecordService = new FlowRecordService(flowOperatorRepository, processId, createOperator, flowOperator, snapshot, opinion, flowWork, flowNextStep, historyRecords);
432-
FlowNode nextNode = flowRecordService.matcherNextNode(flowNode);
433-
if (nextNode == null) {
434-
throw new IllegalArgumentException("next node not found");
435-
}
437+
flowRecordService.changeCurrentOperator(flowOperator);
436438

437439
List<FlowRecord> records = flowRecordService.createRecord(flowRecord.getId(), nextNode);
438440
flowRecordRepository.save(records);

springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/flow/Leave.java

+6
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,15 @@ public class Leave implements IBindData {
1010

1111
private long id;
1212
private String title;
13+
private int days;
1314

1415
public Leave(String title) {
16+
this(title,0);
17+
}
18+
19+
public Leave(String title, int days) {
1520
this.title = title;
21+
this.days = days;
1622
}
1723

1824
@Override

0 commit comments

Comments
 (0)