测试计划关联测试缺陷完善

This commit is contained in:
pfl
2025-05-06 18:51:57 +08:00
parent 7afae71c8a
commit d3cd149ca5
9 changed files with 190 additions and 51 deletions

View File

@@ -7,6 +7,8 @@ import com.test.common.core.page.TableDataInfo;
import com.test.common.enums.BusinessType;
import com.test.common.utils.poi.ExcelUtil;
import com.test.test.domain.TestPlanDefect;
import com.test.test.domain.qo.TestPlanDefectQO;
import com.test.test.domain.vo.TestPlanDefectVo;
import com.test.test.service.ITestPlanDefectService;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,10 +33,10 @@ public class TestPlanDefectController extends BaseController
* 查询测试计划测试缺陷关联列表
*/
@GetMapping("/list")
public TableDataInfo list(TestPlanDefect testPlanDefect)
public TableDataInfo list(TestPlanDefectQO testPlanDefect)
{
startPage();
List<TestPlanDefect> list = testPlanDefectService.selectTestPlanDefectList(testPlanDefect);
List<TestPlanDefectVo> list = testPlanDefectService.selectTestPlanDefectList(testPlanDefect);
return getDataTable(list);
}
@@ -43,10 +45,10 @@ public class TestPlanDefectController extends BaseController
*/
@Log(title = "测试计划测试缺陷关联", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, TestPlanDefect testPlanDefect)
public void export(HttpServletResponse response, TestPlanDefectQO testPlanDefect)
{
List<TestPlanDefect> list = testPlanDefectService.selectTestPlanDefectList(testPlanDefect);
ExcelUtil<TestPlanDefect> util = new ExcelUtil<TestPlanDefect>(TestPlanDefect.class);
List<TestPlanDefectVo> list = testPlanDefectService.selectTestPlanDefectList(testPlanDefect);
ExcelUtil<TestPlanDefectVo> util = new ExcelUtil<TestPlanDefectVo>(TestPlanDefectVo.class);
util.exportExcel(response, list, "测试计划测试缺陷关联数据");
}

View File

@@ -0,0 +1,38 @@
package com.test.test.domain.qo;
import com.test.common.core.domain.BaseEntity;
import lombok.Data;
/**
* 测试计划测试缺陷关联请求QO
*/
@Data
public class TestPlanDefectQO extends BaseEntity {
private static final long serialVersionUID = 3754531916096288164L;
/** 主键ID */
private Long id;
/** 测试计划主键ID */
private String planId;
/** 测试缺陷主键ID */
private String defectId;
/**
* 缺陷编码
*/
private String serialNumber;
/**
* 缺陷概要
*/
private String outline;
/** 测试用例类型(0,冒烟测试,1,功能测试,2,回归测试,3,准生产测试,4,生产验证) */
private String type;
/** 版本 */
private String version;
}

View File

@@ -0,0 +1,48 @@
package com.test.test.domain.vo;
import com.test.common.core.domain.BaseEntity;
import lombok.Data;
/**
* 测试计划测试缺陷关联返回Vo
*/
@Data
public class TestPlanDefectVo extends BaseEntity {
private static final long serialVersionUID = -4826790211276641073L;
/**
* 主键ID
*/
private Long id;
/**
* 测试计划关联缺陷ID
*/
private String defectId;
/**
* 测试计划关联缺陷ID
*/
private String serialNumber;
/**
* 测试计划关联缺陷概要
*/
private String summary;
/**
* 测试计划关联缺陷状态
*/
private String status;
/**
* 测试计划关联缺陷经办人
*/
private String manager;
/**
* 测试计划关联缺陷严重程度
*/
private String level;
}

View File

