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)