@@ -31,63 +31,6 @@ public class FlowService {
3131 private final FlowProcessRepository flowProcessRepository ;
3232 private final FlowBackupRepository flowBackupRepository ;
3333
34- /**
35- * 发起流程
36- *
37- * @param workId 流程id
38- * @param operator 操作者
39- * @param bindData 绑定数据
40- * @param advice 审批意见
41- */
42- public void startFlow (long workId , IFlowOperator operator , IBindData bindData , String advice ) {
43- // 检测流程是否存在
44- FlowWork flowWork = flowWorkRepository .getFlowWorkById (workId );
45- if (flowWork == null ) {
46- throw new IllegalArgumentException ("flow work not found" );
47- }
48- flowWork .verify ();
49- flowWork .enableValidate ();
50-
51- // 流程数据备份
52- FlowBackup flowBackup = flowBackupRepository .getFlowBackupByWorkIdAndVersion (flowWork .getId (), flowWork .getUpdateTime ());
53- if (flowBackup == null ) {
54- flowBackup = flowBackupRepository .backup (flowWork );
55- }
56-
57- // 保存流程
58- FlowProcess flowProcess = new FlowProcess (flowBackup .getId (), operator );
59- flowProcessRepository .save (flowProcess );
60-
61- // 保存绑定数据
62- BindDataSnapshot snapshot = new BindDataSnapshot (bindData );
63- flowBindDataRepository .save (snapshot );
64-
65- String processId = flowProcess .getProcessId ();
66-
67- Opinion opinion = Opinion .pass (advice );
68-
69- FlowRecordService flowRecordService = new FlowRecordService (flowOperatorRepository , processId , operator , operator , snapshot , opinion , flowWork , opinion .isSuccess (), new ArrayList <>());
70- // 获取开始节点
71- FlowNode start = flowWork .getStartNode ();
72- if (start == null ) {
73- throw new IllegalArgumentException ("start node not found" );
74- }
75- long preId = 0 ;
76-
77- // 创建待办记录
78- List <FlowRecord > records = flowRecordService .createRecord (preId , start );
79- if (records .isEmpty ()) {
80- throw new IllegalArgumentException ("flow record not found" );
81- }
82- flowRecordRepository .save (records );
83-
84- // 推送消息
85- for (FlowRecord record : records ) {
86- EventPusher .push (new FlowApprovalEvent (FlowApprovalEvent .STATE_CREATE , record , operator , flowWork ));
87- EventPusher .push (new FlowApprovalEvent (FlowApprovalEvent .STATE_TODO , record , operator , flowWork ));
88- }
89-
90- }
9134
9235 /**
9336 * 流程详情
@@ -358,6 +301,65 @@ public void save(long recordId, IFlowOperator currentOperator, IBindData bindDat
358301 }
359302
360303
304+ /**
305+ * 发起流程
306+ *
307+ * @param workId 流程id
308+ * @param operator 操作者
309+ * @param bindData 绑定数据
310+ * @param advice 审批意见
311+ */
312+ public void startFlow (long workId , IFlowOperator operator , IBindData bindData , String advice ) {
313+ // 检测流程是否存在
314+ FlowWork flowWork = flowWorkRepository .getFlowWorkById (workId );
315+ if (flowWork == null ) {
316+ throw new IllegalArgumentException ("flow work not found" );
317+ }
318+ flowWork .verify ();
319+ flowWork .enableValidate ();
320+
321+ // 流程数据备份
322+ FlowBackup flowBackup = flowBackupRepository .getFlowBackupByWorkIdAndVersion (flowWork .getId (), flowWork .getUpdateTime ());
323+ if (flowBackup == null ) {
324+ flowBackup = flowBackupRepository .backup (flowWork );
325+ }
326+
327+ // 保存流程
328+ FlowProcess flowProcess = new FlowProcess (flowBackup .getId (), operator );
329+ flowProcessRepository .save (flowProcess );
330+
331+ // 保存绑定数据
332+ BindDataSnapshot snapshot = new BindDataSnapshot (bindData );
333+ flowBindDataRepository .save (snapshot );
334+
335+ String processId = flowProcess .getProcessId ();
336+
337+ Opinion opinion = Opinion .pass (advice );
338+
339+ FlowRecordService createRecordService = new FlowRecordService (flowOperatorRepository , processId , operator , operator , snapshot , opinion , flowWork , opinion .isSuccess (), new ArrayList <>());
340+ // 获取开始节点
341+ FlowNode start = flowWork .getStartNode ();
342+ if (start == null ) {
343+ throw new IllegalArgumentException ("start node not found" );
344+ }
345+ long preId = 0 ;
346+
347+ // 创建待办记录
348+ List <FlowRecord > records = createRecordService .createRecord (preId , start );
349+ if (records .isEmpty ()) {
350+ throw new IllegalArgumentException ("flow record not found" );
351+ }
352+
353+ flowRecordRepository .save (records );
354+
355+ // 推送消息
356+ for (FlowRecord record : records ) {
357+ EventPusher .push (new FlowApprovalEvent (FlowApprovalEvent .STATE_CREATE , record , operator , flowWork ));
358+ EventPusher .push (new FlowApprovalEvent (FlowApprovalEvent .STATE_TODO , record , operator , flowWork ));
359+ }
360+
361+ }
362+
361363 /**
362364 * 提交流程
363365 *
@@ -467,6 +469,12 @@ public void submitFlow(long recordId, IFlowOperator currentOperator, IBindData b
467469 return ;
468470 }
469471
472+ this .createNextRecord (flowWork ,flowNextStep ,flowNode ,processId ,createOperator ,currentOperator ,snapshot ,opinion ,flowRecord ,historyRecords );
473+
474+ }
475+
476+
477+ private void createNextRecord (FlowWork flowWork ,boolean flowNextStep ,FlowNode flowNode ,String processId ,IFlowOperator createOperator ,IFlowOperator currentOperator ,BindDataSnapshot snapshot ,Opinion opinion ,FlowRecord flowRecord ,List <FlowRecord > historyRecords ){
470478 // 拥有退出条件 或审批通过时,匹配下一节点
471479 if (flowWork .hasBackRelation () || flowNextStep ) {
472480
0 commit comments