diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java index 5293cd02a7..dcf699e3d6 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -993,6 +993,12 @@ public class ApiDefinitionService { } for (ApiTestCaseWithBLOBs apiTestCaseWithBLOBs : caseList) { apiTestCaseWithBLOBs.setApiDefinitionId(apiDefinition.getId()); + if (apiDefinition.getToBeUpdated() != null && !apiTestCaseWithBLOBs.getVersionId().equals("cover")) { + apiTestCaseWithBLOBs.setToBeUpdated(true); + //TODO:check setting + } else { + apiTestCaseWithBLOBs.setToBeUpdated(false); + } apiTestCaseWithBLOBs.setVersionId(apiDefinition.getVersionId()); if (apiTestCaseWithBLOBs.getCreateTime() == null) { apiTestCaseWithBLOBs.setCreateTime(System.currentTimeMillis()); @@ -1012,9 +1018,6 @@ public class ApiDefinitionService { apiTestCaseWithBLOBs.setNum(testCaseService.getNextNum(apiDefinition.getId())); } - if (apiDefinition.getToBeUpdated() != null) { - apiTestCaseWithBLOBs.setToBeUpdated(apiDefinition.getToBeUpdated()); - } if (apiDefinition.getToBeUpdateTime() != null) { apiTestCaseWithBLOBs.setToBeUpdateTime(apiDefinition.getToBeUpdateTime()); } @@ -1146,8 +1149,15 @@ public class ApiDefinitionService { } else if (apiTestImportRequest.getCoverModule() != null && apiTestImportRequest.getCoverModule()) { apiDefinition.setUpdateTime(System.currentTimeMillis()); } - if (StringUtils.isBlank(apiDefinition.getCaseTotal()) || Integer.parseInt(apiDefinition.getCaseTotal()) == 0) { + if (CollectionUtils.isEmpty(caseList)) { apiDefinition.setToBeUpdated(false); + } else { + List cover = caseList.stream().filter(t -> !t.getVersionId().equals("cover") && StringUtils.isNotBlank(t.getId())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(cover)) { + apiDefinition.setToBeUpdated(false); + } else { + apiDefinition.setToBeUpdated(true); + } } } else { apiDefinition.setUpdateTime(System.currentTimeMillis()); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiModuleService.java b/backend/src/main/java/io/metersphere/api/service/ApiModuleService.java index 22a1f4467d..f91f9f6d39 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiModuleService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiModuleService.java @@ -615,6 +615,7 @@ public class ApiModuleService extends NodeTreeService { //标准版ESB数据导入不区分是否覆盖,默认都为覆盖 if (apiImport.getEsbApiParamsMap() != null) { fullCoverage = true; + } String updateVersionId = getUpdateVersionId(request); @@ -783,9 +784,9 @@ public class ApiModuleService extends NodeTreeService { //处理数据 if (fullCoverage) { if (fullCoverageApi) { - coverModule(toUpdateList, nameModuleMap, repeatDataMap, updateVersionId, definitionIdCaseMAp, oldCaseMap); + coverModule(toUpdateList, nameModuleMap, repeatDataMap, updateVersionId, definitionIdCaseMAp, oldCaseMap, apiImport.getEsbApiParamsMap()); } else { - moduleMap = cover(moduleMap, toUpdateList, nameModuleMap, repeatDataMap, updateVersionId, definitionIdCaseMAp, oldCaseMap); + moduleMap = cover(moduleMap, toUpdateList, nameModuleMap, repeatDataMap, updateVersionId, definitionIdCaseMAp, oldCaseMap, apiImport.getEsbApiParamsMap()); } } else { //不覆盖 @@ -796,7 +797,7 @@ public class ApiModuleService extends NodeTreeService { Map repeatMap = repeatApiDefinitionWithBLOBs.stream().collect(Collectors.toMap(t -> t.getName() + t.getModulePath(), api -> api)); Map optionMap = optionData.stream().collect(Collectors.toMap(t -> t.getName() + t.getModulePath(), api -> api)); if (fullCoverage) { - cover(moduleMap, toUpdateList, optionMap, repeatMap, updateVersionId, definitionIdCaseMAp, oldCaseMap); + cover(moduleMap, toUpdateList, optionMap, repeatMap, updateVersionId, definitionIdCaseMAp, oldCaseMap, apiImport.getEsbApiParamsMap()); } else { //不覆盖,同一接口不做更新 removeRepeat(optionData, optionMap, repeatMap, moduleMap, versionId, definitionIdCaseMAp, optionDataCases); @@ -906,7 +907,7 @@ public class ApiModuleService extends NodeTreeService { private Map cover(Map moduleMap, List toUpdateList, Map nameModuleMap, Map repeatDataMap, String updateVersionId, Map> definitionIdCaseMAp, - Map> oldCaseMap) { + Map> oldCaseMap, Map esbApiParamsMap) { //覆盖但不覆盖模块 if (nameModuleMap != null) { //导入文件没有新增接口无需创建接口模块 @@ -921,6 +922,7 @@ public class ApiModuleService extends NodeTreeService { } //该接口的case Map caseNameMap = getDistinctCaseNameMap(definitionIdCaseMAp, apiDefinitionWithBLOBs); + updateEsb(esbApiParamsMap, v.getId(), apiDefinitionWithBLOBs.getId()); apiDefinitionWithBLOBs.setId(v.getId()); apiDefinitionWithBLOBs.setVersionId(updateVersionId); apiDefinitionWithBLOBs.setModuleId(v.getModuleId()); @@ -943,6 +945,17 @@ public class ApiModuleService extends NodeTreeService { return moduleMap; } + private void updateEsb(Map esbApiParamsMap, String newId, String oldId) { + if (MapUtils.isNotEmpty(esbApiParamsMap)) { + EsbApiParamsWithBLOBs esbApiParamsWithBLOBs = esbApiParamsMap.get(oldId); + if (esbApiParamsWithBLOBs != null) { + esbApiParamsMap.remove(oldId); + esbApiParamsWithBLOBs.setResourceId(newId); + esbApiParamsMap.put(newId, esbApiParamsWithBLOBs); + } + } + } + private Map judgeModule(Map moduleMap, Map nameModuleMap, Map repeatDataMap) { AtomicBoolean remove = new AtomicBoolean(true); @@ -962,7 +975,7 @@ public class ApiModuleService extends NodeTreeService { private void coverModule(List toUpdateList, Map nameModuleMap, Map repeatDataMap, String updateVersionId, Map> definitionIdCaseMAp, - Map> oldCaseMap) { + Map> oldCaseMap, Map esbApiParamsMap) { if (nameModuleMap != null) { repeatDataMap.forEach((k, v) -> { ApiDefinitionWithBLOBs apiDefinitionWithBLOBs = nameModuleMap.get(k); @@ -974,6 +987,7 @@ public class ApiModuleService extends NodeTreeService { } //该接口的case Map caseNameMap = getDistinctCaseNameMap(definitionIdCaseMAp, apiDefinitionWithBLOBs); + updateEsb(esbApiParamsMap, v.getId(), apiDefinitionWithBLOBs.getId()); apiDefinitionWithBLOBs.setId(v.getId()); setApiParam(apiDefinitionWithBLOBs, updateVersionId, v); //组合case @@ -1175,6 +1189,8 @@ public class ApiModuleService extends NodeTreeService { if (apiTestCaseWithBLOBs1 != null) { caseWithBLOBs1.setId(apiTestCaseWithBLOBs1.getId()); caseWithBLOBs1.setVersion(apiTestCaseWithBLOBs1.getVersion() == null ? 0 : apiTestCaseWithBLOBs1.getVersion() + 1); + //这里是用这个属性做一个临时标记,表明这个case已被覆盖,不需要同步 + caseWithBLOBs1.setVersionId("cover"); oldCaseNameMap.remove(name); } else { caseWithBLOBs1.setVersion(0);