whh
4 months ago
7 changed files with 242 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||
package com.haihang.controller; |
|||
|
|||
|
|||
import com.haihang.entity.Case; |
|||
import com.haihang.service.CaseService; |
|||
import com.haihang.utils.Result; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
@RestController |
|||
@RequestMapping("/case") |
|||
public class CaseController { |
|||
//用例相关接口
|
|||
|
|||
@Autowired |
|||
private CaseService caseService; |
|||
|
|||
@PostMapping("/add") |
|||
public Result add(@RequestBody Case _case){ |
|||
|
|||
return caseService.add(_case); |
|||
} |
|||
|
|||
|
|||
@DeleteMapping("/{id}") |
|||
public Result delete(@PathVariable int id){ |
|||
//根据id删除用例,删除一个用例他的子用例会一并全部删除
|
|||
return caseService.deleteWithSonById(id); |
|||
} |
|||
|
|||
@PutMapping("update") |
|||
public Result update(@RequestBody Case _case){ |
|||
//修改用例,只能修改用例名字和用例描述
|
|||
return caseService.update(_case); |
|||
} |
|||
|
|||
@GetMapping("/{id}") |
|||
public Result get(@PathVariable int id){ |
|||
//根据id查询用例信息接口
|
|||
return caseService.getById(id); |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,24 @@ |
|||
package com.haihang.entity; |
|||
|
|||
import lombok.Data; |
|||
import org.apache.ibatis.annotations.Insert; |
|||
|
|||
import java.util.Date; |
|||
|
|||
//用例信息,与数据库完全相同
|
|||
@Data |
|||
public class Case { |
|||
|
|||
private int id; |
|||
private String caseName; |
|||
private int parentId; |
|||
private int isLeaf; |
|||
private int createUser; |
|||
private int updateUser; |
|||
private Date createTime; |
|||
private Date updateTime; |
|||
private String caseDesc;//用例描述
|
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.haihang.mapper; |
|||
|
|||
import com.haihang.entity.Case; |
|||
import org.apache.ibatis.annotations.*; |
|||
|
|||
import java.util.List; |
|||
|
|||
@Mapper |
|||
public interface CaseMapper { |
|||
|
|||
@Select("select * from case_table where id = #{parentId}") |
|||
Case selectById(int parentId); |
|||
|
|||
@Insert("INSERT INTO `case_table`\n" + |
|||
"(id, case_name, parent_id, is_leaf, create_user, update_user, create_time, update_time, case_desc)\n" + |
|||
"VALUES(null, #{caseName}, #{parentId}, 1, #{createUser}, #{updateUser}, #{createTime}, #{updateTime}, #{caseDesc});") |
|||
void insert(Case aCase); |
|||
|
|||
@Update("update case_table set is_leaf = #{isLeaf},case_name = #{caseName},parent_id = #{parentId}" + |
|||
", update_user = #{updateUser},update_time = null ,case_desc=#{caseDesc} " + |
|||
"where id = #{id}") |
|||
void update(Case parentCase); |
|||
|
|||
|
|||
@Delete("delete from case_table where id = #{id}") |
|||
void deleteById(int id); |
|||
|
|||
@Select("select id from case_table where parent_id =#{id}") |
|||
List<Integer> selectByParentId(int id); |
|||
|
|||
@Update("update case_table set is_leaf = #{i} where id =#{parentId}") |
|||
void updateIsLeaf(int i, int parentId); |
|||
} |
@ -0,0 +1,16 @@ |
|||
package com.haihang.service; |
|||
|
|||
import com.haihang.entity.Case; |
|||
import com.haihang.utils.Result; |
|||
|
|||
public interface CaseService { |
|||
|
|||
|
|||
Result add(Case aCase); |
|||
|
|||
Result deleteWithSonById(int id); |
|||
|
|||
Result update(Case aCase); |
|||
|
|||
Result getById(int id); |
|||
} |
@ -0,0 +1,98 @@ |
|||
package com.haihang.service.impl; |
|||
|
|||
import com.haihang.entity.Case; |
|||
import com.haihang.mapper.CaseMapper; |
|||
import com.haihang.service.CaseService; |
|||
import com.haihang.utils.Result; |
|||
import com.haihang.utils.UserHolder; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
@Service |
|||
public class CaseServiceImpl implements CaseService { |
|||
|
|||
|
|||
@Autowired |
|||
private CaseMapper caseMapper; |
|||
|
|||
|
|||
//新增用例
|
|||
@Override |
|||
public Result add(Case aCase) { |
|||
aCase.setCreateTime(new Date()); |
|||
aCase.setUpdateTime(new Date()); |
|||
|
|||
//判断传进来的用例父节点id,查询他是不是叶子节点,如果不是叶子节点则不能新增用例
|
|||
int parentId = aCase.getParentId(); |
|||
if(parentId == 0){ |
|||
//如果父节点为空,说明还没建立树,可以直接插入
|
|||
caseMapper.insert(aCase); |
|||
|
|||
return Result.ok(); |
|||
} |
|||
Case parentCase = caseMapper.selectById(parentId); |
|||
int isLeaf = parentCase.getIsLeaf(); |
|||
if(isLeaf!=1){ |
|||
return Result.fail("该用例不能添加!原因:父节点并非叶子节点"); |
|||
} |
|||
aCase.setCreateUser(UserHolder.getUser().getId()); |
|||
aCase.setUpdateUser(UserHolder.getUser().getId()); |
|||
|
|||
caseMapper.insert(aCase); |
|||
//插入完成要把父亲的isleaf修改掉.
|
|||
parentCase.setIsLeaf(0); |
|||
caseMapper.update(parentCase); |
|||
return Result.ok(); |
|||
} |
|||
|
|||
@Override |
|||
public Result deleteWithSonById(int id) { |
|||
//先根据id查询
|
|||
Case aCase = caseMapper.selectById(id); |
|||
if(aCase==null){ |
|||
return Result.ok(); |
|||
} |
|||
//根据当前id查询父节点为id的id列表,找他的儿子们
|
|||
List<Integer> ids= caseMapper.selectByParentId(id); |
|||
|
|||
//删他的儿子们
|
|||
for(Integer sonId:ids){ |
|||
deleteWithSonById(sonId); |
|||
} |
|||
|
|||
//在删除自己之前顺便记录parentId
|
|||
int parentId = aCase.getParentId(); |
|||
|
|||
//有值则删除自己
|
|||
caseMapper.deleteById(id); |
|||
|
|||
//根据他爹id判断他爹isleaf
|
|||
List<Integer> brotherId= caseMapper.selectByParentId(parentId); |
|||
if(brotherId == null || brotherId.isEmpty()){ |
|||
caseMapper.updateIsLeaf(1,parentId); |
|||
} |
|||
return Result.ok(); |
|||
} |
|||
|
|||
@Override |
|||
public Result update(Case aCase) { |
|||
Case dbCase = caseMapper.selectById(aCase.getId()); |
|||
dbCase.setCaseName(aCase.getCaseName()); |
|||
dbCase.setCaseDesc(aCase.getCaseDesc()); |
|||
dbCase.setUpdateUser(UserHolder.getUser().getId()); |
|||
dbCase.setUpdateTime(new Date()); |
|||
caseMapper.update(dbCase); |
|||
return Result.ok(); |
|||
} |
|||
|
|||
@Override |
|||
public Result getById(int id) { |
|||
Case aCase = caseMapper.selectById(id); |
|||
return Result.ok(aCase); |
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,20 @@ |
|||
package com.haihang.utils; |
|||
|
|||
import com.haihang.entity.UserDTO; |
|||
import com.haihang.entity.UserInfo; |
|||
|
|||
public class UserHolder { |
|||
private static final ThreadLocal<UserInfo> tl = new ThreadLocal<>(); |
|||
|
|||
public static void saveUser(UserInfo user){ |
|||
tl.set(user); |
|||
} |
|||
|
|||
public static UserInfo getUser(){ |
|||
return tl.get(); |
|||
} |
|||
|
|||
public static void removeUser(){ |
|||
tl.remove(); |
|||
} |
|||
} |
Loading…
Reference in new issue