refactor(项目设置): 编辑项目开启场景自定义ID保存时反应慢

This commit is contained in:
shiziyuan9527 2021-07-07 18:42:48 +08:00 committed by 刘瑞斌
parent 8fb591fdc9
commit 63f74454da
6 changed files with 57 additions and 22 deletions

View File

@ -21,4 +21,6 @@ public class ApiTestImportRequest {
private String userId; private String userId;
//调用类型 //调用类型
private String type; private String type;
// 是否开启自定义ID
private Boolean openCustomNum = false;
} }

View File

@ -249,12 +249,16 @@ public class ApiAutomationService {
public ApiScenario create(SaveApiScenarioRequest request, List<MultipartFile> bodyFiles, List<MultipartFile> scenarioFiles) { public ApiScenario create(SaveApiScenarioRequest request, List<MultipartFile> bodyFiles, List<MultipartFile> scenarioFiles) {
request.setId(UUID.randomUUID().toString()); request.setId(UUID.randomUUID().toString());
checkNameExist(request); checkNameExist(request);
int nextNum = getNextNum(request.getProjectId());
if (StringUtils.isBlank(request.getCustomNum())) {
request.setCustomNum(String.valueOf(nextNum));
}
checkScenarioNum(request); checkScenarioNum(request);
final ApiScenarioWithBLOBs scenario = buildSaveScenario(request); final ApiScenarioWithBLOBs scenario = buildSaveScenario(request);
scenario.setVersion(0); scenario.setVersion(0);
scenario.setCreateTime(System.currentTimeMillis()); scenario.setCreateTime(System.currentTimeMillis());
scenario.setNum(getNextNum(request.getProjectId())); scenario.setNum(nextNum);
List<ApiMethodUrlDTO> useUrl = this.parseUrl(scenario); List<ApiMethodUrlDTO> useUrl = this.parseUrl(scenario);
scenario.setUseUrl(JSONArray.toJSONString(useUrl)); scenario.setUseUrl(JSONArray.toJSONString(useUrl));
@ -287,20 +291,16 @@ public class ApiAutomationService {
} }
private void checkScenarioNum(SaveApiScenarioRequest request) { private void checkScenarioNum(SaveApiScenarioRequest request) {
if (StringUtils.isNotBlank(request.getCustomNum())) { String projectId = request.getProjectId();
String projectId = request.getProjectId(); Project project = projectMapper.selectByPrimaryKey(projectId);
Project project = projectMapper.selectByPrimaryKey(projectId);
if (project != null) { if (project == null) {
Boolean customNum = project.getScenarioCustomNum(); MSException.throwException("add scenario fail, project is not find.");
// 未开启自定义ID }
if (!customNum) {
request.setCustomNum(null); Boolean openCustomNum = project.getScenarioCustomNum();
} else { if (BooleanUtils.isTrue(openCustomNum)) {
checkCustomNumExist(request); checkCustomNumExist(request);
}
} else {
MSException.throwException("add scenario fail, project is not find.");
}
} }
} }
@ -312,7 +312,7 @@ public class ApiAutomationService {
.andIdNotEqualTo(request.getId()); .andIdNotEqualTo(request.getId());
List<ApiScenario> list = apiScenarioMapper.selectByExample(example); List<ApiScenario> list = apiScenarioMapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(list)) { if (CollectionUtils.isNotEmpty(list)) {
MSException.throwException("自定义ID已存在!"); MSException.throwException("自定义ID "+ request.getCustomNum() +" 已存在!");
} }
} }
@ -1671,6 +1671,34 @@ public class ApiAutomationService {
scenarioWithBLOBs.setDescription(request.getDescription()); scenarioWithBLOBs.setDescription(request.getDescription());
List<ApiScenarioWithBLOBs> sameRequest = getWithBLOBs(scenarioWithBLOBs); List<ApiScenarioWithBLOBs> sameRequest = getWithBLOBs(scenarioWithBLOBs);
Boolean openCustomNum = apiTestImportRequest.getOpenCustomNum();
List<ApiScenario> list = new ArrayList<>();
if (BooleanUtils.isTrue(openCustomNum)) {
ApiScenarioExample example = new ApiScenarioExample();
ApiScenarioExample.Criteria criteria = example.createCriteria();
if (CollectionUtils.isEmpty(sameRequest)) {
criteria.andCustomNumEqualTo(scenarioWithBLOBs.getCustomNum())
.andProjectIdEqualTo(scenarioWithBLOBs.getProjectId());
} else {
if (StringUtils.equals("fullCoverage", apiTestImportRequest.getModeId())) {
criteria.andNameEqualTo(scenarioWithBLOBs.getName())
.andCustomNumEqualTo(scenarioWithBLOBs.getCustomNum())
.andProjectIdEqualTo(scenarioWithBLOBs.getProjectId())
.andIdNotEqualTo(sameRequest.get(0).getId());
}
}
if (criteria.isValid()) {
list = apiScenarioMapper.selectByExample(example);
}
}
if (CollectionUtils.isNotEmpty(list)) {
LogUtil.error("import scenario fail, custom num is exist: " + scenarioWithBLOBs.getCustomNum());
return scenarioWithBLOBs;
}
if (StringUtils.equals("fullCoverage", apiTestImportRequest.getModeId())) { if (StringUtils.equals("fullCoverage", apiTestImportRequest.getModeId())) {
_importCreate(sameRequest, batchMapper, scenarioWithBLOBs, apiTestImportRequest); _importCreate(sameRequest, batchMapper, scenarioWithBLOBs, apiTestImportRequest);
} else if (StringUtils.equals("incrementalMerge", apiTestImportRequest.getModeId())) { } else if (StringUtils.equals("incrementalMerge", apiTestImportRequest.getModeId())) {
@ -1695,16 +1723,23 @@ public class ApiAutomationService {
if (!CollectionUtils.isEmpty(data) && data.get(0) != null && data.get(0).getProjectId() != null) { if (!CollectionUtils.isEmpty(data) && data.get(0) != null && data.get(0).getProjectId() != null) {
num = getNextNum(data.get(0).getProjectId()); num = getNextNum(data.get(0).getProjectId());
project = projectMapper.selectByPrimaryKey(data.get(0).getProjectId()); project = projectMapper.selectByPrimaryKey(data.get(0).getProjectId());
request.setOpenCustomNum(project.getScenarioCustomNum());
} }
for (int i = 0; i < data.size(); i++) { for (int i = 0; i < data.size(); i++) {
ApiScenarioWithBLOBs item = data.get(i); ApiScenarioWithBLOBs item = data.get(i);
if (item.getName().length() > 255) { if (item.getName().length() > 255) {
item.setName(item.getName().substring(0, 255)); item.setName(item.getName().substring(0, 255));
} }
item.setNum(num++); item.setNum(num);
if (BooleanUtils.isTrue(project.getScenarioCustomNum()) && StringUtils.isBlank(item.getCustomNum())) { if (BooleanUtils.isFalse(project.getScenarioCustomNum())) {
// 如果未开启即使有自定值也直接覆盖
item.setCustomNum(String.valueOf(num)); item.setCustomNum(String.valueOf(num));
} else {
if (StringUtils.isBlank(item.getCustomNum())) {
item.setCustomNum(String.valueOf(num));
}
} }
num++;
importCreate(item, batchMapper, request); importCreate(item, batchMapper, request);
if (i % 300 == 0) { if (i % 300 == 0) {
sqlSession.flushStatements(); sqlSession.flushStatements();

View File

@ -239,9 +239,6 @@ public class ProjectService {
if (BooleanUtils.isTrue(project.getCustomNum())) { if (BooleanUtils.isTrue(project.getCustomNum())) {
testCaseService.updateTestCaseCustomNumByProjectId(project.getId()); testCaseService.updateTestCaseCustomNumByProjectId(project.getId());
} }
if (BooleanUtils.isTrue(project.getScenarioCustomNum())) {
apiAutomationService.updateCustomNumByProjectId(project.getId());
}
projectMapper.updateByPrimaryKeySelective(project); projectMapper.updateByPrimaryKeySelective(project);
} }

View File

@ -0,0 +1 @@
update api_scenario set custom_num = num where (custom_num is null or custom_num = '');

View File

@ -134,7 +134,7 @@
formData: { formData: {
file: undefined, file: undefined,
swaggerUrl: '', swaggerUrl: '',
modeId: this.$t('commons.not_cover'), modeId: 'incrementalMerge',
moduleId: '', moduleId: '',
}, },
rules: {}, rules: {},