From 47b96c39371c583194ff1a1235536962f2c8f341 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Wed, 1 Jul 2026 09:27:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20access-result=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E6=B8=85=E7=90=86=E5=AD=98=E5=82=A8=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../par/api/controller/AccessResultController.java | 13 +++++++++++++ .../com/par/api/controller/AdapterController.java | 4 +++- .../com/par/core/service/AccessResultService.java | 5 +++++ .../core/service/impl/AccessResultServiceImpl.java | 10 ++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/par-api/src/main/java/com/par/api/controller/AccessResultController.java b/par-api/src/main/java/com/par/api/controller/AccessResultController.java index 1f767f3..97063e8 100644 --- a/par-api/src/main/java/com/par/api/controller/AccessResultController.java +++ b/par-api/src/main/java/com/par/api/controller/AccessResultController.java @@ -136,4 +136,17 @@ public class AccessResultController { int affected = accessResultService.batchValidateUrl(siteId, url, isValid); return ApiResponse.success(Map.of("affected", affected)); } + + /** + * 删除访问结果(含存储文件) + */ + @DeleteMapping("/api/v1/admin/access-results/{id}") + public ApiResponse delete(@PathVariable("id") Long id) { + try { + accessResultService.delete(id); + return ApiResponse.success(); + } catch (IllegalArgumentException e) { + return ApiResponse.error(404, e.getMessage()); + } + } } diff --git a/par-api/src/main/java/com/par/api/controller/AdapterController.java b/par-api/src/main/java/com/par/api/controller/AdapterController.java index 10e6beb..9f877b0 100644 --- a/par-api/src/main/java/com/par/api/controller/AdapterController.java +++ b/par-api/src/main/java/com/par/api/controller/AdapterController.java @@ -103,7 +103,7 @@ public class AdapterController { try { adapterConfig = objectMapper.readValue(configJson, AdapterConfig.class); } catch (Exception e) { return ApiResponse.error(400, "配置格式无效: " + e.getMessage()); } - // 获取该站点所有结果,按URL分组取最新(过滤无URL的旧数据) + // 获取该站点所有结果,按URL分组取最新 List allResults = accessResultMapper.selectBySiteId(siteId); Map latestByUrl = allResults.stream() .filter(r -> r.getUrl() != null && !r.getUrl().isBlank()) @@ -112,6 +112,8 @@ public class AdapterController { r -> r, (a, b) -> a.getCreatedAt().isAfter(b.getCreatedAt()) ? a : b)); + int skippedNoUrl = (int) allResults.stream().filter(r -> r.getUrl() == null || r.getUrl().isBlank()).count(); + // 批量解析 Map response = new LinkedHashMap<>(); response.put("configId", configId); diff --git a/par-core/src/main/java/com/par/core/service/AccessResultService.java b/par-core/src/main/java/com/par/core/service/AccessResultService.java index cbd69f9..412a683 100644 --- a/par-core/src/main/java/com/par/core/service/AccessResultService.java +++ b/par-core/src/main/java/com/par/core/service/AccessResultService.java @@ -43,6 +43,11 @@ public interface AccessResultService { */ List listSiteSummaries(); + /** + * 删除访问结果(含存储文件) + */ + void delete(Long id); + /** * 批量标记站点某个URL的所有未验证结果为有效/无效 */ diff --git a/par-core/src/main/java/com/par/core/service/impl/AccessResultServiceImpl.java b/par-core/src/main/java/com/par/core/service/impl/AccessResultServiceImpl.java index 651989e..cab4873 100644 --- a/par-core/src/main/java/com/par/core/service/impl/AccessResultServiceImpl.java +++ b/par-core/src/main/java/com/par/core/service/impl/AccessResultServiceImpl.java @@ -191,6 +191,16 @@ public class AccessResultServiceImpl implements AccessResultService { return new ArrayList<>(siteMap.values()); } + @Override + public void delete(Long id) { + AccessResult result = mapper.selectById(id); + if (result == null) throw new IllegalArgumentException("访问结果不存在: " + id); + // 删除存储文件 + try { storageService.delete(result.getStoragePath()); } catch (Exception ignored) {} + mapper.deleteById(id); + log.info("Access result deleted: id={}, siteId={}", id, result.getSiteId()); + } + @Override public int batchValidateUrl(String siteId, String url, Boolean isValid) { int affected = mapper.batchValidateUrl(siteId, url, isValid);