diff --git a/src/main/java/com/example/g8backend/controller/AdminController.java b/src/main/java/com/example/g8backend/controller/AdminController.java
index d8e4314..394e445 100644
--- a/src/main/java/com/example/g8backend/controller/AdminController.java
+++ b/src/main/java/com/example/g8backend/controller/AdminController.java
@@ -38,7 +38,7 @@
             @PathVariable Long reportId,
             @RequestParam String status,
             @RequestParam(required = false) String notes) {
-        Long adminId = (Long) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        Long adminId = (Long) SecurityContextHolder.getContext().getAuthentication().getPrincipal();//这里之前不太对，service改了
         reportService.resolveReport(reportId, adminId, status, notes);
         return ApiResponse.success("举报处理完成");
     }
diff --git a/src/main/java/com/example/g8backend/controller/UserController.java b/src/main/java/com/example/g8backend/controller/UserController.java
index 8019967..f9d0de4 100644
--- a/src/main/java/com/example/g8backend/controller/UserController.java
+++ b/src/main/java/com/example/g8backend/controller/UserController.java
@@ -3,13 +3,16 @@
 import com.example.g8backend.dto.ApiResponse;
 import com.example.g8backend.entity.Message;
 import com.example.g8backend.entity.User;
+import com.example.g8backend.entity.UserSignin;
 import com.example.g8backend.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.*;
 import com.example.g8backend.service.ISigningService;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -96,9 +99,20 @@
     private ISigningService signingService; // 修改接口名称
 
     @PostMapping("/signin")
-    public String signIn() {
-        Long userId = getCurrentUserId(); // 假设从安全上下文中获取用户ID
+    public ApiResponse<String> signIn() { // 修改返回类型为 ApiResponse
+        Long userId = getCurrentUserId();
         boolean success = signingService.signIn(userId);
-        return success ? "签到成功" : "今日已签到";
+        String message = success ? "签到成功" : "今日已签到";
+        return ApiResponse.success(message);
+    }
+
+    // 新增获取时间段内的签到记录接口
+    @GetMapping("/signins")
+    public ApiResponse<List<UserSignin>> getSignins(
+            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
+            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {
+        Long userId = getCurrentUserId();
+        List<UserSignin> signins = signingService.getSigninsByDateRange(userId, startDate, endDate);
+        return ApiResponse.success(signins);
     }
 }
diff --git a/src/main/java/com/example/g8backend/service/ISigningService.java b/src/main/java/com/example/g8backend/service/ISigningService.java
index e408e6c..08b1760 100644
--- a/src/main/java/com/example/g8backend/service/ISigningService.java
+++ b/src/main/java/com/example/g8backend/service/ISigningService.java
@@ -1,7 +1,12 @@
 package com.example.g8backend.service;
 
 import com.example.g8backend.dto.ApiResponse;
+import com.example.g8backend.entity.UserSignin;
+
+import java.time.LocalDate;
+import java.util.List;
 
 public interface ISigningService {
     boolean signIn(Long userId);
+    List<UserSignin> getSigninsByDateRange(Long userId, LocalDate startDate, LocalDate endDate);
 }
\ No newline at end of file
diff --git a/src/main/java/com/example/g8backend/service/impl/SigninServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/SigninServiceImpl.java
index 1f70520..429efa8 100644
--- a/src/main/java/com/example/g8backend/service/impl/SigninServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/SigninServiceImpl.java
@@ -10,6 +10,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import java.time.LocalDate;
+import java.util.List;
 
 @Service
 @RequiredArgsConstructor
@@ -49,4 +50,13 @@
         userMapper.updateById(user);
         return true;
     }
+
+    @Override
+    public List<UserSignin> getSigninsByDateRange(Long userId, LocalDate startDate, LocalDate endDate) {
+        QueryWrapper<UserSignin> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId)
+                .between("signin_date", startDate, endDate)
+                .orderByAsc("signin_date");
+        return userSigninMapper.selectList(queryWrapper);
+    }
 }
\ No newline at end of file
