diff --git a/test-test/src/main/java/com/test/test/controller/TestTaskCaseController.java b/test-test/src/main/java/com/test/test/controller/TestTaskCaseController.java new file mode 100644 index 0000000..8d45427 --- /dev/null +++ b/test-test/src/main/java/com/test/test/controller/TestTaskCaseController.java @@ -0,0 +1,47 @@ +package com.test.test.controller; + +import com.test.common.annotation.Log; +import com.test.common.core.controller.BaseController; +import com.test.common.core.domain.AjaxResult; +import com.test.common.core.page.TableDataInfo; +import com.test.common.enums.BusinessType; +import com.test.common.utils.DateUtils; +import com.test.test.domain.TestTask; +import com.test.test.domain.TestTaskCase; +import com.test.test.domain.qo.GroupIdQO; +import com.test.test.domain.qo.IDQO; +import com.test.test.service.ITestTaskCaseService; +import com.test.test.service.ITestTaskService; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 定时任务用例关联Controller + */ +@RestController +@RequestMapping("/test/taskCase") +public class TestTaskCaseController extends BaseController { + @Resource + private ITestTaskCaseService testTaskCaseService; + + /** + * 新增定时任务用例关联 + */ + @Log(title = "定时任务用例关联", businessType = BusinessType.INSERT) + @PostMapping("/add") + public AjaxResult add(@RequestBody TestTaskCase testTaskCase) { + return toAjax(testTaskCaseService.insertTestTaskCase(testTaskCase)); + } + + /** + * 删除定时任务用例关联 + */ + @Log(title = "定时任务用例关联", businessType = BusinessType.DELETE) + @PostMapping("/del") + public AjaxResult remove(@RequestBody TestTaskCase testTaskCase) { + return toAjax(testTaskCaseService.deleteTestTaskCase(testTaskCase)); + } +} diff --git a/test-test/src/main/java/com/test/test/controller/TestTaskController.java b/test-test/src/main/java/com/test/test/controller/TestTaskController.java new file mode 100644 index 0000000..c200821 --- /dev/null +++ b/test-test/src/main/java/com/test/test/controller/TestTaskController.java @@ -0,0 +1,77 @@ +package com.test.test.controller; + +import com.test.common.annotation.Log; +import com.test.common.core.controller.BaseController; +import com.test.common.core.domain.AjaxResult; +import com.test.common.core.page.TableDataInfo; +import com.test.common.enums.BusinessType; +import com.test.common.utils.DateUtils; +import com.test.test.domain.TestCase; +import com.test.test.domain.TestTask; +import com.test.test.domain.qo.GroupIdQO; +import com.test.test.domain.qo.IDQO; +import com.test.test.service.ITestTaskService; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 定时任务Controller + */ +@RestController +@RequestMapping("/test/task") +public class TestTaskController extends BaseController { + @Resource + private ITestTaskService testTaskService; + + /** + * 查询定时任务列表 + */ + @GetMapping("/list") + public TableDataInfo list(@Validated GroupIdQO qo) { + startPage(); + List list = testTaskService.selectTestTaskList(qo); + return getDataTable(list); + } + + /** + * 获取定时任务详细信息 + */ + @PostMapping(value = "/detail") + public AjaxResult getInfo(@RequestBody IDQO qo) { + return success(testTaskService.selectTestTaskById(qo.getId())); + } + + /** + * 新增定时任务 + */ + @Log(title = "定时任务", businessType = BusinessType.INSERT) + @PostMapping("/add") + public AjaxResult add(@RequestBody TestTask testTask) { + testTask.setCreateBy(getLoginUser().getUsername()); + testTask.setCreateTime(DateUtils.getNowDate()); + return toAjax(testTaskService.insertTestTask(testTask)); + } + + /** + * 修改定时任务 + */ + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + public AjaxResult edit(@RequestBody TestTask testTask) { + return toAjax(testTaskService.updateTestTask(testTask)); + } + + /** + * 删除定时任务 + */ + @Log(title = "定时任务", businessType = BusinessType.DELETE) + @PostMapping("/del") + public AjaxResult remove(@RequestBody IDQO qo) { + return toAjax(testTaskService.deleteTestTaskById(qo.getId())); + } + + +} diff --git a/test-test/src/main/java/com/test/test/domain/vo/TestTaskDetailVO.java b/test-test/src/main/java/com/test/test/domain/vo/TestTaskDetailVO.java new file mode 100644 index 0000000..9af6fd6 --- /dev/null +++ b/test-test/src/main/java/com/test/test/domain/vo/TestTaskDetailVO.java @@ -0,0 +1,19 @@ +package com.test.test.domain.vo; + +import com.test.test.domain.TestCase; +import com.test.test.domain.TestTask; +import lombok.Data; + +import java.util.List; + +@Data +public class TestTaskDetailVO { + private TestTask task; + private List caseList; + + @Data + public static class TestCaseVo { + private TestCase testCase; + private Long sort; + } +} diff --git a/test-test/src/main/java/com/test/test/mapper/TestTaskCaseMapper.java b/test-test/src/main/java/com/test/test/mapper/TestTaskCaseMapper.java index 1b9596b..2fe0b53 100644 --- a/test-test/src/main/java/com/test/test/mapper/TestTaskCaseMapper.java +++ b/test-test/src/main/java/com/test/test/mapper/TestTaskCaseMapper.java @@ -66,4 +66,8 @@ public interface TestTaskCaseMapper * @return */ public List selectTestTaskCaseListByTaskId(Long taskId); + + Long max(Long taskId); + + int deleteTestTaskCase(TestTaskCase testTaskCase); } diff --git a/test-test/src/main/java/com/test/test/service/ITestTaskCaseService.java b/test-test/src/main/java/com/test/test/service/ITestTaskCaseService.java index 64028a8..8dde43d 100644 --- a/test-test/src/main/java/com/test/test/service/ITestTaskCaseService.java +++ b/test-test/src/main/java/com/test/test/service/ITestTaskCaseService.java @@ -59,4 +59,6 @@ public interface ITestTaskCaseService * @return 结果 */ public int deleteTestTaskCaseByTaskId(Long taskId); + + int deleteTestTaskCase(TestTaskCase testTaskCase); } diff --git a/test-test/src/main/java/com/test/test/service/ITestTaskService.java b/test-test/src/main/java/com/test/test/service/ITestTaskService.java index a07ee25..7859777 100644 --- a/test-test/src/main/java/com/test/test/service/ITestTaskService.java +++ b/test-test/src/main/java/com/test/test/service/ITestTaskService.java @@ -2,6 +2,7 @@ package com.test.test.service; import com.test.test.domain.TestTask; import com.test.test.domain.qo.GroupIdQO; +import com.test.test.domain.vo.TestTaskDetailVO; import java.util.List; @@ -12,7 +13,7 @@ public interface ITestTaskService { /** * 查询自动化测试 */ - TestTask selectTestTaskById(Long id); + TestTaskDetailVO selectTestTaskById(Long id); /** * 查询自动化测试列表 diff --git a/test-test/src/main/java/com/test/test/service/impl/TestTaskCaseServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/TestTaskCaseServiceImpl.java index 3cc4f2f..7fdadfd 100644 --- a/test-test/src/main/java/com/test/test/service/impl/TestTaskCaseServiceImpl.java +++ b/test-test/src/main/java/com/test/test/service/impl/TestTaskCaseServiceImpl.java @@ -15,8 +15,7 @@ import java.util.List; * @date 2025-02-21 */ @Service -public class TestTaskCaseServiceImpl implements ITestTaskCaseService -{ +public class TestTaskCaseServiceImpl implements ITestTaskCaseService { @Resource private TestTaskCaseMapper testTaskCaseMapper; @@ -27,8 +26,7 @@ public class TestTaskCaseServiceImpl implements ITestTaskCaseService * @return 自动化测试和用例关联 */ @Override - public TestTaskCase selectTestTaskCaseByTaskId(Long taskId) - { + public TestTaskCase selectTestTaskCaseByTaskId(Long taskId) { return testTaskCaseMapper.selectTestTaskCaseByTaskId(taskId); } @@ -39,8 +37,7 @@ public class TestTaskCaseServiceImpl implements ITestTaskCaseService * @return 自动化测试和用例关联 */ @Override - public List selectTestTaskCaseList(TestTaskCase testTaskCase) - { + public List selectTestTaskCaseList(TestTaskCase testTaskCase) { return testTaskCaseMapper.selectTestTaskCaseList(testTaskCase); } @@ -51,8 +48,8 @@ public class TestTaskCaseServiceImpl implements ITestTaskCaseService * @return 结果 */ @Override - public int insertTestTaskCase(TestTaskCase testTaskCase) - { + public int insertTestTaskCase(TestTaskCase testTaskCase) { + testTaskCase.setSort(testTaskCaseMapper.max(testTaskCase.getTaskId()) + 1); return testTaskCaseMapper.insertTestTaskCase(testTaskCase); } @@ -63,8 +60,7 @@ public class TestTaskCaseServiceImpl implements ITestTaskCaseService * @return 结果 */ @Override - public int updateTestTaskCase(TestTaskCase testTaskCase) - { + public int updateTestTaskCase(TestTaskCase testTaskCase) { return testTaskCaseMapper.updateTestTaskCase(testTaskCase); } @@ -75,8 +71,7 @@ public class TestTaskCaseServiceImpl implements ITestTaskCaseService * @return 结果 */ @Override - public int deleteTestTaskCaseByTaskIds(Long[] taskIds) - { + public int deleteTestTaskCaseByTaskIds(Long[] taskIds) { return testTaskCaseMapper.deleteTestTaskCaseByTaskIds(taskIds); } @@ -87,8 +82,12 @@ public class TestTaskCaseServiceImpl implements ITestTaskCaseService * @return 结果 */ @Override - public int deleteTestTaskCaseByTaskId(Long taskId) - { + public int deleteTestTaskCaseByTaskId(Long taskId) { return testTaskCaseMapper.deleteTestTaskCaseByTaskId(taskId); } + + @Override + public int deleteTestTaskCase(TestTaskCase testTaskCase) { + return testTaskCaseMapper.deleteTestTaskCase(testTaskCase); + } } diff --git a/test-test/src/main/java/com/test/test/service/impl/TestTaskServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/TestTaskServiceImpl.java index ae9b3cb..da43bf9 100644 --- a/test-test/src/main/java/com/test/test/service/impl/TestTaskServiceImpl.java +++ b/test-test/src/main/java/com/test/test/service/impl/TestTaskServiceImpl.java @@ -3,6 +3,7 @@ package com.test.test.service.impl; import com.test.common.utils.DateUtils; import com.test.test.domain.*; import com.test.test.domain.qo.GroupIdQO; +import com.test.test.domain.vo.TestTaskDetailVO; import com.test.test.mapper.*; import com.test.test.service.ITestTaskService; import jakarta.annotation.Resource; @@ -42,8 +43,18 @@ public class TestTaskServiceImpl implements ITestTaskService { * 查询自动化测试 */ @Override - public TestTask selectTestTaskById(Long id) { - return testTaskMapper.selectTestTaskById(id); + public TestTaskDetailVO selectTestTaskById(Long id) { + TestTaskDetailVO testTaskDetailVO = new TestTaskDetailVO(); + testTaskDetailVO.setTask(testTaskMapper.selectTestTaskById(id)); + List caseList = new ArrayList<>(); + testTaskCaseMapper.selectTestTaskCaseListByTaskId(id).forEach(testTaskCase -> { + TestTaskDetailVO.TestCaseVo testCase = new TestTaskDetailVO.TestCaseVo(); + testCase.setSort(testTaskCase.getSort()); + testCase.setTestCase(testCaseMapper.selectTestCaseById(testTaskCase.getCaseId())); + caseList.add(testCase); + }); + testTaskDetailVO.setCaseList(caseList); + return testTaskDetailVO; } /** @@ -98,7 +109,7 @@ public class TestTaskServiceImpl implements ITestTaskService { */ @Override public boolean executeTestTaskById(Long id, Integer triggerType, String environment, String jmeterHomePath, String operUser) { - TestTask testTask = this.selectTestTaskById(id); + TestTask testTask = testTaskMapper.selectTestTaskById(id); if (testTask == null || testTask.getStatus() == null || testTask.getStatus() > 0 || "2".equals(testTask.getDelFlag())) { log.error("定时任务已删除或未启用,不能执行!"); diff --git a/test-test/src/main/resources/mapper/test/TestTaskCaseMapper.xml b/test-test/src/main/resources/mapper/test/TestTaskCaseMapper.xml index 17fe586..b158cac 100644 --- a/test-test/src/main/resources/mapper/test/TestTaskCaseMapper.xml +++ b/test-test/src/main/resources/mapper/test/TestTaskCaseMapper.xml @@ -60,9 +60,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + delete from test_task_case where case_id = #{caseId} and task_id = #{taskId} + + + + + diff --git a/test-ui/src/api/test/taskCase.js b/test-ui/src/api/test/taskCase.js new file mode 100644 index 0000000..69e218c --- /dev/null +++ b/test-ui/src/api/test/taskCase.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +// 新增用例 +export function addTaskCase(data) { + return request({ + url: '/test/taskCase/add', + method: 'post', + data: data + }) +} + +// 删除用例 +export function delTaskCase(data) { + return request({ + url: '/test/taskCase/del', + method: 'post', + data: data + }) +} diff --git a/test-ui/src/views/test/task/edit/caseTable.vue b/test-ui/src/views/test/task/edit/caseTable.vue new file mode 100644 index 0000000..8809723 --- /dev/null +++ b/test-ui/src/views/test/task/edit/caseTable.vue @@ -0,0 +1,82 @@ + + + diff --git a/test-ui/src/views/test/task/edit/clickOutside.js b/test-ui/src/views/test/task/edit/clickOutside.js deleted file mode 100644 index f4019d3..0000000 --- a/test-ui/src/views/test/task/edit/clickOutside.js +++ /dev/null @@ -1,18 +0,0 @@ -// clickOutside.js -export default { - bind(el, binding, vnode) { - el.clickOutsideEvent = function (event) { - // 检查点击事件的目标元素是否是绑定指令的元素或其子元素 - if (!(el === event.target || el.contains(event.target))) { - // 如果不是,则调用传递给指令的方法 - vnode.context[binding.expression](event); - } - }; - // 添加事件监听器 - document.body.addEventListener("click", el.clickOutsideEvent); - }, - unbind(el) { - // 移除事件监听器 - document.body.removeEventListener("click", el.clickOutsideEvent); - }, -}; diff --git a/test-ui/src/views/test/task/edit/executionRecord.vue b/test-ui/src/views/test/task/edit/executionRecord.vue index 649104e..f256c7c 100644 --- a/test-ui/src/views/test/task/edit/executionRecord.vue +++ b/test-ui/src/views/test/task/edit/executionRecord.vue @@ -1,41 +1,17 @@ @@ -451,20 +234,17 @@ export default { border: 1px solid #ebf0fa; border-radius: 4px; display: flex; - justify-content: space-between; padding: 16px 8px; margin: 16px 0; } .mission_left { display: flex; flex-direction: column; - margin-right: 32px; } .min { display: flex; border: 1px solid transparent; border-radius: 4px; - display: flex; padding: 0 12px; position: relative; } @@ -475,9 +255,9 @@ export default { font-size: 12px; line-height: 20px; margin-right: 16px; + min-width: 60px; } .wrapper { - width: 948px; background-color: #f3f4f9; border-radius: 4px; display: flex; @@ -536,6 +316,7 @@ export default { display: flex; align-items: center; padding: 12px 12px 0 12px; + margin-top: 12px; span { align-items: center; color: #8e9eb1; @@ -588,19 +369,6 @@ export default { border-radius: 4px; height: 32px; } -.form-container { - display: flex; - border: 1px solid #ebf0fa; - border-radius: 4px; - padding-bottom: 16px; - margin-bottom: 16px; - .form-container-left { - border-right: 1px solid #e3e8f2; - display: flex; - flex-direction: column; - // width: 280px; - } -} .menu-list-item { display: flex; justify-content: space-between; diff --git a/test-ui/src/views/test/task/edit/test1.vue b/test-ui/src/views/test/task/edit/test1.vue deleted file mode 100644 index 7d5e2f2..0000000 --- a/test-ui/src/views/test/task/edit/test1.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/test-ui/src/views/test/task/edit/test2.vue b/test-ui/src/views/test/task/edit/test2.vue deleted file mode 100644 index 6d2fcd6..0000000 --- a/test-ui/src/views/test/task/edit/test2.vue +++ /dev/null @@ -1,217 +0,0 @@ - - - - -