diff --git a/test-test/src/main/java/com/test/test/controller/TestPlanController.java b/test-test/src/main/java/com/test/test/controller/TestPlanController.java new file mode 100644 index 0000000..116a52b --- /dev/null +++ b/test-test/src/main/java/com/test/test/controller/TestPlanController.java @@ -0,0 +1,82 @@ +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.test.domain.TestPlan; +import com.test.test.domain.qo.IDQO; +import com.test.test.domain.qo.TestPlanAddQO; +import com.test.test.domain.qo.TestPlanListQO; +import com.test.test.domain.vo.TestPlanListVO; +import com.test.test.service.ITestPlanService; +import jakarta.annotation.Resource; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 测试计划controller + */ +@Slf4j +@RestController +@RequestMapping("/test/testPlan") +public class TestPlanController extends BaseController { + + + @Resource + private ITestPlanService testPlanService; + + /** + * 查询测试计划列表 + */ + @GetMapping("/testPlanList") + public TableDataInfo planList(@Validated TestPlanListQO qo) { + startPage(); + List list = testPlanService.getPlanList(qo); + return getDataTable(list); + } + + /** + * 新增测试计划 + */ + @Log(title = "测试计划", businessType = BusinessType.INSERT) + @PostMapping("/addPlan") + public AjaxResult addPlan(@RequestBody TestPlanAddQO testPlanAddQO) { + return toAjax(testPlanService.insertTestPlan(testPlanAddQO)); + } + + /** + * 删除测试计划 + */ + @Log(title = "测试计划", businessType = BusinessType.DELETE) + @PostMapping("/deletePlan") + public AjaxResult deletePlan(@RequestBody IDQO qo) { + TestPlan testPlan = testPlanService.selectTestPlanById(qo.getId()); + testPlan.setDelFlag("1"); + return toAjax(testPlanService.updateTestPlan(testPlan)); + } + + /** + * 获取测试计划详细信息 + */ + @PostMapping("/planDetail") + public AjaxResult getInfo(@RequestBody IDQO qo) { + return success(testPlanService.selectTestPlanById(qo.getId())); + } + + /** + * 修改测试计划 + */ + @Log(title = "测试计划", businessType = BusinessType.UPDATE) + @PostMapping("/updatePlan") + public AjaxResult edit(@RequestBody TestPlan testPlan) { + return toAjax(testPlanService.updateTestPlan(testPlan)); + } +} diff --git a/test-test/src/main/java/com/test/test/domain/TestPlan.java b/test-test/src/main/java/com/test/test/domain/TestPlan.java new file mode 100644 index 0000000..1c0000a --- /dev/null +++ b/test-test/src/main/java/com/test/test/domain/TestPlan.java @@ -0,0 +1,56 @@ +package com.test.test.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.test.common.annotation.Excel; +import com.test.common.core.domain.BaseEntity; +import java.util.Date; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 测试计划实例表 test_plan + */ +@Getter +@Setter +@ToString +public class TestPlan extends BaseEntity { + + private static final long serialVersionUID = 3214537838879582503L; + + /** 主键 */ + private Long id; + + /** 测试计划编码 */ + @Excel(name = "测试计划编码") + private String serialNumber; + + /** 测试计划名称 */ + @Excel(name = "测试计划名称") + private String name; + + /** 状态(0,未开始,1,进行中,2,已完成,3,已终止) */ + @Excel(name = "状态(0,未开始,1,进行中,2,已完成,3,已终止)") + private String status; + + /** 负责人 */ + @Excel(name = "负责人") + private String manager; + + /** 测试计划开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "测试计划开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** 测试计划结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "测试计划结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date endTime; + + /** 版本 */ + @Excel(name = "版本") + private String version; + + /** 0,正常,1,删除 */ + private String delFlag; +} diff --git a/test-test/src/main/java/com/test/test/domain/qo/TestPlanAddQO.java b/test-test/src/main/java/com/test/test/domain/qo/TestPlanAddQO.java new file mode 100644 index 0000000..7cee011 --- /dev/null +++ b/test-test/src/main/java/com/test/test/domain/qo/TestPlanAddQO.java @@ -0,0 +1,52 @@ +package com.test.test.domain.qo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.test.common.core.domain.BaseEntity; +import java.util.Date; +import lombok.Data; + +/** + * 测试计划新增请求QO + * + * @author pfl + */ +@Data +public class TestPlanAddQO extends BaseEntity { + + private static final long serialVersionUID = 3693196640830164441L; + + /** 主键id */ + private Long id; + + /** 测试计划id */ + private Long planId; + + /** 测试计划编码 */ + private String serialNumber; + + /** 测试计划名称 */ + private String name; + + /** 状态(0,未开始,1,进行中,2,已完成,3,已终止) */ + private String status; + + /** 负责人 */ + private String manager; + + /** 测试计划开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date startTime; + + /** 测试计划结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date endTime; + + /** 版本 */ + private String version; + + /** 0,正常,1,删除 */ + private String delFlag; + + /** 关联需求id */ + private Long projectId; +} diff --git a/test-test/src/main/java/com/test/test/domain/qo/TestPlanListQO.java b/test-test/src/main/java/com/test/test/domain/qo/TestPlanListQO.java new file mode 100644 index 0000000..9cfa70a --- /dev/null +++ b/test-test/src/main/java/com/test/test/domain/qo/TestPlanListQO.java @@ -0,0 +1,52 @@ +package com.test.test.domain.qo; + +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * 查询测试计划列表请求参数qo + * + * @author pfl + */ +@Data +public class TestPlanListQO implements Serializable { + + + private static final long serialVersionUID = -1058615526393949211L; + + /** + * 状态 + */ + private String status; + + /** + * 负责人 + */ + private String manager; + + /** + * 测试计划名称 + */ + private String name; + + /** + * 测试计划开始时间起始时间 + */ + private Date startPlanTime; + + /** + * 测试计划开始时间结束时间 + */ + private Date endPlanTime; + + /** + * 测试计划截止时间起始时间 + */ + private Date startDeadline; + + /** + * 测试计划截止时间结束时间 + */ + private Date endDeadline; +} diff --git a/test-test/src/main/java/com/test/test/domain/vo/TestPlanListVO.java b/test-test/src/main/java/com/test/test/domain/vo/TestPlanListVO.java new file mode 100644 index 0000000..ac3d557 --- /dev/null +++ b/test-test/src/main/java/com/test/test/domain/vo/TestPlanListVO.java @@ -0,0 +1,53 @@ +package com.test.test.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.test.common.annotation.Excel; +import com.test.common.core.domain.BaseEntity; +import java.util.Date; +import lombok.Data; + +@Data +public class TestPlanListVO extends BaseEntity { + + private static final long serialVersionUID = 7768851691630986105L; + + /** 主键 */ + private Long id; + + /** 测试计划编码 */ + @Excel(name = "测试计划编码") + private String serialNumber; + + /** 测试计划名称 */ + @Excel(name = "测试计划名称") + private String name; + + /** 状态(0,未开始,1,进行中,2,已完成,3,已终止) */ + @Excel(name = "状态(0,未开始,1,进行中,2,已完成,3,已终止)") + private String status; + + /** 负责人 */ + @Excel(name = "负责人") + private String manager; + + /** 测试计划开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "测试计划开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** 测试计划结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "测试计划结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date endTime; + + /** 版本 */ + @Excel(name = "版本") + private String version; + + /** 0,正常,1,删除 */ + private String delFlag; + + /** 缺陷数量 */ + @Excel(name = "缺陷数量") + private String defectNum; +} diff --git a/test-test/src/main/java/com/test/test/mapper/TestPlanMapper.java b/test-test/src/main/java/com/test/test/mapper/TestPlanMapper.java new file mode 100644 index 0000000..b1e99e5 --- /dev/null +++ b/test-test/src/main/java/com/test/test/mapper/TestPlanMapper.java @@ -0,0 +1,44 @@ +package com.test.test.mapper; + +import com.test.test.domain.TestPlan; +import com.test.test.domain.qo.TestPlanListQO; +import com.test.test.domain.vo.TestPlanListVO; +import java.util.List; + +public interface TestPlanMapper { + + /** + * 查询测试计划列表 + * @param qo + * @return + */ + List selectTestPlanList(TestPlanListQO qo); + + /** + * 新增测试计划 + * @param testPlan + * @return + */ + int insertTestPlan(TestPlan testPlan); + + /** + * 根据id查询测试计划 + * @param id + * @return + */ + TestPlan selectTestPlanById(Long id); + + /** + * 修改测试计划 + * @param testPlan + * @return + */ + int updateTestPlan(TestPlan testPlan); + + /** + * 根据序列号查询测试计划id + * @param serialNumber + * @return + */ + Long selectPlanId(String serialNumber); +} diff --git a/test-test/src/main/java/com/test/test/mapper/TestProjectPlanMapper.java b/test-test/src/main/java/com/test/test/mapper/TestProjectPlanMapper.java new file mode 100644 index 0000000..6ec2b4c --- /dev/null +++ b/test-test/src/main/java/com/test/test/mapper/TestProjectPlanMapper.java @@ -0,0 +1,13 @@ +package com.test.test.mapper; + +import com.test.test.domain.qo.TestPlanAddQO; + +public interface TestProjectPlanMapper { + + /** + * 新增测试计划需求关联 + * @param testPlanAddQO + * @return + */ + int insertTestProjectPlan(TestPlanAddQO testPlanAddQO); +} diff --git a/test-test/src/main/java/com/test/test/service/ITestPlanService.java b/test-test/src/main/java/com/test/test/service/ITestPlanService.java new file mode 100644 index 0000000..d353279 --- /dev/null +++ b/test-test/src/main/java/com/test/test/service/ITestPlanService.java @@ -0,0 +1,44 @@ +package com.test.test.service; + +import com.test.test.domain.TestPlan; +import com.test.test.domain.qo.TestPlanAddQO; +import com.test.test.domain.qo.TestPlanListQO; +import com.test.test.domain.vo.TestPlanListVO; +import java.util.List; + +/** + * 测试计划Service接口 + * + * @author pfl + */ +public interface ITestPlanService { + + + /** + * 查询测试计划列表 + * @param qo + * @return + */ + List getPlanList(TestPlanListQO qo); + + /** + * 新增测试计划 + * @param testPlanAddQO + * @return + */ + public int insertTestPlan(TestPlanAddQO testPlanAddQO); + + /** + * 查询测试计划详情 + * @param id + * @return + */ + public TestPlan selectTestPlanById(Long id); + + /** + * 修改测试计划 + * @param testPlan + * @return + */ + public int updateTestPlan(TestPlan testPlan); +} diff --git a/test-test/src/main/java/com/test/test/service/impl/TestPlanServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/TestPlanServiceImpl.java new file mode 100644 index 0000000..e767dd2 --- /dev/null +++ b/test-test/src/main/java/com/test/test/service/impl/TestPlanServiceImpl.java @@ -0,0 +1,85 @@ +package com.test.test.service.impl; + +import com.test.common.utils.DateUtils; +import com.test.common.utils.bean.BeanUtils; +import com.test.test.domain.TestPlan; +import com.test.test.domain.qo.TestPlanAddQO; +import com.test.test.domain.qo.TestPlanListQO; +import com.test.test.domain.vo.TestPlanListVO; +import com.test.test.mapper.TestPlanMapper; +import com.test.test.mapper.TestProjectPlanMapper; +import com.test.test.service.ITestPlanService; +import jakarta.annotation.Resource; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 测试计划Service实现类 + * + * @author pfl + */ +@Service +public class TestPlanServiceImpl implements ITestPlanService { + + @Resource + private TestPlanMapper testPlanMapper; + + @Resource + private TestProjectPlanMapper testProjectPlanMapper; + + /** + * 查询测试计划列表 + * @param qo + * @return + */ + @Override + public List getPlanList(TestPlanListQO qo) { + return testPlanMapper.selectTestPlanList(qo); + } + + /** + * 新增测试计划 + * @param testPlanAddQO + * @return + */ + @Transactional + @Override + public int insertTestPlan(TestPlanAddQO testPlanAddQO) { + TestPlan testPlan = new TestPlan(); + BeanUtils.copyProperties(testPlanAddQO,testPlan); + testPlan.setCreateTime(DateUtils.getNowDate()); + testPlan.setDelFlag("0"); + testPlan.setStatus("0"); + // 新增测试计划 + testPlanMapper.insertTestPlan(testPlan); + testPlanAddQO.setCreateTime(DateUtils.getNowDate()); + Long planId = testPlanMapper.selectPlanId(testPlanAddQO.getSerialNumber()); + testPlanAddQO.setPlanId(planId); + testPlanAddQO.setDelFlag("0"); + //新增测试计划需求关联表 + return testProjectPlanMapper.insertTestProjectPlan(testPlanAddQO); + } + + + /** + * 查询测试计划详情 + * @param id + * @return + */ + @Override + public TestPlan selectTestPlanById(Long id) { + return testPlanMapper.selectTestPlanById(id); + } + + /** + * 修改测试计划 + * @param testPlan + * @return + */ + @Override + public int updateTestPlan(TestPlan testPlan) { + testPlan.setUpdateTime(DateUtils.getNowDate()); + return testPlanMapper.updateTestPlan(testPlan); + } +} diff --git a/test-test/src/main/resources/mapper/test/TestPlanMapper.xml b/test-test/src/main/resources/mapper/test/TestPlanMapper.xml new file mode 100644 index 0000000..c4e2287 --- /dev/null +++ b/test-test/src/main/resources/mapper/test/TestPlanMapper.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + SELECT id, + serial_number, + name, + status, + manager, + start_time, + end_time, + create_time, + update_time, + version, + del_flag + FROM test_plan + + + + insert into test_plan + + serial_number, + name, + status, + manager, + start_time, + end_time, + create_time, + update_time, + version, + del_flag, + + + #{serialNumber}, + #{name}, + #{status}, + #{manager}, + #{startTime}, + #{endTime}, + #{createTime}, + #{updateTime}, + #{version}, + #{delFlag}, + + + + + update test_plan + + serial_number = #{serialNumber}, + name = #{name}, + status = #{status}, + manager = #{manager}, + start_time = #{startTime}, + end_time = #{endTime}, + create_time = #{createTime}, + update_time = #{updateTime}, + version = #{version}, + del_flag = #{delFlag}, + + where id = #{id} + + + + + + + + \ No newline at end of file diff --git a/test-test/src/main/resources/mapper/test/TestProjectMapper.xml b/test-test/src/main/resources/mapper/test/TestProjectMapper.xml index a248256..32316bf 100644 --- a/test-test/src/main/resources/mapper/test/TestProjectMapper.xml +++ b/test-test/src/main/resources/mapper/test/TestProjectMapper.xml @@ -127,6 +127,7 @@ FROM test_project tp LEFT JOIN sys_user su ON su.user_id = tp.manager where 1=1 + AND tp.del_flag = '0' AND serial_number LIKE concat('%', #{serialNumber}, '%') diff --git a/test-test/src/main/resources/mapper/test/TestProjectPlanMapper.xml b/test-test/src/main/resources/mapper/test/TestProjectPlanMapper.xml new file mode 100644 index 0000000..9d94ccc --- /dev/null +++ b/test-test/src/main/resources/mapper/test/TestProjectPlanMapper.xml @@ -0,0 +1,26 @@ + + + + + + insert into test_project_plan + + project_id, + plan_id, + create_time, + update_time, + version, + del_flag, + + + #{projectId}, + #{planId}, + #{createTime}, + #{updateTime}, + #{version}, + #{delFlag}, + + + \ No newline at end of file diff --git a/test-ui/src/api/test/testPlan.js b/test-ui/src/api/test/testPlan.js new file mode 100644 index 0000000..04d4852 --- /dev/null +++ b/test-ui/src/api/test/testPlan.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +const api = { + testPlanList: 'test/testPlan/testPlanList', + addTestPlan: 'test/testPlan/addPlan', + delTestPlan: 'test/testPlan/deletePlan' +} + +export function getTestPlanList(data) { + return request({ + url: api.testPlanList, + method: 'get', + params: data + }) +} + +export function addTestPlan(data) { + return request({ + url: api.addTestPlan, + method: 'post', + data: data + }) +} + +export function delTestPlan(id) { + return request({ + url: api.delTestPlan, + method: 'post', + data: {id} + }) +} diff --git a/test-ui/src/router/index.js b/test-ui/src/router/index.js index 854d8d9..2fd72ea 100644 --- a/test-ui/src/router/index.js +++ b/test-ui/src/router/index.js @@ -228,6 +228,20 @@ export const constantRoutes = [ } ] }, + { + path: '/testplan/overview', + component: Layout, + hidden: true, + children: [ + { + path: '', + component: () => import('@/views/test/testplan/overview'), + name: 'overview', + noCache: true, + meta: { title: '测试计划', activeMenu: '/testplan' } + } + ] + }, ] // 动态路由,基于用户权限动态去加载 diff --git a/test-ui/src/views/test/testplan/index.vue b/test-ui/src/views/test/testplan/index.vue new file mode 100644 index 0000000..4f06495 --- /dev/null +++ b/test-ui/src/views/test/testplan/index.vue @@ -0,0 +1,460 @@ + + + + + diff --git a/test-ui/src/views/test/testplan/overview.vue b/test-ui/src/views/test/testplan/overview.vue new file mode 100644 index 0000000..1e949f6 --- /dev/null +++ b/test-ui/src/views/test/testplan/overview.vue @@ -0,0 +1,46 @@ + + + + + +