diff --git a/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.java b/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.java index 7388ad1114ff5d8fa844fa8e9ea596d5557c2bad..1733e7f814c92ab0c364caec1584c85b5927371a 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.java +++ b/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.java @@ -34,6 +34,8 @@ public interface ProcessMapper extends IProcessCrossoverMapper { List getProcessStepRelByProcessUuid(String processUuid); + ProcessStepRelVo getProcessStepRelByUuid(String uuid); + List getProcessSlaByProcessUuid(String processUuid); List getSlaUuidListByProcessUuid(String processUuid); diff --git a/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.xml index edce4944d945c0473503c331c2b2547bd19021fd..9065aad858e236cf63c0f24b50d975cfd2c1cb2d 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.xml +++ b/src/main/java/neatlogic/module/process/dao/mapper/process/ProcessMapper.xml @@ -78,6 +78,21 @@ process_uuid = #{processUuid} + + diff --git a/src/main/java/neatlogic/module/process/service/ProcessServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessServiceImpl.java index 6534ae75270fdff1fe203bdb552217d141364d13..8f156456e6587f7a37f75cc2a4f0f1f6726c01a0 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessServiceImpl.java @@ -90,12 +90,14 @@ public class ProcessServiceImpl implements ProcessService, IProcessCrossoverServ ProcessVo oldProcessVo = processMapper.getProcessByUuid(uuid); if (oldProcessVo != null) { saveOrDeleteProcessDependency(oldProcessVo, "delete"); + } + saveOrDeleteProcessDependency(processVo, "save"); + if (oldProcessVo != null) { processMapper.updateProcess(processVo); } else { processVo.setFcu(UserContext.get().getUserUuid(true)); processMapper.insertProcess(processVo); } - saveOrDeleteProcessDependency(processVo, "save"); /* 清空自己的草稿 **/ ProcessDraftVo processDraftVo = new ProcessDraftVo(); processDraftVo.setProcessUuid(uuid); @@ -106,6 +108,7 @@ public class ProcessServiceImpl implements ProcessService, IProcessCrossoverServ @Override public void saveOrDeleteProcessDependency(ProcessVo processVo, String action) { + Map oldUuid2NewUuidMap = new HashMap<>(); JSONObject config = processVo.getConfig(); if (MapUtils.isEmpty(config)) { return; @@ -264,7 +267,14 @@ public class ProcessServiceImpl implements ProcessService, IProcessCrossoverServ if (CollectionUtils.isNotEmpty(relList)) { if (Objects.equals(action, "save")) { for (int i = 0; i < relList.size(); i++) { - ProcessStepRelVo processStepRelVo = relList.getObject(i, ProcessStepRelVo.class); + JSONObject relObj = relList.getJSONObject(i); + String uuid = relObj.getString("uuid"); + if (processMapper.getProcessStepRelByUuid(uuid) != null) { + String newUuid = UuidUtil.randomUuid(); + oldUuid2NewUuidMap.put(uuid, newUuid); + relObj.put("uuid", newUuid); + } + ProcessStepRelVo processStepRelVo = relObj.toJavaObject(ProcessStepRelVo.class); processStepRelVo.setProcessUuid(processVo.getUuid()); String type = processStepRelVo.getType(); if (!ProcessFlowDirection.BACKWARD.getValue().equals(type)) { @@ -330,6 +340,14 @@ public class ProcessServiceImpl implements ProcessService, IProcessCrossoverServ } } } + + if (MapUtils.isNotEmpty(oldUuid2NewUuidMap)) { + String configStr = config.toJSONString(); + for (Map.Entry entry : oldUuid2NewUuidMap.entrySet()) { + configStr = configStr.replace(entry.getKey(), entry.getValue()); + } + processVo.setConfig(JSONObject.parseObject(configStr)); + } } }