parent
d719fefec4
commit
aca31b166c
|
@ -88,16 +88,61 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
|
||||||
Map<String, List<String>> filters = new LinkedHashMap<>();
|
Map<String, List<String>> filters = new LinkedHashMap<>();
|
||||||
filters.put("status", list);
|
filters.put("status", list);
|
||||||
request.setFilters(filters);
|
request.setFilters(filters);
|
||||||
|
// apiModules.forEach(node -> {
|
||||||
|
// List<String> moduleIds = new ArrayList<>();
|
||||||
|
// moduleIds = this.nodeList(apiModules, node.getId(), moduleIds);
|
||||||
|
// moduleIds.add(node.getId());
|
||||||
|
// request.setModuleIds(moduleIds);
|
||||||
|
// node.setCaseNum(extApiDefinitionMapper.moduleCount(request));
|
||||||
|
// });
|
||||||
|
|
||||||
|
//优化: 所有统计SQL一次查询出来
|
||||||
|
List<String> allModuleIdList = new ArrayList<>();
|
||||||
|
for (ApiModuleDTO node : apiModules) {
|
||||||
|
List<String> moduleIds = new ArrayList<>();
|
||||||
|
moduleIds = this.nodeList(apiModules, node.getId(), moduleIds);
|
||||||
|
moduleIds.add(node.getId());
|
||||||
|
for (String moduleId : moduleIds) {
|
||||||
|
if(!allModuleIdList.contains(moduleId)){
|
||||||
|
allModuleIdList.add(moduleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.setModuleIds(allModuleIdList);
|
||||||
|
List<Map<String,Object>> moduleCountList = extApiDefinitionMapper.moduleCountByCollection(request);
|
||||||
|
Map<String,Integer> moduleCountMap = this.parseModuleCountList(moduleCountList);
|
||||||
apiModules.forEach(node -> {
|
apiModules.forEach(node -> {
|
||||||
List<String> moduleIds = new ArrayList<>();
|
List<String> moduleIds = new ArrayList<>();
|
||||||
moduleIds = this.nodeList(apiModules, node.getId(), moduleIds);
|
moduleIds = this.nodeList(apiModules, node.getId(), moduleIds);
|
||||||
moduleIds.add(node.getId());
|
moduleIds.add(node.getId());
|
||||||
request.setModuleIds(moduleIds);
|
int countNum = 0;
|
||||||
node.setCaseNum(extApiDefinitionMapper.moduleCount(request));
|
for (String moduleId : moduleIds) {
|
||||||
|
if(moduleCountMap.containsKey(moduleId)){
|
||||||
|
countNum += moduleCountMap.get(moduleId).intValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node.setCaseNum(countNum);
|
||||||
});
|
});
|
||||||
return getNodeTrees(apiModules);
|
return getNodeTrees(apiModules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, Integer> parseModuleCountList(List<Map<String, Object>> moduleCountList) {
|
||||||
|
Map<String,Integer> returnMap = new HashMap<>();
|
||||||
|
for (Map<String, Object> map: moduleCountList){
|
||||||
|
Object moduleIdObj = map.get("moduleId");
|
||||||
|
Object countNumObj = map.get("countNum");
|
||||||
|
if(moduleIdObj!= null && countNumObj != null){
|
||||||
|
String moduleId = String.valueOf(moduleIdObj);
|
||||||
|
try {
|
||||||
|
Integer countNumInteger = new Integer(String.valueOf(countNumObj));
|
||||||
|
returnMap.put(moduleId,countNumInteger);
|
||||||
|
}catch (Exception e){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnMap;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<String> nodeList(List<ApiModuleDTO> apiNodes, String pid, List<String> list) {
|
public static List<String> nodeList(List<ApiModuleDTO> apiNodes, String pid, List<String> list) {
|
||||||
for (ApiModuleDTO node : apiNodes) {
|
for (ApiModuleDTO node : apiNodes) {
|
||||||
//遍历出父id等于参数的id,add进子节点集合
|
//遍历出父id等于参数的id,add进子节点集合
|
||||||
|
|
|
@ -87,16 +87,58 @@ public class ApiScenarioModuleService extends NodeTreeService<ApiScenarioModuleD
|
||||||
Map<String, List<String>> filters = new LinkedHashMap<>();
|
Map<String, List<String>> filters = new LinkedHashMap<>();
|
||||||
filters.put("status", list);
|
filters.put("status", list);
|
||||||
request.setFilters(filters);
|
request.setFilters(filters);
|
||||||
|
//优化:所有SQL统一查出来
|
||||||
|
// nodes.forEach(node -> {
|
||||||
|
// List<String> scenarioNodes = new ArrayList<>();
|
||||||
|
// scenarioNodes = this.nodeList(nodes, node.getId(), scenarioNodes);
|
||||||
|
// scenarioNodes.add(node.getId());
|
||||||
|
// request.setModuleIds(scenarioNodes);
|
||||||
|
// node.setCaseNum(extApiScenarioMapper.listModule(request));
|
||||||
|
// });
|
||||||
|
List<String> allModuleIdList = new ArrayList<>();
|
||||||
|
for (ApiScenarioModuleDTO node : nodes) {
|
||||||
|
List<String> moduleIds = new ArrayList<>();
|
||||||
|
moduleIds = this.nodeList(nodes, node.getId(), moduleIds);
|
||||||
|
moduleIds.add(node.getId());
|
||||||
|
for (String moduleId : moduleIds) {
|
||||||
|
if(!allModuleIdList.contains(moduleId)){
|
||||||
|
allModuleIdList.add(moduleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.setModuleIds(allModuleIdList);
|
||||||
|
List<Map<String,Object>> moduleCountList = extApiScenarioMapper.listModuleByCollection(request);
|
||||||
|
Map<String,Integer> moduleCountMap = this.parseModuleCountList(moduleCountList);
|
||||||
nodes.forEach(node -> {
|
nodes.forEach(node -> {
|
||||||
List<String> scenarioNodes = new ArrayList<>();
|
List<String> moduleIds = new ArrayList<>();
|
||||||
scenarioNodes = this.nodeList(nodes, node.getId(), scenarioNodes);
|
moduleIds = this.nodeList(nodes, node.getId(), moduleIds);
|
||||||
scenarioNodes.add(node.getId());
|
moduleIds.add(node.getId());
|
||||||
request.setModuleIds(scenarioNodes);
|
int countNum = 0;
|
||||||
node.setCaseNum(extApiScenarioMapper.listModule(request));
|
for (String moduleId : moduleIds) {
|
||||||
|
if(moduleCountMap.containsKey(moduleId)){
|
||||||
|
countNum += moduleCountMap.get(moduleId).intValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node.setCaseNum(countNum);
|
||||||
});
|
});
|
||||||
return getNodeTrees(nodes);
|
return getNodeTrees(nodes);
|
||||||
}
|
}
|
||||||
|
private Map<String, Integer> parseModuleCountList(List<Map<String, Object>> moduleCountList) {
|
||||||
|
Map<String,Integer> returnMap = new HashMap<>();
|
||||||
|
for (Map<String, Object> map: moduleCountList){
|
||||||
|
Object moduleIdObj = map.get("moduleId");
|
||||||
|
Object countNumObj = map.get("countNum");
|
||||||
|
if(moduleIdObj!= null && countNumObj != null){
|
||||||
|
String moduleId = String.valueOf(moduleIdObj);
|
||||||
|
try {
|
||||||
|
Integer countNumInteger = new Integer(String.valueOf(countNumObj));
|
||||||
|
returnMap.put(moduleId,countNumInteger);
|
||||||
|
}catch (Exception e){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnMap;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<String> nodeList(List<ApiScenarioModuleDTO> nodes, String pid, List<String> list) {
|
public static List<String> nodeList(List<ApiScenarioModuleDTO> nodes, String pid, List<String> list) {
|
||||||
for (ApiScenarioModuleDTO node : nodes) {
|
for (ApiScenarioModuleDTO node : nodes) {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import io.metersphere.controller.request.BaseQueryRequest;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public interface ExtApiDefinitionMapper {
|
public interface ExtApiDefinitionMapper {
|
||||||
List<ApiSwaggerUrlDTO> selectScheduleList(@Param("projectId") String projectId);
|
List<ApiSwaggerUrlDTO> selectScheduleList(@Param("projectId") String projectId);
|
||||||
|
@ -48,4 +49,6 @@ public interface ExtApiDefinitionMapper {
|
||||||
List<ApiDefinition> selectEffectiveIdByProjectId(String projectId);
|
List<ApiDefinition> selectEffectiveIdByProjectId(String projectId);
|
||||||
|
|
||||||
List<ApiDefinitionResult> listByIds(@Param("ids") List<String> ids);
|
List<ApiDefinitionResult> listByIds(@Param("ids") List<String> ids);
|
||||||
|
|
||||||
|
List<Map<String, Object>> moduleCountByCollection(@Param("request") ApiDefinitionRequest request);
|
||||||
}
|
}
|
||||||
|
|
|
@ -492,6 +492,12 @@
|
||||||
<include refid="queryWhereCondition"/>
|
<include refid="queryWhereCondition"/>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="moduleCountByCollection" resultType="java.util.Map">
|
||||||
|
select module_id AS moduleId,count(id) AS countNum from api_definition
|
||||||
|
<include refid="queryWhereCondition"/>
|
||||||
|
GROUP BY module_id
|
||||||
|
</select>
|
||||||
|
|
||||||
<sql id="filter">
|
<sql id="filter">
|
||||||
<if test="request.filters != null and request.filters.size() > 0">
|
<if test="request.filters != null and request.filters.size() > 0">
|
||||||
<foreach collection="request.filters.entrySet()" index="key" item="values">
|
<foreach collection="request.filters.entrySet()" index="key" item="values">
|
||||||
|
|
|
@ -9,6 +9,7 @@ import io.metersphere.base.domain.ApiScenarioWithBLOBs;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public interface ExtApiScenarioMapper {
|
public interface ExtApiScenarioMapper {
|
||||||
List<ApiScenarioDTO> list(@Param("request") ApiScenarioRequest request);
|
List<ApiScenarioDTO> list(@Param("request") ApiScenarioRequest request);
|
||||||
|
@ -48,4 +49,6 @@ public interface ExtApiScenarioMapper {
|
||||||
void updateCustomNumByProjectId(@Param("projectId") String projectId);
|
void updateCustomNumByProjectId(@Param("projectId") String projectId);
|
||||||
|
|
||||||
List<ApiScenarioWithBLOBs> listWithIds(@Param("ids") List<String> ids);
|
List<ApiScenarioWithBLOBs> listWithIds(@Param("ids") List<String> ids);
|
||||||
|
|
||||||
|
List<Map<String, Object>> listModuleByCollection(@Param("request") ApiScenarioRequest request);
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,12 @@
|
||||||
select count(id) from api_scenario
|
select count(id) from api_scenario
|
||||||
<include refid="queryWhereCondition"/>
|
<include refid="queryWhereCondition"/>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="listModuleByCollection" resultType="java.util.Map">
|
||||||
|
select api_scenario_module_id AS moduleId,count(id) AS countNum from api_scenario
|
||||||
|
<include refid="queryWhereCondition"/>
|
||||||
|
GROUP BY api_scenario_module_id
|
||||||
|
</select>
|
||||||
<select id="list" resultMap="BaseResultMap">
|
<select id="list" resultMap="BaseResultMap">
|
||||||
select api_scenario.id, api_scenario.project_id, api_scenario.tags, api_scenario.user_id, api_scenario.num,
|
select api_scenario.id, api_scenario.project_id, api_scenario.tags, api_scenario.user_id, api_scenario.num,
|
||||||
api_scenario.custom_num,
|
api_scenario.custom_num,
|
||||||
|
|
|
@ -10,6 +10,7 @@ import io.metersphere.track.response.TrackCountResult;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public interface ExtTestCaseMapper {
|
public interface ExtTestCaseMapper {
|
||||||
|
@ -96,4 +97,6 @@ public interface ExtTestCaseMapper {
|
||||||
void updateTestCaseCustomNumByProjectId(@Param("projectId") String projectId);
|
void updateTestCaseCustomNumByProjectId(@Param("projectId") String projectId);
|
||||||
|
|
||||||
List<String> selectRelateIdsByQuery(@Param("request") BaseQueryRequest query);
|
List<String> selectRelateIdsByQuery(@Param("request") BaseQueryRequest query);
|
||||||
|
|
||||||
|
List<Map<String, Object>> moduleCountByCollection(@Param("request")QueryTestCaseRequest request);
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,6 +176,12 @@
|
||||||
select count(id) from test_case
|
select count(id) from test_case
|
||||||
<include refid="queryWhereCondition"/>
|
<include refid="queryWhereCondition"/>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="moduleCountByCollection" resultType="java.util.Map">
|
||||||
|
select node_id AS moduleId,count(id) AS countNum from test_case
|
||||||
|
<include refid="queryWhereCondition"/>
|
||||||
|
GROUP BY node_id
|
||||||
|
</select>
|
||||||
<select id="listIds" resultType="io.metersphere.track.dto.TestCaseDTO">
|
<select id="listIds" resultType="io.metersphere.track.dto.TestCaseDTO">
|
||||||
select
|
select
|
||||||
<if test="request.selectFields != null and request.selectFields.size() > 0">
|
<if test="request.selectFields != null and request.selectFields.size() > 0">
|
||||||
|
|
|
@ -142,16 +142,60 @@ public class TestCaseNodeService extends NodeTreeService<TestCaseNodeDTO> {
|
||||||
QueryTestCaseRequest request = new QueryTestCaseRequest();
|
QueryTestCaseRequest request = new QueryTestCaseRequest();
|
||||||
request.setUserId(SessionUtils.getUserId());
|
request.setUserId(SessionUtils.getUserId());
|
||||||
request.setProjectId(projectId);
|
request.setProjectId(projectId);
|
||||||
|
// for (TestCaseNodeDTO node : testCaseNodes) {
|
||||||
|
// List<String> nodeIds = new ArrayList<>();
|
||||||
|
// nodeIds = this.nodeList(testCaseNodes, node.getId(), nodeIds);
|
||||||
|
// nodeIds.add(node.getId());
|
||||||
|
// request.setNodeIds(nodeIds);
|
||||||
|
// node.setCaseNum(extTestCaseMapper.moduleCount(request));
|
||||||
|
// }
|
||||||
|
//优化:将for循环内的SQL抽出来,只差一次
|
||||||
|
List<String> allModuleIdList = new ArrayList<>();
|
||||||
for (TestCaseNodeDTO node : testCaseNodes) {
|
for (TestCaseNodeDTO node : testCaseNodes) {
|
||||||
List<String> nodeIds = new ArrayList<>();
|
List<String> moduleIds = new ArrayList<>();
|
||||||
nodeIds = this.nodeList(testCaseNodes, node.getId(), nodeIds);
|
moduleIds = this.nodeList(testCaseNodes, node.getId(), moduleIds);
|
||||||
nodeIds.add(node.getId());
|
moduleIds.add(node.getId());
|
||||||
request.setNodeIds(nodeIds);
|
for (String moduleId : moduleIds) {
|
||||||
node.setCaseNum(extTestCaseMapper.moduleCount(request));
|
if(!allModuleIdList.contains(moduleId)){
|
||||||
|
allModuleIdList.add(moduleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
request.setModuleIds(allModuleIdList);
|
||||||
|
List<Map<String,Object>> moduleCountList = extTestCaseMapper.moduleCountByCollection(request);
|
||||||
|
Map<String,Integer> moduleCountMap = this.parseModuleCountList(moduleCountList);
|
||||||
|
testCaseNodes.forEach(node -> {
|
||||||
|
List<String> moduleIds = new ArrayList<>();
|
||||||
|
moduleIds = this.nodeList(testCaseNodes, node.getId(), moduleIds);
|
||||||
|
moduleIds.add(node.getId());
|
||||||
|
int countNum = 0;
|
||||||
|
for (String moduleId : moduleIds) {
|
||||||
|
if(moduleCountMap.containsKey(moduleId)){
|
||||||
|
countNum += moduleCountMap.get(moduleId).intValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node.setCaseNum(countNum);
|
||||||
|
});
|
||||||
return getNodeTrees(testCaseNodes);
|
return getNodeTrees(testCaseNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, Integer> parseModuleCountList(List<Map<String, Object>> moduleCountList) {
|
||||||
|
Map<String,Integer> returnMap = new HashMap<>();
|
||||||
|
for (Map<String, Object> map: moduleCountList){
|
||||||
|
Object moduleIdObj = map.get("moduleId");
|
||||||
|
Object countNumObj = map.get("countNum");
|
||||||
|
if(moduleIdObj!= null && countNumObj != null){
|
||||||
|
String moduleId = String.valueOf(moduleIdObj);
|
||||||
|
try {
|
||||||
|
Integer countNumInteger = new Integer(String.valueOf(countNumObj));
|
||||||
|
returnMap.put(moduleId,countNumInteger);
|
||||||
|
}catch (Exception e){
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnMap;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<String> nodeList(List<TestCaseNodeDTO> testCaseNodes, String pid, List<String> list) {
|
public static List<String> nodeList(List<TestCaseNodeDTO> testCaseNodes, String pid, List<String> list) {
|
||||||
for (TestCaseNodeDTO node : testCaseNodes) {
|
for (TestCaseNodeDTO node : testCaseNodes) {
|
||||||
//遍历出父id等于参数的id,add进子节点集合
|
//遍历出父id等于参数的id,add进子节点集合
|
||||||
|
|
Loading…
Reference in New Issue