signin+userlevelsystem

Change-Id: I4d2b2660b23521817ae2ed6a55c6c322a20385ec
diff --git a/src/main/java/com/example/g8backend/service/ISigningService.java b/src/main/java/com/example/g8backend/service/ISigningService.java
new file mode 100644
index 0000000..e408e6c
--- /dev/null
+++ b/src/main/java/com/example/g8backend/service/ISigningService.java
@@ -0,0 +1,7 @@
+package com.example.g8backend.service;
+
+import com.example.g8backend.dto.ApiResponse;
+
+public interface ISigningService {
+    boolean signIn(Long userId);
+}
\ 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
new file mode 100644
index 0000000..1f70520
--- /dev/null
+++ b/src/main/java/com/example/g8backend/service/impl/SigninServiceImpl.java
@@ -0,0 +1,52 @@
+package com.example.g8backend.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.example.g8backend.entity.User;
+import com.example.g8backend.entity.UserSignin;
+import com.example.g8backend.mapper.UserMapper;
+import com.example.g8backend.mapper.UserSigninMapper;
+import com.example.g8backend.service.ISigningService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.time.LocalDate;
+
+@Service
+@RequiredArgsConstructor
+public class SigninServiceImpl implements ISigningService{
+    private final UserMapper userMapper;
+    private final UserSigninMapper userSigninMapper;
+
+    @Override
+    @Transactional
+    public boolean signIn(Long userId) {
+        LocalDate today = LocalDate.now();
+        String todayStr = today.toString();
+
+        // 检查今日是否已签到
+        if (userSigninMapper.existsByUserIdAndDate(userId, todayStr)) {
+            return false; // 已签到
+        }
+
+        // 插入签到记录
+        UserSignin signin = new UserSignin();
+        signin.setUserId(userId);
+        signin.setSigninDate(today);
+        userSigninMapper.insert(signin);
+
+        // 更新用户信息
+        User user = userMapper.selectById(userId);
+        user.setSigninCount(user.getSigninCount() + 1);
+        user.setLastSigninDate(today);
+
+        // 根据签到次数升级等级 默认lv1 三次签到lv2 十次签到lv3
+        if (user.getSigninCount() >= 10) {
+            user.setUserLevel("lv3");
+        } else if (user.getSigninCount() >= 3) {
+            user.setUserLevel("lv2");
+        }
+
+        userMapper.updateById(user);
+        return true;
+    }
+}
\ No newline at end of file