提交 24b2d914 authored 作者: mry's avatar mry

feat(web): 测试用例集的基本操作,修复了删除根目录下级目录不删除的bug

上级 b1abbe28
package org.matrix.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author mruny
* @create 2022/8/11 10:16:56
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "kt_test_case_collection")
@ApiModel(value = "TestCaseCollection对象", description = "测试用例集")
public class TestCaseCollection extends BaseEntity {
@ApiModelProperty("分组名称")
private String name;
@ApiModelProperty("父分组id")
private Long groupId;
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("测试用例集合(所有测试用例的主键id)")
private List<Long> testCaseIds;
}
package org.matrix.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.matrix.vo.TestCaseCollectionGroupingVo;
import org.springframework.beans.BeanUtils;
/**
* @author mruny
* @create 2022/8/12 10:50:00
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "kt_test_case_collection_grouping")
@ApiModel(value = "TestCaseCollectionGrouping对象", description = "测试用例集分组")
public class TestCaseCollectionGrouping extends BaseEntity {
@ApiModelProperty("分组名称")
private String name;
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("父分组id")
private Long groupId;
public TestCaseCollectionGroupingVo toTestCaseCollectionGroupingVo() {
TestCaseCollectionGroupingVo testCaseCollectionGroupingVo = new TestCaseCollectionGroupingVo();
BeanUtils.copyProperties(this, testCaseCollectionGroupingVo);
return testCaseCollectionGroupingVo;
}
}
package org.matrix.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.matrix.entity.TestCaseCollectionGrouping;
import org.springframework.stereotype.Repository;
/**
* @author mruny
* @create 2022/8/12 10:56:12
*/
@Repository
public interface TestCaseCollectionGroupingMapper extends BaseMapper<TestCaseCollectionGrouping> {
}
package org.matrix.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.matrix.entity.TestCaseCollection;
import org.springframework.stereotype.Repository;
/**
* @author mruny
* @create 2022/8/11 10:20:07
*/
@Repository
public interface TestCaseCollectionMapper extends BaseMapper<TestCaseCollection> {
}
package org.matrix.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.matrix.entity.TestCaseCollectionGrouping;
import org.matrix.vo.TestCaseCollectionGroupingVo;
/**
* @author mruny
* @create 2022/8/12 10:57:05
*/
public interface ITestCaseCollectionGroupingService extends IService<TestCaseCollectionGrouping> {
/**
* 查询测试用例集分组与分组下的分组
*
* @return 测试用例集分组与分组下的分组
*/
/**
* 查询测试用例集分组与分组下的分组
*
* @param projectId 项目id
* @return 测试用例集分组与分组下的分组
*/
TestCaseCollectionGroupingVo findAll(Long projectId);
/**
* 根据id删除分组以及分组下的子分组
*
* @param id 主键id
*/
void delete(Long id);
}
package org.matrix.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.matrix.entity.TestCaseCollection;
/**
* @author mruny
* @create 2022/8/11 10:20:48
*/
public interface ITestCaseCollectionService extends IService<TestCaseCollection> {
}
...@@ -53,40 +53,38 @@ public class CaseServiceImpl extends ServiceImpl<CaseMapper, Case> implements IC ...@@ -53,40 +53,38 @@ public class CaseServiceImpl extends ServiceImpl<CaseMapper, Case> implements IC
if (!CollectionUtils.isEmpty(interfaceGroupVos)) { if (!CollectionUtils.isEmpty(interfaceGroupVos)) {
//根据父分组,查出所有的子分组 //根据父分组,查出所有的子分组
for (InterfaceGroupVo interfaceGroupVo : interfaceGroupVos) { for (InterfaceGroupVo interfaceGroupVo : interfaceGroupVos) {
if (interfaceGroupVo.getId() != null) { interfaceGroupVo.setSort("group");
interfaceGroupVo.setSort("group"); //父分组id
//父分组id Long groupId = interfaceGroupVo.getId();
Long groupId = interfaceGroupVo.getId(); //分组下的分组
//分组下的分组 List<InterfaceGroupVo> interfaceGroupVoList = interfaceGroupingVosMap.get(groupId);
List<InterfaceGroupVo> interfaceGroupVoList = interfaceGroupingVosMap.get(groupId); if (!CollectionUtils.isEmpty(interfaceGroupVoList)) {
if (!CollectionUtils.isEmpty(interfaceGroupVoList)) { for (InterfaceGroupVo groupVo : interfaceGroupVoList) {
for (InterfaceGroupVo groupVo : interfaceGroupVoList) { groupVo.setSort("group");
groupVo.setSort("group");
}
} }
//分组下的接口 }
List<InterfaceDocVo> interfaceDocVoList = interfaceDocVosMap.get(groupId); //分组下的接口
//找接口下的测试用例 List<InterfaceDocVo> interfaceDocVoList = interfaceDocVosMap.get(groupId);
if (!CollectionUtils.isEmpty(interfaceDocVoList)) { //找接口下的测试用例
for (InterfaceDocVo interfaceDocVo : interfaceDocVoList) { if (!CollectionUtils.isEmpty(interfaceDocVoList)) {
if (interfaceDocVo.getId() != null) { for (InterfaceDocVo interfaceDocVo : interfaceDocVoList) {
interfaceDocVo.setSort("doc"); if (interfaceDocVo.getId() != null) {
Long docId = interfaceDocVo.getId(); interfaceDocVo.setSort("doc");
List<TestCaseVo> testCaseVos = testCaseVosMap.get(docId); Long docId = interfaceDocVo.getId();
if (!CollectionUtils.isEmpty(testCaseVos)) { List<TestCaseVo> testCaseVos = testCaseVosMap.get(docId);
for (TestCaseVo testCaseVo : testCaseVos) { if (!CollectionUtils.isEmpty(testCaseVos)) {
testCaseVo.setSort("testCase"); for (TestCaseVo testCaseVo : testCaseVos) {
} testCaseVo.setSort("testCase");
} }
interfaceDocVo.setChildren(testCaseVos);
} }
interfaceDocVo.setChildren(testCaseVos);
} }
} }
interfaceGroupVo.setInterfaceGroupVos(interfaceGroupVoList); }
interfaceGroupVo.setChildren(interfaceDocVoList); interfaceGroupVo.setInterfaceGroupVos(interfaceGroupVoList);
if (!CollectionUtils.isEmpty(interfaceGroupVoList)) { interfaceGroupVo.setChildren(interfaceDocVoList);
getRecursiveGrouping(interfaceDocVosMap, interfaceGroupingVosMap, testCaseVosMap, interfaceGroupVoList); if (!CollectionUtils.isEmpty(interfaceGroupVoList)) {
} getRecursiveGrouping(interfaceDocVosMap, interfaceGroupingVosMap, testCaseVosMap, interfaceGroupVoList);
} }
} }
} }
......
...@@ -35,7 +35,8 @@ public class InterfaceGroupingServiceImpl extends ServiceImpl<InterfaceGroupingM ...@@ -35,7 +35,8 @@ public class InterfaceGroupingServiceImpl extends ServiceImpl<InterfaceGroupingM
@Override @Override
public void removeInterfaceGrouping(Long id) { public void removeInterfaceGrouping(Long id) {
List<Long> list = getGroupIds(id); List<Long> groupIdList = new ArrayList<>();
List<Long> list = getGroupIds(id, groupIdList);
//所有的分组id //所有的分组id
for (Long groupId : list) { for (Long groupId : list) {
//分组下的接口 //分组下的接口
...@@ -65,8 +66,7 @@ public class InterfaceGroupingServiceImpl extends ServiceImpl<InterfaceGroupingM ...@@ -65,8 +66,7 @@ public class InterfaceGroupingServiceImpl extends ServiceImpl<InterfaceGroupingM
* @param id 当前要删除的分组id * @param id 当前要删除的分组id
* @return 该分组下所有分组的主键id, 也包括当前分组本身 * @return 该分组下所有分组的主键id, 也包括当前分组本身
*/ */
private List<Long> getGroupIds(Long id) { private List<Long> getGroupIds(Long id, List<Long> list) {
List<Long> list = new ArrayList<>();
//根据分组id找到分组下的分组 //根据分组id找到分组下的分组
List<InterfaceGrouping> interfaceGroupings = Optional.ofNullable(interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class) List<InterfaceGrouping> interfaceGroupings = Optional.ofNullable(interfaceGroupingMapper.selectList(Wrappers.lambdaQuery(InterfaceGrouping.class)
.eq(InterfaceGrouping::getInterfaceGroupingId, id))).orElse(new ArrayList<>()); .eq(InterfaceGrouping::getInterfaceGroupingId, id))).orElse(new ArrayList<>());
...@@ -74,7 +74,7 @@ public class InterfaceGroupingServiceImpl extends ServiceImpl<InterfaceGroupingM ...@@ -74,7 +74,7 @@ public class InterfaceGroupingServiceImpl extends ServiceImpl<InterfaceGroupingM
if (!CollectionUtils.isEmpty(interfaceGroupings)) { if (!CollectionUtils.isEmpty(interfaceGroupings)) {
for (InterfaceGrouping interfaceGrouping : interfaceGroupings) { for (InterfaceGrouping interfaceGrouping : interfaceGroupings) {
list.add(interfaceGrouping.getId()); list.add(interfaceGrouping.getId());
getGroupIds(interfaceGrouping.getId()); getGroupIds(interfaceGrouping.getId(), list);
} }
} }
return list; return list;
......
...@@ -30,7 +30,8 @@ public class MouldGroupingServiceImpl extends ServiceImpl<MouldGroupingMapper, M ...@@ -30,7 +30,8 @@ public class MouldGroupingServiceImpl extends ServiceImpl<MouldGroupingMapper, M
@Override @Override
public void removeMould(Long id) { public void removeMould(Long id) {
List<Long> list = getGroupIds(id); List<Long> groupIdList = new ArrayList<>();
List<Long> list = getGroupIds(id, groupIdList);
for (Long groupId : list) { for (Long groupId : list) {
//分组下的数据模型 //分组下的数据模型
List<MouldDoc> mouldDocs = Optional.ofNullable(mouldDocMapper.selectList(Wrappers.lambdaQuery(MouldDoc.class) List<MouldDoc> mouldDocs = Optional.ofNullable(mouldDocMapper.selectList(Wrappers.lambdaQuery(MouldDoc.class)
...@@ -43,8 +44,7 @@ public class MouldGroupingServiceImpl extends ServiceImpl<MouldGroupingMapper, M ...@@ -43,8 +44,7 @@ public class MouldGroupingServiceImpl extends ServiceImpl<MouldGroupingMapper, M
mouldGroupingMapper.deleteById(id); mouldGroupingMapper.deleteById(id);
} }
private List<Long> getGroupIds(Long id) { private List<Long> getGroupIds(Long id, List<Long> list) {
List<Long> list = new ArrayList<>();
//根据分组id找到分组下的分组 //根据分组id找到分组下的分组
List<MouldGrouping> mouldGroupings = Optional.ofNullable(mouldGroupingMapper.selectList(Wrappers.lambdaQuery(MouldGrouping.class) List<MouldGrouping> mouldGroupings = Optional.ofNullable(mouldGroupingMapper.selectList(Wrappers.lambdaQuery(MouldGrouping.class)
.eq(MouldGrouping::getMouldId, id))).orElse(new ArrayList<>()); .eq(MouldGrouping::getMouldId, id))).orElse(new ArrayList<>());
...@@ -52,7 +52,7 @@ public class MouldGroupingServiceImpl extends ServiceImpl<MouldGroupingMapper, M ...@@ -52,7 +52,7 @@ public class MouldGroupingServiceImpl extends ServiceImpl<MouldGroupingMapper, M
if (!CollectionUtils.isEmpty(mouldGroupings)) { if (!CollectionUtils.isEmpty(mouldGroupings)) {
for (MouldGrouping mouldGrouping : mouldGroupings) { for (MouldGrouping mouldGrouping : mouldGroupings) {
list.add(mouldGrouping.getId()); list.add(mouldGrouping.getId());
getGroupIds(mouldGrouping.getId()); getGroupIds(mouldGrouping.getId(), list);
} }
} }
return list; return list;
......
package org.matrix.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.matrix.entity.TestCaseCollectionGrouping;
import org.matrix.mapper.TestCaseCollectionGroupingMapper;
import org.matrix.service.ITestCaseCollectionGroupingService;
import org.matrix.vo.TestCaseCollectionGroupingVo;
import org.springframework.beans.factory.annotation.Autowired;
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
* @create 2022/8/12 10:57:40
*/
@Service
public class TestCaseCollectionGroupingServiceImpl extends ServiceImpl<TestCaseCollectionGroupingMapper, TestCaseCollectionGrouping> implements ITestCaseCollectionGroupingService {
@Autowired
private TestCaseCollectionGroupingMapper mapper;
@Override
public TestCaseCollectionGroupingVo findAll(Long projectId) {
//外层
TestCaseCollectionGroupingVo testCaseCollectionGroupingVo = new TestCaseCollectionGroupingVo();
List<TestCaseCollectionGroupingVo> voList = new ArrayList<>();
//找到所有的分组
List<TestCaseCollectionGrouping> list = Optional.ofNullable(mapper.selectList(Wrappers.lambdaQuery(TestCaseCollectionGrouping.class)
.eq(TestCaseCollectionGrouping::getProjectId, projectId))).orElse(new ArrayList<>());
if (!CollectionUtils.isEmpty(list)) {
for (TestCaseCollectionGrouping testCaseCollectionGrouping : list) {
TestCaseCollectionGroupingVo vo = testCaseCollectionGrouping.toTestCaseCollectionGroupingVo();
voList.add(vo);
}
}
//根据父类分组id分组
Map<Long, List<TestCaseCollectionGroupingVo>> groupIdMap = voList.stream()
.filter(testCaseCollectionGrouping -> testCaseCollectionGrouping != null && testCaseCollectionGrouping.getGroupId() != null)
.collect(Collectors.groupingBy(TestCaseCollectionGroupingVo::getGroupId));
//根目录中的的分组
if (!CollectionUtils.isEmpty(groupIdMap.get(-1L))) {
List<TestCaseCollectionGroupingVo> firstList = groupIdMap.get(-1L);
//将所有最外层分组存入
testCaseCollectionGroupingVo.setTestCaseCollectionGroupingVos(firstList);
getRecursiveGrouping(groupIdMap, firstList);
}
return testCaseCollectionGroupingVo;
}
@Override
public void delete(Long id) {
List<Long> list = new ArrayList<>();
List<Long> groupIds = getGroupIds(id,list);
mapper.deleteBatchIds(groupIds);
mapper.deleteById(id);
}
public List<Long> getGroupIds(Long id,List<Long> list) {
List<TestCaseCollectionGrouping> testCaseCollectionGroupings = Optional.ofNullable(mapper.selectList(Wrappers.lambdaQuery(TestCaseCollectionGrouping.class)
.eq(TestCaseCollectionGrouping::getGroupId, id))).orElse(new ArrayList<>());
if (!CollectionUtils.isEmpty(testCaseCollectionGroupings)) {
for (TestCaseCollectionGrouping testCaseCollectionGrouping : testCaseCollectionGroupings) {
list.add(testCaseCollectionGrouping.getId());
getGroupIds(testCaseCollectionGrouping.getId(),list);
}
}
return list;
}
public void getRecursiveGrouping(Map<Long, List<TestCaseCollectionGroupingVo>> groupIdMap,
List<TestCaseCollectionGroupingVo> firstList) {
if (!CollectionUtils.isEmpty(firstList)) {
for (TestCaseCollectionGroupingVo vo : firstList) {
Long groupingId = vo.getId();
List<TestCaseCollectionGroupingVo> list = groupIdMap.get(groupingId);
vo.setTestCaseCollectionGroupingVos(list);
getRecursiveGrouping(groupIdMap, list);
}
}
}
}
package org.matrix.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.matrix.entity.TestCaseCollection;
import org.matrix.mapper.TestCaseCollectionMapper;
import org.matrix.service.ITestCaseCollectionService;
import org.springframework.stereotype.Service;
/**
* @author mruny
* @create 2022/8/11 10:21:30
*/
@Service
public class TestCaseCollectionServiceImpl extends ServiceImpl<TestCaseCollectionMapper, TestCaseCollection> implements ITestCaseCollectionService {
}
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/12 13:36:02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("测试用例集分组VO类")
public class TestCaseCollectionGroupingVo {
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("分组名称")
private String name;
@ApiModelProperty("父分组id")
private Long groupId;
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("分组下的分组")
private List<TestCaseCollectionGroupingVo> testCaseCollectionGroupingVos;
}
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.apache.commons.collections.ArrayStack;
import org.matrix.entity.Case; import org.matrix.entity.Case;
import org.matrix.entity.MouldDoc;
import org.matrix.exception.GlobalException; import org.matrix.exception.GlobalException;
import org.matrix.service.ICaseService; import org.matrix.service.ICaseService;
import org.matrix.vo.InterfaceGroupVo; import org.matrix.vo.InterfaceGroupVo;
...@@ -11,6 +14,8 @@ import org.springframework.http.HttpStatus; ...@@ -11,6 +14,8 @@ 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;
/** /**
......
package org.matrix.autotest.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.matrix.entity.TestCaseCollection;
import org.matrix.exception.GlobalException;
import org.matrix.service.ITestCaseCollectionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Optional;
/**
* @author mruny
* @create 2022/8/11 10:22:46
*/
@CrossOrigin
@RestController
@RequestMapping("/testCaseGroupings")
@Api(tags = "对测试用例集TestCaseCollection对象的基本操作")
public class TestCaseCollectionController {
@Autowired
private ITestCaseCollectionService testCaseGroupingService;
@ApiOperation("添加测试用例集")
@PostMapping
public ResponseEntity<TestCaseCollection> insertTestCaseGrouping(@RequestBody TestCaseCollection testCaseCollection) {
return Optional.of(testCaseGroupingService.save(testCaseCollection)).orElseThrow(() -> new GlobalException("添加失败"))
? ResponseEntity.ok(testCaseCollection)
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(testCaseCollection);
}
@ApiOperation("修改测试用例集")
@PutMapping
public ResponseEntity<TestCaseCollection> updateTestCaseGrouping(@RequestBody TestCaseCollection testCaseCollection) {
return Optional.of(testCaseGroupingService.updateById(testCaseCollection)).orElseThrow(() -> new GlobalException("修改失败"))
? ResponseEntity.ok(testCaseCollection)
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(testCaseCollection);
}
@ApiOperation("删除测试用例集")
@DeleteMapping("/{id}")
public ResponseEntity<String> removeTestCaseGrouping(@PathVariable Long id) {
testCaseGroupingService.removeById(id);
return ResponseEntity.ok(String.format("删除的用例分组id为,%s", id));
}
}
package org.matrix.autotest.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.matrix.entity.TestCaseCollectionGrouping;
import org.matrix.exception.GlobalException;
import org.matrix.service.ITestCaseCollectionGroupingService;
import org.matrix.vo.TestCaseCollectionGroupingVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.Optional;
/**
* @author mruny
* @create 2022/8/12 10:59:03
*/
@CrossOrigin
@RestController
@RequestMapping("/testCaseCollectionGroupings")
@Api(tags = "对测试用例集分组TestCaseCollectionGrouping的基本操作")
public class TestCaseCollectionGroupingController {
@Autowired
private ITestCaseCollectionGroupingService service;
@PostMapping
@ApiOperation("添加测试用例集分组")
public ResponseEntity<TestCaseCollectionGrouping> insert(@RequestBody TestCaseCollectionGrouping testCaseCollectionGrouping) {
return Optional.of(service.save(testCaseCollectionGrouping)).orElseThrow(() -> new GlobalException("添加失败"))
? ResponseEntity.ok(testCaseCollectionGrouping)
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(testCaseCollectionGrouping);
}
@PutMapping
@ApiOperation("修改测试用例集分组")
public ResponseEntity<TestCaseCollectionGrouping> update(@RequestBody TestCaseCollectionGrouping testCaseCollectionGrouping) {
return Optional.of(service.updateById(testCaseCollectionGrouping)).orElseThrow(() -> new GlobalException("添加失败"))
? ResponseEntity.ok(testCaseCollectionGrouping)
: ResponseEntity.status(HttpStatus.BAD_REQUEST).body(testCaseCollectionGrouping);
}
@GetMapping
@ApiOperation("查询所有分组")
public ResponseEntity<TestCaseCollectionGroupingVo> find(@RequestParam Long projectId) {
TestCaseCollectionGroupingVo result = service.findAll(projectId);
return ResponseEntity.ok(result);
}
@Transactional(rollbackFor = Exception.class)
@DeleteMapping("/{id}")
@ApiOperation("根据分组主键id删除分组,以及分组下的所有分组")
public ResponseEntity<String> remove(@PathVariable Long id) {
service.delete(id);
return ResponseEntity.ok(String.format("删除的测试用例集分组id为%s", id));
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论