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