提交 01551216 authored 作者: mry's avatar mry

feat(web): swagger解析,以及数据导入

上级 25839107
...@@ -9,7 +9,8 @@ import lombok.AllArgsConstructor; ...@@ -9,7 +9,8 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.matrix.entity.BaseEntity; import org.matrix.vo.TestCaseVo;
import org.springframework.beans.BeanUtils;
/** /**
* <p> * <p>
...@@ -41,6 +42,13 @@ public class Case extends BaseEntity { ...@@ -41,6 +42,13 @@ public class Case extends BaseEntity {
@ApiModelProperty("接口文档id") @ApiModelProperty("接口文档id")
private Long docId; private Long docId;
/**
* 请求方式
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("请求方式")
private String httpMethod;
/** /**
* 参数详情(包括参数值) * 参数详情(包括参数值)
*/ */
...@@ -69,11 +77,9 @@ public class Case extends BaseEntity { ...@@ -69,11 +77,9 @@ public class Case extends BaseEntity {
@ApiModelProperty("项目id") @ApiModelProperty("项目id")
private Long projectId; private Long projectId;
/** public TestCaseVo toTestCaseVo() {
* 环境id TestCaseVo testCaseVo = new TestCaseVo();
*/ BeanUtils.copyProperties(this, testCaseVo);
@TableField(fill = FieldFill.UPDATE) return testCaseVo;
@ApiModelProperty("环境id") }
private Long envId;
} }
...@@ -10,6 +10,8 @@ import lombok.Data; ...@@ -10,6 +10,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.matrix.enums.SyncStatus; import org.matrix.enums.SyncStatus;
import org.matrix.vo.InterfaceDocVo;
import org.springframework.beans.BeanUtils;
/** /**
* <p> * <p>
...@@ -111,4 +113,9 @@ public class InterfaceDoc extends BaseEntity { ...@@ -111,4 +113,9 @@ public class InterfaceDoc extends BaseEntity {
@ApiModelProperty("负责人") @ApiModelProperty("负责人")
private String dutyPeople; private String dutyPeople;
public InterfaceDocVo toInterfaceDocVo() {
InterfaceDocVo interfaceDocVo = new InterfaceDocVo();
BeanUtils.copyProperties(this, interfaceDocVo);
return interfaceDocVo;
}
} }
...@@ -9,6 +9,8 @@ import lombok.AllArgsConstructor; ...@@ -9,6 +9,8 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.matrix.vo.InterfaceGroupVo;
import org.springframework.beans.BeanUtils;
/** /**
* <p> * <p>
...@@ -75,4 +77,10 @@ public class InterfaceGrouping extends BaseEntity { ...@@ -75,4 +77,10 @@ public class InterfaceGrouping extends BaseEntity {
@ApiModelProperty("父类id(根目录默认为0)") @ApiModelProperty("父类id(根目录默认为0)")
private Long interfaceGroupingId; private Long interfaceGroupingId;
public InterfaceGroupVo toInterfaceGroupVo() {
InterfaceGroupVo interfaceGroupVo = new InterfaceGroupVo();
BeanUtils.copyProperties(this, interfaceGroupVo);
return interfaceGroupVo;
}
} }
...@@ -46,7 +46,6 @@ public enum SyncStatus { ...@@ -46,7 +46,6 @@ public enum SyncStatus {
OTHER(4, "上次导入不存在"); OTHER(4, "上次导入不存在");
@EnumValue @EnumValue
@JsonValue
private final int code; private final int code;
/** /**
......
...@@ -2,10 +2,23 @@ package org.matrix.service; ...@@ -2,10 +2,23 @@ package org.matrix.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.matrix.entity.Case; import org.matrix.entity.Case;
import org.matrix.vo.InterfaceGroupVo;
import org.matrix.vo.RecursionInterface;
import java.util.List;
/** /**
* @author mruny * @author mruny
* @create 2022/7/18 11:28:08 * @create 2022/7/18 11:28:08
*/ */
public interface ICaseService extends IService<Case> { public interface ICaseService extends IService<Case> {
/**
* 查询所有数据
*
* @param projectId 项目id
* @return 所有结果
*/
InterfaceGroupVo getAll(Long projectId);
} }
...@@ -16,7 +16,6 @@ import org.matrix.vo.StatusCode; ...@@ -16,7 +16,6 @@ import org.matrix.vo.StatusCode;
public interface IEnvironmentService extends IService<Environment> { public interface IEnvironmentService extends IService<Environment> {
/** /**
*
* @param isDefault * @param isDefault
* @param wrappers * @param wrappers
*/ */
......
...@@ -20,8 +20,8 @@ public interface IInterfaceDocService extends IService<InterfaceDoc> { ...@@ -20,8 +20,8 @@ public interface IInterfaceDocService extends IService<InterfaceDoc> {
* @param envId 环境id * @param envId 环境id
* @param pattern 导入方式(1:同url覆盖,2:同url同组覆盖,3:同url不同步,4:同url同组不同步,5:同时保留) * @param pattern 导入方式(1:同url覆盖,2:同url同组覆盖,3:同url不同步,4:同url同组不同步,5:同时保留)
* @param interfaceId 上级分组 * @param interfaceId 上级分组
* @param bool 是否导入测试用例
* @return 导入结果 * @return 导入结果
*/ */
StatusCode importInterfaceDoc(List<InterfaceVo> interfaceVos, Long projectId, Long envId, int pattern, Long interfaceId, boolean bool); StatusCode importInterfaceDoc(List<InterfaceVo> interfaceVos, Long projectId, Long envId, int pattern, Long interfaceId);
} }
...@@ -14,4 +14,5 @@ public interface IInterfaceGroupingService extends IService<InterfaceGrouping> { ...@@ -14,4 +14,5 @@ public interface IInterfaceGroupingService extends IService<InterfaceGrouping> {
* @param id 接口分组主键id * @param id 接口分组主键id
*/ */
void removeInterfaceGrouping(Long id); void removeInterfaceGrouping(Long id);
} }
...@@ -2,6 +2,7 @@ package org.matrix.service; ...@@ -2,6 +2,7 @@ package org.matrix.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.matrix.entity.MouldDoc; import org.matrix.entity.MouldDoc;
import org.matrix.vo.MouldVo;
import org.matrix.vo.StatusCode; import org.matrix.vo.StatusCode;
import java.util.List; import java.util.List;
...@@ -15,12 +16,12 @@ public interface IMouldDocService extends IService<MouldDoc> { ...@@ -15,12 +16,12 @@ public interface IMouldDocService extends IService<MouldDoc> {
/** /**
* 导入数据模型文档 * 导入数据模型文档
* *
* @param mouldDocs 数据模型文档对象集合 * @param mouldDocs 数据模型文档对象集合Vo
* @param projectId 项目id * @param projectId 项目id
* @param pattern 导入方式(1:同名覆盖,2:同名同组覆盖,3:同名不同步,4:同名同组不同步,5:同时保留) * @param pattern 导入方式(1:同名覆盖,2:同名同组覆盖,3:同名不同步,4:同名同组不同步,5:同时保留)
* @param mouldId 上级分组 * @param mouldId 上级分组
* @return 导入结果 * @return 导入结果
*/ */
StatusCode importMouldDoc(List<MouldDoc> mouldDocs, Long projectId, int pattern, Long mouldId); StatusCode importMouldDoc(List<MouldVo> mouldDocs, Long projectId, int pattern, Long mouldId);
} }
package org.matrix.service.impl; package org.matrix.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.matrix.entity.Case; import org.matrix.entity.Case;
import org.matrix.entity.InterfaceDoc;
import org.matrix.entity.InterfaceGrouping;
import org.matrix.mapper.CaseMapper; import org.matrix.mapper.CaseMapper;
import org.matrix.mapper.InterfaceDocMapper;
import org.matrix.mapper.InterfaceGroupingMapper;
import org.matrix.service.ICaseService; import org.matrix.service.ICaseService;
import org.matrix.vo.InterfaceDocVo;
import org.matrix.vo.InterfaceGroupVo;
import org.matrix.vo.TestCaseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/** /**
* @author mruny * @author mruny
...@@ -12,4 +28,128 @@ import org.springframework.stereotype.Service; ...@@ -12,4 +28,128 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class CaseServiceImpl extends ServiceImpl<CaseMapper, Case> implements ICaseService { public class CaseServiceImpl extends ServiceImpl<CaseMapper, Case> implements ICaseService {
@Autowired
private InterfaceDocMapper interfaceDocMapper;
@Autowired
private InterfaceGroupingMapper interfaceGroupingMapper;
@Autowired
private CaseMapper caseMapper;
/**
* 查出所有分组以及分组下的接口和测试用例(树状结构)
*
* @param interfaceDocVosMap 所有接口文档,key : 接口文档分组id , value : 接口文档集合
* @param interfaceGroupingVosMap 所有分组 key : 父分组id , value : 分组对象集合
* @param testCaseVosMap 所有测试用例 key : 接口文档主键id , value : 测试用例集合
* @param interfaceGroupVos 父级分组
*/
public void getRecursiveGrouping(Map<Long, List<InterfaceDocVo>> interfaceDocVosMap,
Map<Long, List<InterfaceGroupVo>> interfaceGroupingVosMap,
Map<Long, List<TestCaseVo>> testCaseVosMap,
List<InterfaceGroupVo> interfaceGroupVos) {
if (interfaceGroupVos.size() != 0) {
//根据父分组,查出所有的子分组
for (InterfaceGroupVo interfaceGroupVo : interfaceGroupVos) {
if (interfaceGroupVo.getId() != null) {
//父分组id
Long groupId = interfaceGroupVo.getId();
//分组下的分组
List<InterfaceGroupVo> interfaceGroupVoList = interfaceGroupingVosMap.get(groupId);
//分组下的接口
List<InterfaceDocVo> interfaceDocVoList = interfaceDocVosMap.get(groupId);
//找接口下的测试用例
if (interfaceDocVoList != null) {
for (InterfaceDocVo interfaceDocVo : interfaceDocVoList) {
if (interfaceDocVo.getId() != null) {
Long docId = interfaceDocVo.getId();
List<TestCaseVo> testCaseVos = testCaseVosMap.get(docId);
interfaceDocVo.setTestCaseVos(testCaseVos);
}
}
}
interfaceGroupVo.setInterfaceGroupVos(interfaceGroupVoList);
interfaceGroupVo.setInterfaceDocVos(interfaceDocVoList);
if (!CollectionUtils.isEmpty(interfaceGroupVoList)) {
getRecursiveGrouping(interfaceDocVosMap, interfaceGroupingVosMap, testCaseVosMap, interfaceGroupVoList);
}
}
}
}
}
@Override
public InterfaceGroupVo getAll(Long projectId) {
InterfaceGroupVo groupVo = new InterfaceGroupVo();
//分组
List<InterfaceGroupVo> interfaceGroupVos = new ArrayList<>();
List<InterfaceGrouping> interfaceGroupings = Optional.ofNullable(interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class)
.eq(InterfaceGrouping::getProjectId, projectId))).orElse(new ArrayList<>());
for (InterfaceGrouping interfaceGrouping : interfaceGroupings) {
InterfaceGroupVo interfaceGroupVo = interfaceGrouping.toInterfaceGroupVo();
interfaceGroupVos.add(interfaceGroupVo);
}
//key: 父分组id value : 接口分组集合
Map<Long, List<InterfaceGroupVo>> interfaceGroupingVosMap = interfaceGroupVos.stream()
.filter(interfaceGroupVo -> interfaceGroupVo != null && interfaceGroupVo.getInterfaceGroupingId() != null)
.collect(Collectors.groupingBy(InterfaceGroupVo::getInterfaceGroupingId));
//根目录下的所有分组
List<InterfaceGroupVo> firstInterfaceVoGroupings = new ArrayList<>();
if (interfaceGroupingVosMap.get(-1L) != null) {
firstInterfaceVoGroupings = interfaceGroupingVosMap.get(-1L);
groupVo.setInterfaceGroupVos(firstInterfaceVoGroupings);
}
//接口文档
List<InterfaceDocVo> interfaceDocVos = new ArrayList<>();
List<InterfaceDoc> interfaceDocs = Optional.ofNullable(interfaceDocMapper.selectList(Wrappers.lambdaQuery(InterfaceDoc.class)
.eq(InterfaceDoc::getProjectId, projectId))).orElse(new ArrayList<>());
for (InterfaceDoc interfaceDoc : interfaceDocs) {
InterfaceDocVo interfaceDocVo = interfaceDoc.toInterfaceDocVo();
interfaceDocVos.add(interfaceDocVo);
}
//key : 接口分组主键id value : 接口文档集合
Map<Long, List<InterfaceDocVo>> interfaceDocVosMap = interfaceDocVos.stream()
.filter(interfaceDocVo -> interfaceDocVo != null && interfaceDocVo.getInterfaceGroupId() != null)
.collect(Collectors.groupingBy(InterfaceDocVo::getInterfaceGroupId));
//根目录下的接口
List<InterfaceDocVo> firstInterfaceDocVos = new ArrayList<>();
if (interfaceDocVosMap.get(-1L) != null) {
firstInterfaceDocVos = interfaceDocVosMap.get(-1L);
groupVo.setInterfaceDocVos(firstInterfaceDocVos);
}
//所有测试用例
List<TestCaseVo> testCaseVos = new ArrayList<>();
List<Case> cases = Optional.ofNullable(caseMapper.selectList(Wrappers.lambdaQuery(Case.class)
.eq(Case::getProjectId, projectId))).orElse(new ArrayList<>());
for (Case aCase : cases) {
TestCaseVo testCaseVo = aCase.toTestCaseVo();
testCaseVos.add(testCaseVo);
}
//key : 接口文档id value : 测试用例集合
Map<Long, List<TestCaseVo>> testCaseVosMap = testCaseVos.stream()
.filter(testCaseVo -> testCaseVo != null && testCaseVo.getDocId() != null)
.collect(Collectors.groupingBy(TestCaseVo::getDocId));
//外层接口下的测试用例
for (InterfaceDocVo firstInterfaceDocVo : firstInterfaceDocVos) {
if (firstInterfaceDocVo.getId() != null) {
Long id = firstInterfaceDocVo.getId();
//接口中所有的测试用例
List<TestCaseVo> testCaseVoList = testCaseVosMap.get(id);
firstInterfaceDocVo.setTestCaseVos(testCaseVoList);
}
}
getRecursiveGrouping(interfaceDocVosMap, interfaceGroupingVosMap, testCaseVosMap, firstInterfaceVoGroupings);
return groupVo;
}
} }
package org.matrix.service.impl; package org.matrix.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.matrix.entity.Environment; import org.matrix.entity.Environment;
import org.matrix.enums.SwaggerDataType; import org.matrix.enums.SwaggerDataType;
...@@ -11,6 +12,8 @@ import org.matrix.vo.StatusCode; ...@@ -11,6 +12,8 @@ import org.matrix.vo.StatusCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -43,9 +46,20 @@ public class EnvironmentServiceImpl extends ServiceImpl<EnvironmentMapper, Envir ...@@ -43,9 +46,20 @@ public class EnvironmentServiceImpl extends ServiceImpl<EnvironmentMapper, Envir
StatusCode statusCode = new StatusCode(); StatusCode statusCode = new StatusCode();
statusCode.setSwaggerDataType(SwaggerDataType.ENV); statusCode.setSwaggerDataType(SwaggerDataType.ENV);
if (environment != null && environment.getIp() != null) { if (environment != null && environment.getIp() != null) {
List<Environment> environments = Optional.ofNullable(environmentMapper.selectList(Wrappers.lambdaQuery(Environment.class)
.eq(Environment::getProjectId, environment.getProjectId()))).orElse(new ArrayList<>());
for (Environment env : environments) {
if (environment.getIp().equals(env.getIp())) {
Integer integer = Optional.of(environmentMapper.updateById(environment)).orElseThrow(() -> new GlobalException("修改失败"));
updateNum = updateNum + integer;
}
break;
}
if (updateNum == 0) {
Integer integer = Optional.of(environmentMapper.insert(environment)).orElseThrow(() -> new GlobalException("添加失败")); Integer integer = Optional.of(environmentMapper.insert(environment)).orElseThrow(() -> new GlobalException("添加失败"));
saveNum = saveNum + integer; saveNum = saveNum + integer;
} }
}
statusCode.setSaveNum(saveNum); statusCode.setSaveNum(saveNum);
statusCode.setSaveNum(saveNum); statusCode.setSaveNum(saveNum);
statusCode.setUpdateNum(updateNum); statusCode.setUpdateNum(updateNum);
......
...@@ -9,7 +9,6 @@ import org.matrix.enums.SyncStatus; ...@@ -9,7 +9,6 @@ import org.matrix.enums.SyncStatus;
import org.matrix.exception.GlobalException; import org.matrix.exception.GlobalException;
import org.matrix.mapper.InterfaceDocMapper; import org.matrix.mapper.InterfaceDocMapper;
import org.matrix.mapper.InterfaceGroupingMapper; import org.matrix.mapper.InterfaceGroupingMapper;
import org.matrix.service.ICaseService;
import org.matrix.service.IInterfaceDocService; import org.matrix.service.IInterfaceDocService;
import org.matrix.vo.ImportInterfaceDoc; import org.matrix.vo.ImportInterfaceDoc;
import org.matrix.vo.InterfaceVo; import org.matrix.vo.InterfaceVo;
...@@ -34,32 +33,29 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -34,32 +33,29 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
@Autowired @Autowired
private InterfaceGroupingMapper interfaceGroupingMapper; private InterfaceGroupingMapper interfaceGroupingMapper;
@Autowired
private ICaseService caseService;
@Override @Override
public StatusCode importInterfaceDoc(List<InterfaceVo> interfaceVos, Long projectId, Long envId, int pattern, Long interfaceId, boolean bool) { public StatusCode importInterfaceDoc(List<InterfaceVo> tagSummaries, Long projectId, Long envId, int pattern, Long interfaceId) {
StatusCode statusCode; StatusCode statusCode;
switch (pattern) { switch (pattern) {
//1. 同名覆盖 //1. 同名覆盖
case ImportInterfaceDoc.URL_OVERWRITE: case ImportInterfaceDoc.URL_OVERWRITE:
statusCode = nameOverwrite(interfaceVos, projectId, envId, interfaceId, bool); statusCode = nameOverwrite(tagSummaries, projectId, envId, interfaceId);
break; break;
//2. 同名同组覆盖 //2. 同名同组覆盖
case ImportInterfaceDoc.URL_GROUPING_OVERWRITE: case ImportInterfaceDoc.URL_GROUPING_OVERWRITE:
statusCode = nameGroupingOverwrite(interfaceVos, projectId, envId, interfaceId, bool); statusCode = nameGroupingOverwrite(tagSummaries, projectId, envId, interfaceId);
break; break;
//3. 同名不覆盖 //3. 同名不覆盖
case ImportInterfaceDoc.NOT_URL_OVERWRITE: case ImportInterfaceDoc.NOT_URL_OVERWRITE:
statusCode = notNameOverwrite(interfaceVos, projectId, envId, interfaceId, bool); statusCode = notNameOverwrite(tagSummaries, projectId, envId, interfaceId);
break; break;
//4. 同名同组不覆盖 //4. 同名同组不覆盖
case ImportInterfaceDoc.NOT_URL_GROUPING_OVERWRITE: case ImportInterfaceDoc.NOT_URL_GROUPING_OVERWRITE:
statusCode = notNameGroupingOverwrite(interfaceVos, projectId, envId, interfaceId, bool); statusCode = notNameGroupingOverwrite(tagSummaries, projectId, envId, interfaceId);
break; break;
//5. 同时存在 //5. 同时存在
case ImportInterfaceDoc.COEXIST: case ImportInterfaceDoc.COEXIST:
statusCode = coexist(interfaceVos, projectId, envId, interfaceId, bool); statusCode = coexist(tagSummaries, projectId, envId, interfaceId);
break; break;
default: default:
throw new GlobalException("请选择正确的导入类型"); throw new GlobalException("请选择正确的导入类型");
...@@ -69,14 +65,15 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -69,14 +65,15 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
/** /**
* 1. 同url覆盖 * 1. 同url覆盖
* <p>
* // * @param interfaceVos 接口文档Vo类
* *
* @param interfaceVos 接口文档Vo类
* @param projectId 项目id * @param projectId 项目id
* @param envId 环境id * @param envId 环境id
* @param interfaceId 父级分组 * @param interfaceId 父级分组
* @return 导入情况 * @return 导入情况
*/ */
private StatusCode nameOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId, boolean bool) { private StatusCode nameOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
...@@ -85,8 +82,8 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -85,8 +82,8 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
if (!CollectionUtils.isEmpty(interfaceVos)) { if (!CollectionUtils.isEmpty(interfaceVos)) {
//导入的接口 将当前导入的对象按照tag分组 //导入的接口 将当前导入的对象按照tag分组
Map<String, List<InterfaceVo>> tagMap = interfaceVos.stream() Map<String, List<InterfaceVo>> tagMap = interfaceVos.stream()
.filter(interfaceVo -> interfaceVo != null && interfaceVo.getTag() != null && !"".equals(interfaceVo.getTag())) .filter(interfaceVo -> interfaceVo != null && interfaceVo.getTags() != null && !"".equals(interfaceVo.getTags()))
.collect(Collectors.groupingBy(InterfaceVo::getTag)); .collect(Collectors.groupingBy(InterfaceVo::getTags));
//当前项目中所有的pathUrl(唯一的),同名的取第一个 //当前项目中所有的pathUrl(唯一的),同名的取第一个
List<InterfaceDoc> interfaceDocList = getDocByPathUrl(projectId); List<InterfaceDoc> interfaceDocList = getDocByPathUrl(projectId);
if (!CollectionUtils.isEmpty(tagMap)) { if (!CollectionUtils.isEmpty(tagMap)) {
...@@ -95,12 +92,18 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -95,12 +92,18 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
//tag 当前分组 //tag 当前分组
for (String tag : tags) { for (String tag : tags) {
//判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个) //判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个)
Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag); Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag, envId);
//当前分组下的所有接口+tag //当前分组下的所有接口+tag
List<InterfaceVo> interfaceVoList = tagMap.get(tag); List<InterfaceVo> interfaceVoList = tagMap.get(tag);
for (InterfaceVo interfaceVo : interfaceVoList) { for (InterfaceVo interfaceVo : interfaceVoList) {
//当前分组下的接口 //当前分组下的接口
InterfaceDoc interfaceDoc = interfaceVo.toInterfaceDoc(); InterfaceDoc interfaceDoc = interfaceVo.toInterfaceDoc();
// if (interfaceVo.getParameters().toJSONString() != null) {
// interfaceDoc.setParameters(interfaceVo.getParameters().toJSONString());
// }
// if (interfaceVo.getResponses().toJSONString() != null) {
// interfaceDoc.setResponses(interfaceVo.getResponses().toJSONString());
// }
interfaceDoc.setEnvId(envId); interfaceDoc.setEnvId(envId);
interfaceDoc.setInterfaceGroupId(groupingId); interfaceDoc.setInterfaceGroupId(groupingId);
interfaceDoc.setProjectId(projectId); interfaceDoc.setProjectId(projectId);
...@@ -116,9 +119,6 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -116,9 +119,6 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
//覆盖数据也就是更新 //覆盖数据也就是更新
Integer integer = Optional.of(interfaceDocMapper.updateById(interfaceDoc)).orElseThrow(() -> new GlobalException("修改失败")); Integer integer = Optional.of(interfaceDocMapper.updateById(interfaceDoc)).orElseThrow(() -> new GlobalException("修改失败"));
//如果导入需要导入测试用例 //如果导入需要导入测试用例
if (!bool) {
}
updateNum = updateNum + integer; updateNum = updateNum + integer;
//然后将查询到已经存在的数据删除掉,剩下的就是本次导入不存在,但是原始数据中存在的 //然后将查询到已经存在的数据删除掉,剩下的就是本次导入不存在,但是原始数据中存在的
interfaceDocList.remove(interfaceDoc); interfaceDocList.remove(interfaceDoc);
...@@ -147,13 +147,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -147,13 +147,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
/** /**
* 2. 同url同分组覆盖 * 2. 同url同分组覆盖
* *
* @param interfaceVos 接口文档Vo类
* @param projectId 项目id * @param projectId 项目id
* @param envId 环境id * @param envId 环境id
* @param interfaceId 父级分组 * @param interfaceId 父级分组
* @return 导入情况 * @return 导入情况
*/ */
private StatusCode nameGroupingOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId, boolean bool) { private StatusCode nameGroupingOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
...@@ -164,22 +163,28 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -164,22 +163,28 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
List<InterfaceDoc> docByPathUrlAndGrouping = getDocByPathUrlAndGrouping(projectId); List<InterfaceDoc> docByPathUrlAndGrouping = getDocByPathUrlAndGrouping(projectId);
//导入的数据根据tag分组 //导入的数据根据tag分组
Map<String, List<InterfaceVo>> tagsMap = interfaceVos.stream() Map<String, List<InterfaceVo>> tagsMap = interfaceVos.stream()
.filter(interfaceVo -> interfaceVo != null && interfaceVo.getTag() != null && !"".equals(interfaceVo.getTag())) .filter(interfaceVo -> interfaceVo != null && interfaceVo.getTags() != null && !"".equals(interfaceVo.getTags()))
.collect(Collectors.groupingBy(InterfaceVo::getTag)); .collect(Collectors.groupingBy(InterfaceVo::getTags));
if (!CollectionUtils.isEmpty(tagsMap)) { if (!CollectionUtils.isEmpty(tagsMap)) {
Set<String> tags = tagsMap.keySet(); Set<String> tags = tagsMap.keySet();
if (!CollectionUtils.isEmpty(tags)) { if (!CollectionUtils.isEmpty(tags)) {
for (String tag : tags) { for (String tag : tags) {
//判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个) //判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个)
Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag); Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag, envId);
//当前分组中的所有接口(导入的数据) //当前分组中的所有接口(导入的数据)
List<InterfaceVo> interfaceVoList = tagsMap.get(tag); List<InterfaceVo> interfaceVoList = tagsMap.get(tag);
for (InterfaceVo interfaceVo : interfaceVoList) { for (InterfaceVo interfaceVo : interfaceVoList) {
//当前分组下的接口 //当前分组下的接口
InterfaceDoc interfaceDoc = interfaceVo.toInterfaceDoc(); InterfaceDoc interfaceDoc = interfaceVo.toInterfaceDoc();
// if (interfaceVo.getParameters().toJSONString() != null) {
// interfaceDoc.setParameters(interfaceVo.getParameters().toJSONString());
// }
// if (interfaceVo.getResponses().toJSONString() != null) {
// interfaceDoc.setResponses(interfaceVo.getResponses().toJSONString());
// }
interfaceDoc.setProjectId(projectId);
interfaceDoc.setEnvId(envId); interfaceDoc.setEnvId(envId);
interfaceDoc.setInterfaceGroupId(groupingId); interfaceDoc.setInterfaceGroupId(groupingId);
interfaceDoc.setProjectId(projectId);
//判断这条数据是否存在(当前项目,分组,url) //判断这条数据是否存在(当前项目,分组,url)
List<InterfaceDoc> interfaceDocs = Optional.ofNullable(interfaceDocMapper.selectList(Wrappers.lambdaQuery(InterfaceDoc.class) List<InterfaceDoc> interfaceDocs = Optional.ofNullable(interfaceDocMapper.selectList(Wrappers.lambdaQuery(InterfaceDoc.class)
.eq(InterfaceDoc::getProjectId, projectId) .eq(InterfaceDoc::getProjectId, projectId)
...@@ -221,13 +226,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -221,13 +226,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
/** /**
* 3. 同url不覆盖 * 3. 同url不覆盖
* *
* @param interfaceVos 接口文档Vo类
* @param projectId 项目id * @param projectId 项目id
* @param envId 环境id * @param envId 环境id
* @param interfaceId 父级分组 * @param interfaceId 父级分组
* @return 导入情况 * @return 导入情况
*/ */
private StatusCode notNameOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId, boolean bool) { private StatusCode notNameOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
...@@ -238,15 +242,15 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -238,15 +242,15 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
List<InterfaceDoc> interfaceDocList = getDocByPathUrl(projectId); List<InterfaceDoc> interfaceDocList = getDocByPathUrl(projectId);
//导入的接口 将当前导入的对象按照tag分组 //导入的接口 将当前导入的对象按照tag分组
Map<String, List<InterfaceVo>> tagMap = interfaceVos.stream() Map<String, List<InterfaceVo>> tagMap = interfaceVos.stream()
.filter(interfaceVo -> interfaceVo != null && interfaceVo.getTag() != null && !"".equals(interfaceVo.getTag())) .filter(interfaceVo -> interfaceVo != null && interfaceVo.getTags() != null && !"".equals(interfaceVo.getTags()))
.collect(Collectors.groupingBy(InterfaceVo::getTag)); .collect(Collectors.groupingBy(InterfaceVo::getTags));
if (!CollectionUtils.isEmpty(tagMap)) { if (!CollectionUtils.isEmpty(tagMap)) {
Set<String> tags = tagMap.keySet(); Set<String> tags = tagMap.keySet();
if (!CollectionUtils.isEmpty(tags)) { if (!CollectionUtils.isEmpty(tags)) {
//tag 当前分组 //tag 当前分组
for (String tag : tags) { for (String tag : tags) {
//判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个) //判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个)
Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag); Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag, envId);
//当前分组下的所有接口+tag //当前分组下的所有接口+tag
List<InterfaceVo> interfaceVoList = tagMap.get(tag); List<InterfaceVo> interfaceVoList = tagMap.get(tag);
for (InterfaceVo interfaceVo : interfaceVoList) { for (InterfaceVo interfaceVo : interfaceVoList) {
...@@ -266,6 +270,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -266,6 +270,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
} else { } else {
interfaceDoc.setEnvId(envId); interfaceDoc.setEnvId(envId);
interfaceDoc.setInterfaceGroupId(groupingId); interfaceDoc.setInterfaceGroupId(groupingId);
// if (interfaceVo.getParameters().toJSONString() != null) {
// interfaceDoc.setParameters(interfaceVo.getParameters().toJSONString());
// }
// if (interfaceVo.getResponses().toJSONString() != null) {
// interfaceDoc.setResponses(interfaceVo.getResponses().toJSONString());
// }
//不存在的话直接新增 //不存在的话直接新增
Integer integer = Optional.of(interfaceDocMapper.insert(interfaceDoc)).orElseThrow(() -> new GlobalException("添加失败")); Integer integer = Optional.of(interfaceDocMapper.insert(interfaceDoc)).orElseThrow(() -> new GlobalException("添加失败"));
saveNum = saveNum + integer; saveNum = saveNum + integer;
...@@ -290,13 +300,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -290,13 +300,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
/** /**
* 4. 同url同分组不覆盖 * 4. 同url同分组不覆盖
* *
* @param interfaceVos 接口文档Vo类
* @param projectId 项目id * @param projectId 项目id
* @param envId 环境id * @param envId 环境id
* @param interfaceId 父级分组 * @param interfaceId 父级分组
* @return 导入情况 * @return 导入情况
*/ */
private StatusCode notNameGroupingOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId, boolean bool) { private StatusCode notNameGroupingOverwrite(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
...@@ -305,8 +314,8 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -305,8 +314,8 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
if (!CollectionUtils.isEmpty(interfaceVos)) { if (!CollectionUtils.isEmpty(interfaceVos)) {
//导入的数据根据tag分组 //导入的数据根据tag分组
Map<String, List<InterfaceVo>> tagsMap = interfaceVos.stream() Map<String, List<InterfaceVo>> tagsMap = interfaceVos.stream()
.filter(interfaceVo -> interfaceVo != null && interfaceVo.getTag() != null && !"".equals(interfaceVo.getTag())) .filter(interfaceVo -> interfaceVo != null && interfaceVo.getTags() != null && !"".equals(interfaceVo.getTags()))
.collect(Collectors.groupingBy(InterfaceVo::getTag)); .collect(Collectors.groupingBy(InterfaceVo::getTags));
//当前项目中存在的数据,同名同组的取第一个 //当前项目中存在的数据,同名同组的取第一个
List<InterfaceDoc> docByPathUrlAndGrouping = getDocByPathUrlAndGrouping(projectId); List<InterfaceDoc> docByPathUrlAndGrouping = getDocByPathUrlAndGrouping(projectId);
if (!CollectionUtils.isEmpty(tagsMap)) { if (!CollectionUtils.isEmpty(tagsMap)) {
...@@ -314,7 +323,7 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -314,7 +323,7 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
if (!CollectionUtils.isEmpty(tags)) { if (!CollectionUtils.isEmpty(tags)) {
for (String tag : tags) { for (String tag : tags) {
//判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个) //判断分组是否存在,如果不存在就创建,存在就直接用存在的分组id(多个取第一个)
Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag); Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag, envId);
//当前分组中的所有接口(导入的数据) //当前分组中的所有接口(导入的数据)
List<InterfaceVo> interfaceVoList = tagsMap.get(tag); List<InterfaceVo> interfaceVoList = tagsMap.get(tag);
for (InterfaceVo interfaceVo : interfaceVoList) { for (InterfaceVo interfaceVo : interfaceVoList) {
...@@ -323,6 +332,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -323,6 +332,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
interfaceDoc.setEnvId(envId); interfaceDoc.setEnvId(envId);
interfaceDoc.setInterfaceGroupId(groupingId); interfaceDoc.setInterfaceGroupId(groupingId);
interfaceDoc.setProjectId(projectId); interfaceDoc.setProjectId(projectId);
// if (interfaceVo.getParameters().toJSONString() != null) {
// interfaceDoc.setParameters(interfaceVo.getParameters().toJSONString());
// }
// if (interfaceVo.getResponses().toJSONString() != null) {
// interfaceDoc.setResponses(interfaceVo.getResponses().toJSONString());
// }
//判断这条数据是否存在(当前项目,分组,url) //判断这条数据是否存在(当前项目,分组,url)
List<InterfaceDoc> interfaceDocs = Optional.ofNullable(interfaceDocMapper.selectList(Wrappers.lambdaQuery(InterfaceDoc.class) List<InterfaceDoc> interfaceDocs = Optional.ofNullable(interfaceDocMapper.selectList(Wrappers.lambdaQuery(InterfaceDoc.class)
.eq(InterfaceDoc::getProjectId, projectId) .eq(InterfaceDoc::getProjectId, projectId)
...@@ -360,13 +375,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -360,13 +375,12 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
/** /**
* 5. 同时存在 * 5. 同时存在
* *
* @param interfaceVos 接口文档Vo类
* @param projectId 项目id * @param projectId 项目id
* @param envId 环境id * @param envId 环境id
* @param interfaceId 父级分组 * @param interfaceId 父级分组
* @return 导入情况 * @return 导入情况
*/ */
private StatusCode coexist(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId, boolean bool) { private StatusCode coexist(List<InterfaceVo> interfaceVos, Long projectId, Long envId, Long interfaceId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
...@@ -393,13 +407,13 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -393,13 +407,13 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
} }
//导入的数据 //导入的数据
Map<String, List<InterfaceVo>> tagsMap = interfaceVos.stream() Map<String, List<InterfaceVo>> tagsMap = interfaceVos.stream()
.filter(interfaceVo -> interfaceVo != null && interfaceVo.getTag() != null && !"".equals(interfaceVo.getTag())) .filter(interfaceVo -> interfaceVo != null && interfaceVo.getTags() != null && !"".equals(interfaceVo.getTags()))
.collect(Collectors.groupingBy(InterfaceVo::getTag)); .collect(Collectors.groupingBy(InterfaceVo::getTags));
if (!CollectionUtils.isEmpty(tagsMap)) { if (!CollectionUtils.isEmpty(tagsMap)) {
Set<String> tags = tagsMap.keySet(); Set<String> tags = tagsMap.keySet();
if (!CollectionUtils.isEmpty(tags)) { if (!CollectionUtils.isEmpty(tags)) {
for (String tag : tags) { for (String tag : tags) {
Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag); Long groupingId = getInterfaceGroupingId(projectId, interfaceId, tag, envId);
//tag分组下的所有接口 //tag分组下的所有接口
List<InterfaceVo> interfaceVoList = tagsMap.get(tag); List<InterfaceVo> interfaceVoList = tagsMap.get(tag);
for (InterfaceVo interfaceVo : interfaceVoList) { for (InterfaceVo interfaceVo : interfaceVoList) {
...@@ -407,7 +421,13 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -407,7 +421,13 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
interfaceDoc.setInterfaceGroupId(groupingId); interfaceDoc.setInterfaceGroupId(groupingId);
interfaceDoc.setProjectId(projectId); interfaceDoc.setProjectId(projectId);
interfaceDoc.setStatus(SyncStatus.COPY); interfaceDoc.setStatus(SyncStatus.COPY);
interfaceDoc.setEnvId(envId); // if (interfaceVo.getParameters().toJSONString() != null) {
// interfaceDoc.setParameters(interfaceVo.getParameters().toJSONString());
// }
// interfaceDoc.setEnvId(envId);
// if (interfaceVo.getResponses().toJSONString() != null) {
// interfaceDoc.setResponses(interfaceVo.getResponses().toJSONString());
// }
//todo 负责人,以及开发状态未添加 //todo 负责人,以及开发状态未添加
Integer integer = Optional.of(interfaceDocMapper.insert(interfaceDoc)).orElseThrow(() -> new GlobalException("添加失败")); Integer integer = Optional.of(interfaceDocMapper.insert(interfaceDoc)).orElseThrow(() -> new GlobalException("添加失败"));
saveNum = saveNum + integer; saveNum = saveNum + integer;
...@@ -447,7 +467,7 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -447,7 +467,7 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
* @param tag 分组名称 * @param tag 分组名称
* @return 分组的主键id * @return 分组的主键id
*/ */
private Long getInterfaceGroupingId(Long projectId, Long interfaceGroupingId, String tag) { private Long getInterfaceGroupingId(Long projectId, Long interfaceGroupingId, String tag, Long envId) {
Long id; Long id;
//查询分组是否存在 //查询分组是否存在
List<InterfaceGrouping> interfaceGroupings = Optional.of(interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class) List<InterfaceGrouping> interfaceGroupings = Optional.of(interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class)
...@@ -456,6 +476,8 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -456,6 +476,8 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
.eq(InterfaceGrouping::getTag, tag))).orElse(new ArrayList<>()); .eq(InterfaceGrouping::getTag, tag))).orElse(new ArrayList<>());
if (interfaceGroupings.size() != 0) { if (interfaceGroupings.size() != 0) {
InterfaceGrouping interfaceGrouping = interfaceGroupings.get(0); InterfaceGrouping interfaceGrouping = interfaceGroupings.get(0);
interfaceGrouping.setEnvId(envId);
interfaceGroupingMapper.updateById(interfaceGrouping);
id = interfaceGrouping.getId(); id = interfaceGrouping.getId();
} else { } else {
//添加接口分组 //添加接口分组
...@@ -463,6 +485,7 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int ...@@ -463,6 +485,7 @@ public class InterfaceDocServiceImpl extends ServiceImpl<InterfaceDocMapper, Int
interfaceGrouping.setInterfaceGroupingId(interfaceGroupingId); interfaceGrouping.setInterfaceGroupingId(interfaceGroupingId);
interfaceGrouping.setProjectId(projectId); interfaceGrouping.setProjectId(projectId);
interfaceGrouping.setTag(tag); interfaceGrouping.setTag(tag);
interfaceGrouping.setEnvId(envId);
interfaceGroupingMapper.insert(interfaceGrouping); interfaceGroupingMapper.insert(interfaceGrouping);
id = interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class) id = interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class)
.eq(InterfaceGrouping::getProjectId, projectId) .eq(InterfaceGrouping::getProjectId, projectId)
......
...@@ -11,6 +11,7 @@ import org.matrix.mapper.MouldDocMapper; ...@@ -11,6 +11,7 @@ import org.matrix.mapper.MouldDocMapper;
import org.matrix.mapper.MouldGroupingMapper; import org.matrix.mapper.MouldGroupingMapper;
import org.matrix.service.IMouldDocService; import org.matrix.service.IMouldDocService;
import org.matrix.vo.ImportMouldDoc; import org.matrix.vo.ImportMouldDoc;
import org.matrix.vo.MouldVo;
import org.matrix.vo.StatusCode; import org.matrix.vo.StatusCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -33,28 +34,28 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i ...@@ -33,28 +34,28 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i
private MouldGroupingMapper mouldGroupingMapper; private MouldGroupingMapper mouldGroupingMapper;
@Override @Override
public StatusCode importMouldDoc(List<MouldDoc> mouldDocs, Long projectId, int pattern, Long mouldId) { public StatusCode importMouldDoc(List<MouldVo> mouldVos, Long projectId, int pattern, Long mouldId) {
StatusCode statusCode; StatusCode statusCode;
switch (pattern) { switch (pattern) {
//1. 同名覆盖 //1. 同名覆盖
case ImportMouldDoc.NAME_OVERWRITE: case ImportMouldDoc.NAME_OVERWRITE:
statusCode = nameOverwrite(mouldDocs, projectId, mouldId); statusCode = nameOverwrite(mouldVos, projectId, mouldId);
break; break;
//2. 同名同组覆盖 //2. 同名同组覆盖
case ImportMouldDoc.NAME_GROUPING_OVERWRITE: case ImportMouldDoc.NAME_GROUPING_OVERWRITE:
statusCode = nameGroupingOverwrite(mouldDocs, projectId, mouldId); statusCode = nameGroupingOverwrite(mouldVos, projectId, mouldId);
break; break;
//3. 同名不覆盖 //3. 同名不覆盖
case ImportMouldDoc.NOT_NAME_OVERWRITE: case ImportMouldDoc.NOT_NAME_OVERWRITE:
statusCode = notNameOverwrite(mouldDocs, projectId, mouldId); statusCode = notNameOverwrite(mouldVos, projectId, mouldId);
break; break;
//4. 同名同组不覆盖 //4. 同名同组不覆盖
case ImportMouldDoc.NOT_NAME_GROUPING_OVERWRITE: case ImportMouldDoc.NOT_NAME_GROUPING_OVERWRITE:
statusCode = notNameGroupingOverwrite(mouldDocs, projectId, mouldId); statusCode = notNameGroupingOverwrite(mouldVos, projectId, mouldId);
break; break;
//5. 同时存在 //5. 同时存在
case ImportMouldDoc.COEXIST: case ImportMouldDoc.COEXIST:
statusCode = coexist(mouldDocs, projectId, mouldId); statusCode = coexist(mouldVos, projectId, mouldId);
break; break;
default: default:
throw new GlobalException("请选择正确的导入类型"); throw new GlobalException("请选择正确的导入类型");
...@@ -62,21 +63,35 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i ...@@ -62,21 +63,35 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i
return statusCode; return statusCode;
} }
public List<MouldDoc> getMouldDoc(List<MouldVo> mouldVos) {
List<MouldDoc> mouldDocs = new ArrayList<>();
if (!CollectionUtils.isEmpty(mouldVos)) {
for (MouldVo mouldVo : mouldVos) {
MouldDoc mouldDoc = new MouldDoc();
mouldDoc.setObjName(mouldVo.getObjName());
// mouldDoc.setAttributeOutVo(mouldVo.getAttributeOutVo());
mouldDocs.add(mouldDoc);
}
}
return mouldDocs;
}
/** /**
* 1. 同名覆盖 * 1. 同名覆盖
* *
* @param mouldDocs swagger导入的数据模型集合 * @param mouldVos swagger导入的数据模型集合
* @param projectId 项目id * @param projectId 项目id
* @param mouldId 分组Id(导入时选择导入到哪个分组中) * @param mouldId 分组Id(导入时选择导入到哪个分组中)
* @return 导入结果 * @return 导入结果
*/ */
public StatusCode nameOverwrite(List<MouldDoc> mouldDocs, Long projectId, Long mouldId) { public StatusCode nameOverwrite(List<MouldVo> mouldVos, Long projectId, Long mouldId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
StatusCode statusCode = new StatusCode(); StatusCode statusCode = new StatusCode();
statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC); statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC);
if (mouldDocs.size() != 0) { if (mouldVos.size() != 0) {
List<MouldDoc> mouldDocs = getMouldDoc(mouldVos);
List<Long> longList = getIdList(projectId); List<Long> longList = getIdList(projectId);
Long groupingId = getGroupingId(mouldId, projectId); Long groupingId = getGroupingId(mouldId, projectId);
for (MouldDoc mouldDoc : mouldDocs) { for (MouldDoc mouldDoc : mouldDocs) {
...@@ -114,18 +129,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i ...@@ -114,18 +129,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i
/** /**
* 2. 同名同组覆盖 * 2. 同名同组覆盖
* *
* @param mouldDocs swagger导入的数据模型集合 * @param mouldVos swagger导入的数据模型集合
* @param projectId 项目id * @param projectId 项目id
* @param mouldId 分组Id(导入时选择导入到哪个分组中) * @param mouldId 分组Id(导入时选择导入到哪个分组中)
* @return 导入结果 * @return 导入结果
*/ */
public StatusCode nameGroupingOverwrite(List<MouldDoc> mouldDocs, Long projectId, Long mouldId) { public StatusCode nameGroupingOverwrite(List<MouldVo> mouldVos, Long projectId, Long mouldId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
StatusCode statusCode = new StatusCode(); StatusCode statusCode = new StatusCode();
statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC); statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC);
if (mouldDocs.size() != 0) { if (mouldVos.size() != 0) {
List<MouldDoc> mouldDocs = getMouldDoc(mouldVos);
List<Long> longList = getIdList(projectId); List<Long> longList = getIdList(projectId);
Long groupingId = getGroupingId(mouldId, projectId); Long groupingId = getGroupingId(mouldId, projectId);
for (MouldDoc mouldDoc : mouldDocs) { for (MouldDoc mouldDoc : mouldDocs) {
...@@ -163,18 +179,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i ...@@ -163,18 +179,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i
/** /**
* 3. 同名不覆盖 * 3. 同名不覆盖
* *
* @param mouldDocs swagger导入的数据模型集合 * @param mouldVos swagger导入的数据模型集合
* @param projectId 项目id * @param projectId 项目id
* @param mouldId 分组Id(导入时选择导入到哪个分组中) * @param mouldId 分组Id(导入时选择导入到哪个分组中)
* @return 导入结果 * @return 导入结果
*/ */
public StatusCode notNameOverwrite(List<MouldDoc> mouldDocs, Long projectId, Long mouldId) { public StatusCode notNameOverwrite(List<MouldVo> mouldVos, Long projectId, Long mouldId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
StatusCode statusCode = new StatusCode(); StatusCode statusCode = new StatusCode();
statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC); statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC);
if (mouldDocs.size() != 0) { if (mouldVos.size() != 0) {
List<MouldDoc> mouldDocs = getMouldDoc(mouldVos);
List<Long> longList = getIdList(projectId); List<Long> longList = getIdList(projectId);
Long groupingId = getGroupingId(mouldId, projectId); Long groupingId = getGroupingId(mouldId, projectId);
for (MouldDoc mouldDoc : mouldDocs) { for (MouldDoc mouldDoc : mouldDocs) {
...@@ -205,18 +222,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i ...@@ -205,18 +222,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i
/** /**
* 4. 同名同组不覆盖 * 4. 同名同组不覆盖
* *
* @param mouldDocs swagger导入的数据模型集合 * @param mouldVos swagger导入的数据模型集合
* @param projectId 项目id * @param projectId 项目id
* @param mouldId 分组Id(导入时选择导入到哪个分组中) * @param mouldId 分组Id(导入时选择导入到哪个分组中)
* @return 导入结果 * @return 导入结果
*/ */
public StatusCode notNameGroupingOverwrite(List<MouldDoc> mouldDocs, Long projectId, Long mouldId) { public StatusCode notNameGroupingOverwrite(List<MouldVo> mouldVos, Long projectId, Long mouldId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
StatusCode statusCode = new StatusCode(); StatusCode statusCode = new StatusCode();
statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC); statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC);
if (mouldDocs.size() != 0) { if (mouldVos.size() != 0) {
List<MouldDoc> mouldDocs = getMouldDoc(mouldVos);
List<Long> longList = getIdList(projectId); List<Long> longList = getIdList(projectId);
Long groupingId = getGroupingId(mouldId, projectId); Long groupingId = getGroupingId(mouldId, projectId);
for (MouldDoc mouldDoc : mouldDocs) { for (MouldDoc mouldDoc : mouldDocs) {
...@@ -254,18 +272,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i ...@@ -254,18 +272,19 @@ public class MouldDocServiceImpl extends ServiceImpl<MouldDocMapper, MouldDoc> i
/** /**
* 5. 同名时保留两者 * 5. 同名时保留两者
* *
* @param mouldDocs swagger导入的数据模型集合 * @param mouldVos swagger导入的数据模型集合
* @param mouldId 分组Id(导入时选择导入到哪个分组中) * @param mouldId 分组Id(导入时选择导入到哪个分组中)
* @param projectId 项目id * @param projectId 项目id
* @return 导入结果 * @return 导入结果
*/ */
public StatusCode coexist(List<MouldDoc> mouldDocs, Long projectId, Long mouldId) { public StatusCode coexist(List<MouldVo> mouldVos, Long projectId, Long mouldId) {
int saveNum = 0; int saveNum = 0;
int updateNum = 0; int updateNum = 0;
int ignoreNum = 0; int ignoreNum = 0;
StatusCode statusCode = new StatusCode(); StatusCode statusCode = new StatusCode();
statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC); statusCode.setSwaggerDataType(SwaggerDataType.MOULD_DOC);
if (mouldDocs.size() != 0) { if (mouldVos.size() != 0) {
List<MouldDoc> mouldDocs = getMouldDoc(mouldVos);
//当前项目中的所有数据模型 //当前项目中的所有数据模型
List<MouldDoc> mouldDocList = Optional.ofNullable(mouldDocMapper.selectList(Wrappers.lambdaQuery(MouldDoc.class) List<MouldDoc> mouldDocList = Optional.ofNullable(mouldDocMapper.selectList(Wrappers.lambdaQuery(MouldDoc.class)
.eq(MouldDoc::getProjectId, projectId))).orElse(new ArrayList<>()); .eq(MouldDoc::getProjectId, projectId))).orElse(new ArrayList<>());
......
package org.matrix.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.matrix.enums.SyncStatus;
import java.util.List;
/**
* @author mruny
* @create 2022/8/3 15:31:12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("接口文档Vo")
public class InterfaceDocVo {
@ApiModelProperty("接口文档下可以存在多个测试用例")
private List<TestCaseVo> testCaseVos;
/**
* id
*/
@ApiModelProperty("主键id")
private Long id;
/**
* 名称
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("名称")
private String summary;
/**
* 说明
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("说明")
private String des;
/**
* 请求方式
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("请求方式")
private String httpMethod;
/**
* 接口相对路径
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("接口相对路径")
private String pathUrl;
/**
* 参数详情(整段json)
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("参数详情(整段json)")
private String parameters;
/**
* 返回值信息(整段json)
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("返回值信息(整段json)")
private String responses;
/**
* 项目id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("项目id")
private Long projectId;
/**
* 环境id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("环境id")
private Long envId;
/**
* 分组id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("分组id")
private Long interfaceGroupId;
/**
* 同步状态
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("同步状态")
private SyncStatus status;
/**
* 开发状态
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("开发状态")
private String devStatus;
/**
* 负责人
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("负责人")
private String dutyPeople;
}
package org.matrix.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author mruny
* @create 2022/8/3 15:19:39
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("项目中的所有接口分组,接口,测试用例")
public class InterfaceGroupVo {
/**
* 分组下可以存在多个分组
*/
@ApiModelProperty("分组下可以存在多个分组")
private List<InterfaceGroupVo> interfaceGroupVos;
/**
* 分组下可以存在多个接口
*/
@ApiModelProperty("分组下可以存在多个接口")
private List<InterfaceDocVo> interfaceDocVos;
/**
* id
*/
@ApiModelProperty("主键id")
private Long id;
/**
* 名称(标签/分组(存在根目录))
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("名称(标签/分组(存在根目录))")
private String tag;
/**
* 说明
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("说明")
private String des;
/**
* 环境id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("环境id")
private Long envId;
/**
* 项目id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("项目id")
private Long projectId;
/**
* 前置操作id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("前置操作id")
private Long moveBefore;
/**
* 后置操作id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("后置操作id")
private Long moveAfter;
/**
* 父类id(根目录默认为0)
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("父类id(根目录默认为0)")
private Long interfaceGroupingId;
}
package org.matrix.vo; package org.matrix.vo;
import com.alibaba.fastjson.JSONArray;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.matrix.entity.InterfaceDoc; import org.matrix.entity.InterfaceDoc;
import org.matrix.enums.SyncStatus;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
/** /**
...@@ -12,12 +13,71 @@ import org.springframework.beans.BeanUtils; ...@@ -12,12 +13,71 @@ import org.springframework.beans.BeanUtils;
* @create 2022/7/18 15:53:34 * @create 2022/7/18 15:53:34
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class InterfaceVo extends InterfaceDoc { public class InterfaceVo {
private String tag; /**
* 名称
*/
private String summary;
/**
* 说明
*/
private String des;
/**
* 请求方式
*/
private String httpMethod;
/**
* 接口相对路径
*/
private String pathUrl;
/**
* 参数详情(整段json)
*/
private JSONArray parameters;
/**
* 返回值信息(整段json)
*/
private JSONArray responses;
/**
* 项目id
*/
private Long projectId;
/**
* 环境id
*/
private Long envId;
/**
* 分组id
*/
private Long interfaceGroupId;
/**
* 同步状态
*/
private SyncStatus status;
/**
* 开发状态
*/
private String devStatus;
/**
* 负责人
*/
private String dutyPeople;
private String tags;
public InterfaceDoc toInterfaceDoc() { public InterfaceDoc toInterfaceDoc() {
InterfaceDoc interfaceDoc = new InterfaceDoc(); InterfaceDoc interfaceDoc = new InterfaceDoc();
......
package org.matrix.vo;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author mruny
* @create 2022/8/2 17:35:50
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MouldVo {
private String objName;
private JSONObject attributeOutVo;
}
package org.matrix.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author mruny
* @create 2022/8/3 16:56:26
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("项目中的所有接口分组,接口,测试用例")
public class RecursionInterface {
@ApiModelProperty("接口")
private List<InterfaceGroupVo> interfaceGroupVos;
@ApiModelProperty("接口")
private List<InterfaceDocVo> interfaceDocVos;
}
package org.matrix.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author mruny
* @create 2022/8/3 15:40:01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("测试用例Vo类")
public class TestCaseVo {
/**
* id
*/
@ApiModelProperty("主键id")
private Long id;
/**
* 名称
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("名称")
private String name;
/**
* 接口文档id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("接口文档id")
private Long docId;
/**
* 请求方式
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("请求方式")
private String httpMethod;
/**
* 参数详情(包括参数值)
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("参数详情(包括参数值)")
private String parameters;
/**
* 前置动作id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("前置动作id")
private Long moveBefore;
/**
* 后置动作id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("后置动作id")
private Long moveAfter;
/**
* 项目id
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty("项目id")
private Long projectId;
}
...@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.matrix.entity.Case; import org.matrix.entity.Case;
import org.matrix.exception.GlobalException;
import org.matrix.service.ICaseService; import org.matrix.service.ICaseService;
import org.matrix.vo.InterfaceGroupVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -26,21 +29,50 @@ public class CaseController { ...@@ -26,21 +29,50 @@ public class CaseController {
@Autowired @Autowired
private ICaseService caseService; private ICaseService caseService;
@ApiOperation("查询所有当前项目中的测试用例") @ApiOperation("根据主键id查询测试用例")
@GetMapping("/id")
public ResponseEntity<Case> findByIdCase(@RequestParam Long id) {
Case aCase = Optional.ofNullable(caseService.getById(id)).orElse(new Case());
return ResponseEntity.ok(aCase);
}
@ApiOperation("根据主键id删除测试用例")
@DeleteMapping("/{id}")
public ResponseEntity<String> removeCase(@PathVariable Long id) {
caseService.removeById(id);
return ResponseEntity.ok(String.format("删除成功,删除的接口文档id为: %d", id));
}
@ApiOperation("添加测试用例")
@PostMapping
public ResponseEntity<Case> insertCase(@RequestBody Case aCase) {
return Optional.of(caseService.save(aCase)).orElseThrow(() -> new GlobalException("添加失败"))
? ResponseEntity.ok(aCase)
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(aCase);
}
@ApiOperation("修改测试用例")
@PutMapping
public ResponseEntity<Case> updateCase(@RequestBody Case aCase) {
return Optional.of(caseService.updateById(aCase)).orElseThrow(() -> new GlobalException("修改失败"))
? ResponseEntity.ok(aCase)
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(aCase);
}
@ApiOperation("查询快捷请求")
@GetMapping @GetMapping
public ResponseEntity<List<Case>> findCase(@RequestParam Long projectId) { public ResponseEntity<List<Case>> findCase(@RequestParam Long projectId) {
List<Case> cases = Optional.ofNullable(caseService.list(Wrappers.lambdaQuery(Case.class) List<Case> cases = Optional.ofNullable(caseService.list(Wrappers.lambdaQuery(Case.class)
.eq(Case::getProjectId, projectId))).orElse(new ArrayList<>()); .eq(Case::getProjectId, projectId)
.eq(Case::getDocId, -1L))).orElse(new ArrayList<>());
return ResponseEntity.ok(cases); return ResponseEntity.ok(cases);
} }
@ApiOperation("根据主键id查询测试用例") @ApiOperation("查询当前项目下所有分组,以及分组下的接口,测试用例等")
@GetMapping("/id") @GetMapping("/all")
public ResponseEntity<Case> findByIdCase(@RequestParam Long id) { public ResponseEntity<InterfaceGroupVo> findAll(@RequestParam Long projectId) {
Case aCase = Optional.ofNullable(caseService.getById(id)).orElse(new Case()); InterfaceGroupVo result = caseService.getAll(projectId);
return ResponseEntity.ok(aCase); return ResponseEntity.ok(result);
} }
// @ApiOperation("根据测试用例所在的接口查询")
// @GetMapping("/")
} }
...@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.matrix.entity.Case;
import org.matrix.entity.InterfaceDoc; import org.matrix.entity.InterfaceDoc;
import org.matrix.exception.GlobalException; import org.matrix.exception.GlobalException;
import org.matrix.service.ICaseService;
import org.matrix.service.IInterfaceDocService; import org.matrix.service.IInterfaceDocService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -29,9 +32,16 @@ public class InterfaceDocController { ...@@ -29,9 +32,16 @@ public class InterfaceDocController {
@Autowired @Autowired
private IInterfaceDocService interfaceDocService; private IInterfaceDocService interfaceDocService;
@ApiOperation("根据id删除接口文档") @Autowired
private ICaseService caseService;
@ApiOperation("根据id删除接口文档,以及接口文档中的测试用例")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional(rollbackFor = Exception.class)
public ResponseEntity<String> removeInterfaceDoc(@PathVariable Long id) { public ResponseEntity<String> removeInterfaceDoc(@PathVariable Long id) {
List<Case> cases = Optional.of(caseService.list(Wrappers.lambdaQuery(Case.class)
.eq(Case::getDocId, id))).orElse(new ArrayList<>());
caseService.removeByIds(cases);
interfaceDocService.removeById(id); interfaceDocService.removeById(id);
return ResponseEntity.ok(String.format("删除成功,删除的接口文档id为: %d", id)); return ResponseEntity.ok(String.format("删除成功,删除的接口文档id为: %d", id));
} }
...@@ -52,14 +62,6 @@ public class InterfaceDocController { ...@@ -52,14 +62,6 @@ public class InterfaceDocController {
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(interfaceDoc); : ResponseEntity.status(HttpStatus.BAD_REQUEST).body(interfaceDoc);
} }
@ApiOperation("查询当前项目下所有接口文档")
@GetMapping
public ResponseEntity<List<InterfaceDoc>> findInterfaceDoc(@RequestParam(required = false,defaultValue = "1") Long projectId) {
List<InterfaceDoc> interfaceDocList = Optional.ofNullable(interfaceDocService.list(Wrappers.lambdaQuery(InterfaceDoc.class)
.eq(InterfaceDoc::getProjectId, projectId))).orElse(new ArrayList<>());
return ResponseEntity.ok(interfaceDocList);
}
@ApiOperation("根据主键id查询接口文档") @ApiOperation("根据主键id查询接口文档")
@GetMapping("/id") @GetMapping("/id")
public ResponseEntity<InterfaceDoc> findByIdInterfaceDoc(@RequestParam Long id) { public ResponseEntity<InterfaceDoc> findByIdInterfaceDoc(@RequestParam Long id) {
...@@ -67,12 +69,4 @@ public class InterfaceDocController { ...@@ -67,12 +69,4 @@ public class InterfaceDocController {
return ResponseEntity.ok(interfaceDoc); return ResponseEntity.ok(interfaceDoc);
} }
@ApiOperation("根据分组id查询接口文档")
@GetMapping("/groupingId")
public ResponseEntity<List<InterfaceDoc>> findByGroupingIdInterfaceDoc(@RequestParam Long groupingId) {
List<InterfaceDoc> interfaceDocList = Optional.ofNullable(interfaceDocService.list(Wrappers.lambdaQuery(InterfaceDoc.class)
.eq(InterfaceDoc::getInterfaceGroupId, groupingId))).orElse(new ArrayList<>());
return ResponseEntity.ok(interfaceDocList);
}
} }
package org.matrix.autotest.controller; package org.matrix.autotest.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.matrix.entity.InterfaceGrouping; import org.matrix.entity.InterfaceGrouping;
...@@ -9,10 +8,9 @@ import org.matrix.service.IInterfaceGroupingService; ...@@ -9,10 +8,9 @@ import org.matrix.service.IInterfaceGroupingService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -44,14 +42,6 @@ public class InterfaceGroupingController { ...@@ -44,14 +42,6 @@ public class InterfaceGroupingController {
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(interfaceGrouping); : ResponseEntity.status(HttpStatus.BAD_REQUEST).body(interfaceGrouping);
} }
@ApiOperation("查询当前项目下所有接口分组")
@GetMapping
public ResponseEntity<List<InterfaceGrouping>> findInterfaceGrouping(@RequestParam Long projectId) {
List<InterfaceGrouping> interfaceGroupings = Optional.ofNullable(interfaceGroupingService.list(Wrappers.lambdaQuery(InterfaceGrouping.class)
.eq(InterfaceGrouping::getProjectId, projectId))).orElse(new ArrayList<>());
return ResponseEntity.ok(interfaceGroupings);
}
@ApiOperation("根据主键id查询接口分组") @ApiOperation("根据主键id查询接口分组")
@GetMapping("/id") @GetMapping("/id")
public ResponseEntity<InterfaceGrouping> findByIdInterfaceGrouping(@RequestParam Long id) { public ResponseEntity<InterfaceGrouping> findByIdInterfaceGrouping(@RequestParam Long id) {
...@@ -59,10 +49,12 @@ public class InterfaceGroupingController { ...@@ -59,10 +49,12 @@ public class InterfaceGroupingController {
return ResponseEntity.ok(interfaceGrouping); return ResponseEntity.ok(interfaceGrouping);
} }
@ApiOperation("根据接口分组主键id删除分组以及分组下接口文档") @ApiOperation("根据接口分组主键id删除分组以及分组下所有分组和接口文档")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional(rollbackFor = Exception.class)
public ResponseEntity<String> removeInterfaceGrouping(@PathVariable Long id) { public ResponseEntity<String> removeInterfaceGrouping(@PathVariable Long id) {
interfaceGroupingService.removeInterfaceGrouping(id); interfaceGroupingService.removeInterfaceGrouping(id);
return ResponseEntity.ok(String.format("删除成功,删除的接口分组id为: %d", id)); return ResponseEntity.ok(String.format("删除成功,删除的接口分组id为: %d", id));
} }
} }
package org.matrix.autotest.controller; package org.matrix.autotest.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.matrix.entity.MouldDoc; import org.matrix.entity.MouldDoc;
...@@ -11,8 +10,6 @@ import org.springframework.http.HttpStatus; ...@@ -11,8 +10,6 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -51,27 +48,11 @@ public class MouldDocController { ...@@ -51,27 +48,11 @@ public class MouldDocController {
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(mouldDoc); : ResponseEntity.status(HttpStatus.BAD_REQUEST).body(mouldDoc);
} }
@ApiOperation("查询当前项目下所有数据模型") @ApiOperation("根据主键id查询数据模型")
@GetMapping
public ResponseEntity<List<MouldDoc>> findMouldDoc(@RequestParam Long projectId) {
List<MouldDoc> mouldDocList = Optional.ofNullable(mouldDocService.list(Wrappers.lambdaQuery(MouldDoc.class)
.eq(MouldDoc::getProjectId, projectId))).orElse(new ArrayList<>());
return ResponseEntity.ok(mouldDocList);
}
@ApiOperation("根据主键id数据模型")
@GetMapping("/id") @GetMapping("/id")
public ResponseEntity<MouldDoc> findByIdMouldDoc(@RequestParam Long id) { public ResponseEntity<MouldDoc> findByIdMouldDoc(@RequestParam Long id) {
MouldDoc mouldDoc = Optional.ofNullable(mouldDocService.getById(id)).orElse(new MouldDoc()); MouldDoc mouldDoc = Optional.ofNullable(mouldDocService.getById(id)).orElse(new MouldDoc());
return ResponseEntity.ok(mouldDoc); return ResponseEntity.ok(mouldDoc);
} }
@ApiOperation("根据分组id查询数据模型")
@GetMapping("/groupingId")
public ResponseEntity<List<MouldDoc>> findByGroupingIdMouldDoc(@RequestParam Long groupingId) {
List<MouldDoc> mouldDocList = Optional.ofNullable(mouldDocService.list(Wrappers.lambdaQuery(MouldDoc.class)
.eq(MouldDoc::getMouldGroupingId, groupingId))).orElse(new ArrayList<>());
return ResponseEntity.ok(mouldDocList);
}
} }
package org.matrix.autotest.controller; package org.matrix.autotest.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.matrix.entity.MouldGrouping; import org.matrix.entity.MouldGrouping;
...@@ -12,8 +11,6 @@ import org.springframework.http.ResponseEntity; ...@@ -12,8 +11,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -45,16 +42,6 @@ public class MouldGroupingController { ...@@ -45,16 +42,6 @@ public class MouldGroupingController {
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(mouldGrouping); : ResponseEntity.status(HttpStatus.BAD_REQUEST).body(mouldGrouping);
} }
@GetMapping
@ApiOperation("查询当前项目下所有数据模型分组")
public ResponseEntity<List<MouldGrouping>> findMouldGrouping(@RequestParam Long projectId) {
List<MouldGrouping> mouldGroupings = Optional.of(mouldGroupingService.list(Wrappers.lambdaQuery(MouldGrouping.class)
.eq(MouldGrouping::getProjectId, projectId))).orElse(new ArrayList<>());
return ResponseEntity.ok(mouldGroupings);
}
@ApiOperation("根据主键id查询数据模型分组") @ApiOperation("根据主键id查询数据模型分组")
@GetMapping("/id") @GetMapping("/id")
public ResponseEntity<MouldGrouping> findByMouldGrouping(@RequestParam Long id) { public ResponseEntity<MouldGrouping> findByMouldGrouping(@RequestParam Long id) {
...@@ -62,7 +49,7 @@ public class MouldGroupingController { ...@@ -62,7 +49,7 @@ public class MouldGroupingController {
return ResponseEntity.ok(mouldGrouping); return ResponseEntity.ok(mouldGrouping);
} }
@ApiOperation("根据数据模型分组主键id,删除分组以及分组下数据模型") @ApiOperation("根据数据模型分组主键id,删除分组以及分组下所有分组和数据模型")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseEntity<String> removeMouldGrouping(@PathVariable Long id) { public ResponseEntity<String> removeMouldGrouping(@PathVariable Long id) {
......
package org.matrix.autotest.controller; package org.matrix.autotest.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.matrix.entity.Environment; import org.matrix.entity.Environment;
import org.matrix.entity.MouldDoc;
import org.matrix.exception.GlobalException; import org.matrix.exception.GlobalException;
import org.matrix.service.IEnvironmentService; import org.matrix.service.IEnvironmentService;
import org.matrix.service.IInterfaceDocService; import org.matrix.service.IInterfaceDocService;
import org.matrix.service.IMouldDocService; import org.matrix.service.IMouldDocService;
import org.matrix.vo.InterfaceVo; import org.matrix.vo.InterfaceVo;
import org.matrix.vo.MouldVo;
import org.matrix.vo.StatusCode; import org.matrix.vo.StatusCode;
import org.matrix.vo.swaggerEntityVo.AttributeInVo; import org.matrix.vo.swaggerEntityVo.AttributeInVo;
import org.matrix.vo.swaggerEntityVo.definitionsEntity.AttributeOutVo; import org.matrix.vo.swaggerEntityVo.definitionsEntity.AttributeOutVo;
...@@ -70,6 +69,7 @@ public class SwaggerHandleController { ...@@ -70,6 +69,7 @@ public class SwaggerHandleController {
*/ */
@ApiOperation("导入环境") @ApiOperation("导入环境")
@PostMapping("/environment") @PostMapping("/environment")
@Transactional(rollbackFor = Exception.class)
public ResponseEntity<StatusCode> insertEnv(@RequestBody Environment environment) { public ResponseEntity<StatusCode> insertEnv(@RequestBody Environment environment) {
StatusCode statusCode = environmentService.importEnv(environment); StatusCode statusCode = environmentService.importEnv(environment);
return ResponseEntity.ok(statusCode); return ResponseEntity.ok(statusCode);
...@@ -78,7 +78,7 @@ public class SwaggerHandleController { ...@@ -78,7 +78,7 @@ public class SwaggerHandleController {
/** /**
* 导入数据模型 * 导入数据模型
* *
* @param mouldDocs 数据模型对象 * @param mouldVos 数据模型对象VO
* @param projectId 项目id * @param projectId 项目id
* @param pattern 导入类型 * @param pattern 导入类型
* @param mouldId 上级分组 * @param mouldId 上级分组
...@@ -86,12 +86,12 @@ public class SwaggerHandleController { ...@@ -86,12 +86,12 @@ public class SwaggerHandleController {
*/ */
@ApiOperation("导入数据模型") @ApiOperation("导入数据模型")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/mouldDoc/{projectId}/{pattern}/{mouldId}") @PostMapping("/mouldDoc")
public ResponseEntity<StatusCode> insertMouldDoc(@RequestBody List<MouldDoc> mouldDocs, public ResponseEntity<StatusCode> insertMouldDoc(@RequestBody List<MouldVo> mouldVos,
@PathVariable Long projectId, @RequestParam Long projectId,
@PathVariable int pattern, @RequestParam int pattern,
@PathVariable Long mouldId) { @RequestParam Long mouldId) {
StatusCode statusCode = mouldDocService.importMouldDoc(mouldDocs, projectId, pattern, mouldId); StatusCode statusCode = mouldDocService.importMouldDoc(mouldVos, projectId, pattern, mouldId);
return ResponseEntity.ok(statusCode); return ResponseEntity.ok(statusCode);
} }
...@@ -103,19 +103,17 @@ public class SwaggerHandleController { ...@@ -103,19 +103,17 @@ public class SwaggerHandleController {
* @param pattern 导入方式 * @param pattern 导入方式
* @param interfaceId 上级分组 * @param interfaceId 上级分组
* @param envId 环境id * @param envId 环境id
* @param bool 是否导入测试用例
* @return 导入结果 * @return 导入结果
*/ */
@ApiOperation("导入接口文档") @ApiOperation("导入接口文档")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/interfaceDoc/{projectId}/{envId}/{pattern}/{interfaceId}/{bool}") @PostMapping("/interfaceDoc")
public ResponseEntity<StatusCode> insertInterfaceDoc(@RequestBody List<InterfaceVo> interfaceVos, public ResponseEntity<StatusCode> insertInterfaceDoc(@RequestBody List<InterfaceVo> interfaceVos,
@PathVariable Long projectId, @RequestParam Long projectId,
@PathVariable int pattern, @RequestParam int pattern,
@PathVariable Long interfaceId, @RequestParam Long interfaceId,
@PathVariable Long envId, @RequestParam Long envId) {
@PathVariable boolean bool) { StatusCode statusCode = interfaceDocService.importInterfaceDoc(interfaceVos, projectId, envId, pattern, interfaceId);
StatusCode statusCode = interfaceDocService.importInterfaceDoc(interfaceVos, projectId, envId, pattern, interfaceId, bool);
return ResponseEntity.ok(statusCode); return ResponseEntity.ok(statusCode);
} }
...@@ -124,7 +122,7 @@ public class SwaggerHandleController { ...@@ -124,7 +122,7 @@ public class SwaggerHandleController {
*/ */
@GetMapping @GetMapping
@ApiOperation("获取并解析swagger数据") @ApiOperation("获取并解析swagger数据")
public JSONObject handleSwagger(@RequestParam String url) { public SwaggerOuter handleSwagger(@RequestParam String url) {
String loadJson = loadJson(url); String loadJson = loadJson(url);
SwaggerOuter json = new SwaggerOuter(); SwaggerOuter json = new SwaggerOuter();
if (loadJson != null && !"".equals(loadJson)) { if (loadJson != null && !"".equals(loadJson)) {
...@@ -195,7 +193,7 @@ public class SwaggerHandleController { ...@@ -195,7 +193,7 @@ public class SwaggerHandleController {
json.setTagSummaryList(tagSummaryList); json.setTagSummaryList(tagSummaryList);
} }
} }
return JSONObject.parseObject(JSON.toJSONString(json)); return json;
} }
/** /**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论