@@ -357,11 +357,11 @@ private void parseApproverNodeFields(ApprovalNodeApprover approverNode, Approval
357357 if (StringUtils .isNotBlank (approverNode .getApprover ())) {
358358 response .setApprover (JSON .parseArray (approverNode .getApprover (), ApproverConfigDTO .class ));
359359 }
360- if (StringUtils .isNotBlank (approverNode .getPassUpdateConfig ())) {
361- response .setPassPostConfig (JSON .parseObject (approverNode .getPassUpdateConfig (), ApprovalPostConfigDTO .class ));
360+ if (StringUtils .isNotBlank (approverNode .getPassPostConfig ())) {
361+ response .setPassPostConfig (JSON .parseObject (approverNode .getPassPostConfig (), ApprovalPostConfigDTO .class ));
362362 }
363- if (StringUtils .isNotBlank (approverNode .getRejectUpdateConfig ())) {
364- response .setRejectPostConfig (JSON .parseObject (approverNode .getRejectUpdateConfig (), ApprovalPostConfigDTO .class ));
363+ if (StringUtils .isNotBlank (approverNode .getRejectPostConfig ())) {
364+ response .setRejectPostConfig (JSON .parseObject (approverNode .getRejectPostConfig (), ApprovalPostConfigDTO .class ));
365365 }
366366 if (StringUtils .isNotBlank (approverNode .getFieldPermissions ())) {
367367 response .setFieldPermissions (JSON .parseArray (approverNode .getFieldPermissions (), FieldPermissionDTO .class ));
@@ -431,36 +431,63 @@ private void buildChildren(ApprovalNodeResponse node, Map<String, List<String>>
431431 }
432432 }
433433
434+ /**
435+ * 批量保存节点配置
436+ * 先递归收集所有节点信息,然后批量插入,提高性能
437+ */
434438 private void saveNodes (List <ApprovalNodeRequest > nodes , String flowId , String userId ) {
439+ // 用于收集节点、连接和配置信息
440+ List <ApprovalNode > allNodes = new ArrayList <>();
441+ List <ApprovalNodeLink > allLinks = new ArrayList <>();
442+ List <ApprovalNodeApprover > allApproverNodes = new ArrayList <>();
443+ List <ApprovalNodeCondition > allConditionNodes = new ArrayList <>();
444+
445+ // 递归收集所有节点信息
435446 for (ApprovalNodeRequest nodeRequest : nodes ) {
436- saveNode (nodeRequest , flowId , userId , null );
447+ collectNodeInfo (nodeRequest , flowId , userId , null , allNodes , allLinks , allApproverNodes , allConditionNodes );
448+ }
449+
450+ // 批量插入
451+ if (CollectionUtils .isNotEmpty (allNodes )) {
452+ approvalNodeMapper .batchInsert (allNodes );
453+ }
454+ if (CollectionUtils .isNotEmpty (allLinks )) {
455+ approvalNodeLinkMapper .batchInsert (allLinks );
456+ }
457+ if (CollectionUtils .isNotEmpty (allApproverNodes )) {
458+ approvalNodeApproverMapper .batchInsert (allApproverNodes );
459+ }
460+ if (CollectionUtils .isNotEmpty (allConditionNodes )) {
461+ approvalNodeConditionMapper .batchInsert (allConditionNodes );
437462 }
438463 }
439464
440465 /**
441- * 递归保存节点及其子节点
466+ * 递归收集节点信息到列表中
442467 */
443- private void saveNode (ApprovalNodeRequest nodeRequest , String flowId , String userId , String parentId ) {
468+ private void collectNodeInfo (ApprovalNodeRequest nodeRequest , String flowId , String userId , String parentId ,
469+ List <ApprovalNode > allNodes , List <ApprovalNodeLink > allLinks ,
470+ List <ApprovalNodeApprover > allApproverNodes , List <ApprovalNodeCondition > allConditionNodes ) {
444471 String nodeId = StringUtils .isNotBlank (nodeRequest .getId ()) ? nodeRequest .getId () : IDGenerator .nextStr ();
445472
446- // 保存节点基本信息
473+ // 收集节点基本信息
447474 ApprovalNode node = BeanUtils .copyBean (new ApprovalNode (), nodeRequest );
448475 node .setId (nodeId );
449476 node .setFlowId (flowId );
450- approvalNodeMapper . insert (node );
477+ allNodes . add (node );
451478
452- // 保存节点连接 (如果有父节点)
479+ // 收集节点连接信息 (如果有父节点)
453480 if (StringUtils .isNotBlank (parentId )) {
454481 ApprovalNodeLink link = new ApprovalNodeLink ();
455482 link .setId (IDGenerator .nextStr ());
456483 link .setFlowId (flowId );
457484 link .setFromNodeId (parentId );
458485 link .setToNodeId (nodeId );
459486 link .setSort (nodeRequest .getSort ());
460- approvalNodeLinkMapper . insert (link );
487+ allLinks . add (link );
461488 }
462489
463- // 保存审批人节点配置
490+ // 收集审批人节点配置
464491 if (nodeRequest instanceof ApprovalNodeApproverRequest ) {
465492 ApprovalNodeApproverRequest approverRequest = (ApprovalNodeApproverRequest ) nodeRequest ;
466493 ApprovalNodeApprover approverNode = BeanUtils .copyBean (new ApprovalNodeApprover (), approverRequest ,
@@ -469,26 +496,26 @@ private void saveNode(ApprovalNodeRequest nodeRequest, String flowId, String use
469496 approverNode .setFlowId (flowId );
470497 approverNode .setCc (JSON .toJSONString (approverRequest .getCc ()));
471498 approverNode .setApprover (JSON .toJSONString (approverRequest .getApprover ()));
472- approverNode .setPassUpdateConfig (JSON .toJSONString (approverRequest .getPassPostConfig ()));
473- approverNode .setRejectUpdateConfig (JSON .toJSONString (approverRequest .getRejectPostConfig ()));
499+ approverNode .setPassPostConfig (JSON .toJSONString (approverRequest .getPassPostConfig ()));
500+ approverNode .setRejectPostConfig (JSON .toJSONString (approverRequest .getRejectPostConfig ()));
474501 approverNode .setFieldPermissions (JSON .toJSONString (approverRequest .getFieldPermissions ()));
475- approvalNodeApproverMapper . insert (approverNode );
502+ allApproverNodes . add (approverNode );
476503 }
477- // 保存条件节点配置
504+ // 收集条件节点配置
478505 else if (nodeRequest instanceof ApprovalNodeConditionRequest ) {
479506 ApprovalNodeConditionRequest conditionRequest = (ApprovalNodeConditionRequest ) nodeRequest ;
480507 ApprovalNodeCondition conditionNode = BeanUtils .copyBean (new ApprovalNodeCondition (), conditionRequest ,
481508 "rules" );
482509 conditionNode .setId (nodeId );
483510 conditionNode .setFlowId (flowId );
484511 conditionNode .setConditionConfig (JSON .toJSONString (conditionRequest .getConditionConfig ()));
485- approvalNodeConditionMapper . insert (conditionNode );
512+ allConditionNodes . add (conditionNode );
486513 }
487514
488- // 递归保存子节点
515+ // 递归收集子节点
489516 if (CollectionUtils .isNotEmpty (nodeRequest .getChildren ())) {
490517 for (ApprovalNodeRequest childRequest : nodeRequest .getChildren ()) {
491- saveNode (childRequest , flowId , userId , nodeId );
518+ collectNodeInfo (childRequest , flowId , userId , nodeId , allNodes , allLinks , allApproverNodes , allConditionNodes );
492519 }
493520 }
494521 }
0 commit comments