diff --git a/src/main/java/com/pt5/pthouduan/controller/TrafficController.java b/src/main/java/com/pt5/pthouduan/controller/TrafficController.java
new file mode 100644
index 0000000..c07bd91
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/controller/TrafficController.java
@@ -0,0 +1,41 @@
+package com.pt5.pthouduan.controller;
+
+import com.pt5.pthouduan.entity.UserTrafficStat;
+import com.pt5.pthouduan.mapper.UserTrafficMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/traffic")
+public class TrafficController {
+
+    @Autowired
+    private UserTrafficMapper userTrafficMapper;
+
+    /**
+     * 获取指定用户在指定时间范围内的上传和下载量统计
+     * @param passkey 用户唯一标识（passkey）
+     * @param startDate 开始时间（格式：yyyy-MM-dd）
+     * @param endDate 结束时间（格式：yyyy-MM-dd）
+     * @return 该用户的上传和下载量统计
+     */
+    @GetMapping("/user-stats")
+    public ResponseEntity<UserTrafficStat> getUserTrafficStats(
+            @RequestParam String passkey,  // 必须传入 passkey
+            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
+            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {
+
+        // 调用 Mapper 查询数据
+        UserTrafficStat stats = userTrafficMapper.getUserTrafficStats(passkey, startDate, endDate);
+
+        return ResponseEntity.ok(stats);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/UserTrafficStat.java b/src/main/java/com/pt5/pthouduan/entity/UserTrafficStat.java
new file mode 100644
index 0000000..885d6af
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/UserTrafficStat.java
@@ -0,0 +1,37 @@
+package com.pt5.pthouduan.entity;
+
+public class UserTrafficStat {
+    private String month;       // 月份（YYYY-MM）
+    private Long totalUploaded; // 总上传量
+    private Long totalDownloaded; // 总下载量
+
+    // Getters & Setters
+    public String getMonth()
+    {
+        return month;
+    }
+    public void setMonth(String month)
+    {
+        this.month = month;
+    }
+    public Long getTotalUploaded()
+    {
+        return totalUploaded;
+    }
+    public void setTotalUploaded(Long totalUploaded)
+    {
+        this.totalUploaded = totalUploaded;
+    }
+    public Long getTotalDownloaded()
+    {
+        return totalDownloaded;
+    }
+    public void setTotalDownloaded(Long totalDownloaded)
+    {
+        this.totalDownloaded = totalDownloaded;
+    }
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/mapper/UserTrafficMapper.java b/src/main/java/com/pt5/pthouduan/mapper/UserTrafficMapper.java
new file mode 100644
index 0000000..2f82cb9
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/UserTrafficMapper.java
@@ -0,0 +1,23 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.UserTrafficStat;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Mapper
+public interface UserTrafficMapper {
+    /**
+     * 查询指定用户在指定时间范围内的上传和下载量（按月统计）
+     * @param passkey 用户唯一标识
+     * @param startDate 开始时间
+     * @param endDate 结束时间
+     * @return 该用户的月度统计
+     */
+    UserTrafficStat getUserTrafficStats(
+            @Param("passkey") String passkey,
+            @Param("startDate") LocalDate startDate,
+            @Param("endDate") LocalDate endDate);
+}
\ No newline at end of file
