@@ -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