Merge branch 'master' of https://github.com/metersphere/server
This commit is contained in:
commit
942707ab64
|
@ -11,6 +11,7 @@ import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
@ -18,12 +19,12 @@ import java.util.Optional;
|
||||||
public abstract class ApiImportAbstractParser implements ApiImportParser {
|
public abstract class ApiImportAbstractParser implements ApiImportParser {
|
||||||
|
|
||||||
protected String getApiTestStr(InputStream source) {
|
protected String getApiTestStr(InputStream source) {
|
||||||
BufferedReader bufferedReader = null;
|
BufferedReader bufferedReader;
|
||||||
StringBuilder testStr = null;
|
StringBuilder testStr = null;
|
||||||
try {
|
try {
|
||||||
bufferedReader = new BufferedReader(new InputStreamReader(source, "UTF-8"));
|
bufferedReader = new BufferedReader(new InputStreamReader(source, StandardCharsets.UTF_8));
|
||||||
testStr = new StringBuilder();
|
testStr = new StringBuilder();
|
||||||
String inputStr = null;
|
String inputStr;
|
||||||
while ((inputStr = bufferedReader.readLine()) != null) {
|
while ((inputStr = bufferedReader.readLine()) != null) {
|
||||||
testStr.append(inputStr);
|
testStr.append(inputStr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,15 @@ package io.metersphere.api.parse;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import io.metersphere.api.dto.parse.ApiImport;
|
import io.metersphere.api.dto.parse.ApiImport;
|
||||||
import io.metersphere.commons.exception.MSException;
|
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.InputStream;
|
||||||
|
|
||||||
public class MsParser extends ApiImportAbstractParser {
|
public class MsParser extends ApiImportAbstractParser {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApiImport parse(InputStream source) {
|
public ApiImport parse(InputStream source) {
|
||||||
String testStr = getApiTestStr(source);
|
String testStr = getApiTestStr(source);
|
||||||
return JSON.parseObject(testStr.toString(), ApiImport.class);
|
return JSON.parseObject(testStr, ApiImport.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package io.metersphere.api.parse;
|
package io.metersphere.api.parse;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import io.metersphere.api.dto.parse.ApiImport;
|
import io.metersphere.api.dto.parse.ApiImport;
|
||||||
import io.metersphere.api.dto.parse.postman.*;
|
import io.metersphere.api.dto.parse.postman.*;
|
||||||
|
@ -11,15 +10,9 @@ import io.metersphere.api.dto.scenario.Request;
|
||||||
import io.metersphere.api.dto.scenario.Scenario;
|
import io.metersphere.api.dto.scenario.Scenario;
|
||||||
import io.metersphere.commons.constants.MsRequestBodyType;
|
import io.metersphere.commons.constants.MsRequestBodyType;
|
||||||
import io.metersphere.commons.constants.PostmanRequestBodyMode;
|
import io.metersphere.commons.constants.PostmanRequestBodyMode;
|
||||||
import io.metersphere.commons.exception.MSException;
|
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.eclipse.jetty.http.HttpHeader;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -28,7 +21,7 @@ public class PostmanParser extends ApiImportAbstractParser {
|
||||||
@Override
|
@Override
|
||||||
public ApiImport parse(InputStream source) {
|
public ApiImport parse(InputStream source) {
|
||||||
String testStr = getApiTestStr(source);
|
String testStr = getApiTestStr(source);
|
||||||
PostmanCollection postmanCollection = JSON.parseObject(testStr.toString(), PostmanCollection.class);
|
PostmanCollection postmanCollection = JSON.parseObject(testStr, PostmanCollection.class);
|
||||||
PostmanCollectionInfo info = postmanCollection.getInfo();
|
PostmanCollectionInfo info = postmanCollection.getInfo();
|
||||||
List<Request> requests = parseRequests(postmanCollection);
|
List<Request> requests = parseRequests(postmanCollection);
|
||||||
ApiImport apiImport = new ApiImport();
|
ApiImport apiImport = new ApiImport();
|
||||||
|
@ -46,9 +39,7 @@ public class PostmanParser extends ApiImportAbstractParser {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
List<KeyValue> keyValues = new ArrayList<>();
|
List<KeyValue> keyValues = new ArrayList<>();
|
||||||
postmanKeyValues.forEach(item -> {
|
postmanKeyValues.forEach(item -> keyValues.add(new KeyValue(item.getKey(), item.getValue())));
|
||||||
keyValues.add(new KeyValue(item.getKey(), item.getValue()));
|
|
||||||
});
|
|
||||||
return keyValues;
|
return keyValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,5 +33,7 @@ public class TestCase implements Serializable {
|
||||||
|
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
|
|
||||||
|
private Integer num;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
|
@ -1053,6 +1053,66 @@ public class TestCaseExample {
|
||||||
addCriterion("sort not between", value1, value2, "sort");
|
addCriterion("sort not between", value1, value2, "sort");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Criteria andNumIsNull() {
|
||||||
|
addCriterion("num is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumIsNotNull() {
|
||||||
|
addCriterion("num is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumEqualTo(Integer value) {
|
||||||
|
addCriterion("num =", value, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumNotEqualTo(Integer value) {
|
||||||
|
addCriterion("num <>", value, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumGreaterThan(Integer value) {
|
||||||
|
addCriterion("num >", value, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumGreaterThanOrEqualTo(Integer value) {
|
||||||
|
addCriterion("num >=", value, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumLessThan(Integer value) {
|
||||||
|
addCriterion("num <", value, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumLessThanOrEqualTo(Integer value) {
|
||||||
|
addCriterion("num <=", value, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumIn(List<Integer> values) {
|
||||||
|
addCriterion("num in", values, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumNotIn(List<Integer> values) {
|
||||||
|
addCriterion("num not in", values, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumBetween(Integer value1, Integer value2) {
|
||||||
|
addCriterion("num between", value1, value2, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andNumNotBetween(Integer value1, Integer value2) {
|
||||||
|
addCriterion("num not between", value1, value2, "num");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Criteria extends GeneratedCriteria {
|
public static class Criteria extends GeneratedCriteria {
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
|
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
|
||||||
<result column="test_id" jdbcType="VARCHAR" property="testId" />
|
<result column="test_id" jdbcType="VARCHAR" property="testId" />
|
||||||
<result column="sort" jdbcType="INTEGER" property="sort" />
|
<result column="sort" jdbcType="INTEGER" property="sort" />
|
||||||
|
<result column="num" jdbcType="INTEGER" property="num" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.TestCaseWithBLOBs">
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.TestCaseWithBLOBs">
|
||||||
<result column="remark" jdbcType="LONGVARCHAR" property="remark" />
|
<result column="remark" jdbcType="LONGVARCHAR" property="remark" />
|
||||||
|
@ -81,7 +82,7 @@
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, node_id, node_path, project_id, `name`, `type`, maintainer, priority, `method`,
|
id, node_id, node_path, project_id, `name`, `type`, maintainer, priority, `method`,
|
||||||
prerequisite, create_time, update_time, test_id, sort
|
prerequisite, create_time, update_time, test_id, sort, num
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Blob_Column_List">
|
<sql id="Blob_Column_List">
|
||||||
remark, steps
|
remark, steps
|
||||||
|
@ -139,14 +140,14 @@
|
||||||
project_id, `name`, `type`,
|
project_id, `name`, `type`,
|
||||||
maintainer, priority, `method`,
|
maintainer, priority, `method`,
|
||||||
prerequisite, create_time, update_time,
|
prerequisite, create_time, update_time,
|
||||||
test_id, sort, remark,
|
test_id, sort, num,
|
||||||
steps)
|
remark, steps)
|
||||||
values (#{id,jdbcType=VARCHAR}, #{nodeId,jdbcType=VARCHAR}, #{nodePath,jdbcType=VARCHAR},
|
values (#{id,jdbcType=VARCHAR}, #{nodeId,jdbcType=VARCHAR}, #{nodePath,jdbcType=VARCHAR},
|
||||||
#{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR},
|
#{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR},
|
||||||
#{maintainer,jdbcType=VARCHAR}, #{priority,jdbcType=VARCHAR}, #{method,jdbcType=VARCHAR},
|
#{maintainer,jdbcType=VARCHAR}, #{priority,jdbcType=VARCHAR}, #{method,jdbcType=VARCHAR},
|
||||||
#{prerequisite,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
|
#{prerequisite,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT},
|
||||||
#{testId,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}, #{remark,jdbcType=LONGVARCHAR},
|
#{testId,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}, #{num,jdbcType=INTEGER},
|
||||||
#{steps,jdbcType=LONGVARCHAR})
|
#{remark,jdbcType=LONGVARCHAR}, #{steps,jdbcType=LONGVARCHAR})
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="io.metersphere.base.domain.TestCaseWithBLOBs">
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.TestCaseWithBLOBs">
|
||||||
insert into test_case
|
insert into test_case
|
||||||
|
@ -193,6 +194,9 @@
|
||||||
<if test="sort != null">
|
<if test="sort != null">
|
||||||
sort,
|
sort,
|
||||||
</if>
|
</if>
|
||||||
|
<if test="num != null">
|
||||||
|
num,
|
||||||
|
</if>
|
||||||
<if test="remark != null">
|
<if test="remark != null">
|
||||||
remark,
|
remark,
|
||||||
</if>
|
</if>
|
||||||
|
@ -243,6 +247,9 @@
|
||||||
<if test="sort != null">
|
<if test="sort != null">
|
||||||
#{sort,jdbcType=INTEGER},
|
#{sort,jdbcType=INTEGER},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="num != null">
|
||||||
|
#{num,jdbcType=INTEGER},
|
||||||
|
</if>
|
||||||
<if test="remark != null">
|
<if test="remark != null">
|
||||||
#{remark,jdbcType=LONGVARCHAR},
|
#{remark,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
@ -302,6 +309,9 @@
|
||||||
<if test="record.sort != null">
|
<if test="record.sort != null">
|
||||||
sort = #{record.sort,jdbcType=INTEGER},
|
sort = #{record.sort,jdbcType=INTEGER},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.num != null">
|
||||||
|
num = #{record.num,jdbcType=INTEGER},
|
||||||
|
</if>
|
||||||
<if test="record.remark != null">
|
<if test="record.remark != null">
|
||||||
remark = #{record.remark,jdbcType=LONGVARCHAR},
|
remark = #{record.remark,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
@ -329,6 +339,7 @@
|
||||||
update_time = #{record.updateTime,jdbcType=BIGINT},
|
update_time = #{record.updateTime,jdbcType=BIGINT},
|
||||||
test_id = #{record.testId,jdbcType=VARCHAR},
|
test_id = #{record.testId,jdbcType=VARCHAR},
|
||||||
sort = #{record.sort,jdbcType=INTEGER},
|
sort = #{record.sort,jdbcType=INTEGER},
|
||||||
|
num = #{record.num,jdbcType=INTEGER},
|
||||||
remark = #{record.remark,jdbcType=LONGVARCHAR},
|
remark = #{record.remark,jdbcType=LONGVARCHAR},
|
||||||
steps = #{record.steps,jdbcType=LONGVARCHAR}
|
steps = #{record.steps,jdbcType=LONGVARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
|
@ -350,7 +361,8 @@
|
||||||
create_time = #{record.createTime,jdbcType=BIGINT},
|
create_time = #{record.createTime,jdbcType=BIGINT},
|
||||||
update_time = #{record.updateTime,jdbcType=BIGINT},
|
update_time = #{record.updateTime,jdbcType=BIGINT},
|
||||||
test_id = #{record.testId,jdbcType=VARCHAR},
|
test_id = #{record.testId,jdbcType=VARCHAR},
|
||||||
sort = #{record.sort,jdbcType=INTEGER}
|
sort = #{record.sort,jdbcType=INTEGER},
|
||||||
|
num = #{record.num,jdbcType=INTEGER}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
</if>
|
</if>
|
||||||
|
@ -397,6 +409,9 @@
|
||||||
<if test="sort != null">
|
<if test="sort != null">
|
||||||
sort = #{sort,jdbcType=INTEGER},
|
sort = #{sort,jdbcType=INTEGER},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="num != null">
|
||||||
|
num = #{num,jdbcType=INTEGER},
|
||||||
|
</if>
|
||||||
<if test="remark != null">
|
<if test="remark != null">
|
||||||
remark = #{remark,jdbcType=LONGVARCHAR},
|
remark = #{remark,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
@ -421,6 +436,7 @@
|
||||||
update_time = #{updateTime,jdbcType=BIGINT},
|
update_time = #{updateTime,jdbcType=BIGINT},
|
||||||
test_id = #{testId,jdbcType=VARCHAR},
|
test_id = #{testId,jdbcType=VARCHAR},
|
||||||
sort = #{sort,jdbcType=INTEGER},
|
sort = #{sort,jdbcType=INTEGER},
|
||||||
|
num = #{num,jdbcType=INTEGER},
|
||||||
remark = #{remark,jdbcType=LONGVARCHAR},
|
remark = #{remark,jdbcType=LONGVARCHAR},
|
||||||
steps = #{steps,jdbcType=LONGVARCHAR}
|
steps = #{steps,jdbcType=LONGVARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
|
@ -439,7 +455,8 @@
|
||||||
create_time = #{createTime,jdbcType=BIGINT},
|
create_time = #{createTime,jdbcType=BIGINT},
|
||||||
update_time = #{updateTime,jdbcType=BIGINT},
|
update_time = #{updateTime,jdbcType=BIGINT},
|
||||||
test_id = #{testId,jdbcType=VARCHAR},
|
test_id = #{testId,jdbcType=VARCHAR},
|
||||||
sort = #{sort,jdbcType=INTEGER}
|
sort = #{sort,jdbcType=INTEGER},
|
||||||
|
num = #{num,jdbcType=INTEGER}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
|
@ -17,4 +17,6 @@ public interface ExtTestCaseMapper {
|
||||||
|
|
||||||
List<TestCaseDTO> listBytestCaseIds(@Param("request") QueryTestCaseRequest request);
|
List<TestCaseDTO> listBytestCaseIds(@Param("request") QueryTestCaseRequest request);
|
||||||
|
|
||||||
|
TestCase getMaxNumByProjectId(@Param("projectId") String projectId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,7 +188,8 @@
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
<select id="listBytestCaseIds" resultType="io.metersphere.track.dto.TestCaseDTO">
|
<select id="listBytestCaseIds" resultType="io.metersphere.track.dto.TestCaseDTO">
|
||||||
select test_case.*,api_test.name as apiName,load_test.name AS performName from test_case left join api_test on test_case.test_id=api_test.id left join load_test on test_case.test_id=load_test.id
|
select test_case.*,api_test.name as apiName,load_test.name AS performName from test_case left join api_test on
|
||||||
|
test_case.test_id=api_test.id left join load_test on test_case.test_id=load_test.id
|
||||||
<where>
|
<where>
|
||||||
<if test="request.testCaseIds!=null and request.testCaseIds.size() > 0">
|
<if test="request.testCaseIds!=null and request.testCaseIds.size() > 0">
|
||||||
and test_case.id in
|
and test_case.id in
|
||||||
|
@ -198,4 +199,8 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getMaxNumByProjectId" resultType="io.metersphere.base.domain.TestCase">
|
||||||
|
select * from test_case where test_case.project_id = #{projectId} order by num desc limit 1;
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -84,6 +84,7 @@ public class TestCaseService {
|
||||||
testCase.setId(UUID.randomUUID().toString());
|
testCase.setId(UUID.randomUUID().toString());
|
||||||
testCase.setCreateTime(System.currentTimeMillis());
|
testCase.setCreateTime(System.currentTimeMillis());
|
||||||
testCase.setUpdateTime(System.currentTimeMillis());
|
testCase.setUpdateTime(System.currentTimeMillis());
|
||||||
|
testCase.setNum(getNextNum(testCase.getProjectId()));
|
||||||
testCaseMapper.insert(testCase);
|
testCaseMapper.insert(testCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,9 +254,12 @@ public class TestCaseService {
|
||||||
TestCaseMapper mapper = sqlSession.getMapper(TestCaseMapper.class);
|
TestCaseMapper mapper = sqlSession.getMapper(TestCaseMapper.class);
|
||||||
if (!testCases.isEmpty()) {
|
if (!testCases.isEmpty()) {
|
||||||
AtomicInteger sort = new AtomicInteger();
|
AtomicInteger sort = new AtomicInteger();
|
||||||
|
AtomicInteger num = new AtomicInteger();
|
||||||
|
num.set(getNextNum(projectId)+testCases.size());
|
||||||
testCases.forEach(testcase -> {
|
testCases.forEach(testcase -> {
|
||||||
testcase.setNodeId(nodePathMap.get(testcase.getNodePath()));
|
testcase.setNodeId(nodePathMap.get(testcase.getNodePath()));
|
||||||
testcase.setSort(sort.getAndIncrement());
|
testcase.setSort(sort.getAndIncrement());
|
||||||
|
testcase.setNum(num.decrementAndGet());
|
||||||
mapper.insert(testcase);
|
mapper.insert(testcase);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -429,4 +433,17 @@ public class TestCaseService {
|
||||||
MSException.throwException(Translator.get("related_case_del_fail_prefix") + " " + str + " " + Translator.get("related_case_del_fail_suffix"));
|
MSException.throwException(Translator.get("related_case_del_fail_prefix") + " " + str + " " + Translator.get("related_case_del_fail_suffix"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目下一个num (页面展示的ID)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int getNextNum(String projectId) {
|
||||||
|
TestCase testCase = extTestCaseMapper.getMaxNumByProjectId(projectId);
|
||||||
|
if (testCase == null) {
|
||||||
|
return 100001;
|
||||||
|
} else {
|
||||||
|
return Optional.ofNullable(testCase.getNum()+1).orElse(100001);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
alter table test_case add num int null comment 'Manually controlled growth identifier';
|
||||||
|
|
||||||
|
DROP PROCEDURE IF EXISTS test_cursor;
|
||||||
|
DELIMITER //
|
||||||
|
CREATE PROCEDURE test_cursor()
|
||||||
|
BEGIN
|
||||||
|
DECLARE projectId VARCHAR(64);
|
||||||
|
DECLARE caseId VARCHAR(64);
|
||||||
|
DECLARE num INT;
|
||||||
|
DECLARE done INT DEFAULT 0;
|
||||||
|
DECLARE cursor1 CURSOR FOR (SELECT DISTINCT project_id
|
||||||
|
FROM test_case
|
||||||
|
WHERE num IS NULL);
|
||||||
|
DECLARE cursor2 CURSOR FOR (SELECT id
|
||||||
|
FROM test_case
|
||||||
|
WHERE project_id = projectId
|
||||||
|
ORDER BY create_time);
|
||||||
|
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||||
|
OPEN cursor1;
|
||||||
|
outer_loop:
|
||||||
|
LOOP
|
||||||
|
FETCH cursor1 INTO projectId;
|
||||||
|
IF done
|
||||||
|
THEN
|
||||||
|
LEAVE outer_loop;
|
||||||
|
END IF;
|
||||||
|
SET num = 100001;
|
||||||
|
OPEN cursor2;
|
||||||
|
inner_loop:
|
||||||
|
LOOP
|
||||||
|
FETCH cursor2 INTO caseId;
|
||||||
|
IF done
|
||||||
|
THEN
|
||||||
|
LEAVE inner_loop;
|
||||||
|
END IF;
|
||||||
|
UPDATE test_case
|
||||||
|
SET num = num
|
||||||
|
WHERE id = caseId;
|
||||||
|
SET num = num + 1;
|
||||||
|
END LOOP;
|
||||||
|
SET done = 0;
|
||||||
|
CLOSE cursor2;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE cursor1;
|
||||||
|
END //
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
CALL test_cursor();
|
||||||
|
DROP PROCEDURE IF EXISTS test_cursor;
|
|
@ -39,8 +39,8 @@
|
||||||
<!-- jdbc连接信息 --> <!-- EduLoanManage EduTestDataBase -->
|
<!-- jdbc连接信息 --> <!-- EduLoanManage EduTestDataBase -->
|
||||||
<!--<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.20.180:3306/fit2cloud"-->
|
<!--<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.20.180:3306/fit2cloud"-->
|
||||||
<!--userId="root" password="Fit2cloud2015!" />-->
|
<!--userId="root" password="Fit2cloud2015!" />-->
|
||||||
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
|
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
|
||||||
connectionURL="${spring.datasource.url}"
|
connectionURL="${spring.datasource.url}&nullCatalogMeansCurrent=true"
|
||||||
userId="${spring.datasource.username}" password="${spring.datasource.password}"/>
|
userId="${spring.datasource.username}" password="${spring.datasource.password}"/>
|
||||||
|
|
||||||
<!-- javaTypeResolver式类型转换的信息 -->
|
<!-- javaTypeResolver式类型转换的信息 -->
|
||||||
|
@ -64,7 +64,7 @@
|
||||||
|
|
||||||
<!--要生成的数据库表 -->
|
<!--要生成的数据库表 -->
|
||||||
|
|
||||||
<table tableName="load_test"/>
|
<table tableName="test_case"/>
|
||||||
|
|
||||||
|
|
||||||
</context>
|
</context>
|
||||||
|
|
|
@ -4,11 +4,6 @@
|
||||||
<el-dialog :title="$t('commons.adv_search.combine')" :visible.sync="visible" custom-class="adv-dialog"
|
<el-dialog :title="$t('commons.adv_search.combine')" :visible.sync="visible" custom-class="adv-dialog"
|
||||||
:append-to-body="true">
|
:append-to-body="true">
|
||||||
<div>
|
<div>
|
||||||
<!-- 如果有需求再加上-->
|
|
||||||
<!-- <div class="search-label">{{$t('commons.adv_search.combine')}}: </div>-->
|
|
||||||
<!-- <el-select v-model="logic" :placeholder="$t('commons.please_select')" size="small" class="search-combine">-->
|
|
||||||
<!-- <el-option v-for="o in options" :key="o.value" :label="o.label" :value="o.value"/>-->
|
|
||||||
<!-- </el-select>-->
|
|
||||||
<div class="search-items">
|
<div class="search-items">
|
||||||
<component class="search-item" v-for="(component, index) in config.components" :key="index"
|
<component class="search-item" v-for="(component, index) in config.components" :key="index"
|
||||||
:is="component.name" :component="component"/>
|
:is="component.name" :component="component"/>
|
||||||
|
@ -26,7 +21,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import components from "./search-components";
|
import components from "./search-components";
|
||||||
import _ from "lodash";
|
import {cloneDeep} from "lodash";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {...components},
|
components: {...components},
|
||||||
|
@ -37,20 +32,12 @@
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
visible: false,
|
visible: false,
|
||||||
config: this.init(),
|
config: this.init()
|
||||||
options: [{
|
|
||||||
label: this.$t("commons.adv_search.and"),
|
|
||||||
value: "and"
|
|
||||||
}, {
|
|
||||||
label: this.$t("commons.adv_search.or"),
|
|
||||||
value: "or"
|
|
||||||
}],
|
|
||||||
logic: this.condition.logic || "and"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
init() { // 设置默认值
|
init() {
|
||||||
let config = _.cloneDeep(this.condition);
|
let config = cloneDeep(this.condition);
|
||||||
config.components.forEach(component => {
|
config.components.forEach(component => {
|
||||||
let operator = component.operator.value;
|
let operator = component.operator.value;
|
||||||
component.operator.value = operator === undefined ? component.operator.options[0].value : operator;
|
component.operator.value = operator === undefined ? component.operator.options[0].value : operator;
|
||||||
|
@ -58,21 +45,19 @@
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
search() {
|
search() {
|
||||||
let condition = {
|
let condition = {}
|
||||||
// logic: this.logic // 如果有需求再加上
|
|
||||||
}
|
|
||||||
this.config.components.forEach(component => {
|
this.config.components.forEach(component => {
|
||||||
let operator = component.operator.value;
|
let operator = component.operator.value;
|
||||||
let value = component.value;
|
let value = component.value;
|
||||||
if (Array.isArray(component.value)) {
|
if (Array.isArray(value)) {
|
||||||
if (component.value.length > 0) {
|
if (value.length > 0) {
|
||||||
condition[component.key] = {
|
condition[component.key] = {
|
||||||
operator: operator,
|
operator: operator,
|
||||||
value: value
|
value: value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (component.value !== undefined && component.value !== null && component.value !== "") {
|
if (value !== undefined && value !== null && value !== "") {
|
||||||
condition[component.key] = {
|
condition[component.key] = {
|
||||||
operator: operator,
|
operator: operator,
|
||||||
value: value
|
value: value
|
||||||
|
@ -135,17 +120,6 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-label {
|
|
||||||
display: inline-block;
|
|
||||||
width: 80px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-combine {
|
|
||||||
width: 160px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-items {
|
.search-items {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,11 @@
|
||||||
class="test-content">
|
class="test-content">
|
||||||
<el-table-column
|
<el-table-column
|
||||||
type="selection"/>
|
type="selection"/>
|
||||||
|
<el-table-column
|
||||||
|
prop="num"
|
||||||
|
:label="$t('commons.id')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="name"
|
prop="name"
|
||||||
:label="$t('commons.name')"
|
:label="$t('commons.name')"
|
||||||
|
|
|
@ -33,7 +33,11 @@
|
||||||
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
type="selection"></el-table-column>
|
type="selection"></el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="num"
|
||||||
|
:label="$t('commons.id')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="name"
|
prop="name"
|
||||||
:label="$t('commons.name')"
|
:label="$t('commons.name')"
|
||||||
|
|
|
@ -5,6 +5,11 @@
|
||||||
<el-table
|
<el-table
|
||||||
row-key="id"
|
row-key="id"
|
||||||
:data="failureTestCases">
|
:data="failureTestCases">
|
||||||
|
<el-table-column
|
||||||
|
prop="num"
|
||||||
|
:label="$t('commons.id')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="name"
|
prop="name"
|
||||||
:label="$t('commons.name')"
|
:label="$t('commons.name')"
|
||||||
|
|
|
@ -103,6 +103,7 @@ export default {
|
||||||
input_login_username: 'Please input the user ID or email',
|
input_login_username: 'Please input the user ID or email',
|
||||||
input_name: 'Please enter name',
|
input_name: 'Please enter name',
|
||||||
formatErr: 'Format Error',
|
formatErr: 'Format Error',
|
||||||
|
id: 'ID',
|
||||||
date: {
|
date: {
|
||||||
select_date: 'Select date',
|
select_date: 'Select date',
|
||||||
start_date: 'Start date',
|
start_date: 'Start date',
|
||||||
|
|
|
@ -103,6 +103,7 @@ export default {
|
||||||
input_login_username: '请输入用户 ID 或 邮箱',
|
input_login_username: '请输入用户 ID 或 邮箱',
|
||||||
input_name: '请输入名称',
|
input_name: '请输入名称',
|
||||||
formatErr: '格式错误',
|
formatErr: '格式错误',
|
||||||
|
id: 'ID',
|
||||||
date: {
|
date: {
|
||||||
select_date: '选择日期',
|
select_date: '选择日期',
|
||||||
start_date: '开始日期',
|
start_date: '开始日期',
|
||||||
|
|
|
@ -101,6 +101,7 @@ export default {
|
||||||
delete_confirm: '請輸入以下內容,確認刪除:',
|
delete_confirm: '請輸入以下內容,確認刪除:',
|
||||||
input_name: '請輸入名稱',
|
input_name: '請輸入名稱',
|
||||||
formatErr: '格式錯誤',
|
formatErr: '格式錯誤',
|
||||||
|
id: 'ID',
|
||||||
date: {
|
date: {
|
||||||
select_date: '選擇日期',
|
select_date: '選擇日期',
|
||||||
start_date: '開始日期',
|
start_date: '開始日期',
|
||||||
|
|
Loading…
Reference in New Issue