diff --git a/src/main/java/neatlogic/module/tenant/api/form/FormCopyApi.java b/src/main/java/neatlogic/module/tenant/api/form/FormCopyApi.java index a756263a8ccedc08719aee1c6742afaa89d34999..d3dc45a29d76ed6a966287eada69fa2a8403aa49 100644 --- a/src/main/java/neatlogic/module/tenant/api/form/FormCopyApi.java +++ b/src/main/java/neatlogic/module/tenant/api/form/FormCopyApi.java @@ -90,6 +90,7 @@ public class FormCopyApi extends PrivateApiComponentBase { newFrom.setIsActive(formVo.getIsActive()); formVersionVo.setUuid(null); formVersionVo.setFormUuid(newFrom.getUuid()); + updateSceneUuid(formVersionVo); newFormVersionList.add(formVersionVo); // Map formAttributeOldUuid2NewUuidMap = new HashMap<>(); // FormVersionVo newFormVersion = copyFormVersion(formVersionVo, newFrom.getUuid(), formAttributeOldUuid2NewUuidMap); @@ -104,6 +105,7 @@ public class FormCopyApi extends PrivateApiComponentBase { for (FormVersionVo formVersionVo : formVersionList) { formVersionVo.setUuid(null); formVersionVo.setFormUuid(newFrom.getUuid()); + updateSceneUuid(formVersionVo); newFormVersionList.add(formVersionVo); // Map formAttributeOldUuid2NewUuidMap = new HashMap<>(); // FormVersionVo newFormVersion = copyFormVersion(formVersionVo, newFrom.getUuid(), formAttributeOldUuid2NewUuidMap); @@ -165,6 +167,36 @@ public class FormCopyApi extends PrivateApiComponentBase { }; } + /** + * 复制一份表单版本配置信息,需要将所有场景的uuid值重新生成,避免不同表单的场景uuid冲突 + * @param formVersionVo + * @return + */ + private void updateSceneUuid(FormVersionVo formVersionVo) { + JSONObject formConfig = formVersionVo.getFormConfig(); + // 更新场景uuid + String defaultSceneUuid = formConfig.getString("defaultSceneUuid"); + JSONArray sceneList = formConfig.getJSONArray("sceneList"); + if (CollectionUtils.isNotEmpty(sceneList)) { + for (int i = 0; i < sceneList.size(); i++) { + JSONObject scene = sceneList.getJSONObject(i); + String uuid = scene.getString("uuid"); + String newUuid = UuidUtil.randomUuid(); + scene.put("uuid", newUuid); + if (Objects.equals(uuid, defaultSceneUuid)) { + formConfig.put("defaultSceneUuid", newUuid); + } + } + } + String uuid = formConfig.getString("uuid"); + String newUuid = UuidUtil.randomUuid(); + formConfig.put("uuid", newUuid); + if (Objects.equals(uuid, defaultSceneUuid)) { + formConfig.put("defaultSceneUuid", newUuid); + } + formVersionVo.setFormConfig(formConfig); + } + /** * 复制一份表单版本配置信息,需要将所有属性的uuid值重新生成,避免不同版本的属性uuid冲突 * @param oldFormVersionVo