diff --git a/src/main/java/com/steadon/saber/biz/IGroupBiz.java b/src/main/java/com/steadon/saber/biz/IGroupBiz.java index 1d6d4062df45fae197b5dc978ab0bdcd9ad2ec91..23230d10afa5912b3f0030fb28ac080a487d23c5 100644 --- a/src/main/java/com/steadon/saber/biz/IGroupBiz.java +++ b/src/main/java/com/steadon/saber/biz/IGroupBiz.java @@ -12,4 +12,6 @@ public interface IGroupBiz { SaberResponse<PageData<Group>> searchGroup(GroupSearchRequest request, Integer pageNo, Integer pageSize); SaberResponse<String> updateGroup(Integer gid, GroupRequest request); + + SaberResponse<String> deleteGroup(Integer gid); } diff --git a/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java b/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java index 140f7ebab7e267c9772d20f1a396398e7890dac8..e7dedf2c167ebff686028c0bc45bed5324d9d3bf 100644 --- a/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java +++ b/src/main/java/com/steadon/saber/biz/impl/GroupBiz.java @@ -3,6 +3,7 @@ package com.steadon.saber.biz.impl; import com.steadon.saber.biz.IGroupBiz; import com.steadon.saber.pojo.SaberResponse; import com.steadon.saber.pojo.domain.Group; +import com.steadon.saber.pojo.domain.GroupUserMerge; import com.steadon.saber.pojo.model.GroupRequest; import com.steadon.saber.pojo.model.GroupSearchRequest; import com.steadon.saber.pojo.model.pageData.PageData; @@ -38,4 +39,16 @@ public class GroupBiz implements IGroupBiz { userGroupService.updateGroup(group); return SaberResponse.success(); } + + @Override + public SaberResponse<String> deleteGroup(Integer gid) { + Group group = new Group(); + group.setId(gid); + group.updateStatus(); + GroupUserMerge groupUserMerge = new GroupUserMerge(); + groupUserMerge.updateStatus(); + + userGroupService.softDeleteGroup(group, groupUserMerge); + return SaberResponse.success(); + } } diff --git a/src/main/java/com/steadon/saber/controller/GroupController.java b/src/main/java/com/steadon/saber/controller/GroupController.java index b79dd68612fed8c6fa5efc517bc2926ce01d1ae8..0e8d3c6eafd605932c877f39dbfdbacb30d7c3b4 100644 --- a/src/main/java/com/steadon/saber/controller/GroupController.java +++ b/src/main/java/com/steadon/saber/controller/GroupController.java @@ -23,7 +23,7 @@ public class GroupController { return iGroupBiz.getGroupBatch(pageNo, pageSize); } - @GetMapping("/group/search") + @PostMapping("/group/search") public SaberResponse<PageData<Group>> searchGroup(@Validated @RequestBody GroupSearchRequest request, @RequestParam(value = "page_no", required = false, defaultValue = "1") Integer pageNo, @RequestParam(value = "page_size", required = false, defaultValue = "10") Integer pageSize){ @@ -34,4 +34,9 @@ public class GroupController { @Validated @RequestBody GroupRequest request){ return iGroupBiz.updateGroup(gid, request); } + + @PostMapping("/group/delete") + public SaberResponse<String> deleteGroup(@RequestParam(value = "gid") Integer gid){ + return iGroupBiz.deleteGroup(gid); + } } diff --git a/src/main/java/com/steadon/saber/service/UserGroupService.java b/src/main/java/com/steadon/saber/service/UserGroupService.java index 13b17e00854c276a158de7615ed6b908d83f8665..37fb391596dab3270280373a76e8d8edfe8f1b97 100644 --- a/src/main/java/com/steadon/saber/service/UserGroupService.java +++ b/src/main/java/com/steadon/saber/service/UserGroupService.java @@ -1,8 +1,8 @@ package com.steadon.saber.service; import com.steadon.saber.pojo.domain.Group; +import com.steadon.saber.pojo.domain.GroupUserMerge; import com.steadon.saber.pojo.domain.UserInfo; -import com.steadon.saber.pojo.model.GroupSearchRequest; import com.steadon.saber.pojo.model.UserInfoRequest; import com.steadon.saber.pojo.model.pageData.PageData; @@ -24,4 +24,6 @@ public interface UserGroupService { PageData<Group> searchGroup(String keyword, Integer pageNo, Integer pageSize); void updateGroup(Group group); + + void softDeleteGroup(Group group, GroupUserMerge groupUserMerge); } \ No newline at end of file diff --git a/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java b/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java index 463ed9d6a169bfc26272e5da32e19725d3564ff5..ba17d93ba13022e8f83eadc9d1e46688cc38a819 100644 --- a/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java +++ b/src/main/java/com/steadon/saber/service/impl/UserGroupServiceImpl.java @@ -1,6 +1,7 @@ package com.steadon.saber.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.steadon.saber.mapper.GroupMapper; @@ -96,6 +97,19 @@ public class UserGroupServiceImpl implements UserGroupService { } } + @Override + @Retryable(retryFor = OptimisticLockingFailureException.class) + @Transactional(noRollbackFor = OptimisticLockingFailureException.class) + public void softDeleteGroup(Group group, GroupUserMerge groupUserMerge) { + int updateCount = groupUserMergeMapper.update(groupUserMerge, new UpdateWrapper<GroupUserMerge>().eq("group_id", group.getId())); + if (groupUserMergeMapper.delete(new UpdateWrapper<GroupUserMerge>().eq("group_id", group.getId())) != updateCount){ + throw new OptimisticLockingFailureException("Optimistic locking failed"); + } + if (groupMapper.deleteById(group) == 0){ + throw new OptimisticLockingFailureException("Optimistic locking failed"); + } + } + @Override @Retryable(retryFor = OptimisticLockingFailureException.class) @Transactional(noRollbackFor = OptimisticLockingFailureException.class)