From c5a541e829d75ad07e6083fd9493f76e18c60f20 Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Mon, 4 Sep 2023 11:28:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9C=A8=E5=BD=93=E5=89=8D=E8=A1=8C=E7=9A=84?= =?UTF-8?q?=E4=B8=8B=E6=96=B9=E5=A4=8D=E5=88=B6=E6=AD=A5=E9=AA=A4=E7=9A=84?= =?UTF-8?q?=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/controller/StepsController.java | 8 +++++--- .../sonic/controller/services/StepsService.java | 2 +- .../controller/services/impl/StepsServiceImpl.java | 14 +++++++++++++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java index ebdc556b..8c97e375 100644 --- a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java +++ b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java @@ -161,11 +161,13 @@ public RespModel> searchFindAll(@RequestParam(name = "proj @Operation(summary = "复制步骤", description = "测试用例复制其中一个步骤") @Parameters(value = { @Parameter(name = "id", description = "用例中需要被复制步骤Id"), + @Parameter(name = "toLast", description = "是否拷贝用例到最后一行", example = "true"), }) @GetMapping("/copy/steps") - public RespModel copyStepsIdByCase(@RequestParam(name = "id") int stepId) { - stepsService.copyStepsIdByCase(stepId); - + public RespModel copyStepsIdByCase(@RequestParam(name = "id") int stepId, + @RequestParam(name = "toLast", defaultValue = "true", required = false) + boolean toLast) { + stepsService.copyStepsIdByCase(stepId, toLast); return new RespModel<>(RespEnum.COPY_OK); } diff --git a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java index d9872b0a..31f7044d 100644 --- a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java +++ b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java @@ -69,7 +69,7 @@ public interface StepsService extends IService { CommentPage searchFindByProjectIdAndPlatform(int projectId, int platform, int page, int pageSize, String searchContent); - Boolean copyStepsIdByCase(Integer stepId); + Boolean copyStepsIdByCase(Integer stepId, boolean toLast); Boolean switchStep(int id, int type); diff --git a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java index d0f33a5f..1261774e 100644 --- a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java +++ b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java @@ -348,8 +348,9 @@ public CommentPage searchFindByProjectIdAndPlatform(int projectId, int @Override @Transactional(rollbackFor = Exception.class) - public Boolean copyStepsIdByCase(Integer stepId) { + public Boolean copyStepsIdByCase(Integer stepId, boolean toLast) { Steps steps = stepsMapper.selectById(stepId); + Integer originSortId = steps.getSort(); StepsDTO stepsCopyDTO = stepsService.handleStep(steps.convertTo(), false); save(steps.setId(null).setSort(stepsMapper.findMaxSort() + 1)); @@ -407,6 +408,17 @@ public Boolean copyStepsIdByCase(Integer stepId) { n++; } } + if (!toLast) { + // 插入到当前步骤的下一行,需要做特殊的排序逻辑处理 + StepSort tempStepSort = new StepSort(); + tempStepSort.setCaseId(steps.getCaseId()); + tempStepSort.setDirection("up"); + // 设置start为当前新增的步骤的sort + tempStepSort.setStartId(steps.getSort()); + // 设置end为之前复制出来的步骤的sort + tempStepSort.setEndId(originSortId); + sortSteps(tempStepSort); + } return true; } From 3db19f6fbe9f91983222073d281977e58d7be3b6 Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Mon, 4 Sep 2023 14:27:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=B0=86=E6=96=B0=E5=A2=9E=E5=8A=A0=E7=9A=84?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4=EF=BC=8C=E8=87=AA=E5=8A=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=B0=E6=8C=87=E5=AE=9A=E6=AD=A5=E9=AA=A4=E7=9A=84=E4=B8=8A?= =?UTF-8?q?=E9=9D=A2=E6=88=96=E4=B8=8B=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StepsController.java | 29 +++++++++++++++++++ .../controller/services/StepsService.java | 18 ++++++++++++ .../services/impl/StepsServiceImpl.java | 24 +++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java index 8c97e375..d6f6eed4 100644 --- a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java +++ b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/controller/StepsController.java @@ -186,4 +186,33 @@ public RespModel switchStep(@RequestParam(name = "id") int id, @RequestParam(nam } } + @WebAspect + @Operation(summary = "将新增的步骤排序到指定的步骤之前或之后", description = "将当前用例的最后一个步骤拖拽到指定步骤之前或之后") + @GetMapping("/stepSortTarget") + public RespModel stepSortTarget(@RequestParam(name = "targetStepId") int targetStepId, + @RequestParam(name = "addToTargetNext", defaultValue = "false") + boolean addToTargetNext) { + StepsDTO stepsDTO = stepsService.findById(targetStepId); + StepSort stepSort = new StepSort(); + stepSort.setDirection("up"); + stepSort.setCaseId(stepsDTO.getCaseId()); + // startId 要设置为当前用例中最大的sort + Integer maxStepSort = stepsService.findMaxStepSort(stepsDTO.getCaseId()); + stepSort.setStartId(maxStepSort); + // endId 取决于添加到目标step的前面,还是目标step的后面 + if (addToTargetNext) { + Integer nextStepSort = stepsService.findNextStepSort(stepsDTO.getCaseId(), targetStepId); + if (nextStepSort == null) { + // 已经是最后一个step了,直接返回 + return new RespModel<>(RespEnum.UPDATE_OK); + } else { + stepSort.setEndId(nextStepSort); + } + } else { + stepSort.setEndId(stepsDTO.getSort()); + } + stepsService.sortSteps(stepSort); + return new RespModel<>(RespEnum.UPDATE_OK); + } + } diff --git a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java index 31f7044d..8da5b099 100644 --- a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java +++ b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/StepsService.java @@ -74,4 +74,22 @@ CommentPage searchFindByProjectIdAndPlatform(int projectId, int platfo Boolean switchStep(int id, int type); List stepAndIndex(List needAllCopySteps); + + /** + * 找到指定用例中最后一个步骤的sort + * + * @param castId 用例的id + * @return 最后一个步骤的sort + */ + Integer findMaxStepSort(int castId); + + /** + * 找到指定用例的指定步骤,下一个step的sort值 + * + * @param castId 目标用例 + * @param targetStepId 目标步骤id + * @return 下一个step的sort值 + */ + Integer findNextStepSort(int castId, int targetStepId); + } diff --git a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java index 1261774e..03d2f5d7 100644 --- a/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java +++ b/sonic-server-controller/src/main/java/org/cloud/sonic/controller/services/impl/StepsServiceImpl.java @@ -434,6 +434,30 @@ public Boolean switchStep(int id, int type) { } } + @Override + public Integer findMaxStepSort(int castId) { + List stepsList = lambdaQuery().eq(Steps::getCaseId, castId) + .orderByDesc(Steps::getSort) + .list(); + if (stepsList != null && stepsList.size() > 0) { + return stepsList.get(0).getSort(); + } else { + return null; + } + } + + @Override + public Integer findNextStepSort(int castId, int targetStepId) { + List stepsList = lambdaQuery().eq(Steps::getCaseId, castId) + .orderByAsc(Steps::getSort) + .list(); + for (int i = 0; i < stepsList.size(); i++) { + if (stepsList.get(i).getId() == targetStepId) { + return i == stepsList.size() - 1 ? null : stepsList.get(i + 1).getSort(); + } + } + return null; + } /** * 记录一组步骤中他们所在的位置;ma