@@ -1,7 +1,8 @@
package com.test.test.mapper;
import com.test.test.domain.TestPlanDefect;
import com.test.test.domain.qo.TestPlanDefectQO;
import com.test.test.domain.vo.TestPlanDefectVo;
import java.util.List;
/**
@@ -26,7 +27,7 @@ public interface TestPlanDefectMapper
* @param testPlanDefect 测试计划测试缺陷关联
* @return 测试计划测试缺陷关联集合
*/
public List<TestPlanDefect> selectTestPlanDefectList(TestPlanDefect testPlanDefect);
public List<TestPlanDefectVo> selectTestPlanDefectList(TestPlanDefectQO testPlanDefect);
/**
* 新增测试计划测试缺陷关联

View File

@@ -2,6 +2,8 @@ package com.test.test.service;
import com.test.test.domain.TestPlanDefect;
import com.test.test.domain.qo.TestPlanDefectQO;
import com.test.test.domain.vo.TestPlanDefectVo;
import java.util.List;
/**
@@ -26,7 +28,7 @@ public interface ITestPlanDefectService
* @param testPlanDefect 测试计划测试缺陷关联
* @return 测试计划测试缺陷关联集合
*/
public List<TestPlanDefect> selectTestPlanDefectList(TestPlanDefect testPlanDefect);
public List<TestPlanDefectVo> selectTestPlanDefectList(TestPlanDefectQO testPlanDefect);
/**
* 新增测试计划测试缺陷关联

View File

@@ -2,6 +2,8 @@ package com.test.test.service.impl;
import com.test.common.utils.DateUtils;
import com.test.test.domain.TestPlanDefect;
import com.test.test.domain.qo.TestPlanDefectQO;
import com.test.test.domain.vo.TestPlanDefectVo;
import com.test.test.mapper.TestPlanDefectMapper;
import com.test.test.service.ITestPlanDefectService;
import jakarta.annotation.Resource;
@@ -40,7 +42,7 @@ public class TestPlanDefectServiceImpl implements ITestPlanDefectService
* @return 测试计划测试缺陷关联
*/
@Override
public List<TestPlanDefect> selectTestPlanDefectList(TestPlanDefect testPlanDefect)
public List<TestPlanDefectVo> selectTestPlanDefectList(TestPlanDefectQO testPlanDefect)
{
return testPlanDefectMapper.selectTestPlanDefectList(testPlanDefect);
}

View File

