diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReport.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReport.java new file mode 100644 index 0000000000..810e02d08a --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReport.java @@ -0,0 +1,145 @@ +package io.metersphere.plan.domain; + +import io.metersphere.validation.groups.Created; +import io.metersphere.validation.groups.Updated; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; + +@Data +public class TestPlanReport implements Serializable { + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report.id.not_blank}", groups = {Updated.class}) + @Size(min = 1, max = 50, message = "{test_plan_report.id.length_range}", groups = {Created.class, Updated.class}) + private String id; + + @Schema(description = "测试计划ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report.test_plan_id.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report.test_plan_id.length_range}", groups = {Created.class, Updated.class}) + private String testPlanId; + + @Schema(description = "报告名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report.name.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 255, message = "{test_plan_report.name.length_range}", groups = {Created.class, Updated.class}) + private String name; + + @Schema(description = "创建人") + private String createUser; + + @Schema(description = "创建时间") + private Long createTime; + + @Schema(description = "开始时间") + private Long startTime; + + @Schema(description = "结束时间") + private Long endTime; + + @Schema(description = "触发类型") + private String triggerMode; + + @Schema(description = "执行状态;未执行, 执行中, 已停止, 已完成;", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report.exec_status.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report.exec_status.length_range}", groups = {Created.class, Updated.class}) + private String execStatus; + + @Schema(description = "结果状态;成功, 失败, 阻塞, 误报") + private String resultStatus; + + @Schema(description = "通过阈值", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report.pass_threshold.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 100, message = "{test_plan_report.pass_threshold.length_range}", groups = {Created.class, Updated.class}) + private String passThreshold; + + @Schema(description = "通过率") + private Long passRate; + + private static final long serialVersionUID = 1L; + + public enum Column { + id("id", "id", "VARCHAR", false), + testPlanId("test_plan_id", "testPlanId", "VARCHAR", false), + name("name", "name", "VARCHAR", true), + createUser("create_user", "createUser", "VARCHAR", false), + createTime("create_time", "createTime", "BIGINT", false), + startTime("start_time", "startTime", "BIGINT", false), + endTime("end_time", "endTime", "BIGINT", false), + triggerMode("trigger_mode", "triggerMode", "VARCHAR", false), + execStatus("exec_status", "execStatus", "VARCHAR", false), + resultStatus("result_status", "resultStatus", "VARCHAR", false), + passThreshold("pass_threshold", "passThreshold", "VARCHAR", false), + passRate("pass_rate", "passRate", "DECIMAL", false); + + private static final String BEGINNING_DELIMITER = "`"; + + private static final String ENDING_DELIMITER = "`"; + + private final String column; + + private final boolean isColumnNameDelimited; + + private final String javaProperty; + + private final String jdbcType; + + public String value() { + return this.column; + } + + public String getValue() { + return this.column; + } + + public String getJavaProperty() { + return this.javaProperty; + } + + public String getJdbcType() { + return this.jdbcType; + } + + Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) { + this.column = column; + this.javaProperty = javaProperty; + this.jdbcType = jdbcType; + this.isColumnNameDelimited = isColumnNameDelimited; + } + + public String desc() { + return this.getEscapedColumnName() + " DESC"; + } + + public String asc() { + return this.getEscapedColumnName() + " ASC"; + } + + public static Column[] excludes(Column ... excludes) { + ArrayList columns = new ArrayList<>(Arrays.asList(Column.values())); + if (excludes != null && excludes.length > 0) { + columns.removeAll(new ArrayList<>(Arrays.asList(excludes))); + } + return columns.toArray(new Column[]{}); + } + + public static Column[] all() { + return Column.values(); + } + + public String getEscapedColumnName() { + if (this.isColumnNameDelimited) { + return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString(); + } else { + return this.column; + } + } + + public String getAliasedEscapedColumnName() { + return this.getEscapedColumnName(); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportBug.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportBug.java new file mode 100644 index 0000000000..41cd35faa7 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportBug.java @@ -0,0 +1,95 @@ +package io.metersphere.plan.domain; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; + +@Data +public class TestPlanReportBug implements Serializable { + @Schema(description = "ID") + private String id; + + @Schema(description = "报告ID") + private String testPlanReportId; + + @Schema(description = "缺陷ID") + private String bugId; + + private static final long serialVersionUID = 1L; + + public enum Column { + id("id", "id", "VARCHAR", false), + testPlanReportId("test_plan_report_id", "testPlanReportId", "VARCHAR", false), + bugId("bug_id", "bugId", "VARCHAR", false); + + private static final String BEGINNING_DELIMITER = "`"; + + private static final String ENDING_DELIMITER = "`"; + + private final String column; + + private final boolean isColumnNameDelimited; + + private final String javaProperty; + + private final String jdbcType; + + public String value() { + return this.column; + } + + public String getValue() { + return this.column; + } + + public String getJavaProperty() { + return this.javaProperty; + } + + public String getJdbcType() { + return this.jdbcType; + } + + Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) { + this.column = column; + this.javaProperty = javaProperty; + this.jdbcType = jdbcType; + this.isColumnNameDelimited = isColumnNameDelimited; + } + + public String desc() { + return this.getEscapedColumnName() + " DESC"; + } + + public String asc() { + return this.getEscapedColumnName() + " ASC"; + } + + public static Column[] excludes(Column ... excludes) { + ArrayList columns = new ArrayList<>(Arrays.asList(Column.values())); + if (excludes != null && excludes.length > 0) { + columns.removeAll(new ArrayList<>(Arrays.asList(excludes))); + } + return columns.toArray(new Column[]{}); + } + + public static Column[] all() { + return Column.values(); + } + + public String getEscapedColumnName() { + if (this.isColumnNameDelimited) { + return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString(); + } else { + return this.column; + } + } + + public String getAliasedEscapedColumnName() { + return this.getEscapedColumnName(); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportBugExample.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportBugExample.java new file mode 100644 index 0000000000..c04d212424 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportBugExample.java @@ -0,0 +1,410 @@ +package io.metersphere.plan.domain; + +import java.util.ArrayList; +import java.util.List; + +public class TestPlanReportBugExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TestPlanReportBugExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIsNull() { + addCriterion("test_plan_report_id is null"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIsNotNull() { + addCriterion("test_plan_report_id is not null"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdEqualTo(String value) { + addCriterion("test_plan_report_id =", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotEqualTo(String value) { + addCriterion("test_plan_report_id <>", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdGreaterThan(String value) { + addCriterion("test_plan_report_id >", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdGreaterThanOrEqualTo(String value) { + addCriterion("test_plan_report_id >=", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLessThan(String value) { + addCriterion("test_plan_report_id <", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLessThanOrEqualTo(String value) { + addCriterion("test_plan_report_id <=", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLike(String value) { + addCriterion("test_plan_report_id like", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotLike(String value) { + addCriterion("test_plan_report_id not like", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIn(List values) { + addCriterion("test_plan_report_id in", values, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotIn(List values) { + addCriterion("test_plan_report_id not in", values, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdBetween(String value1, String value2) { + addCriterion("test_plan_report_id between", value1, value2, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotBetween(String value1, String value2) { + addCriterion("test_plan_report_id not between", value1, value2, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andBugIdIsNull() { + addCriterion("bug_id is null"); + return (Criteria) this; + } + + public Criteria andBugIdIsNotNull() { + addCriterion("bug_id is not null"); + return (Criteria) this; + } + + public Criteria andBugIdEqualTo(String value) { + addCriterion("bug_id =", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdNotEqualTo(String value) { + addCriterion("bug_id <>", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdGreaterThan(String value) { + addCriterion("bug_id >", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdGreaterThanOrEqualTo(String value) { + addCriterion("bug_id >=", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdLessThan(String value) { + addCriterion("bug_id <", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdLessThanOrEqualTo(String value) { + addCriterion("bug_id <=", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdLike(String value) { + addCriterion("bug_id like", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdNotLike(String value) { + addCriterion("bug_id not like", value, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdIn(List values) { + addCriterion("bug_id in", values, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdNotIn(List values) { + addCriterion("bug_id not in", values, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdBetween(String value1, String value2) { + addCriterion("bug_id between", value1, value2, "bugId"); + return (Criteria) this; + } + + public Criteria andBugIdNotBetween(String value1, String value2) { + addCriterion("bug_id not between", value1, value2, "bugId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportExample.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportExample.java new file mode 100644 index 0000000000..4d7023b313 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportExample.java @@ -0,0 +1,1000 @@ +package io.metersphere.plan.domain; + +import java.util.ArrayList; +import java.util.List; + +public class TestPlanReportExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TestPlanReportExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTestPlanIdIsNull() { + addCriterion("test_plan_id is null"); + return (Criteria) this; + } + + public Criteria andTestPlanIdIsNotNull() { + addCriterion("test_plan_id is not null"); + return (Criteria) this; + } + + public Criteria andTestPlanIdEqualTo(String value) { + addCriterion("test_plan_id =", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdNotEqualTo(String value) { + addCriterion("test_plan_id <>", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdGreaterThan(String value) { + addCriterion("test_plan_id >", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdGreaterThanOrEqualTo(String value) { + addCriterion("test_plan_id >=", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdLessThan(String value) { + addCriterion("test_plan_id <", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdLessThanOrEqualTo(String value) { + addCriterion("test_plan_id <=", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdLike(String value) { + addCriterion("test_plan_id like", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdNotLike(String value) { + addCriterion("test_plan_id not like", value, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdIn(List values) { + addCriterion("test_plan_id in", values, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdNotIn(List values) { + addCriterion("test_plan_id not in", values, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdBetween(String value1, String value2) { + addCriterion("test_plan_id between", value1, value2, "testPlanId"); + return (Criteria) this; + } + + public Criteria andTestPlanIdNotBetween(String value1, String value2) { + addCriterion("test_plan_id not between", value1, value2, "testPlanId"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("`name` is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("`name` is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("`name` =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("`name` <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("`name` >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("`name` >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("`name` <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("`name` <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("`name` like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("`name` not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("`name` in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("`name` not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("`name` between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("`name` not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andCreateUserIsNull() { + addCriterion("create_user is null"); + return (Criteria) this; + } + + public Criteria andCreateUserIsNotNull() { + addCriterion("create_user is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserEqualTo(String value) { + addCriterion("create_user =", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotEqualTo(String value) { + addCriterion("create_user <>", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserGreaterThan(String value) { + addCriterion("create_user >", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserGreaterThanOrEqualTo(String value) { + addCriterion("create_user >=", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLessThan(String value) { + addCriterion("create_user <", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLessThanOrEqualTo(String value) { + addCriterion("create_user <=", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLike(String value) { + addCriterion("create_user like", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotLike(String value) { + addCriterion("create_user not like", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserIn(List values) { + addCriterion("create_user in", values, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotIn(List values) { + addCriterion("create_user not in", values, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserBetween(String value1, String value2) { + addCriterion("create_user between", value1, value2, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotBetween(String value1, String value2) { + addCriterion("create_user not between", value1, value2, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Long value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Long value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Long value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Long value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Long value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Long value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Long value1, Long value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Long value1, Long value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andStartTimeIsNull() { + addCriterion("start_time is null"); + return (Criteria) this; + } + + public Criteria andStartTimeIsNotNull() { + addCriterion("start_time is not null"); + return (Criteria) this; + } + + public Criteria andStartTimeEqualTo(Long value) { + addCriterion("start_time =", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeNotEqualTo(Long value) { + addCriterion("start_time <>", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeGreaterThan(Long value) { + addCriterion("start_time >", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeGreaterThanOrEqualTo(Long value) { + addCriterion("start_time >=", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeLessThan(Long value) { + addCriterion("start_time <", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeLessThanOrEqualTo(Long value) { + addCriterion("start_time <=", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeIn(List values) { + addCriterion("start_time in", values, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeNotIn(List values) { + addCriterion("start_time not in", values, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeBetween(Long value1, Long value2) { + addCriterion("start_time between", value1, value2, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeNotBetween(Long value1, Long value2) { + addCriterion("start_time not between", value1, value2, "startTime"); + return (Criteria) this; + } + + public Criteria andEndTimeIsNull() { + addCriterion("end_time is null"); + return (Criteria) this; + } + + public Criteria andEndTimeIsNotNull() { + addCriterion("end_time is not null"); + return (Criteria) this; + } + + public Criteria andEndTimeEqualTo(Long value) { + addCriterion("end_time =", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotEqualTo(Long value) { + addCriterion("end_time <>", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeGreaterThan(Long value) { + addCriterion("end_time >", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeGreaterThanOrEqualTo(Long value) { + addCriterion("end_time >=", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeLessThan(Long value) { + addCriterion("end_time <", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeLessThanOrEqualTo(Long value) { + addCriterion("end_time <=", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeIn(List values) { + addCriterion("end_time in", values, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotIn(List values) { + addCriterion("end_time not in", values, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeBetween(Long value1, Long value2) { + addCriterion("end_time between", value1, value2, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotBetween(Long value1, Long value2) { + addCriterion("end_time not between", value1, value2, "endTime"); + return (Criteria) this; + } + + public Criteria andTriggerModeIsNull() { + addCriterion("trigger_mode is null"); + return (Criteria) this; + } + + public Criteria andTriggerModeIsNotNull() { + addCriterion("trigger_mode is not null"); + return (Criteria) this; + } + + public Criteria andTriggerModeEqualTo(String value) { + addCriterion("trigger_mode =", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeNotEqualTo(String value) { + addCriterion("trigger_mode <>", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeGreaterThan(String value) { + addCriterion("trigger_mode >", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeGreaterThanOrEqualTo(String value) { + addCriterion("trigger_mode >=", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeLessThan(String value) { + addCriterion("trigger_mode <", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeLessThanOrEqualTo(String value) { + addCriterion("trigger_mode <=", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeLike(String value) { + addCriterion("trigger_mode like", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeNotLike(String value) { + addCriterion("trigger_mode not like", value, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeIn(List values) { + addCriterion("trigger_mode in", values, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeNotIn(List values) { + addCriterion("trigger_mode not in", values, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeBetween(String value1, String value2) { + addCriterion("trigger_mode between", value1, value2, "triggerMode"); + return (Criteria) this; + } + + public Criteria andTriggerModeNotBetween(String value1, String value2) { + addCriterion("trigger_mode not between", value1, value2, "triggerMode"); + return (Criteria) this; + } + + public Criteria andExecStatusIsNull() { + addCriterion("exec_status is null"); + return (Criteria) this; + } + + public Criteria andExecStatusIsNotNull() { + addCriterion("exec_status is not null"); + return (Criteria) this; + } + + public Criteria andExecStatusEqualTo(String value) { + addCriterion("exec_status =", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusNotEqualTo(String value) { + addCriterion("exec_status <>", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusGreaterThan(String value) { + addCriterion("exec_status >", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusGreaterThanOrEqualTo(String value) { + addCriterion("exec_status >=", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusLessThan(String value) { + addCriterion("exec_status <", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusLessThanOrEqualTo(String value) { + addCriterion("exec_status <=", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusLike(String value) { + addCriterion("exec_status like", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusNotLike(String value) { + addCriterion("exec_status not like", value, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusIn(List values) { + addCriterion("exec_status in", values, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusNotIn(List values) { + addCriterion("exec_status not in", values, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusBetween(String value1, String value2) { + addCriterion("exec_status between", value1, value2, "execStatus"); + return (Criteria) this; + } + + public Criteria andExecStatusNotBetween(String value1, String value2) { + addCriterion("exec_status not between", value1, value2, "execStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusIsNull() { + addCriterion("result_status is null"); + return (Criteria) this; + } + + public Criteria andResultStatusIsNotNull() { + addCriterion("result_status is not null"); + return (Criteria) this; + } + + public Criteria andResultStatusEqualTo(String value) { + addCriterion("result_status =", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusNotEqualTo(String value) { + addCriterion("result_status <>", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusGreaterThan(String value) { + addCriterion("result_status >", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusGreaterThanOrEqualTo(String value) { + addCriterion("result_status >=", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusLessThan(String value) { + addCriterion("result_status <", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusLessThanOrEqualTo(String value) { + addCriterion("result_status <=", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusLike(String value) { + addCriterion("result_status like", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusNotLike(String value) { + addCriterion("result_status not like", value, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusIn(List values) { + addCriterion("result_status in", values, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusNotIn(List values) { + addCriterion("result_status not in", values, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusBetween(String value1, String value2) { + addCriterion("result_status between", value1, value2, "resultStatus"); + return (Criteria) this; + } + + public Criteria andResultStatusNotBetween(String value1, String value2) { + addCriterion("result_status not between", value1, value2, "resultStatus"); + return (Criteria) this; + } + + public Criteria andPassThresholdIsNull() { + addCriterion("pass_threshold is null"); + return (Criteria) this; + } + + public Criteria andPassThresholdIsNotNull() { + addCriterion("pass_threshold is not null"); + return (Criteria) this; + } + + public Criteria andPassThresholdEqualTo(String value) { + addCriterion("pass_threshold =", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdNotEqualTo(String value) { + addCriterion("pass_threshold <>", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdGreaterThan(String value) { + addCriterion("pass_threshold >", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdGreaterThanOrEqualTo(String value) { + addCriterion("pass_threshold >=", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdLessThan(String value) { + addCriterion("pass_threshold <", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdLessThanOrEqualTo(String value) { + addCriterion("pass_threshold <=", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdLike(String value) { + addCriterion("pass_threshold like", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdNotLike(String value) { + addCriterion("pass_threshold not like", value, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdIn(List values) { + addCriterion("pass_threshold in", values, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdNotIn(List values) { + addCriterion("pass_threshold not in", values, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdBetween(String value1, String value2) { + addCriterion("pass_threshold between", value1, value2, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassThresholdNotBetween(String value1, String value2) { + addCriterion("pass_threshold not between", value1, value2, "passThreshold"); + return (Criteria) this; + } + + public Criteria andPassRateIsNull() { + addCriterion("pass_rate is null"); + return (Criteria) this; + } + + public Criteria andPassRateIsNotNull() { + addCriterion("pass_rate is not null"); + return (Criteria) this; + } + + public Criteria andPassRateEqualTo(Long value) { + addCriterion("pass_rate =", value, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateNotEqualTo(Long value) { + addCriterion("pass_rate <>", value, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateGreaterThan(Long value) { + addCriterion("pass_rate >", value, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateGreaterThanOrEqualTo(Long value) { + addCriterion("pass_rate >=", value, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateLessThan(Long value) { + addCriterion("pass_rate <", value, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateLessThanOrEqualTo(Long value) { + addCriterion("pass_rate <=", value, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateIn(List values) { + addCriterion("pass_rate in", values, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateNotIn(List values) { + addCriterion("pass_rate not in", values, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateBetween(Long value1, Long value2) { + addCriterion("pass_rate between", value1, value2, "passRate"); + return (Criteria) this; + } + + public Criteria andPassRateNotBetween(Long value1, Long value2) { + addCriterion("pass_rate not between", value1, value2, "passRate"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportFunctionCase.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportFunctionCase.java new file mode 100644 index 0000000000..8f68561669 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportFunctionCase.java @@ -0,0 +1,117 @@ +package io.metersphere.plan.domain; + +import io.metersphere.validation.groups.Created; +import io.metersphere.validation.groups.Updated; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; + +@Data +public class TestPlanReportFunctionCase implements Serializable { + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_function_case.id.not_blank}", groups = {Updated.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_function_case.id.length_range}", groups = {Created.class, Updated.class}) + private String id; + + @Schema(description = "测试计划报告ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_function_case.test_plan_report_id.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_function_case.test_plan_report_id.length_range}", groups = {Created.class, Updated.class}) + private String testPlanReportId; + + @Schema(description = "测试计划功能用例关联ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_function_case.test_plan_function_case_id.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_function_case.test_plan_function_case_id.length_range}", groups = {Created.class, Updated.class}) + private String testPlanFunctionCaseId; + + @Schema(description = "功能用例ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_function_case.function_case_id.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_function_case.function_case_id.length_range}", groups = {Created.class, Updated.class}) + private String functionCaseId; + + @Schema(description = "执行结果", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_function_case.execute_result.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_function_case.execute_result.length_range}", groups = {Created.class, Updated.class}) + private String executeResult; + + private static final long serialVersionUID = 1L; + + public enum Column { + id("id", "id", "VARCHAR", false), + testPlanReportId("test_plan_report_id", "testPlanReportId", "VARCHAR", false), + testPlanFunctionCaseId("test_plan_function_case_id", "testPlanFunctionCaseId", "VARCHAR", false), + functionCaseId("function_case_id", "functionCaseId", "VARCHAR", false), + executeResult("execute_result", "executeResult", "VARCHAR", false); + + private static final String BEGINNING_DELIMITER = "`"; + + private static final String ENDING_DELIMITER = "`"; + + private final String column; + + private final boolean isColumnNameDelimited; + + private final String javaProperty; + + private final String jdbcType; + + public String value() { + return this.column; + } + + public String getValue() { + return this.column; + } + + public String getJavaProperty() { + return this.javaProperty; + } + + public String getJdbcType() { + return this.jdbcType; + } + + Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) { + this.column = column; + this.javaProperty = javaProperty; + this.jdbcType = jdbcType; + this.isColumnNameDelimited = isColumnNameDelimited; + } + + public String desc() { + return this.getEscapedColumnName() + " DESC"; + } + + public String asc() { + return this.getEscapedColumnName() + " ASC"; + } + + public static Column[] excludes(Column ... excludes) { + ArrayList columns = new ArrayList<>(Arrays.asList(Column.values())); + if (excludes != null && excludes.length > 0) { + columns.removeAll(new ArrayList<>(Arrays.asList(excludes))); + } + return columns.toArray(new Column[]{}); + } + + public static Column[] all() { + return Column.values(); + } + + public String getEscapedColumnName() { + if (this.isColumnNameDelimited) { + return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString(); + } else { + return this.column; + } + } + + public String getAliasedEscapedColumnName() { + return this.getEscapedColumnName(); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportFunctionCaseExample.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportFunctionCaseExample.java new file mode 100644 index 0000000000..3911e183fc --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportFunctionCaseExample.java @@ -0,0 +1,550 @@ +package io.metersphere.plan.domain; + +import java.util.ArrayList; +import java.util.List; + +public class TestPlanReportFunctionCaseExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TestPlanReportFunctionCaseExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIsNull() { + addCriterion("test_plan_report_id is null"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIsNotNull() { + addCriterion("test_plan_report_id is not null"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdEqualTo(String value) { + addCriterion("test_plan_report_id =", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotEqualTo(String value) { + addCriterion("test_plan_report_id <>", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdGreaterThan(String value) { + addCriterion("test_plan_report_id >", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdGreaterThanOrEqualTo(String value) { + addCriterion("test_plan_report_id >=", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLessThan(String value) { + addCriterion("test_plan_report_id <", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLessThanOrEqualTo(String value) { + addCriterion("test_plan_report_id <=", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLike(String value) { + addCriterion("test_plan_report_id like", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotLike(String value) { + addCriterion("test_plan_report_id not like", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIn(List values) { + addCriterion("test_plan_report_id in", values, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotIn(List values) { + addCriterion("test_plan_report_id not in", values, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdBetween(String value1, String value2) { + addCriterion("test_plan_report_id between", value1, value2, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotBetween(String value1, String value2) { + addCriterion("test_plan_report_id not between", value1, value2, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdIsNull() { + addCriterion("test_plan_function_case_id is null"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdIsNotNull() { + addCriterion("test_plan_function_case_id is not null"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdEqualTo(String value) { + addCriterion("test_plan_function_case_id =", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdNotEqualTo(String value) { + addCriterion("test_plan_function_case_id <>", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdGreaterThan(String value) { + addCriterion("test_plan_function_case_id >", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdGreaterThanOrEqualTo(String value) { + addCriterion("test_plan_function_case_id >=", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdLessThan(String value) { + addCriterion("test_plan_function_case_id <", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdLessThanOrEqualTo(String value) { + addCriterion("test_plan_function_case_id <=", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdLike(String value) { + addCriterion("test_plan_function_case_id like", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdNotLike(String value) { + addCriterion("test_plan_function_case_id not like", value, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdIn(List values) { + addCriterion("test_plan_function_case_id in", values, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdNotIn(List values) { + addCriterion("test_plan_function_case_id not in", values, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdBetween(String value1, String value2) { + addCriterion("test_plan_function_case_id between", value1, value2, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andTestPlanFunctionCaseIdNotBetween(String value1, String value2) { + addCriterion("test_plan_function_case_id not between", value1, value2, "testPlanFunctionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdIsNull() { + addCriterion("function_case_id is null"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdIsNotNull() { + addCriterion("function_case_id is not null"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdEqualTo(String value) { + addCriterion("function_case_id =", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdNotEqualTo(String value) { + addCriterion("function_case_id <>", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdGreaterThan(String value) { + addCriterion("function_case_id >", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdGreaterThanOrEqualTo(String value) { + addCriterion("function_case_id >=", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdLessThan(String value) { + addCriterion("function_case_id <", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdLessThanOrEqualTo(String value) { + addCriterion("function_case_id <=", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdLike(String value) { + addCriterion("function_case_id like", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdNotLike(String value) { + addCriterion("function_case_id not like", value, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdIn(List values) { + addCriterion("function_case_id in", values, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdNotIn(List values) { + addCriterion("function_case_id not in", values, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdBetween(String value1, String value2) { + addCriterion("function_case_id between", value1, value2, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andFunctionCaseIdNotBetween(String value1, String value2) { + addCriterion("function_case_id not between", value1, value2, "functionCaseId"); + return (Criteria) this; + } + + public Criteria andExecuteResultIsNull() { + addCriterion("execute_result is null"); + return (Criteria) this; + } + + public Criteria andExecuteResultIsNotNull() { + addCriterion("execute_result is not null"); + return (Criteria) this; + } + + public Criteria andExecuteResultEqualTo(String value) { + addCriterion("execute_result =", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultNotEqualTo(String value) { + addCriterion("execute_result <>", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultGreaterThan(String value) { + addCriterion("execute_result >", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultGreaterThanOrEqualTo(String value) { + addCriterion("execute_result >=", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultLessThan(String value) { + addCriterion("execute_result <", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultLessThanOrEqualTo(String value) { + addCriterion("execute_result <=", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultLike(String value) { + addCriterion("execute_result like", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultNotLike(String value) { + addCriterion("execute_result not like", value, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultIn(List values) { + addCriterion("execute_result in", values, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultNotIn(List values) { + addCriterion("execute_result not in", values, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultBetween(String value1, String value2) { + addCriterion("execute_result between", value1, value2, "executeResult"); + return (Criteria) this; + } + + public Criteria andExecuteResultNotBetween(String value1, String value2) { + addCriterion("execute_result not between", value1, value2, "executeResult"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportSummary.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportSummary.java new file mode 100644 index 0000000000..de282c283d --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportSummary.java @@ -0,0 +1,128 @@ +package io.metersphere.plan.domain; + +import io.metersphere.validation.groups.Created; +import io.metersphere.validation.groups.Updated; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; + +@Data +public class TestPlanReportSummary implements Serializable { + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_summary.id.not_blank}", groups = {Updated.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_summary.id.length_range}", groups = {Created.class, Updated.class}) + private String id; + + @Schema(description = "功能用例数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{test_plan_report_summary.functional_case_count.not_blank}", groups = {Created.class}) + private Long functionalCaseCount; + + @Schema(description = "接口用例数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{test_plan_report_summary.api_case_count.not_blank}", groups = {Created.class}) + private Long apiCaseCount; + + @Schema(description = "场景用例数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{test_plan_report_summary.api_scenario_count.not_blank}", groups = {Created.class}) + private Long apiScenarioCount; + + @Schema(description = "缺陷数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{test_plan_report_summary.bug_count.not_blank}", groups = {Created.class}) + private Long bugCount; + + @Schema(description = "测试计划报告ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_summary.test_plan_report_id.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{test_plan_report_summary.test_plan_report_id.length_range}", groups = {Created.class, Updated.class}) + private String testPlanReportId; + + @Schema(description = "总结") + private String summary; + + @Schema(description = "报告统计内容") + private byte[] reportCount; + + private static final long serialVersionUID = 1L; + + public enum Column { + id("id", "id", "VARCHAR", false), + functionalCaseCount("functional_case_count", "functionalCaseCount", "BIGINT", false), + apiCaseCount("api_case_count", "apiCaseCount", "BIGINT", false), + apiScenarioCount("api_scenario_count", "apiScenarioCount", "BIGINT", false), + bugCount("bug_count", "bugCount", "BIGINT", false), + testPlanReportId("test_plan_report_id", "testPlanReportId", "VARCHAR", false), + summary("summary", "summary", "VARCHAR", false), + reportCount("report_count", "reportCount", "LONGVARBINARY", false); + + private static final String BEGINNING_DELIMITER = "`"; + + private static final String ENDING_DELIMITER = "`"; + + private final String column; + + private final boolean isColumnNameDelimited; + + private final String javaProperty; + + private final String jdbcType; + + public String value() { + return this.column; + } + + public String getValue() { + return this.column; + } + + public String getJavaProperty() { + return this.javaProperty; + } + + public String getJdbcType() { + return this.jdbcType; + } + + Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) { + this.column = column; + this.javaProperty = javaProperty; + this.jdbcType = jdbcType; + this.isColumnNameDelimited = isColumnNameDelimited; + } + + public String desc() { + return this.getEscapedColumnName() + " DESC"; + } + + public String asc() { + return this.getEscapedColumnName() + " ASC"; + } + + public static Column[] excludes(Column ... excludes) { + ArrayList columns = new ArrayList<>(Arrays.asList(Column.values())); + if (excludes != null && excludes.length > 0) { + columns.removeAll(new ArrayList<>(Arrays.asList(excludes))); + } + return columns.toArray(new Column[]{}); + } + + public static Column[] all() { + return Column.values(); + } + + public String getEscapedColumnName() { + if (this.isColumnNameDelimited) { + return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString(); + } else { + return this.column; + } + } + + public String getAliasedEscapedColumnName() { + return this.getEscapedColumnName(); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportSummaryExample.java b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportSummaryExample.java new file mode 100644 index 0000000000..1fcdaa697a --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/domain/TestPlanReportSummaryExample.java @@ -0,0 +1,650 @@ +package io.metersphere.plan.domain; + +import java.util.ArrayList; +import java.util.List; + +public class TestPlanReportSummaryExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TestPlanReportSummaryExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountIsNull() { + addCriterion("functional_case_count is null"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountIsNotNull() { + addCriterion("functional_case_count is not null"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountEqualTo(Long value) { + addCriterion("functional_case_count =", value, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountNotEqualTo(Long value) { + addCriterion("functional_case_count <>", value, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountGreaterThan(Long value) { + addCriterion("functional_case_count >", value, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountGreaterThanOrEqualTo(Long value) { + addCriterion("functional_case_count >=", value, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountLessThan(Long value) { + addCriterion("functional_case_count <", value, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountLessThanOrEqualTo(Long value) { + addCriterion("functional_case_count <=", value, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountIn(List values) { + addCriterion("functional_case_count in", values, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountNotIn(List values) { + addCriterion("functional_case_count not in", values, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountBetween(Long value1, Long value2) { + addCriterion("functional_case_count between", value1, value2, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andFunctionalCaseCountNotBetween(Long value1, Long value2) { + addCriterion("functional_case_count not between", value1, value2, "functionalCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountIsNull() { + addCriterion("api_case_count is null"); + return (Criteria) this; + } + + public Criteria andApiCaseCountIsNotNull() { + addCriterion("api_case_count is not null"); + return (Criteria) this; + } + + public Criteria andApiCaseCountEqualTo(Long value) { + addCriterion("api_case_count =", value, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountNotEqualTo(Long value) { + addCriterion("api_case_count <>", value, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountGreaterThan(Long value) { + addCriterion("api_case_count >", value, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountGreaterThanOrEqualTo(Long value) { + addCriterion("api_case_count >=", value, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountLessThan(Long value) { + addCriterion("api_case_count <", value, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountLessThanOrEqualTo(Long value) { + addCriterion("api_case_count <=", value, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountIn(List values) { + addCriterion("api_case_count in", values, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountNotIn(List values) { + addCriterion("api_case_count not in", values, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountBetween(Long value1, Long value2) { + addCriterion("api_case_count between", value1, value2, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiCaseCountNotBetween(Long value1, Long value2) { + addCriterion("api_case_count not between", value1, value2, "apiCaseCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountIsNull() { + addCriterion("api_scenario_count is null"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountIsNotNull() { + addCriterion("api_scenario_count is not null"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountEqualTo(Long value) { + addCriterion("api_scenario_count =", value, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountNotEqualTo(Long value) { + addCriterion("api_scenario_count <>", value, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountGreaterThan(Long value) { + addCriterion("api_scenario_count >", value, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountGreaterThanOrEqualTo(Long value) { + addCriterion("api_scenario_count >=", value, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountLessThan(Long value) { + addCriterion("api_scenario_count <", value, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountLessThanOrEqualTo(Long value) { + addCriterion("api_scenario_count <=", value, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountIn(List values) { + addCriterion("api_scenario_count in", values, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountNotIn(List values) { + addCriterion("api_scenario_count not in", values, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountBetween(Long value1, Long value2) { + addCriterion("api_scenario_count between", value1, value2, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andApiScenarioCountNotBetween(Long value1, Long value2) { + addCriterion("api_scenario_count not between", value1, value2, "apiScenarioCount"); + return (Criteria) this; + } + + public Criteria andBugCountIsNull() { + addCriterion("bug_count is null"); + return (Criteria) this; + } + + public Criteria andBugCountIsNotNull() { + addCriterion("bug_count is not null"); + return (Criteria) this; + } + + public Criteria andBugCountEqualTo(Long value) { + addCriterion("bug_count =", value, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountNotEqualTo(Long value) { + addCriterion("bug_count <>", value, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountGreaterThan(Long value) { + addCriterion("bug_count >", value, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountGreaterThanOrEqualTo(Long value) { + addCriterion("bug_count >=", value, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountLessThan(Long value) { + addCriterion("bug_count <", value, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountLessThanOrEqualTo(Long value) { + addCriterion("bug_count <=", value, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountIn(List values) { + addCriterion("bug_count in", values, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountNotIn(List values) { + addCriterion("bug_count not in", values, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountBetween(Long value1, Long value2) { + addCriterion("bug_count between", value1, value2, "bugCount"); + return (Criteria) this; + } + + public Criteria andBugCountNotBetween(Long value1, Long value2) { + addCriterion("bug_count not between", value1, value2, "bugCount"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIsNull() { + addCriterion("test_plan_report_id is null"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIsNotNull() { + addCriterion("test_plan_report_id is not null"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdEqualTo(String value) { + addCriterion("test_plan_report_id =", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotEqualTo(String value) { + addCriterion("test_plan_report_id <>", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdGreaterThan(String value) { + addCriterion("test_plan_report_id >", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdGreaterThanOrEqualTo(String value) { + addCriterion("test_plan_report_id >=", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLessThan(String value) { + addCriterion("test_plan_report_id <", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLessThanOrEqualTo(String value) { + addCriterion("test_plan_report_id <=", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdLike(String value) { + addCriterion("test_plan_report_id like", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotLike(String value) { + addCriterion("test_plan_report_id not like", value, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdIn(List values) { + addCriterion("test_plan_report_id in", values, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotIn(List values) { + addCriterion("test_plan_report_id not in", values, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdBetween(String value1, String value2) { + addCriterion("test_plan_report_id between", value1, value2, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andTestPlanReportIdNotBetween(String value1, String value2) { + addCriterion("test_plan_report_id not between", value1, value2, "testPlanReportId"); + return (Criteria) this; + } + + public Criteria andSummaryIsNull() { + addCriterion("summary is null"); + return (Criteria) this; + } + + public Criteria andSummaryIsNotNull() { + addCriterion("summary is not null"); + return (Criteria) this; + } + + public Criteria andSummaryEqualTo(String value) { + addCriterion("summary =", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryNotEqualTo(String value) { + addCriterion("summary <>", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryGreaterThan(String value) { + addCriterion("summary >", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryGreaterThanOrEqualTo(String value) { + addCriterion("summary >=", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryLessThan(String value) { + addCriterion("summary <", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryLessThanOrEqualTo(String value) { + addCriterion("summary <=", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryLike(String value) { + addCriterion("summary like", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryNotLike(String value) { + addCriterion("summary not like", value, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryIn(List values) { + addCriterion("summary in", values, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryNotIn(List values) { + addCriterion("summary not in", values, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryBetween(String value1, String value2) { + addCriterion("summary between", value1, value2, "summary"); + return (Criteria) this; + } + + public Criteria andSummaryNotBetween(String value1, String value2) { + addCriterion("summary not between", value1, value2, "summary"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportBugMapper.java b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportBugMapper.java new file mode 100644 index 0000000000..6227ad3bad --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportBugMapper.java @@ -0,0 +1,27 @@ +package io.metersphere.plan.mapper; + +import io.metersphere.plan.domain.TestPlanReportBug; +import io.metersphere.plan.domain.TestPlanReportBugExample; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TestPlanReportBugMapper { + long countByExample(TestPlanReportBugExample example); + + int deleteByExample(TestPlanReportBugExample example); + + int insert(TestPlanReportBug record); + + int insertSelective(TestPlanReportBug record); + + List selectByExample(TestPlanReportBugExample example); + + int updateByExampleSelective(@Param("record") TestPlanReportBug record, @Param("example") TestPlanReportBugExample example); + + int updateByExample(@Param("record") TestPlanReportBug record, @Param("example") TestPlanReportBugExample example); + + int batchInsert(@Param("list") List list); + + int batchInsertSelective(@Param("list") List list, @Param("selective") TestPlanReportBug.Column ... selective); +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportBugMapper.xml b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportBugMapper.xml new file mode 100644 index 0000000000..2e4d3cd2f1 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportBugMapper.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, test_plan_report_id, bug_id + + + + delete from test_plan_report_bug + + + + + + insert into test_plan_report_bug (id, test_plan_report_id, bug_id + ) + values (#{id,jdbcType=VARCHAR}, #{testPlanReportId,jdbcType=VARCHAR}, #{bugId,jdbcType=VARCHAR} + ) + + + insert into test_plan_report_bug + + + id, + + + test_plan_report_id, + + + bug_id, + + + + + #{id,jdbcType=VARCHAR}, + + + #{testPlanReportId,jdbcType=VARCHAR}, + + + #{bugId,jdbcType=VARCHAR}, + + + + + + update test_plan_report_bug + + + id = #{record.id,jdbcType=VARCHAR}, + + + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + + + bug_id = #{record.bugId,jdbcType=VARCHAR}, + + + + + + + + update test_plan_report_bug + set id = #{record.id,jdbcType=VARCHAR}, + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + bug_id = #{record.bugId,jdbcType=VARCHAR} + + + + + + insert into test_plan_report_bug + (id, test_plan_report_id, bug_id) + values + + (#{item.id,jdbcType=VARCHAR}, #{item.testPlanReportId,jdbcType=VARCHAR}, #{item.bugId,jdbcType=VARCHAR} + ) + + + + insert into test_plan_report_bug ( + + ${column.escapedColumnName} + + ) + values + + ( + + + #{item.id,jdbcType=VARCHAR} + + + #{item.testPlanReportId,jdbcType=VARCHAR} + + + #{item.bugId,jdbcType=VARCHAR} + + + ) + + + \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportFunctionCaseMapper.java b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportFunctionCaseMapper.java new file mode 100644 index 0000000000..067232a50e --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportFunctionCaseMapper.java @@ -0,0 +1,35 @@ +package io.metersphere.plan.mapper; + +import io.metersphere.plan.domain.TestPlanReportFunctionCase; +import io.metersphere.plan.domain.TestPlanReportFunctionCaseExample; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TestPlanReportFunctionCaseMapper { + long countByExample(TestPlanReportFunctionCaseExample example); + + int deleteByExample(TestPlanReportFunctionCaseExample example); + + int deleteByPrimaryKey(String id); + + int insert(TestPlanReportFunctionCase record); + + int insertSelective(TestPlanReportFunctionCase record); + + List selectByExample(TestPlanReportFunctionCaseExample example); + + TestPlanReportFunctionCase selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") TestPlanReportFunctionCase record, @Param("example") TestPlanReportFunctionCaseExample example); + + int updateByExample(@Param("record") TestPlanReportFunctionCase record, @Param("example") TestPlanReportFunctionCaseExample example); + + int updateByPrimaryKeySelective(TestPlanReportFunctionCase record); + + int updateByPrimaryKey(TestPlanReportFunctionCase record); + + int batchInsert(@Param("list") List list); + + int batchInsertSelective(@Param("list") List list, @Param("selective") TestPlanReportFunctionCase.Column ... selective); +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportFunctionCaseMapper.xml b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportFunctionCaseMapper.xml new file mode 100644 index 0000000000..8ff1b0d1f9 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportFunctionCaseMapper.xml @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, test_plan_report_id, test_plan_function_case_id, function_case_id, execute_result + + + + + delete from test_plan_report_function_case + where id = #{id,jdbcType=VARCHAR} + + + delete from test_plan_report_function_case + + + + + + insert into test_plan_report_function_case (id, test_plan_report_id, test_plan_function_case_id, + function_case_id, execute_result) + values (#{id,jdbcType=VARCHAR}, #{testPlanReportId,jdbcType=VARCHAR}, #{testPlanFunctionCaseId,jdbcType=VARCHAR}, + #{functionCaseId,jdbcType=VARCHAR}, #{executeResult,jdbcType=VARCHAR}) + + + insert into test_plan_report_function_case + + + id, + + + test_plan_report_id, + + + test_plan_function_case_id, + + + function_case_id, + + + execute_result, + + + + + #{id,jdbcType=VARCHAR}, + + + #{testPlanReportId,jdbcType=VARCHAR}, + + + #{testPlanFunctionCaseId,jdbcType=VARCHAR}, + + + #{functionCaseId,jdbcType=VARCHAR}, + + + #{executeResult,jdbcType=VARCHAR}, + + + + + + update test_plan_report_function_case + + + id = #{record.id,jdbcType=VARCHAR}, + + + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + + + test_plan_function_case_id = #{record.testPlanFunctionCaseId,jdbcType=VARCHAR}, + + + function_case_id = #{record.functionCaseId,jdbcType=VARCHAR}, + + + execute_result = #{record.executeResult,jdbcType=VARCHAR}, + + + + + + + + update test_plan_report_function_case + set id = #{record.id,jdbcType=VARCHAR}, + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + test_plan_function_case_id = #{record.testPlanFunctionCaseId,jdbcType=VARCHAR}, + function_case_id = #{record.functionCaseId,jdbcType=VARCHAR}, + execute_result = #{record.executeResult,jdbcType=VARCHAR} + + + + + + update test_plan_report_function_case + + + test_plan_report_id = #{testPlanReportId,jdbcType=VARCHAR}, + + + test_plan_function_case_id = #{testPlanFunctionCaseId,jdbcType=VARCHAR}, + + + function_case_id = #{functionCaseId,jdbcType=VARCHAR}, + + + execute_result = #{executeResult,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=VARCHAR} + + + update test_plan_report_function_case + set test_plan_report_id = #{testPlanReportId,jdbcType=VARCHAR}, + test_plan_function_case_id = #{testPlanFunctionCaseId,jdbcType=VARCHAR}, + function_case_id = #{functionCaseId,jdbcType=VARCHAR}, + execute_result = #{executeResult,jdbcType=VARCHAR} + where id = #{id,jdbcType=VARCHAR} + + + insert into test_plan_report_function_case + (id, test_plan_report_id, test_plan_function_case_id, function_case_id, execute_result + ) + values + + (#{item.id,jdbcType=VARCHAR}, #{item.testPlanReportId,jdbcType=VARCHAR}, #{item.testPlanFunctionCaseId,jdbcType=VARCHAR}, + #{item.functionCaseId,jdbcType=VARCHAR}, #{item.executeResult,jdbcType=VARCHAR} + ) + + + + insert into test_plan_report_function_case ( + + ${column.escapedColumnName} + + ) + values + + ( + + + #{item.id,jdbcType=VARCHAR} + + + #{item.testPlanReportId,jdbcType=VARCHAR} + + + #{item.testPlanFunctionCaseId,jdbcType=VARCHAR} + + + #{item.functionCaseId,jdbcType=VARCHAR} + + + #{item.executeResult,jdbcType=VARCHAR} + + + ) + + + \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportMapper.java b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportMapper.java new file mode 100644 index 0000000000..929a148a86 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportMapper.java @@ -0,0 +1,35 @@ +package io.metersphere.plan.mapper; + +import io.metersphere.plan.domain.TestPlanReport; +import io.metersphere.plan.domain.TestPlanReportExample; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TestPlanReportMapper { + long countByExample(TestPlanReportExample example); + + int deleteByExample(TestPlanReportExample example); + + int deleteByPrimaryKey(String id); + + int insert(TestPlanReport record); + + int insertSelective(TestPlanReport record); + + List selectByExample(TestPlanReportExample example); + + TestPlanReport selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") TestPlanReport record, @Param("example") TestPlanReportExample example); + + int updateByExample(@Param("record") TestPlanReport record, @Param("example") TestPlanReportExample example); + + int updateByPrimaryKeySelective(TestPlanReport record); + + int updateByPrimaryKey(TestPlanReport record); + + int batchInsert(@Param("list") List list); + + int batchInsertSelective(@Param("list") List list, @Param("selective") TestPlanReport.Column ... selective); +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportMapper.xml b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportMapper.xml new file mode 100644 index 0000000000..76561e6750 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportMapper.xml @@ -0,0 +1,386 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, test_plan_id, `name`, create_user, create_time, start_time, end_time, trigger_mode, + exec_status, result_status, pass_threshold, pass_rate + + + + + delete from test_plan_report + where id = #{id,jdbcType=VARCHAR} + + + delete from test_plan_report + + + + + + insert into test_plan_report (id, test_plan_id, `name`, + create_user, create_time, start_time, + end_time, trigger_mode, exec_status, + result_status, pass_threshold, pass_rate + ) + values (#{id,jdbcType=VARCHAR}, #{testPlanId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, + #{createUser,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{startTime,jdbcType=BIGINT}, + #{endTime,jdbcType=BIGINT}, #{triggerMode,jdbcType=VARCHAR}, #{execStatus,jdbcType=VARCHAR}, + #{resultStatus,jdbcType=VARCHAR}, #{passThreshold,jdbcType=VARCHAR}, #{passRate,jdbcType=DECIMAL} + ) + + + insert into test_plan_report + + + id, + + + test_plan_id, + + + `name`, + + + create_user, + + + create_time, + + + start_time, + + + end_time, + + + trigger_mode, + + + exec_status, + + + result_status, + + + pass_threshold, + + + pass_rate, + + + + + #{id,jdbcType=VARCHAR}, + + + #{testPlanId,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{createUser,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=BIGINT}, + + + #{startTime,jdbcType=BIGINT}, + + + #{endTime,jdbcType=BIGINT}, + + + #{triggerMode,jdbcType=VARCHAR}, + + + #{execStatus,jdbcType=VARCHAR}, + + + #{resultStatus,jdbcType=VARCHAR}, + + + #{passThreshold,jdbcType=VARCHAR}, + + + #{passRate,jdbcType=DECIMAL}, + + + + + + update test_plan_report + + + id = #{record.id,jdbcType=VARCHAR}, + + + test_plan_id = #{record.testPlanId,jdbcType=VARCHAR}, + + + `name` = #{record.name,jdbcType=VARCHAR}, + + + create_user = #{record.createUser,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=BIGINT}, + + + start_time = #{record.startTime,jdbcType=BIGINT}, + + + end_time = #{record.endTime,jdbcType=BIGINT}, + + + trigger_mode = #{record.triggerMode,jdbcType=VARCHAR}, + + + exec_status = #{record.execStatus,jdbcType=VARCHAR}, + + + result_status = #{record.resultStatus,jdbcType=VARCHAR}, + + + pass_threshold = #{record.passThreshold,jdbcType=VARCHAR}, + + + pass_rate = #{record.passRate,jdbcType=DECIMAL}, + + + + + + + + update test_plan_report + set id = #{record.id,jdbcType=VARCHAR}, + test_plan_id = #{record.testPlanId,jdbcType=VARCHAR}, + `name` = #{record.name,jdbcType=VARCHAR}, + create_user = #{record.createUser,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=BIGINT}, + start_time = #{record.startTime,jdbcType=BIGINT}, + end_time = #{record.endTime,jdbcType=BIGINT}, + trigger_mode = #{record.triggerMode,jdbcType=VARCHAR}, + exec_status = #{record.execStatus,jdbcType=VARCHAR}, + result_status = #{record.resultStatus,jdbcType=VARCHAR}, + pass_threshold = #{record.passThreshold,jdbcType=VARCHAR}, + pass_rate = #{record.passRate,jdbcType=DECIMAL} + + + + + + update test_plan_report + + + test_plan_id = #{testPlanId,jdbcType=VARCHAR}, + + + `name` = #{name,jdbcType=VARCHAR}, + + + create_user = #{createUser,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=BIGINT}, + + + start_time = #{startTime,jdbcType=BIGINT}, + + + end_time = #{endTime,jdbcType=BIGINT}, + + + trigger_mode = #{triggerMode,jdbcType=VARCHAR}, + + + exec_status = #{execStatus,jdbcType=VARCHAR}, + + + result_status = #{resultStatus,jdbcType=VARCHAR}, + + + pass_threshold = #{passThreshold,jdbcType=VARCHAR}, + + + pass_rate = #{passRate,jdbcType=DECIMAL}, + + + where id = #{id,jdbcType=VARCHAR} + + + update test_plan_report + set test_plan_id = #{testPlanId,jdbcType=VARCHAR}, + `name` = #{name,jdbcType=VARCHAR}, + create_user = #{createUser,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=BIGINT}, + start_time = #{startTime,jdbcType=BIGINT}, + end_time = #{endTime,jdbcType=BIGINT}, + trigger_mode = #{triggerMode,jdbcType=VARCHAR}, + exec_status = #{execStatus,jdbcType=VARCHAR}, + result_status = #{resultStatus,jdbcType=VARCHAR}, + pass_threshold = #{passThreshold,jdbcType=VARCHAR}, + pass_rate = #{passRate,jdbcType=DECIMAL} + where id = #{id,jdbcType=VARCHAR} + + + insert into test_plan_report + (id, test_plan_id, `name`, create_user, create_time, start_time, end_time, trigger_mode, + exec_status, result_status, pass_threshold, pass_rate) + values + + (#{item.id,jdbcType=VARCHAR}, #{item.testPlanId,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR}, + #{item.createUser,jdbcType=VARCHAR}, #{item.createTime,jdbcType=BIGINT}, #{item.startTime,jdbcType=BIGINT}, + #{item.endTime,jdbcType=BIGINT}, #{item.triggerMode,jdbcType=VARCHAR}, #{item.execStatus,jdbcType=VARCHAR}, + #{item.resultStatus,jdbcType=VARCHAR}, #{item.passThreshold,jdbcType=VARCHAR}, + #{item.passRate,jdbcType=DECIMAL}) + + + + insert into test_plan_report ( + + ${column.escapedColumnName} + + ) + values + + ( + + + #{item.id,jdbcType=VARCHAR} + + + #{item.testPlanId,jdbcType=VARCHAR} + + + #{item.name,jdbcType=VARCHAR} + + + #{item.createUser,jdbcType=VARCHAR} + + + #{item.createTime,jdbcType=BIGINT} + + + #{item.startTime,jdbcType=BIGINT} + + + #{item.endTime,jdbcType=BIGINT} + + + #{item.triggerMode,jdbcType=VARCHAR} + + + #{item.execStatus,jdbcType=VARCHAR} + + + #{item.resultStatus,jdbcType=VARCHAR} + + + #{item.passThreshold,jdbcType=VARCHAR} + + + #{item.passRate,jdbcType=DECIMAL} + + + ) + + + \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportSummaryMapper.java b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportSummaryMapper.java new file mode 100644 index 0000000000..516d6c9a98 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportSummaryMapper.java @@ -0,0 +1,41 @@ +package io.metersphere.plan.mapper; + +import io.metersphere.plan.domain.TestPlanReportSummary; +import io.metersphere.plan.domain.TestPlanReportSummaryExample; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TestPlanReportSummaryMapper { + long countByExample(TestPlanReportSummaryExample example); + + int deleteByExample(TestPlanReportSummaryExample example); + + int deleteByPrimaryKey(String id); + + int insert(TestPlanReportSummary record); + + int insertSelective(TestPlanReportSummary record); + + List selectByExampleWithBLOBs(TestPlanReportSummaryExample example); + + List selectByExample(TestPlanReportSummaryExample example); + + TestPlanReportSummary selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") TestPlanReportSummary record, @Param("example") TestPlanReportSummaryExample example); + + int updateByExampleWithBLOBs(@Param("record") TestPlanReportSummary record, @Param("example") TestPlanReportSummaryExample example); + + int updateByExample(@Param("record") TestPlanReportSummary record, @Param("example") TestPlanReportSummaryExample example); + + int updateByPrimaryKeySelective(TestPlanReportSummary record); + + int updateByPrimaryKeyWithBLOBs(TestPlanReportSummary record); + + int updateByPrimaryKey(TestPlanReportSummary record); + + int batchInsert(@Param("list") List list); + + int batchInsertSelective(@Param("list") List list, @Param("selective") TestPlanReportSummary.Column ... selective); +} \ No newline at end of file diff --git a/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportSummaryMapper.xml b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportSummaryMapper.xml new file mode 100644 index 0000000000..fd3ed5daf0 --- /dev/null +++ b/backend/framework/domain/src/main/java/io/metersphere/plan/mapper/TestPlanReportSummaryMapper.xml @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, functional_case_count, api_case_count, api_scenario_count, bug_count, test_plan_report_id, + summary + + + report_count + + + + + + delete from test_plan_report_summary + where id = #{id,jdbcType=VARCHAR} + + + delete from test_plan_report_summary + + + + + + insert into test_plan_report_summary (id, functional_case_count, api_case_count, + api_scenario_count, bug_count, test_plan_report_id, + summary, report_count) + values (#{id,jdbcType=VARCHAR}, #{functionalCaseCount,jdbcType=BIGINT}, #{apiCaseCount,jdbcType=BIGINT}, + #{apiScenarioCount,jdbcType=BIGINT}, #{bugCount,jdbcType=BIGINT}, #{testPlanReportId,jdbcType=VARCHAR}, + #{summary,jdbcType=VARCHAR}, #{reportCount,jdbcType=LONGVARBINARY}) + + + insert into test_plan_report_summary + + + id, + + + functional_case_count, + + + api_case_count, + + + api_scenario_count, + + + bug_count, + + + test_plan_report_id, + + + summary, + + + report_count, + + + + + #{id,jdbcType=VARCHAR}, + + + #{functionalCaseCount,jdbcType=BIGINT}, + + + #{apiCaseCount,jdbcType=BIGINT}, + + + #{apiScenarioCount,jdbcType=BIGINT}, + + + #{bugCount,jdbcType=BIGINT}, + + + #{testPlanReportId,jdbcType=VARCHAR}, + + + #{summary,jdbcType=VARCHAR}, + + + #{reportCount,jdbcType=LONGVARBINARY}, + + + + + + update test_plan_report_summary + + + id = #{record.id,jdbcType=VARCHAR}, + + + functional_case_count = #{record.functionalCaseCount,jdbcType=BIGINT}, + + + api_case_count = #{record.apiCaseCount,jdbcType=BIGINT}, + + + api_scenario_count = #{record.apiScenarioCount,jdbcType=BIGINT}, + + + bug_count = #{record.bugCount,jdbcType=BIGINT}, + + + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + + + summary = #{record.summary,jdbcType=VARCHAR}, + + + report_count = #{record.reportCount,jdbcType=LONGVARBINARY}, + + + + + + + + update test_plan_report_summary + set id = #{record.id,jdbcType=VARCHAR}, + functional_case_count = #{record.functionalCaseCount,jdbcType=BIGINT}, + api_case_count = #{record.apiCaseCount,jdbcType=BIGINT}, + api_scenario_count = #{record.apiScenarioCount,jdbcType=BIGINT}, + bug_count = #{record.bugCount,jdbcType=BIGINT}, + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + summary = #{record.summary,jdbcType=VARCHAR}, + report_count = #{record.reportCount,jdbcType=LONGVARBINARY} + + + + + + update test_plan_report_summary + set id = #{record.id,jdbcType=VARCHAR}, + functional_case_count = #{record.functionalCaseCount,jdbcType=BIGINT}, + api_case_count = #{record.apiCaseCount,jdbcType=BIGINT}, + api_scenario_count = #{record.apiScenarioCount,jdbcType=BIGINT}, + bug_count = #{record.bugCount,jdbcType=BIGINT}, + test_plan_report_id = #{record.testPlanReportId,jdbcType=VARCHAR}, + summary = #{record.summary,jdbcType=VARCHAR} + + + + + + update test_plan_report_summary + + + functional_case_count = #{functionalCaseCount,jdbcType=BIGINT}, + + + api_case_count = #{apiCaseCount,jdbcType=BIGINT}, + + + api_scenario_count = #{apiScenarioCount,jdbcType=BIGINT}, + + + bug_count = #{bugCount,jdbcType=BIGINT}, + + + test_plan_report_id = #{testPlanReportId,jdbcType=VARCHAR}, + + + summary = #{summary,jdbcType=VARCHAR}, + + + report_count = #{reportCount,jdbcType=LONGVARBINARY}, + + + where id = #{id,jdbcType=VARCHAR} + + + update test_plan_report_summary + set functional_case_count = #{functionalCaseCount,jdbcType=BIGINT}, + api_case_count = #{apiCaseCount,jdbcType=BIGINT}, + api_scenario_count = #{apiScenarioCount,jdbcType=BIGINT}, + bug_count = #{bugCount,jdbcType=BIGINT}, + test_plan_report_id = #{testPlanReportId,jdbcType=VARCHAR}, + summary = #{summary,jdbcType=VARCHAR}, + report_count = #{reportCount,jdbcType=LONGVARBINARY} + where id = #{id,jdbcType=VARCHAR} + + + update test_plan_report_summary + set functional_case_count = #{functionalCaseCount,jdbcType=BIGINT}, + api_case_count = #{apiCaseCount,jdbcType=BIGINT}, + api_scenario_count = #{apiScenarioCount,jdbcType=BIGINT}, + bug_count = #{bugCount,jdbcType=BIGINT}, + test_plan_report_id = #{testPlanReportId,jdbcType=VARCHAR}, + summary = #{summary,jdbcType=VARCHAR} + where id = #{id,jdbcType=VARCHAR} + + + insert into test_plan_report_summary + (id, functional_case_count, api_case_count, api_scenario_count, bug_count, test_plan_report_id, + summary, report_count) + values + + (#{item.id,jdbcType=VARCHAR}, #{item.functionalCaseCount,jdbcType=BIGINT}, #{item.apiCaseCount,jdbcType=BIGINT}, + #{item.apiScenarioCount,jdbcType=BIGINT}, #{item.bugCount,jdbcType=BIGINT}, #{item.testPlanReportId,jdbcType=VARCHAR}, + #{item.summary,jdbcType=VARCHAR}, #{item.reportCount,jdbcType=LONGVARBINARY}) + + + + insert into test_plan_report_summary ( + + ${column.escapedColumnName} + + ) + values + + ( + + + #{item.id,jdbcType=VARCHAR} + + + #{item.functionalCaseCount,jdbcType=BIGINT} + + + #{item.apiCaseCount,jdbcType=BIGINT} + + + #{item.apiScenarioCount,jdbcType=BIGINT} + + + #{item.bugCount,jdbcType=BIGINT} + + + #{item.testPlanReportId,jdbcType=VARCHAR} + + + #{item.summary,jdbcType=VARCHAR} + + + #{item.reportCount,jdbcType=LONGVARBINARY} + + + ) + + + \ No newline at end of file diff --git a/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_12__beta_ddl.sql b/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_12__beta_ddl.sql index 46e86d4261..81b8c41c66 100644 --- a/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_12__beta_ddl.sql +++ b/backend/framework/domain/src/main/resources/migration/3.0.0/ddl/V3.0.0_12__beta_ddl.sql @@ -63,6 +63,64 @@ CREATE INDEX idx_test_plan_case_id ON test_plan_case_execute_history(test_plan_c CREATE INDEX idx_status ON test_plan_case_execute_history(status); CREATE INDEX idx_deleted ON test_plan_case_execute_history(deleted); +-- 计划报告 +CREATE TABLE IF NOT EXISTS test_plan_report( + `id` VARCHAR(50) NOT NULL COMMENT 'ID' , + `test_plan_id` VARCHAR(50) NOT NULL COMMENT '测试计划ID' , + `name` VARCHAR(255) NOT NULL COMMENT '报告名称' , + `create_user` VARCHAR(50) NOT NULL COMMENT '创建人' , + `create_time` BIGINT NOT NULL COMMENT '创建时间' , + `start_time` BIGINT COMMENT '开始时间' , + `end_time` BIGINT COMMENT '结束时间' , + `trigger_mode` VARCHAR(50) COMMENT '触发类型' , + `exec_status` VARCHAR(50) NOT NULL DEFAULT 'PENDING' COMMENT '执行状态: 未执行, 执行中, 已停止, 已完成;' , + `result_status` VARCHAR(50) DEFAULT '-' COMMENT '结果状态: 成功, 失败, 阻塞, 误报' , + `pass_threshold` VARCHAR(100) NOT NULL COMMENT '通过阈值' , + `pass_rate` DECIMAL COMMENT '通过率' , + PRIMARY KEY (id) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试计划报告'; + + +CREATE INDEX idx_test_plan_id ON test_plan_report(test_plan_id); +CREATE INDEX idx_create_user ON test_plan_report(create_user); +CREATE INDEX idx_create_time ON test_plan_report(create_time); +CREATE INDEX idx_exec_status ON test_plan_report(exec_status); +CREATE INDEX idx_result_status ON test_plan_report(result_status); +CREATE INDEX idx_pass_rate ON test_plan_report(pass_rate); + +CREATE TABLE IF NOT EXISTS test_plan_report_summary( + `id` VARCHAR(50) NOT NULL COMMENT 'ID' , + `functional_case_count` BIGINT NOT NULL DEFAULT 0 COMMENT '功能用例数量' , + `api_case_count` BIGINT NOT NULL DEFAULT 0 COMMENT '接口用例数量' , + `api_scenario_count` BIGINT NOT NULL DEFAULT 0 COMMENT '场景用例数量' , + `bug_count` BIGINT(255) NOT NULL COMMENT '缺陷数量' , + `test_plan_report_id` VARCHAR(50) NOT NULL COMMENT '测试计划报告ID' , + `summary` VARCHAR(1000) COMMENT '总结' , + `report_count` BLOB COMMENT '报告统计内容' , + PRIMARY KEY (id) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试计划报告内容统计'; + +CREATE UNIQUE INDEX idx_test_plan_report_id ON test_plan_report_summary(test_plan_report_id); + +CREATE TABLE IF NOT EXISTS test_plan_report_function_case( + `id` VARCHAR(50) NOT NULL COMMENT 'ID' , + `test_plan_report_id` VARCHAR(50) NOT NULL COMMENT '测试计划报告ID' , + `test_plan_function_case_id` VARCHAR(50) NOT NULL COMMENT '测试计划功能用例关联ID' , + `function_case_id` VARCHAR(50) NOT NULL COMMENT '功能用例ID' , + `execute_result` VARCHAR(50) NOT NULL COMMENT '执行结果' , + PRIMARY KEY (id) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试计划报告内容功能用例部分'; + +CREATE UNIQUE INDEX idx_test_plan_report_id ON test_plan_report_function_case(test_plan_report_id); + +CREATE TABLE IF NOT EXISTS test_plan_report_bug( + `id` VARCHAR(50) COMMENT 'ID' , + `test_plan_report_id` VARCHAR(50) COMMENT '报告ID' , + `bug_id` VARCHAR(50) COMMENT '缺陷ID' +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试计划报告内容缺陷部分'; + +CREATE UNIQUE INDEX idx_test_plan_report_id ON test_plan_report_bug(test_plan_report_id); + -- set innodb lock wait timeout to default SET SESSION innodb_lock_wait_timeout = DEFAULT; diff --git a/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PermissionConstants.java b/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PermissionConstants.java index dbfa3d3696..98631e09f2 100644 --- a/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PermissionConstants.java +++ b/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PermissionConstants.java @@ -310,6 +310,11 @@ public class PermissionConstants { public static final String TEST_PLAN_READ_DELETE = "PROJECT_TEST_PLAN:READ+DELETE"; public static final String TEST_PLAN_READ_EXECUTE = "PROJECT_TEST_PLAN:READ+EXECUTE"; public static final String TEST_PLAN_READ_ASSOCIATION = "PROJECT_TEST_PLAN:READ+ASSOCIATION"; + + public static final String TEST_PLAN_REPORT_READ = "PROJECT_TEST_PLAN_REPORT:READ"; + public static final String TEST_PLAN_REPORT_READ_ADD = "PROJECT_TEST_PLAN_REPORT:READ+ADD"; + public static final String TEST_PLAN_REPORT_READ_UPDATE = "PROJECT_TEST_PLAN_REPORT:READ+UPDATE"; + public static final String TEST_PLAN_REPORT_READ_DELETE = "PROJECT_TEST_PLAN_REPORT:READ+DELETE"; /*------ end: TEST_PLAN ------*/ /*------ start: SYSTEM_TASK_CENTER ------*/ diff --git a/backend/framework/sdk/src/main/resources/i18n/plan.properties b/backend/framework/sdk/src/main/resources/i18n/plan.properties index 0a2af7702e..4569396f7a 100644 --- a/backend/framework/sdk/src/main/resources/i18n/plan.properties +++ b/backend/framework/sdk/src/main/resources/i18n/plan.properties @@ -86,4 +86,7 @@ test_plan_report_content.id.not_blank=测试计划报告内容id不能为空 test_plan_report_content.test_plan_report_id.length_range=测试计划报告id长度过长 test_plan_report_content.test_plan_report_id.not_blank=测试计划报告id不能为空 test_plan_group.batch.log={0}测试计划组 -test_plan.batch.log={0}测试计划 \ No newline at end of file +test_plan.batch.log={0}测试计划 +test_plan_report_not_exist=测试计划报告不存在 +test_plan_report_id.not_blank=测试计划报告id不能为空 +test_plan_report_name.not_blank=测试计划报告名称不能为空 \ No newline at end of file diff --git a/backend/framework/sdk/src/main/resources/i18n/plan_en_US.properties b/backend/framework/sdk/src/main/resources/i18n/plan_en_US.properties index ed0ce155e8..c9df8c7045 100644 --- a/backend/framework/sdk/src/main/resources/i18n/plan_en_US.properties +++ b/backend/framework/sdk/src/main/resources/i18n/plan_en_US.properties @@ -98,4 +98,7 @@ test_plan.type.not_blank=Test plan type cannot be empty test_plan.group.not_plan=There are no archived plans in the current testing plan group test_plan_group.batch.log={0} test plan group test_plan.batch.log={0} plan +test_plan_report_not_exist=The test plan report does not exist +test_plan_report_id.not_blank=The test plan report id cannot be empty +test_plan_report_name.not_blank=The test plan report name cannot be empty run_functional_case=Run functional case \ No newline at end of file diff --git a/backend/framework/sdk/src/main/resources/i18n/plan_zh_CN.properties b/backend/framework/sdk/src/main/resources/i18n/plan_zh_CN.properties index f51741e6c6..5274a2cb0d 100644 --- a/backend/framework/sdk/src/main/resources/i18n/plan_zh_CN.properties +++ b/backend/framework/sdk/src/main/resources/i18n/plan_zh_CN.properties @@ -98,4 +98,7 @@ test_plan.type.not_blank=测试计划类型不能为空 test_plan.group.not_plan=当前测试计划组没有可归档计划 test_plan_group.batch.log={0}测试计划组 test_plan.batch.log={0}测试计划 +test_plan_report_not_exist=测试计划报告不存在 +test_plan_report_id.not_blank=测试计划报告id不能为空 +test_plan_report_name.not_blank=测试计划报告名称不能为空 run_functional_case=执行功能用例 \ No newline at end of file diff --git a/backend/framework/sdk/src/main/resources/i18n/plan_zh_TW.properties b/backend/framework/sdk/src/main/resources/i18n/plan_zh_TW.properties index 967577eabb..9d0e34bb3d 100644 --- a/backend/framework/sdk/src/main/resources/i18n/plan_zh_TW.properties +++ b/backend/framework/sdk/src/main/resources/i18n/plan_zh_TW.properties @@ -98,4 +98,7 @@ test_plan.type.not_blank=測試計劃類型不能為空 test_plan.group.not_plan=當前測試計劃組沒有可歸檔計劃 test_plan_group.batch.log={0}測試計劃組 test_plan.batch.log={0}測試計劃 +test_plan_report_not_exist=測試計劃報告不存在 +test_plan_report_id.not_blank=測試計劃報告id不能爲空 +test_plan_report_name.not_blank=測試計劃報告名稱不能爲空 run_functional_case=執行功能用例 \ No newline at end of file diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/dto/request/TableBatchRequest.java b/backend/services/system-setting/src/main/java/io/metersphere/system/dto/request/TableBatchRequest.java new file mode 100644 index 0000000000..ebc8fe32f5 --- /dev/null +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/dto/request/TableBatchRequest.java @@ -0,0 +1,34 @@ +package io.metersphere.system.dto.request; + +import io.metersphere.system.dto.sdk.BaseCondition; +import io.metersphere.validation.groups.Created; +import io.metersphere.validation.groups.Updated; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Condition与BasePageRequest保持一致 + * 复用SQL参数条件 + */ + +@Data +public class TableBatchRequest extends BaseCondition { + + @Schema(description = "不处理的ID") + List excludeIds = new ArrayList<>(); + + @Schema(description = "选择的ID", requiredMode = Schema.RequiredMode.REQUIRED) + @Valid + private List< + @NotBlank(message = "{id must not be blank}", groups = {Created.class, Updated.class}) + String + > selectIds = new ArrayList<>(); + + @Schema(description = "是否选择所有数据") + private boolean selectAll; +} diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserService.java b/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserService.java index 5800d34ff2..71b46d615f 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserService.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/service/UserService.java @@ -16,6 +16,7 @@ import io.metersphere.system.dto.request.user.UserChangeEnableRequest; import io.metersphere.system.dto.request.user.UserEditRequest; import io.metersphere.system.dto.sdk.BasePageRequest; import io.metersphere.system.dto.sdk.ExcelParseDTO; +import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.system.dto.sdk.SessionUser; import io.metersphere.system.dto.table.TableBatchProcessDTO; import io.metersphere.system.dto.table.TableBatchProcessResponse; @@ -593,4 +594,12 @@ public class UserService { this.checkOldPassword(request.getId(), request.getOldPassword()); return extUserMapper.updatePasswordByUserId(request.getId(), request.getNewPassword()) > 0; } + + /** + * 根据ID获取用户ID, 名称集合 + */ + public Map getUserMapByIds(List userIds) { + List userOptions = baseUserMapper.selectUserOptionByIds(userIds); + return userOptions.stream().collect(Collectors.toMap(OptionDTO::getId, OptionDTO::getName)); + } } diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanReportController.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanReportController.java new file mode 100644 index 0000000000..717daed3e0 --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanReportController.java @@ -0,0 +1,75 @@ +package io.metersphere.plan.controller; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.metersphere.plan.constants.TestPlanResourceConfig; +import io.metersphere.plan.dto.request.TestPlanReportBatchRequest; +import io.metersphere.plan.dto.request.TestPlanReportDeleteRequest; +import io.metersphere.plan.dto.request.TestPlanReportEditRequest; +import io.metersphere.plan.dto.request.TestPlanReportPageRequest; +import io.metersphere.plan.dto.response.TestPlanReportPageResponse; +import io.metersphere.plan.service.TestPlanManagementService; +import io.metersphere.plan.service.TestPlanReportService; +import io.metersphere.sdk.constants.PermissionConstants; +import io.metersphere.system.security.CheckOwner; +import io.metersphere.system.utils.PageUtils; +import io.metersphere.system.utils.Pager; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.validation.annotation.Validated; +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; + +import java.util.Collections; +import java.util.List; + +@RestController +@RequestMapping("/test-plan/report") +@Tag(name = "测试计划-报告") +public class TestPlanReportController { + + @Resource + private TestPlanManagementService testPlanManagementService; + @Resource + private TestPlanReportService testPlanReportService; + + @PostMapping("/page") + @Operation(summary = "测试计划-报告-表格分页查询") + @RequiresPermissions(PermissionConstants.TEST_PLAN_REPORT_READ) + @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") + public Pager> page(@Validated @RequestBody TestPlanReportPageRequest request) { + testPlanManagementService.checkModuleIsOpen(request.getProjectId(), TestPlanResourceConfig.CHECK_TYPE_PROJECT, Collections.singletonList(TestPlanResourceConfig.CONFIG_TEST_PLAN)); + Page page = PageHelper.startPage(request.getCurrent(), request.getPageSize(), + StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "tpr.create_time desc"); + return PageUtils.setPageInfo(page, testPlanReportService.page(request)); + } + + @PostMapping("/rename") + @Operation(summary = "测试计划-报告-重命名") + @RequiresPermissions(PermissionConstants.TEST_PLAN_REPORT_READ_UPDATE) + @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") + public void rename(@Validated @RequestBody TestPlanReportEditRequest request) { + testPlanReportService.rename(request); + } + + @PostMapping("/delete") + @Operation(summary = "测试计划-报告-删除") + @RequiresPermissions(PermissionConstants.TEST_PLAN_REPORT_READ_DELETE) + @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") + public void delete(@Validated @RequestBody TestPlanReportDeleteRequest request) { + testPlanReportService.delete(request); + } + + @PostMapping("/batch-delete") + @Operation(summary = "测试计划-报告-批量删除") + @RequiresPermissions(PermissionConstants.TEST_PLAN_REPORT_READ_DELETE) + @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") + public void batchDelete(@Validated @RequestBody TestPlanReportBatchRequest request) { + testPlanReportService.batchDelete(request); + } +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportBatchRequest.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportBatchRequest.java new file mode 100644 index 0000000000..eecb50cda5 --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportBatchRequest.java @@ -0,0 +1,20 @@ +package io.metersphere.plan.dto.request; + +import io.metersphere.system.dto.request.TableBatchRequest; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class TestPlanReportBatchRequest extends TableBatchRequest { + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan.project_id.not_blank}") + private String projectId; + + @Schema(description = "类型", allowableValues = {"ALL: 全部", "TEST_PLAN: 独立", "GROUP: 聚合"}, requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan.type.not_blank}") + private String type; +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportDeleteRequest.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportDeleteRequest.java new file mode 100644 index 0000000000..4c1124cecc --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportDeleteRequest.java @@ -0,0 +1,19 @@ +package io.metersphere.plan.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class TestPlanReportDeleteRequest { + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan.project_id.not_blank}") + private String projectId; + + @Schema(description = "报告ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_id.not_blank}") + private String id; +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportEditRequest.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportEditRequest.java new file mode 100644 index 0000000000..b27e146a42 --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportEditRequest.java @@ -0,0 +1,23 @@ +package io.metersphere.plan.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class TestPlanReportEditRequest { + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan.project_id.not_blank}") + private String projectId; + + @Schema(description = "报告ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_id.not_blank}") + private String id; + + @Schema(description = "报告名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan_report_name.not_blank}") + private String name; +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportPageRequest.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportPageRequest.java new file mode 100644 index 0000000000..58aed02f0a --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanReportPageRequest.java @@ -0,0 +1,20 @@ +package io.metersphere.plan.dto.request; + +import io.metersphere.system.dto.sdk.BasePageRequest; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class TestPlanReportPageRequest extends BasePageRequest { + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan.project_id.not_blank}") + private String projectId; + + @Schema(description = "类型", allowableValues = {"ALL: 全部", "TEST_PLAN: 独立", "GROUP: 聚合"}, requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{test_plan.type.not_blank}") + private String type; +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanDetailResponse.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanDetailResponse.java index 459c4e5059..800dd71689 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanDetailResponse.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanDetailResponse.java @@ -40,10 +40,12 @@ public class TestPlanDetailResponse extends TestPlanStatisticsResponse implement @Schema(description = "是否开启测试规划") private Boolean testPlanning; - @Schema(description = "测试计划名称/测试计划组名称") private String name; + @Schema(description = "测试计划业务ID") + private Long num; + @Schema(description = "标签") private List tags; diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanReportPageResponse.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanReportPageResponse.java new file mode 100644 index 0000000000..298f8dec4b --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanReportPageResponse.java @@ -0,0 +1,34 @@ +package io.metersphere.plan.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class TestPlanReportPageResponse { + + @Schema(description = "报告ID") + private String id; + @Schema(description = "报告名称") + private String name; + @Schema(description = "计划名称") + private String planName; + @Schema(description = "计划通过阈值") + private String planPassThreshold; + @Schema(description = "触发方式") + private String triggerMode; + @Schema(description = "执行状态") + private String executeStatus; + @Schema(description = "执行结果") + private String resultStatus; + @Schema(description = "通过率") + private Double passRate; + @Schema(description = "创建人") + private String createUser; + @Schema(description = "创建人名称") + private String createUserName; + @Schema(description = "创建时间") + private Long createTime; + +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanReportMapper.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanReportMapper.java new file mode 100644 index 0000000000..e6ca1f867d --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanReportMapper.java @@ -0,0 +1,25 @@ +package io.metersphere.plan.mapper; + +import io.metersphere.plan.dto.request.TestPlanReportBatchRequest; +import io.metersphere.plan.dto.request.TestPlanReportPageRequest; +import io.metersphere.plan.dto.response.TestPlanReportPageResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ExtTestPlanReportMapper { + + /** + * 分页获取计划列表 + * @param request 分页请求参数 + * @return 计划列表 + */ + List list(@Param("request") TestPlanReportPageRequest request, @Param("sort") String sort); + + /** + * 根据页面参数获取批量操作的报告ID + * @param request 请求参数 + * @return 报告ID集合 + */ + List getReportBatchIdsByParam(@Param("request")TestPlanReportBatchRequest request); +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanReportMapper.xml b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanReportMapper.xml new file mode 100644 index 0000000000..7572939788 --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanReportMapper.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + and tp.project_id = #{request.projectId} + + + and tp.type = #{request.type} + + + and tpr.name like concat('%', #{request.keyword},'%') + + + + + + + + + + + + + + + + + + and tpr.trigger_mode in + + + + + and tpr.exec_status in + + + + + and tpr.result_status in + + + + + + + + + + + and ( + + + + + + + + + + tpr.name + + + + + + + + + + tpr.trigger_mode + + + + + + + + + + tpr.exec_status + + + + + + + + + + tpr.result_status + + + + + ) + + + + + + + 1 = 1 + + + 1 = 2 + + + + + + + + and + + + or + + + + \ No newline at end of file diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanReportService.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanReportService.java new file mode 100644 index 0000000000..90ad363296 --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanReportService.java @@ -0,0 +1,135 @@ +package io.metersphere.plan.service; + +import io.metersphere.plan.domain.*; +import io.metersphere.plan.dto.request.TestPlanReportBatchRequest; +import io.metersphere.plan.dto.request.TestPlanReportDeleteRequest; +import io.metersphere.plan.dto.request.TestPlanReportEditRequest; +import io.metersphere.plan.dto.request.TestPlanReportPageRequest; +import io.metersphere.plan.dto.response.TestPlanReportPageResponse; +import io.metersphere.plan.mapper.*; +import io.metersphere.sdk.exception.MSException; +import io.metersphere.sdk.util.Translator; +import io.metersphere.system.service.UserService; +import jakarta.annotation.Resource; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +public class TestPlanReportService { + + @Resource + private UserService userService; + @Resource + private TestPlanReportMapper testPlanReportMapper; + @Resource + private ExtTestPlanReportMapper extTestPlanReportMapper; + @Resource + private TestPlanReportSummaryMapper testPlanReportSummaryMapper; + @Resource + private TestPlanReportFunctionCaseMapper testPlanReportFunctionCaseMapper; + @Resource + private TestPlanReportBugMapper testPlanReportBugMapper; + + /** + * 分页查询报告列表 + * @param request 分页请求参数 + * @return 报告列表 + */ + public List page(TestPlanReportPageRequest request) { + List reportList = extTestPlanReportMapper.list(request, request.getSortString()); + if (CollectionUtils.isEmpty(reportList)) { + return new ArrayList<>(); + } + List distinctUserIds = reportList.stream().map(TestPlanReportPageResponse::getCreateUser).distinct().toList(); + Map userMap = userService.getUserMapByIds(distinctUserIds); + reportList.forEach(report -> report.setCreateUserName(userMap.get(report.getCreateUser()))); + return reportList; + } + + /** + * 报告重命名 + * @param request 请求参数 + */ + public void rename(TestPlanReportEditRequest request) { + checkReport(request.getId()); + TestPlanReport report = new TestPlanReport(); + report.setId(request.getId()); + report.setName(request.getName()); + testPlanReportMapper.updateByPrimaryKeySelective(report); + } + + /** + * 删除单个报告 + * @param request 请求参数 + */ + public void delete(TestPlanReportDeleteRequest request) { + checkReport(request.getId()); + testPlanReportMapper.deleteByPrimaryKey(request.getId()); + // 删除报告内容的关联资源表 + cleanReportAssociateResource(List.of(request.getId())); + } + + /** + * 批量参数报告 + * @param request 请求参数 + */ + public void batchDelete(TestPlanReportBatchRequest request) { + List batchIds = getBatchIds(request); + if (CollectionUtils.isNotEmpty(batchIds)) { + TestPlanReportExample example = new TestPlanReportExample(); + example.createCriteria().andIdIn(batchIds); + testPlanReportMapper.deleteByExample(example); + // 删除报告内容的关联资源表 + cleanReportAssociateResource(batchIds); + } + } + + /** + * 清理报告关联的资源 + * @param reportIds 报告ID集合 + */ + public void cleanReportAssociateResource(List reportIds) { + // TODO: 删除报告关联的统计, 用例, 缺陷 + TestPlanReportSummaryExample summaryExample = new TestPlanReportSummaryExample(); + summaryExample.createCriteria().andTestPlanReportIdIn(reportIds); + testPlanReportSummaryMapper.deleteByExample(summaryExample); + TestPlanReportFunctionCaseExample functionCaseExample = new TestPlanReportFunctionCaseExample(); + functionCaseExample.createCriteria().andTestPlanReportIdIn(reportIds); + testPlanReportFunctionCaseMapper.deleteByExample(functionCaseExample); + TestPlanReportBugExample bugExample = new TestPlanReportBugExample(); + bugExample.createCriteria().andTestPlanReportIdIn(reportIds); + testPlanReportBugMapper.deleteByExample(bugExample); + } + + /** + * 通过请求参数获取批量操作的ID集合 + * @param request 请求参数 + * @return ID集合 + */ + private List getBatchIds(TestPlanReportBatchRequest request) { + if (request.isSelectAll()) { + List batchIds = extTestPlanReportMapper.getReportBatchIdsByParam(request); + if (CollectionUtils.isNotEmpty(request.getExcludeIds())) { + batchIds.removeIf(id -> request.getExcludeIds().contains(id)); + } + return batchIds; + } else { + return request.getSelectIds(); + } + } + + /** + * 校验报告是否存在 + * @param id 报告ID + */ + private void checkReport(String id) { + TestPlanReport testPlanReport = testPlanReportMapper.selectByPrimaryKey(id); + if (testPlanReport == null) { + throw new MSException(Translator.get("test_plan_report_not_exist")); + } + } +} diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanService.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanService.java index 2d9fef39fd..ff054a9ba1 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanService.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanService.java @@ -437,6 +437,8 @@ public class TestPlanService extends TestPlanBaseUtilsService { String moduleName = getModuleName(testPlan.getModuleId()); //计划组只有几个参数 response.setId(testPlan.getId()); + response.setNum(testPlan.getNum()); + response.setStatus(testPlan.getStatus()); response.setName(testPlan.getName()); response.setTags(testPlan.getTags()); response.setModuleId(testPlan.getModuleId()); diff --git a/backend/services/test-plan/src/main/resources/testPlanGeneratorConfig.xml b/backend/services/test-plan/src/main/resources/testPlanGeneratorConfig.xml index c7633fd3ba..766e747759 100644 --- a/backend/services/test-plan/src/main/resources/testPlanGeneratorConfig.xml +++ b/backend/services/test-plan/src/main/resources/testPlanGeneratorConfig.xml @@ -77,10 +77,13 @@ - -
-
-
+ + + + + + +