diff --git a/server/server-api/src/main/java/cn/torna/api/open/DocApi.java b/server/server-api/src/main/java/cn/torna/api/open/DocApi.java index e0dd6552472043b71fcc890fee3db43f4b68250d..ac491af3b6180afde4de012d1bf5e8ad3441ec0c 100644 --- a/server/server-api/src/main/java/cn/torna/api/open/DocApi.java +++ b/server/server-api/src/main/java/cn/torna/api/open/DocApi.java @@ -36,6 +36,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; /** * @author tanghc @@ -75,6 +78,9 @@ public class DocApi { String token = context.getToken(); long moduleId = context.getModuleId(); log.info("收到文档推送,appKey:{}, token:{}, moduleId:{}", appKey, token, moduleId); + Set parentIds = param.getApis().parallelStream().map(DocPushItemParam::getParentId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); tornaTransactionManager.execute(() -> { // fix:MySQL多个session下insert on duplicate key update导致死锁问题 // https://blog.csdn.net/li563868273/article/details/105213266/ @@ -86,7 +92,7 @@ public class DocApi { } // 先删除之前的文档 User user = context.getApiUser(); - docInfoService.deleteModuleDocs(moduleId, user.getUserId()); + docInfoService.deleteModuleDocs(moduleId, user.getUserId(), parentIds); for (DocPushItemParam detailPushParam : param.getApis()) { this.pushDocItem(detailPushParam, context); } diff --git a/server/server-service/src/main/java/cn/torna/service/DocInfoService.java b/server/server-service/src/main/java/cn/torna/service/DocInfoService.java index fc93e86d8af55fce8e3e558b9f2b77eb63bfac28..4abec44cfe9038ca91266191360530d505373ba4 100755 --- a/server/server-service/src/main/java/cn/torna/service/DocInfoService.java +++ b/server/server-service/src/main/java/cn/torna/service/DocInfoService.java @@ -29,6 +29,7 @@ import org.springframework.util.CollectionUtils; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -298,14 +299,19 @@ public class DocInfoService extends BaseService { /** * 删除模块下所有文档 - * @param moduleId 模块id - * @param userId 用户id,只能删除自己创建的 + * + * @param moduleId 模块id + * @param userId 用户id,只能删除自己创建的 + * @param parentIds 父级文档id列表 */ - public void deleteModuleDocs(long moduleId, long userId) { + public void deleteModuleDocs(long moduleId, long userId, Set parentIds) { Query query = new Query() .eq("module_id", moduleId) .eq("create_mode", OperationMode.OPEN.getType()) .eq("creator_id", userId); + if (parentIds != null && parentIds.size() > 0) { + query.notIn("id", parentIds); + } this.getMapper().deleteByQuery(query); } } \ No newline at end of file