diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.java index 604aab5974bda5100acb7716643187e8a2531543..b4cb348f914480f08ad03f5525cdd43dc8acb8f9 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.java @@ -21,4 +21,6 @@ public interface ExtTestPlanTestCaseMapper { List getRecentTestedTestCase(@Param("request") QueryTestPlanCaseRequest request); List getPendingTestCases(@Param("request") QueryTestPlanCaseRequest request); + + List getStatusByPlanId(String planId); } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml index 2ee620d16b93d02ba8fb00679b4183e2c5996263..d82ed5dbba2738b6e5b6a581330ad9e0b739ae79 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestPlanTestCaseMapper.xml @@ -93,4 +93,9 @@ order by test_plan_test_case.update_time asc + \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/track/controller/TestPlanController.java b/backend/src/main/java/io/metersphere/track/controller/TestPlanController.java index 2a04d0e18600f07fe9c309657d0366b1783e0dba..e4dbba3a2369fb268f8b0f4f21119045eff3524f 100644 --- a/backend/src/main/java/io/metersphere/track/controller/TestPlanController.java +++ b/backend/src/main/java/io/metersphere/track/controller/TestPlanController.java @@ -70,6 +70,12 @@ public class TestPlanController { testPlanService.editTestPlan(testPlan); } + @PostMapping("/edit/status/{planId}") + @RequiresRoles(value = {RoleConstants.TEST_USER, RoleConstants.TEST_MANAGER}, logical = Logical.OR) + public void editTestPlanStatus(@PathVariable String planId){ + testPlanService.editTestPlanStatus(planId); + } + @PostMapping("/delete/{testPlanId}") @RequiresRoles(value = {RoleConstants.TEST_USER, RoleConstants.TEST_MANAGER}, logical = Logical.OR) public int deleteTestPlan(@PathVariable String testPlanId){ diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanService.java index c6ae03862aed655d524ea477792a3546a5955cd3..12c00e91ff93a747589808b9907986528a867351 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanService.java @@ -144,7 +144,8 @@ public class TestPlanService { sqlSession.flushStatements(); TestPlan testPlan = testPlanMapper.selectByPrimaryKey(request.getPlanId()); - if (StringUtils.equals(testPlan.getStatus(), TestPlanStatus.Prepare.name())) { + if (StringUtils.equals(testPlan.getStatus(), TestPlanStatus.Prepare.name()) + || StringUtils.equals(testPlan.getStatus(), TestPlanStatus.Completed.name())) { testPlan.setStatus(TestPlanStatus.Underway.name()); testPlanMapper.updateByPrimaryKey(testPlan); } @@ -344,4 +345,21 @@ public class TestPlanService { example.createCriteria().andIdIn(planIds); return testPlanMapper.selectByExample(example); } + + public void editTestPlanStatus(String planId) { + List statusList = extTestPlanTestCaseMapper.getStatusByPlanId(planId); + TestPlan testPlan = new TestPlan(); + testPlan.setId(planId); + + for (String status: statusList){ + if (StringUtils.equals(status, TestPlanTestCaseStatus.Prepare.name()) + || StringUtils.equals(status, TestPlanTestCaseStatus.Underway.name())) { + testPlan.setStatus(TestPlanStatus.Underway.name()); + testPlanMapper.updateByPrimaryKeySelective(testPlan); + return; + } + } + testPlan.setStatus(TestPlanStatus.Completed.name()); + testPlanMapper.updateByPrimaryKeySelective(testPlan); + } } diff --git a/frontend/src/business/components/track/case/components/TestCaseEdit.vue b/frontend/src/business/components/track/case/components/TestCaseEdit.vue index a8ac4ca8ea395be48f0c7e0eb1ecc4e5fbab631e..88bbae2d3e6a2cf9ca22c70597024408cc5ec70e 100644 --- a/frontend/src/business/components/track/case/components/TestCaseEdit.vue +++ b/frontend/src/business/components/track/case/components/TestCaseEdit.vue @@ -43,7 +43,7 @@ diff --git a/frontend/src/business/components/track/plan/view/comonents/StatusEdit.vue b/frontend/src/business/components/track/plan/view/comonents/StatusEdit.vue index 2856a3da44b9bd1a7ec3b41bd00e0f14b3ea8f7a..db5aefeeb7ef3f2ec6e2e31bf5c77617f9797783 100644 --- a/frontend/src/business/components/track/plan/view/comonents/StatusEdit.vue +++ b/frontend/src/business/components/track/plan/view/comonents/StatusEdit.vue @@ -34,6 +34,9 @@ props: { selectIds: { type: Set + }, + planId: { + type: String } }, methods: { @@ -51,6 +54,7 @@ this.$post('/test/plan/case/batch/edit' , param, () => { this.selectIds.clear(); this.status = ''; + this.$post('/test/plan/edit/status/' + this.planId); this.$success(this.$t('commons.save_success')); this.statusEditVisible = false; this.$emit('refresh'); diff --git a/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseEdit.vue b/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseEdit.vue index cfe5cddc015d3892f378d4072e395b051f987ee0..2e966cccd2a6dc73dc9cd356e544412f8bac1243 100644 --- a/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseEdit.vue +++ b/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseEdit.vue @@ -239,6 +239,7 @@ param.issues = JSON.stringify(this.testCase.issues); this.$post('/test/plan/case/edit', param, () => { this.$success(this.$t('commons.save_success')); + this.setPlanStatus(this.testCase.planId); }); }, handleNext() { @@ -309,6 +310,9 @@ }, addPLabel(str) { return "

" + str + "

"; + }, + setPlanStatus(planId) { + this.$post('/test/plan/edit/status/' + planId); } } } diff --git a/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseList.vue b/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseList.vue index ba1b2d812cb0ee69cbbdab3b1e91a28917aed799..9b770314362d12dba77106daeeeb3f50835321c5 100644 --- a/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseList.vue +++ b/frontend/src/business/components/track/plan/view/comonents/TestPlanTestCaseList.vue @@ -20,7 +20,7 @@ - +