From f329f504040f3608478c687a99aa36a3cf5720b7 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期六, 03 十月 2026 23:45:04 +0800
Subject: [PATCH] feat(observation): 新增观测站分日调查数据导入与明细查看

---
 traffic-audit-server/src/main/java/com/trafficaudit/observation/controller/ObservationStationController.java |   65 ++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/observation/controller/ObservationStationController.java b/traffic-audit-server/src/main/java/com/trafficaudit/observation/controller/ObservationStationController.java
new file mode 100644
index 0000000..6a77ca5
--- /dev/null
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/observation/controller/ObservationStationController.java
@@ -0,0 +1,65 @@
+package com.trafficaudit.observation.controller;
+
+import com.trafficaudit.common.Result;
+import com.trafficaudit.observation.dto.ObservationDateSummary;
+import com.trafficaudit.observation.entity.ObservationStationFlow;
+import com.trafficaudit.observation.service.ObservationStationImportService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Observation station raw data. Collected and stored only; not linked to holiday flow data.
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/observation")
+public class ObservationStationController {
+
+    @Resource
+    private ObservationStationImportService importService;
+
+    @PostMapping("/import")
+    public Result<Map<String, Object>> importWorkbook(@RequestParam("file") MultipartFile file) {
+        try {
+            return Result.ok(importService.importWorkbook(file));
+        } catch (Exception e) {
+            log.error("observation station import error", e);
+            return Result.error(400, e.getMessage());
+        }
+    }
+
+    @GetMapping("/dates")
+    public Result<List<ObservationDateSummary>> dates() {
+        return Result.ok(importService.listDateSummaries());
+    }
+
+    @GetMapping("/rows")
+    public Result<List<ObservationStationFlow>> rows(@RequestParam(value = "date", required = false) String date,
+                                                      @RequestParam(value = "limit", defaultValue = "2000") int limit) {
+        try {
+            LocalDate target = (date == null || date.trim().isEmpty()) ? null : LocalDate.parse(date);
+            return Result.ok(importService.listRows(target, limit));
+        } catch (Exception e) {
+            return Result.error(400, e.getMessage());
+        }
+    }
+
+    @PostMapping("/delete")
+    public Result<Integer> delete(@RequestParam("date") String date) {
+        try {
+            return Result.ok(importService.deleteDate(LocalDate.parse(date)));
+        } catch (Exception e) {
+            return Result.error(400, e.getMessage());
+        }
+    }
+}

--
Gitblit v1.9.1