@@ -19,14 +19,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, plan_id, defect_id, type, create_time, update_time, version, del_flag from test_plan_defect
</sql>
<select id="selectTestPlanDefectList" parameterType="TestPlanDefect" resultMap="TestPlanDefectResult">
<include refid="selectTestPlanDefectVo"/>
<where>
<if test="planId != null and planId != ''"> and plan_id = #{planId}</if>
<if test="defectId != null and defectId != ''"> and defect_id = #{defectId}</if>
<if test="type != null and type != ''"> and type = #{type}</if>
<if test="version != null and version != ''"> and version = #{version}</if>
</where>
<select id="selectTestPlanDefectList" parameterType="TestPlanDefectQO" resultType="TestPlanDefectVo">
SELECT
tpd.id,
tpd.defect_id AS defectId,
td.serial_number AS serialNumber,
td.outline AS summary,
td.create_time AS createTime,
td.status,
su.user_name AS manager,
td.level
FROM test_plan_defect tpd
LEFT JOIN test_defect td ON td.id = tpd.defect_id
LEFT JOIN sys_user su ON su.user_id = td.manager
where 1=1
AND tpd.del_flag = '0'
<if test="serialNumber != null and serialNumber != ''">
AND td.serial_number LIKE concat('%', #{serialNumber}, '%')
</if>
<if test="outline != null and outline != ''">
AND td.outline LIKE concat('%', #{outline}, '%')
</if>
<if test="planId != null and planId != ''">
AND tpd.plan_id = #{planId}
</if>
<if test="type != null">
AND tpd.type = #{type}
</if>
</select>
<select id="selectTestPlanDefectById" parameterType="Long" resultMap="TestPlanDefectResult">

View File

@@ -2,6 +2,7 @@ import request from '@/utils/request'
const api = {
delRelDefect: 'testPlan/defect/list',
getDefectList: 'testPlan/defect/list',
}
export function delRelDefect(data) {
@@ -11,3 +12,11 @@ export function delRelDefect(data) {
data
})
}
export function getDefectList(data) {
return request({
url: api.getDefectList,
method: 'get',
params: data
})
}

View File

@@ -22,9 +22,10 @@
@click="handleCollapse(!activeNames.includes('1'))"
>高级筛选
</el-button>
<el-button icon="el-icon-plus" type="primary" size="medium" style="margin-left: 10px;" @click="relateCaseVue">
<el-button icon="el-icon-plus" type="primary" size="medium" style="margin-left: 10px;" @click="relateDefect">
关联缺陷
</el-button>
<el-button type="primary" plain icon="el-icon-download" size="medium" :disabled="isExecuteVisible">全部导出</el-button>
<el-button
type="danger"
plain
@@ -81,11 +82,19 @@
<el-Table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
<el-table-column type="selection"/>
<el-table-column prop="caseName" label="ID" align="center"/>
<el-table-column prop="executeResult" label="概要" align="center"/>
<el-table-column prop="createBy" label="状态" align="center"/>
<el-table-column prop="executeBy" label="经办人" align="center"/>
<el-table-column prop="executeTime" label="严重程度" align="center"/>
<el-table-column prop="serialNumber" label="ID" align="center"/>
<el-table-column prop="summary" label="概要" align="center"/>
<el-table-column prop="status" label="状态" align="center">
<template #default="{ row }">
<dict-tag :options="dict.type.bug_status" :value="row.status"/>
</template>
</el-table-column>
<el-table-column prop="manager" label="经办人" align="center"/>
<el-table-column prop="level" label="严重程度" align="center">
<template #default="{ row }">
<dict-tag :options="dict.type.severity_level" :value="row.level"/>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"/>
<el-table-column label="操作" align="left" fixed="right">
<template slot-scope="scope">
@@ -105,13 +114,21 @@
/>
<el-dialog title="关联缺陷" :visible.sync="open" width="1000px" v-loading="submitLoading" append-to-body>
<el-table v-loading="relLoading" :data="relList" @selection-change="handleSelectionChange">
<el-table v-loading="relLoading" :data="relList" @selection-change="handleSelectionChange">
<el-table-column type="selection"/>
<el-table-column prop="caseName" label="ID" align="center"/>
<el-table-column prop="executeResult" label="概要" align="center"/>
<el-table-column prop="createBy" label="状态" align="center"/>
<el-table-column prop="executeBy" label="经办人" align="center"/>
<el-table-column prop="executeTime" label="严重程度" align="center"/>
<el-table-column prop="serialNumber" label="ID" align="center"/>
<el-table-column prop="outline" label="概要" align="center"/>
<el-table-column prop="status" label="状态" align="center">
<template #default="{ row }">
<dict-tag :options="dict.type.bug_status" :value="row.status"/>
</template>
</el-table-column>
<el-table-column prop="manager" label="经办人" align="center"/>
<el-table-column prop="level" label="严重程度" align="center">
<template #default="{ row }">
<dict-tag :options="dict.type.severity_level" :value="row.level"/>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"/>
</el-table>
<span slot="footer" class="dialog-footer">
@@ -123,17 +140,17 @@
</template>
<script>
import {getPlanCaseList, saveRelate} from "@/api/test/planCase";
import {saveRelate} from "@/api/test/planCase";
import SimpleOptions from "@/components/FormItem/option/SimpleOptions.vue";
import RelateCase from "@/views/test/testplan/execute/relateCase.vue";
import page1 from "../../case/detail/page1.vue";
import {runTestPlanCase} from "../../../../api/test/planCase";
import {delRelDefect} from "@/api/test/planDefect";
import {delRelDefect, getDefectList} from "@/api/test/planDefect";
import {getBugList} from "@/api/test/bug";
export default {
name: 'project',
components: {page1, SimpleOptions, RelateCase},
dicts: ['priority_level', 'project_source', 'project_type', 'status'],
dicts: ['severity_level', 'bug_status'],
props: {
planId: {
type: String,
@@ -168,7 +185,8 @@ export default {
selectedData: [],
managerList: [],
queryParams: {
caseName: '',
serialNumber: '',
outline: '',
planId: '',
type: 0,
pageNum: 1,
@@ -180,7 +198,7 @@ export default {
created() {
this.queryParams.planId = this.planId;
this.title = this.name;
// this.getList();
this.getList();
},
computed: {
placeholderText() {
@@ -206,12 +224,19 @@ export default {
},
// 搜索
handleQuery() {
if (this.select === '1') {
this.queryParams.outline = this.query;
this.queryParams.serialNumber = '';
} else if (this.select === '2') {
this.queryParams.serialNumber = this.query;
this.queryParams.outline = '';
}
this.getList();
},
relateCaseVue() {
relateDefect() {
this.open = true;
this.reset();
this.$refs.relateCase.getList()
this.getRelList()
},
/** 查询列表 */
getList() {
@@ -219,7 +244,7 @@ export default {
const queryParams = {
...this.queryParams
}
getPlanDefectList(queryParams).then(list => {
getDefectList(queryParams).then(list => {
this.list = list.rows;
this.total = list.total;
if (this.total > 0) {
@@ -230,19 +255,12 @@ export default {
this.loading = false
})
},
handleRunAll() {
this.loading = true;
const queryParams = {
planId: this.queryParams.planId,
type: this.queryParams.type
}
this.$modal.confirm('是否确认执行全部接口用例?').then(function () {
return runTestPlanCase(queryParams);
}).then((res) => {
this.$modal.msgSuccess("提交执行成功");
this.open = true;
this.loading = false;
});
getRelList() {
this.relLoading = true
getBugList(this.queryParams).then(list => {
this.relList = list.rows;
this.relLoading = false
})
},
// 表单重置
reset() {