|
|
@@ -1,17 +1,17 @@
|
|
|
package com.fs.company.service.impl;
|
|
|
|
|
|
import com.fs.common.core.domain.AjaxResult;
|
|
|
+import com.fs.common.core.domain.model.LoginUser;
|
|
|
+import com.fs.common.exception.ServiceException;
|
|
|
import com.fs.common.utils.DateUtils;
|
|
|
+import com.fs.common.utils.ServletUtils;
|
|
|
import com.fs.common.utils.spring.SpringUtils;
|
|
|
import com.fs.company.domain.*;
|
|
|
import com.fs.company.mapper.*;
|
|
|
import com.fs.company.param.CompanyWorkflowSaveParam;
|
|
|
import com.fs.company.param.CompanyWorkflowUpdateBindWCParam;
|
|
|
import com.fs.company.service.ICompanyWorkflowService;
|
|
|
-import com.fs.company.vo.CompanyWorkflowExportVO;
|
|
|
-import com.fs.company.vo.CompanyWorkflowNodeVoiceVo;
|
|
|
-import com.fs.company.vo.CompanyWorkflowVO;
|
|
|
-import com.fs.company.vo.OptionVO;
|
|
|
+import com.fs.company.vo.*;
|
|
|
import com.fs.enums.NodeTypeEnum;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -38,6 +38,14 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
|
|
|
private CompanyWorkflowEdgeMapper companyWorkflowEdgeMapper;
|
|
|
@Autowired
|
|
|
private CompanyWorkflowNodeTypeMapper companyWorkflowNodeTypeMapper;
|
|
|
+ @Autowired
|
|
|
+ private CompanyWorkflowVersionMapper companyWorkflowVersionMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanyWorkflowNodeVersionMapper companyWorkflowNodeVersionMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanyWorkflowEdgeVersionMapper companyWorkflowEdgeVersionMapper;
|
|
|
|
|
|
private static List<String> aiCallNodeTypes = Arrays.asList("param", "ai_chat","end");
|
|
|
@Override
|
|
|
@@ -58,14 +66,103 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
|
|
|
return companyWorkflowMapper.selectCompanyWorkflowList(fsAiWorkflow);
|
|
|
}
|
|
|
|
|
|
+// @Override
|
|
|
+// @Transactional(rollbackFor = Exception.class)
|
|
|
+// public Long saveCompanyWorkflow(CompanyWorkflowSaveParam param) {
|
|
|
+// Date now = DateUtils.getNowDate();
|
|
|
+// Long workflowId = param.getWorkflowId();
|
|
|
+//
|
|
|
+// if (workflowId == null) {
|
|
|
+// // 新增
|
|
|
+// CompanyWorkflow workflow = new CompanyWorkflow();
|
|
|
+// workflow.setWorkflowName(param.getWorkflowName());
|
|
|
+// workflow.setWorkflowDesc(param.getWorkflowDesc());
|
|
|
+// workflow.setWorkflowType(param.getWorkflowType());
|
|
|
+// workflow.setCanvasData(param.getCanvasData());
|
|
|
+// workflow.setStatus(1);
|
|
|
+// workflow.setVersion(1);
|
|
|
+// workflow.setCreateTime(now);
|
|
|
+// workflow.setStartNodeKey(param.getStartNodeKey());
|
|
|
+// workflow.setEndNodeKey(param.getEndNodeKey());
|
|
|
+// workflow.setCompanyId(param.getCompanyId());
|
|
|
+// workflow.setCompanyUserId(param.getCompanyUserId());
|
|
|
+// companyWorkflowMapper.insertCompanyWorkflow(workflow);
|
|
|
+// workflowId = workflow.getWorkflowId();
|
|
|
+// } else {
|
|
|
+// // 更新
|
|
|
+// CompanyWorkflow workflow = new CompanyWorkflow();
|
|
|
+// workflow.setWorkflowId(workflowId);
|
|
|
+// workflow.setWorkflowName(param.getWorkflowName());
|
|
|
+// workflow.setWorkflowDesc(param.getWorkflowDesc());
|
|
|
+// workflow.setWorkflowType(param.getWorkflowType());
|
|
|
+// workflow.setCanvasData(param.getCanvasData());
|
|
|
+// workflow.setStartNodeKey(param.getStartNodeKey());
|
|
|
+// workflow.setEndNodeKey(param.getEndNodeKey());
|
|
|
+// workflow.setUpdateTime(now);
|
|
|
+// workflow.setCompanyId(param.getCompanyId());
|
|
|
+// workflow.setCompanyUserId(param.getCompanyUserId());
|
|
|
+// companyWorkflowMapper.updateCompanyWorkflow(workflow);
|
|
|
+// // 删除旧的节点和连线
|
|
|
+// companyWorkflowNodeMapper.deleteCompanyWorkflowNodeByWorkflowId(workflowId);
|
|
|
+// companyWorkflowEdgeMapper.deleteCompanyWorkflowEdgeByWorkflowId(workflowId);
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 保存节点
|
|
|
+// List<CompanyWorkflowNode> nodes = param.getNodes();
|
|
|
+// if (nodes != null && !nodes.isEmpty()) {
|
|
|
+// for (CompanyWorkflowNode node : nodes) {
|
|
|
+// node.setWorkflowId(workflowId);
|
|
|
+// node.setCreateTime(now);
|
|
|
+// }
|
|
|
+// companyWorkflowNodeMapper.batchInsertCompanyWorkflowNode(nodes);
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 保存连线
|
|
|
+// List<CompanyWorkflowEdge> edges = param.getEdges();
|
|
|
+// if (edges != null && !edges.isEmpty()) {
|
|
|
+// for (CompanyWorkflowEdge edge : edges) {
|
|
|
+// edge.setWorkflowId(workflowId);
|
|
|
+// edge.setCreateTime(now);
|
|
|
+// }
|
|
|
+// companyWorkflowEdgeMapper.batchInsertCompanyWorkflowEdge(edges);
|
|
|
+// }
|
|
|
+//
|
|
|
+// //更新工作流后,需要删除或新增录音节点对应的id
|
|
|
+//
|
|
|
+// List<String> nodeKeyOlds = companyWorkflowMapper.selectCompanyWorkflowNodeByWorkflowId(workflowId);
|
|
|
+// List<Long> companyUserIds = companyWorkflowMapper.selectWorkflowCompanyUserByWfId(workflowId);
|
|
|
+//
|
|
|
+// // 提取新节点的nodeKey
|
|
|
+// List<String> newNodeKeys = nodes.stream()
|
|
|
+// .filter(node -> aiCallNodeTypes.contains(node.getNodeType()))
|
|
|
+// .map(CompanyWorkflowNode::getNodeKey)
|
|
|
+// .collect(Collectors.toList());
|
|
|
+//
|
|
|
+// // 找出新增的nodeKey(新节点中有,旧节点中没有)
|
|
|
+// List<String> nodeKeyAdd = newNodeKeys.stream()
|
|
|
+// .filter(key -> !nodeKeyOlds.contains(key))
|
|
|
+// .collect(Collectors.toList());
|
|
|
+//
|
|
|
+// // 找出需要删除的nodeKey(旧节点中有,新节点中没有)
|
|
|
+// List<String> nodeKeyDel = nodeKeyOlds.stream()
|
|
|
+// .filter(key -> !newNodeKeys.contains(key))
|
|
|
+// .collect(Collectors.toList());
|
|
|
+// if (!nodeKeyDel.isEmpty())companyWorkflowMapper.deleteAiWorkflowCompanyUserVoice(workflowId, nodeKeyDel);
|
|
|
+// if (!nodeKeyAdd.isEmpty())companyWorkflowMapper.addAiWorkflowCompanyUserVoice(workflowId,companyUserIds, nodeKeyAdd);
|
|
|
+// return workflowId;
|
|
|
+// }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Long saveCompanyWorkflow(CompanyWorkflowSaveParam param) {
|
|
|
Date now = DateUtils.getNowDate();
|
|
|
Long workflowId = param.getWorkflowId();
|
|
|
|
|
|
+ int versionNo;
|
|
|
+
|
|
|
if (workflowId == null) {
|
|
|
// 新增
|
|
|
+ versionNo = 1;
|
|
|
CompanyWorkflow workflow = new CompanyWorkflow();
|
|
|
workflow.setWorkflowName(param.getWorkflowName());
|
|
|
workflow.setWorkflowDesc(param.getWorkflowDesc());
|
|
|
@@ -81,7 +178,10 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
|
|
|
companyWorkflowMapper.insertCompanyWorkflow(workflow);
|
|
|
workflowId = workflow.getWorkflowId();
|
|
|
} else {
|
|
|
- // 更新
|
|
|
+ // 更新时先查当前最大版本号,主表 version 跟着递增
|
|
|
+ Integer maxVersionNo = companyWorkflowVersionMapper.selectMaxVersionNoByWorkflowId(workflowId);
|
|
|
+ versionNo = (maxVersionNo == null ? 0 : maxVersionNo) + 1;
|
|
|
+
|
|
|
CompanyWorkflow workflow = new CompanyWorkflow();
|
|
|
workflow.setWorkflowId(workflowId);
|
|
|
workflow.setWorkflowName(param.getWorkflowName());
|
|
|
@@ -93,6 +193,7 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
|
|
|
workflow.setUpdateTime(now);
|
|
|
workflow.setCompanyId(param.getCompanyId());
|
|
|
workflow.setCompanyUserId(param.getCompanyUserId());
|
|
|
+ workflow.setVersion(versionNo);
|
|
|
companyWorkflowMapper.updateCompanyWorkflow(workflow);
|
|
|
// 删除旧的节点和连线
|
|
|
companyWorkflowNodeMapper.deleteCompanyWorkflowNodeByWorkflowId(workflowId);
|
|
|
@@ -118,29 +219,10 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
|
|
|
}
|
|
|
companyWorkflowEdgeMapper.batchInsertCompanyWorkflowEdge(edges);
|
|
|
}
|
|
|
+ // 保存版本快照
|
|
|
+ saveWorkflowSnapshot(workflowId, versionNo, now, param.getUserName());
|
|
|
+ clearOldVersions(workflowId,3);
|
|
|
|
|
|
- //更新工作流后,需要删除或新增录音节点对应的id
|
|
|
-
|
|
|
- List<String> nodeKeyOlds = companyWorkflowMapper.selectCompanyWorkflowNodeByWorkflowId(workflowId);
|
|
|
- List<Long> companyUserIds = companyWorkflowMapper.selectWorkflowCompanyUserByWfId(workflowId);
|
|
|
-
|
|
|
- // 提取新节点的nodeKey
|
|
|
- List<String> newNodeKeys = nodes.stream()
|
|
|
- .filter(node -> aiCallNodeTypes.contains(node.getNodeType()))
|
|
|
- .map(CompanyWorkflowNode::getNodeKey)
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- // 找出新增的nodeKey(新节点中有,旧节点中没有)
|
|
|
- List<String> nodeKeyAdd = newNodeKeys.stream()
|
|
|
- .filter(key -> !nodeKeyOlds.contains(key))
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- // 找出需要删除的nodeKey(旧节点中有,新节点中没有)
|
|
|
- List<String> nodeKeyDel = nodeKeyOlds.stream()
|
|
|
- .filter(key -> !newNodeKeys.contains(key))
|
|
|
- .collect(Collectors.toList());
|
|
|
- if (!nodeKeyDel.isEmpty())companyWorkflowMapper.deleteAiWorkflowCompanyUserVoice(workflowId, nodeKeyDel);
|
|
|
- if (!nodeKeyAdd.isEmpty())companyWorkflowMapper.addAiWorkflowCompanyUserVoice(workflowId,companyUserIds, nodeKeyAdd);
|
|
|
return workflowId;
|
|
|
}
|
|
|
|
|
|
@@ -378,4 +460,238 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
|
|
|
public List<OptionVO> optionList(Long companyId) {
|
|
|
return companyWorkflowMapper.optionList(companyId);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<CompanyWorkflowVersionVo> selectVersionListByWorkflowId(Long workflowId) {
|
|
|
+ return companyWorkflowVersionMapper.selectVersionListByWorkflowId(workflowId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CompanyWorkflowVersionDetailVo selectVersionDetailByVersionId(Long versionId) {
|
|
|
+ CompanyWorkflowVersion workflowVersion = companyWorkflowVersionMapper.selectCompanyWorkflowVersionByVersionId(versionId);
|
|
|
+ if (workflowVersion == null) {
|
|
|
+ throw new ServiceException("版本记录不存在,versionId=" + versionId);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<CompanyWorkflowNodeVersion> nodes = companyWorkflowNodeVersionMapper.selectByVersionId(versionId);
|
|
|
+ List<CompanyWorkflowEdgeVersion> edges = companyWorkflowEdgeVersionMapper.selectByVersionId(versionId);
|
|
|
+
|
|
|
+ CompanyWorkflowVersionDetailVo vo = new CompanyWorkflowVersionDetailVo();
|
|
|
+ vo.setWorkflowVersion(workflowVersion);
|
|
|
+ vo.setNodes(nodes);
|
|
|
+ vo.setEdges(edges);
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将主表当前状态保存到版本表
|
|
|
+ */
|
|
|
+ /**
|
|
|
+ * 将主表当前状态保存到版本表
|
|
|
+ */
|
|
|
+ private void saveWorkflowSnapshot(Long workflowId, Integer versionNo, Date now, String userName) {
|
|
|
+ CompanyWorkflow workflow = companyWorkflowMapper.selectCompanyWorkflowById(workflowId);
|
|
|
+ if (workflow == null) {
|
|
|
+ throw new ServiceException("工作流不存在,无法生成快照,workflowId=" + workflowId);
|
|
|
+ }
|
|
|
+
|
|
|
+ CompanyWorkflowVersion version = new CompanyWorkflowVersion();
|
|
|
+ version.setWorkflowId(workflowId);
|
|
|
+ version.setVersionNo(versionNo);
|
|
|
+ version.setWorkflowName(workflow.getWorkflowName());
|
|
|
+ version.setWorkflowDesc(workflow.getWorkflowDesc());
|
|
|
+ version.setWorkflowType(workflow.getWorkflowType());
|
|
|
+ version.setStatus(workflow.getStatus());
|
|
|
+ version.setCanvasData(workflow.getCanvasData());
|
|
|
+ version.setStartNodeKey(workflow.getStartNodeKey());
|
|
|
+ version.setEndNodeKey(workflow.getEndNodeKey());
|
|
|
+ version.setCompanyUserId(workflow.getCompanyUserId());
|
|
|
+ version.setCompanyId(Math.toIntExact(workflow.getCompanyId()));
|
|
|
+ version.setRemark(workflow.getRemark());
|
|
|
+ version.setSnapshotTime(now);
|
|
|
+ version.setSnapshotBy(null);
|
|
|
+ version.setCreateTime(workflow.getCreateTime());
|
|
|
+ version.setUpdateTime(workflow.getUpdateTime());
|
|
|
+ version.setSnapshotBy(userName);
|
|
|
+
|
|
|
+ companyWorkflowVersionMapper.insertCompanyWorkflowVersion(version);
|
|
|
+ Long versionId = version.getVersionId();
|
|
|
+
|
|
|
+ // 保存节点快照
|
|
|
+ List<CompanyWorkflowNode> nodes = companyWorkflowNodeMapper.selectCompanyWorkflowNodeByWorkflowId(workflowId);
|
|
|
+ if (nodes != null && !nodes.isEmpty()) {
|
|
|
+ List<CompanyWorkflowNodeVersion> nodeVersionList = new ArrayList<>(nodes.size());
|
|
|
+ for (CompanyWorkflowNode node : nodes) {
|
|
|
+ CompanyWorkflowNodeVersion nv = new CompanyWorkflowNodeVersion();
|
|
|
+ nv.setVersionId(versionId);
|
|
|
+ nv.setWorkflowId(workflowId);
|
|
|
+ nv.setNodeId(node.getNodeId());
|
|
|
+ nv.setNodeKey(node.getNodeKey());
|
|
|
+ nv.setNodeName(node.getNodeName());
|
|
|
+ nv.setNodeType(node.getNodeType());
|
|
|
+ nv.setNodeIcon(node.getNodeIcon());
|
|
|
+ nv.setNodeColor(node.getNodeColor());
|
|
|
+ nv.setPosX(node.getPosX());
|
|
|
+ nv.setPosY(node.getPosY());
|
|
|
+ nv.setWidth(node.getWidth());
|
|
|
+ nv.setHeight(node.getHeight());
|
|
|
+ nv.setNodeConfig(node.getNodeConfig());
|
|
|
+ nv.setSortOrder(node.getSortOrder());
|
|
|
+ nv.setVoiceUrl(node.getVoiceUrl());
|
|
|
+ nv.setCreateTime(node.getCreateTime());
|
|
|
+ nv.setUpdateTime(node.getUpdateTime());
|
|
|
+ nodeVersionList.add(nv);
|
|
|
+ }
|
|
|
+ companyWorkflowNodeVersionMapper.batchInsert(nodeVersionList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存连线快照
|
|
|
+ List<CompanyWorkflowEdge> edges = companyWorkflowEdgeMapper.selectCompanyWorkflowEdgeByWorkflowId(workflowId);
|
|
|
+ if (edges != null && !edges.isEmpty()) {
|
|
|
+ List<CompanyWorkflowEdgeVersion> edgeVersionList = new ArrayList<>(edges.size());
|
|
|
+ for (CompanyWorkflowEdge edge : edges) {
|
|
|
+ CompanyWorkflowEdgeVersion ev = new CompanyWorkflowEdgeVersion();
|
|
|
+ ev.setVersionId(versionId);
|
|
|
+ ev.setWorkflowId(workflowId);
|
|
|
+ ev.setEdgeId(edge.getEdgeId());
|
|
|
+ ev.setEdgeKey(edge.getEdgeKey());
|
|
|
+ ev.setEdgeLabel(edge.getEdgeLabel());
|
|
|
+ ev.setSourceNodeKey(edge.getSourceNodeKey());
|
|
|
+ ev.setTargetNodeKey(edge.getTargetNodeKey());
|
|
|
+ ev.setSourceAnchor(edge.getSourceAnchor());
|
|
|
+ ev.setTargetAnchor(edge.getTargetAnchor());
|
|
|
+ ev.setEdgeType(edge.getEdgeType());
|
|
|
+ ev.setEdgeColor(edge.getEdgeColor());
|
|
|
+ ev.setConditionExpr(edge.getConditionExpr());
|
|
|
+ ev.setSortOrder(edge.getSortOrder());
|
|
|
+ ev.setCreateTime(edge.getCreateTime());
|
|
|
+ ev.setUpdateTime(edge.getUpdateTime());
|
|
|
+ edgeVersionList.add(ev);
|
|
|
+ }
|
|
|
+ companyWorkflowEdgeVersionMapper.batchInsert(edgeVersionList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 只保留最近 retainCount 个版本
|
|
|
+ */
|
|
|
+ private void clearOldVersions(Long workflowId, int retainCount) {
|
|
|
+ List<Long> expireVersionIds = companyWorkflowVersionMapper.selectExpireVersionIdsByWorkflowId(workflowId, retainCount);
|
|
|
+ if (expireVersionIds == null || expireVersionIds.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ companyWorkflowNodeVersionMapper.deleteByVersionIds(expireVersionIds);
|
|
|
+ companyWorkflowEdgeVersionMapper.deleteByVersionIds(expireVersionIds);
|
|
|
+ companyWorkflowVersionMapper.deleteByVersionIds(expireVersionIds);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Long rollbackWorkflowVersion(Long versionId, String userName) {
|
|
|
+ Date now = DateUtils.getNowDate();
|
|
|
+
|
|
|
+ // 1. 查版本主表
|
|
|
+ CompanyWorkflowVersion version = companyWorkflowVersionMapper.selectCompanyWorkflowVersionByVersionId(versionId);
|
|
|
+ if (version == null) {
|
|
|
+ throw new ServiceException("版本记录不存在,versionId=" + versionId);
|
|
|
+ }
|
|
|
+
|
|
|
+ Long workflowId = version.getWorkflowId();
|
|
|
+
|
|
|
+ // 当前主表版本
|
|
|
+ CompanyWorkflow currentWorkflow = companyWorkflowMapper.selectCompanyWorkflowById(workflowId);
|
|
|
+ if (currentWorkflow != null && currentWorkflow.getVersion() != null
|
|
|
+ && currentWorkflow.getVersion().equals(version.getVersionNo())) {
|
|
|
+ throw new ServiceException("当前版本不允许回退");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 查版本节点、连线
|
|
|
+ List<CompanyWorkflowNodeVersion> nodeVersions = companyWorkflowNodeVersionMapper.selectByVersionId(versionId);
|
|
|
+ List<CompanyWorkflowEdgeVersion> edgeVersions = companyWorkflowEdgeVersionMapper.selectByVersionId(versionId);
|
|
|
+
|
|
|
+ // 3. 计算新的版本号(回退本身也算一次新保存)
|
|
|
+ Integer maxVersionNo = companyWorkflowVersionMapper.selectMaxVersionNoByWorkflowId(workflowId);
|
|
|
+ int newVersionNo = (maxVersionNo == null ? 0 : maxVersionNo) + 1;
|
|
|
+
|
|
|
+ // 4. 更新主表
|
|
|
+ CompanyWorkflow workflow = new CompanyWorkflow();
|
|
|
+ workflow.setWorkflowId(workflowId);
|
|
|
+ workflow.setWorkflowName(version.getWorkflowName());
|
|
|
+ workflow.setWorkflowDesc(version.getWorkflowDesc());
|
|
|
+ workflow.setWorkflowType(version.getWorkflowType());
|
|
|
+ workflow.setCanvasData(version.getCanvasData());
|
|
|
+ workflow.setStatus(version.getStatus());
|
|
|
+ workflow.setStartNodeKey(version.getStartNodeKey());
|
|
|
+ workflow.setEndNodeKey(version.getEndNodeKey());
|
|
|
+ workflow.setCompanyId(version.getCompanyId().longValue());
|
|
|
+ workflow.setCompanyUserId(version.getCompanyUserId());
|
|
|
+ workflow.setRemark(version.getRemark());
|
|
|
+ workflow.setVersion(newVersionNo);
|
|
|
+ workflow.setUpdateTime(now);
|
|
|
+
|
|
|
+ companyWorkflowMapper.updateCompanyWorkflow(workflow);
|
|
|
+
|
|
|
+ // 5. 删除当前节点和连线
|
|
|
+ companyWorkflowNodeMapper.deleteCompanyWorkflowNodeByWorkflowId(workflowId);
|
|
|
+ companyWorkflowEdgeMapper.deleteCompanyWorkflowEdgeByWorkflowId(workflowId);
|
|
|
+
|
|
|
+ // 6. 回写节点
|
|
|
+ if (nodeVersions != null && !nodeVersions.isEmpty()) {
|
|
|
+ List<CompanyWorkflowNode> nodes = new ArrayList<>(nodeVersions.size());
|
|
|
+ for (CompanyWorkflowNodeVersion item : nodeVersions) {
|
|
|
+ CompanyWorkflowNode node = new CompanyWorkflowNode();
|
|
|
+ node.setWorkflowId(workflowId);
|
|
|
+ node.setNodeKey(item.getNodeKey());
|
|
|
+ node.setNodeName(item.getNodeName());
|
|
|
+ node.setNodeType(item.getNodeType());
|
|
|
+ node.setNodeIcon(item.getNodeIcon());
|
|
|
+ node.setNodeColor(item.getNodeColor());
|
|
|
+ node.setPosX(item.getPosX());
|
|
|
+ node.setPosY(item.getPosY());
|
|
|
+ node.setWidth(item.getWidth());
|
|
|
+ node.setHeight(item.getHeight());
|
|
|
+ node.setNodeConfig(item.getNodeConfig());
|
|
|
+ node.setSortOrder(item.getSortOrder());
|
|
|
+ node.setVoiceUrl(item.getVoiceUrl());
|
|
|
+ node.setCreateTime(now);
|
|
|
+ node.setUpdateTime(now);
|
|
|
+ nodes.add(node);
|
|
|
+ }
|
|
|
+ companyWorkflowNodeMapper.batchInsertCompanyWorkflowNode(nodes);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 7. 回写连线
|
|
|
+ if (edgeVersions != null && !edgeVersions.isEmpty()) {
|
|
|
+ List<CompanyWorkflowEdge> edges = new ArrayList<>(edgeVersions.size());
|
|
|
+ for (CompanyWorkflowEdgeVersion item : edgeVersions) {
|
|
|
+ CompanyWorkflowEdge edge = new CompanyWorkflowEdge();
|
|
|
+ edge.setWorkflowId(workflowId);
|
|
|
+ edge.setEdgeKey(item.getEdgeKey());
|
|
|
+ edge.setEdgeLabel(item.getEdgeLabel());
|
|
|
+ edge.setSourceNodeKey(item.getSourceNodeKey());
|
|
|
+ edge.setTargetNodeKey(item.getTargetNodeKey());
|
|
|
+ edge.setSourceAnchor(item.getSourceAnchor());
|
|
|
+ edge.setTargetAnchor(item.getTargetAnchor());
|
|
|
+ edge.setEdgeType(item.getEdgeType());
|
|
|
+ edge.setEdgeColor(item.getEdgeColor());
|
|
|
+ edge.setConditionExpr(item.getConditionExpr());
|
|
|
+ edge.setSortOrder(item.getSortOrder());
|
|
|
+ edge.setCreateTime(now);
|
|
|
+ edge.setUpdateTime(now);
|
|
|
+ edges.add(edge);
|
|
|
+ }
|
|
|
+ companyWorkflowEdgeMapper.batchInsertCompanyWorkflowEdge(edges);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 8. 再存一个新的快照
|
|
|
+ saveWorkflowSnapshot(workflowId, newVersionNo, now, userName);
|
|
|
+
|
|
|
+ // 9. 只保留最近3个版本
|
|
|
+ clearOldVersions(workflowId, 3);
|
|
|
+
|
|
|
+ return workflowId;
|
|
|
+ }
|
|
|
}
|