Skip to content

Commit baf4d95

Browse files
committed
fix bug
1 parent 2456a7e commit baf4d95

File tree

4 files changed

+69
-103
lines changed

4 files changed

+69
-103
lines changed

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

Lines changed: 0 additions & 35 deletions
This file was deleted.

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class FlowDirectionService {
2121

2222
private List<FlowRecord> historyRecords;
2323

24-
public FlowDirectionService(FlowNode flowNode,FlowWork flowWork, Opinion opinion) {
24+
public FlowDirectionService(FlowNode flowNode, FlowWork flowWork, Opinion opinion) {
2525
this.flowNode = flowNode;
2626
this.opinion = opinion;
2727
this.flowWork = flowWork;
@@ -33,7 +33,6 @@ public void bindHistoryRecords(List<FlowRecord> historyRecords) {
3333
}
3434

3535

36-
3736
/**
3837
* 解析当前的审批方向
3938
*/
@@ -47,7 +46,6 @@ public void loadFlowSourceDirection() {
4746
}
4847

4948

50-
5149
/**
5250
* 重新加载审批方向
5351
* 根据会签结果判断是否需要重新设置审批方向
@@ -79,21 +77,16 @@ public void verifyFlowSourceDirection() {
7977
* 判断当前流程节点是否已经完成,是否可以继续流转
8078
*/
8179
public boolean hasCurrentFlowNodeIsDone() {
82-
// 会签处理流程
83-
if (flowNode.isSign()) {
84-
// 会签下所有人尚未提交时,不执行下一节点
85-
boolean allDone = historyRecords.stream().filter(item -> !item.isTransfer()).allMatch(FlowRecord::isDone);
86-
if (!allDone) {
87-
// 流程尚未审批结束直接退出
88-
return true;
89-
}
80+
// 会签下所有人尚未提交时,不执行下一节点
81+
boolean allDone = historyRecords.stream().filter(item -> !item.isTransfer()).allMatch(FlowRecord::isDone);
82+
if (!allDone) {
83+
// 流程尚未审批结束直接退出
84+
return true;
9085
}
9186
return false;
9287
}
9388

9489

95-
96-
9790
/**
9891
* 检测当前流程是否已经完成
9992
* 即流程已经进行到了最终节点且审批意见为同意

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,6 @@ public void verifyFlowRecordIsTodo() {
100100
}
101101
}
102102

103-
/**
104-
* 校验流程是否已完成
105-
*/
106-
public void verifyFlowRecordIsFinish() {
107-
if (!flowRecord.isFinish()) {
108-
throw new IllegalArgumentException("flow record is not finish");
109-
}
110-
}
111-
112103
/**
113104
* 校验流程是否已完成
114105
*/
@@ -188,8 +179,6 @@ public void flagReadFlowRecord() {
188179
}
189180
}
190181

191-
192-
193182
/**
194183
* 校验是否后续没有审批记录
195184
*/

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

Lines changed: 63 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public FlowDetail detail(long recordId, IFlowOperator currentOperator) {
120120
BindDataSnapshot snapshot = flowBindDataRepository.getBindDataSnapshotById(flowRecord.getSnapshotId());
121121
List<FlowRecord> flowRecords = flowRecordRepository.findFlowRecordByProcessId(flowRecord.getProcessId());
122122

123+
// 获取所有的操作者
123124
List<Long> operatorIds = new ArrayList<>();
124125
for (FlowRecord record : flowRecords) {
125126
if (!operatorIds.contains(record.getCurrentOperatorId())) {
@@ -171,34 +172,27 @@ public void transfer(long recordId, IFlowOperator currentOperator, IFlowOperator
171172
flowRecordService.verifyFlowRecordCurrentOperator();
172173
flowRecordService.verifyTargetOperatorIsNotCurrentOperator(targetOperator);
173174

174-
175-
Opinion opinion = Opinion.transfer(advice);
176-
177-
178175
flowRecordService.loadFlowWork();
179176
flowRecordService.loadFlowNode();
180-
;
177+
181178
flowRecordService.verifyFlowRecordIsTodo();
182179

183180
FlowRecord flowRecord = flowRecordService.getFlowRecord();
184181
FlowWork flowWork = flowRecordService.getFlowWork();
185182
FlowNode flowNode = flowRecordService.getFlowNode();
186183

187-
// 下一流程的流程记录
188-
List<FlowRecord> childrenRecords = flowRecordRepository.findFlowRecordByPreId(recordId);
189-
// 下一流程均为办理且未读
190-
if (!childrenRecords.isEmpty()) {
191-
throw new IllegalArgumentException("flow record has submit");
192-
}
184+
193185
// 保存绑定数据
194186
BindDataSnapshot snapshot = new BindDataSnapshot(bindData);
195187
flowBindDataRepository.save(snapshot);
196188

189+
// 构建审批意见
190+
Opinion opinion = Opinion.transfer(advice);
191+
197192
// 设置自己的流程状态为转办已完成
198193
flowRecord.transfer(currentOperator, snapshot, opinion);
199194
flowRecordRepository.update(flowRecord);
200195

201-
202196
// 获取创建者
203197
IFlowOperator createOperator = flowOperatorRepository.getFlowOperatorById(flowRecord.getCreateOperatorId());
204198

@@ -284,18 +278,20 @@ public void startFlow(long workId, IFlowOperator operator, IBindData bindData, S
284278
BindDataSnapshot snapshot = new BindDataSnapshot(bindData);
285279
flowBindDataRepository.save(snapshot);
286280

281+
// 创建流程id
287282
String processId = flowProcess.getProcessId();
288283

284+
// 构建审批意见
289285
Opinion opinion = Opinion.pass(advice);
290286

291287
// 获取开始节点
292288
FlowNode start = flowWork.getStartNode();
293289
if (start == null) {
294290
throw new IllegalArgumentException("start node not found");
295291
}
292+
// 设置开始流程的上一个流程id
296293
long preId = 0;
297294

298-
299295
FlowRecordBuilderService flowRecordBuilderService = new FlowRecordBuilderService(
300296
flowOperatorRepository,
301297
flowRecordRepository,
@@ -315,9 +311,10 @@ public void startFlow(long workId, IFlowOperator operator, IBindData bindData, S
315311
throw new IllegalArgumentException("flow record not found");
316312
}
317313

314+
// 保存流程记录
318315
flowRecordRepository.save(records);
319316

320-
// 推送消息
317+
// 推送事件消息
321318
for (FlowRecord record : records) {
322319
EventPusher.push(new FlowApprovalEvent(FlowApprovalEvent.STATE_CREATE, record, operator, flowWork));
323320
EventPusher.push(new FlowApprovalEvent(FlowApprovalEvent.STATE_TODO, record, operator, flowWork));
@@ -335,48 +332,62 @@ public void startFlow(long workId, IFlowOperator operator, IBindData bindData, S
335332
*/
336333
public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData bindData, Opinion opinion) {
337334

338-
FlowRecordService flowRecordService = new FlowRecordService(flowRecordRepository, flowProcessRepository,
339-
recordId, currentOperator);
335+
FlowRecordService flowRecordService = new FlowRecordService(flowRecordRepository, flowProcessRepository, recordId, currentOperator);
340336

337+
// 加载流程
341338
flowRecordService.loadFlowRecord();
339+
// 验证流程的提交状态
342340
flowRecordService.verifyFlowRecordSubmitState();
341+
// 验证当前操作者
343342
flowRecordService.verifyFlowRecordCurrentOperator();
343+
// 加载流程设计
344344
flowRecordService.loadFlowWork();
345+
// 加载流程节点
345346
flowRecordService.loadFlowNode();
347+
// 验证没有子流程
346348
flowRecordService.verifyChildrenRecordsIsEmpty();
347349

348-
FlowBindDataService flowBindDataService = new FlowBindDataService(flowBindDataRepository, flowRecordService.getFlowNode(), bindData);
349-
350+
// 获取流程记录对象
350351
FlowRecord flowRecord = flowRecordService.getFlowRecord();
351-
BindDataSnapshot snapshot = flowBindDataService.loadOrCreateSnapshot(flowRecord);
352+
FlowNode flowNode = flowRecordService.getFlowNode();
353+
FlowWork flowWork = flowRecordService.getFlowWork();
352354

353-
FlowDirectionService flowDirectionService = new FlowDirectionService(flowRecordService.getFlowNode(), flowRecordService.getFlowWork(), opinion);
354355

356+
// 保存流程表单快照数据
357+
BindDataSnapshot snapshot = null;
358+
if (flowNode.isEditable()) {
359+
snapshot = new BindDataSnapshot(bindData);
360+
flowBindDataRepository.save(snapshot);
361+
} else {
362+
snapshot = flowBindDataRepository.getBindDataSnapshotById(flowRecord.getSnapshotId());
363+
}
364+
365+
// 审批方向判断服务
366+
FlowDirectionService flowDirectionService = new FlowDirectionService(flowRecordService.getFlowNode(), flowRecordService.getFlowWork(), opinion);
355367

368+
// 加载流程审批方向
356369
flowDirectionService.loadFlowSourceDirection();
370+
// 验证审批方向
357371
flowDirectionService.verifyFlowSourceDirection();
358372

359-
// 提交流程
373+
// 根据当前方向提交流程
360374
FlowSourceDirection flowSourceDirection = flowDirectionService.getFlowSourceDirection();
361375
flowRecord.submitRecord(currentOperator, snapshot, opinion, flowSourceDirection);
362376
flowRecordRepository.update(flowRecord);
363377

364-
365-
// 与当前流程同级的流程记录
378+
// 获取与当前流程同级的流程记录
366379
List<FlowRecord> historyRecords = flowRecordRepository.findFlowRecordByPreId(flowRecord.getPreId());
367380
flowDirectionService.bindHistoryRecords(historyRecords);
368381

369-
370-
boolean next = flowDirectionService.hasCurrentFlowNodeIsDone();
371-
if (next) {
372-
return;
382+
// 判断流程是否结束(会签时需要所有人都通过)
383+
if (flowNode.isSign()) {
384+
boolean next = flowDirectionService.hasCurrentFlowNodeIsDone();
385+
if (next) {
386+
return;
387+
}
373388
}
374389

375-
flowSourceDirection = flowDirectionService.reloadFlowSourceDirection();
376-
377-
FlowNode flowNode = flowRecordService.getFlowNode();
378-
379-
// 非会签下,默认其他将所有人未提交的流程,都自动提交然后再执行下一节点
390+
// 非会签下,当有人提交以后,将所有未提交的流程都自动提交,然后再执行下一节点
380391
if (flowNode.isUnSign()) {
381392
for (FlowRecord record : historyRecords) {
382393
if (record.isTodo() && record.getId() != flowRecord.getId()) {
@@ -386,9 +397,11 @@ public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData b
386397
}
387398
}
388399

400+
// 根据所有提交意见,重新加载审批方向
401+
flowSourceDirection = flowDirectionService.reloadFlowSourceDirection();
389402

390-
FlowWork flowWork = flowRecordService.getFlowWork();
391403

404+
// 判断流程是否完成
392405
if (flowDirectionService.hasCurrentFlowIsFinish()) {
393406
flowRecord.finish();
394407
flowRecord.submitRecord(currentOperator, snapshot, opinion, flowSourceDirection);
@@ -399,8 +412,10 @@ public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData b
399412
return;
400413
}
401414

415+
// 获取流程的发起者
402416
IFlowOperator createOperator = flowOperatorRepository.getFlowOperatorById(flowRecord.getCreateOperatorId());
403417

418+
// 构建流程创建器
404419
FlowRecordBuilderService flowRecordBuilderService = new FlowRecordBuilderService(
405420
flowOperatorRepository,
406421
flowRecordRepository,
@@ -414,26 +429,31 @@ public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData b
414429
flowRecord.getId()
415430
);
416431

432+
// 创建下一节点的流程记录
417433
List<FlowRecord> records;
418-
if (flowDirectionService.isDefaultBackRecord()) {
434+
// 审批通过并进入下一节点
435+
if (flowDirectionService.isPassBackRecord()) {
436+
records = flowRecordBuilderService.createNextRecord(flowNode);
437+
// 审批拒绝返回上一节点
438+
} else if (flowDirectionService.isDefaultBackRecord()) {
419439
records = flowRecordBuilderService.createDefaultBackRecord(flowRecord.getPreId());
420-
} else if (flowDirectionService.isCustomBackRecord()) {
421-
records = flowRecordBuilderService.createCustomBackRecord(flowNode,flowRecord.getPreId());
422440
} else {
423-
records = flowRecordBuilderService.createNextRecord(flowNode);
441+
// 审批拒绝,并且自定了返回节点
442+
records = flowRecordBuilderService.createCustomBackRecord(flowNode,flowRecord.getPreId());
424443
}
425444

426-
flowRecordService.flowRecordRepository.save(records);
445+
// 保存流程记录
446+
flowRecordRepository.save(records);
447+
448+
// 推送审批事件消息
449+
int eventState = flowSourceDirection == FlowSourceDirection.PASS ? FlowApprovalEvent.STATE_PASS : FlowApprovalEvent.STATE_REJECT;
450+
EventPusher.push(new FlowApprovalEvent(eventState, flowRecord, currentOperator, flowWork));
427451

452+
// 推送待办事件消息
428453
for (FlowRecord record : records) {
429454
IFlowOperator pushOperator = flowOperatorRepository.getFlowOperatorById(record.getCurrentOperatorId());
430455
EventPusher.push(new FlowApprovalEvent(FlowApprovalEvent.STATE_TODO, record, pushOperator, flowWork));
431456
}
432-
433-
434-
int eventState = flowSourceDirection == FlowSourceDirection.PASS ? FlowApprovalEvent.STATE_PASS : FlowApprovalEvent.STATE_REJECT;
435-
EventPusher.push(new FlowApprovalEvent(eventState, flowRecord, currentOperator, flowWork));
436-
437457
}
438458

439459

@@ -458,7 +478,6 @@ public void recall(long recordId, IFlowOperator currentOperator) {
458478
FlowRecord flowRecord = flowRecordService.getFlowRecord();
459479
FlowWork flowWork = flowRecordService.getFlowWork();
460480

461-
462481
// 下一流程的流程记录
463482
List<FlowRecord> childrenRecords = flowRecordRepository.findFlowRecordByPreId(recordId);
464483
// 下一流程均为办理且未读

0 commit comments

Comments
 (0)