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 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) {
request.setId(UUID.randomUUID().toString());
checkNameExist(request);
int nextNum = getNextNum(request.getProjectId());
if (StringUtils.isBlank(request.getCustomNum())) {
request.setCustomNum(String.valueOf(nextNum));
}
checkScenarioNum(request);
final ApiScenarioWithBLOBs scenario = buildSaveScenario(request);
scenario.setVersion(0);
scenario.setCreateTime(System.currentTimeMillis());
scenario.setNum(getNextNum(request.getProjectId()));
scenario.setNum(nextNum);
List<ApiMethodUrlDTO> useUrl = this.parseUrl(scenario);
scenario.setUseUrl(JSONArray.toJSONString(useUrl));
@ -287,20 +291,16 @@ public class ApiAutomationService {
}
private void checkScenarioNum(SaveApiScenarioRequest request) {
if (StringUtils.isNotBlank(request.getCustomNum())) {
String projectId = request.getProjectId();
Project project = projectMapper.selectByPrimaryKey(projectId);
if (project != null) {
Boolean customNum = project.getScenarioCustomNum();
// 未开启自定义ID
if (!customNum) {
request.setCustomNum(null);
} else {
checkCustomNumExist(request);
}
} else {
if (project == null) {
MSException.throwException("add scenario fail, project is not find.");
}
Boolean openCustomNum = project.getScenarioCustomNum();
if (BooleanUtils.isTrue(openCustomNum)) {
checkCustomNumExist(request);
}
}
@ -312,7 +312,7 @@ public class ApiAutomationService {
.andIdNotEqualTo(request.getId());
List<ApiScenario> list = apiScenarioMapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(list)) {
MSException.throwException("自定义ID已存在!");
MSException.throwException("自定义ID "+ request.getCustomNum() +" 已存在!");
}
}
@ -1671,6 +1671,34 @@ public class ApiAutomationService {
scenarioWithBLOBs.setDescription(request.getDescription());
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())) {
_importCreate(sameRequest, batchMapper, scenarioWithBLOBs, apiTestImportRequest);
} 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) {
num = getNextNum(data.get(0).getProjectId());
project = projectMapper.selectByPrimaryKey(data.get(0).getProjectId());
request.setOpenCustomNum(project.getScenarioCustomNum());
}
for (int i = 0; i < data.size(); i++) {
ApiScenarioWithBLOBs item = data.get(i);
if (item.getName().length() > 255) {
item.setName(item.getName().substring(0, 255));
}
item.setNum(num++);
if (BooleanUtils.isTrue(project.getScenarioCustomNum()) && StringUtils.isBlank(item.getCustomNum())) {
item.setNum(num);
if (BooleanUtils.isFalse(project.getScenarioCustomNum())) {
// 如果未开启即使有自定值也直接覆盖
item.setCustomNum(String.valueOf(num));
} else {
if (StringUtils.isBlank(item.getCustomNum())) {
item.setCustomNum(String.valueOf(num));
}
}
num++;
importCreate(item, batchMapper, request);
if (i % 300 == 0) {
sqlSession.flushStatements();

View File

@ -239,9 +239,6 @@ public class ProjectService {
if (BooleanUtils.isTrue(project.getCustomNum())) {
testCaseService.updateTestCaseCustomNumByProjectId(project.getId());
}
if (BooleanUtils.isTrue(project.getScenarioCustomNum())) {
apiAutomationService.updateCustomNumByProjectId(project.getId());
}
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: {
file: undefined,
swaggerUrl: '',
modeId: this.$t('commons.not_cover'),
modeId: 'incrementalMerge',
moduleId: '',
},
rules: {},