From 90eba91756eb32376c6e33407e660a71fa573738 Mon Sep 17 00:00:00 2001 From: huangrh Date: Mon, 16 Mar 2026 14:01:06 +0800 Subject: [PATCH] Align report list API with frontend --- interface-checklist.md | 2 +- .../task/controller/TaskController.java | 5 +- .../modules/task/service/TaskService.java | 54 +++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/interface-checklist.md b/interface-checklist.md index d1c57fe..7ed6b50 100644 --- a/interface-checklist.md +++ b/interface-checklist.md @@ -10,7 +10,7 @@ | 4 | GET | `/api/sys/institutions` | 机构列表 | `src/api/user.js` | ✅ 已核对 | 返回 `id/name/cmaNumber` 列表,前端可直接使用 | | 5 | POST | `/api/auditor/switch-institution` | 切换机构 | `src/api/user.js` | ✅ 已核对 | 后端存在并接收 `{ institutionId }` | | 6 | GET | `/api/statistics` | 报告统计 | `src/api/report.js` | ✅ 已修正 | 新增接口并返回 `{待审核报告, 已通过报告, 驳回报告, 本月审核量}` | -| 7 | GET | `/api/reports` | 报告列表 | `src/api/report.js` | | | +| 7 | GET | `/api/reports` | 报告列表 | `src/api/report.js` | ✅ 已修正 | 支持 `status` 过滤并返回前端表格字段(含 `approval_id`、`报告编号`、`检测机构`、`提交时间`、`状态`) | | 8 | GET | `/api/reports/{id}` | 报告详情 | `src/api/report.js` | | | | 9 | GET | `/api/reports/{id}/preview` | 报告预览(图片/历史) | `src/api/report.js` | | | | 10 | POST | `/api/tasks` | 创建识别任务 | `src/api/report.js` | | | diff --git a/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/controller/TaskController.java b/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/controller/TaskController.java index c1b036e..7cbbc51 100644 --- a/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/controller/TaskController.java +++ b/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/controller/TaskController.java @@ -133,10 +133,11 @@ public class TaskController { @GetMapping("/reports") @SaCheckRole(value = { "ADMIN", "AUDITOR", "USER" }, mode = SaMode.OR) - public ResponseEntity getReports() { + public ResponseEntity getReports(@RequestParam(value = "status", required = false) String status) { + var tasks = taskService.getTasksByStatus(status); Map resp = new HashMap<>(); resp.put("code", 0); - resp.put("data", taskService.getAllTasks()); + resp.put("data", tasks.stream().map(taskService::toReportListItem).toList()); resp.put("msg", "Success"); return ResponseEntity.ok(resp); } diff --git a/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/service/TaskService.java b/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/service/TaskService.java index b9c4c1e..8be4074 100644 --- a/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/service/TaskService.java +++ b/src/main/java/com/chinaweal/youfool/reportdetect/modules/task/service/TaskService.java @@ -36,7 +36,9 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; @Service @Slf4j @@ -343,6 +345,58 @@ public class TaskService { } } + public List getTasksByStatus(String statusParam) { + List tasks = getAllTasks(); + if (statusParam == null || statusParam.isBlank()) { + return tasks; + } + Set internalStatuses = mapStatusFilter(statusParam); + if (internalStatuses == null || internalStatuses.isEmpty()) { + return tasks; + } + return tasks.stream() + .filter(t -> internalStatuses.contains(t.getStatus())) + .collect(Collectors.toList()); + } + + public Map toReportListItem(Task task) { + Map row = new HashMap<>(); + row.put("approval_id", task.getApprovalId()); + row.put("报告编号", task.getReportId()); + row.put("检测机构", task.getInstitution()); + row.put("提交时间", task.getSubmitTime()); + row.put("状态", mapStatusForList(task.getStatus())); + row.put("product_name", task.getProductName()); + row.put("report_type", task.getReportType()); + return row; + } + + private Set mapStatusFilter(String statusParam) { + String status = statusParam.trim(); + return switch (status) { + case "0" -> Set.of("ocr_pending"); + case "1" -> Set.of("pending"); + case "2" -> Set.of("compliant"); + case "3" -> Set.of("non-compliant"); + case "audited" -> Set.of("compliant", "non-compliant"); + default -> null; + }; + } + + private String mapStatusForList(String internalStatus) { + if (internalStatus == null) { + return ""; + } + return switch (internalStatus) { + case "ocr_pending" -> "0"; + case "ocr_completed" -> "1"; + case "pending" -> "1"; + case "compliant" -> "2"; + case "non-compliant" -> "3"; + default -> internalStatus; + }; + } + public Map getStatistics() { List pendingStatuses = List.of("pending", "ocr_completed"); List auditedStatuses = List.of("compliant", "non-compliant");