用户,社交接口

Change-Id: I10d13773cbe4bbcf3b69a2038cdf7aa9ba54b6df
diff --git a/src/main/java/com/example/myproject/service/LevelService.java b/src/main/java/com/example/myproject/service/LevelService.java
new file mode 100644
index 0000000..92f50ed
--- /dev/null
+++ b/src/main/java/com/example/myproject/service/LevelService.java
@@ -0,0 +1,140 @@
+package com.example.myproject.service;
+
+import com.example.myproject.entity.ExperienceHistory;
+import com.example.myproject.entity.Users;
+import com.example.myproject.entity.Level;
+import com.example.myproject.repository.ExperienceHistoryRepository;
+import com.example.myproject.repository.UserRepository;
+import com.example.myproject.repository.LevelRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.HashMap;
+
+@Service
+public class LevelService {
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private LevelRepository levelRepository;
+
+    @Autowired
+    private ExperienceHistoryRepository experienceHistoryRepository;
+
+
+    public Map<String, Object> getUserExperience(Long userId) {
+        // 获取用户信息
+        Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("User not found"));
+
+        // 获取当前等级
+        Level currentLevel = levelRepository.findById(user.getLevel()).orElseThrow(() -> new RuntimeException("Level not found"));
+
+        // 获取下一个等级的经验需求
+        Level nextLevel = levelRepository.findById(currentLevel.getLevelId() + 1).orElse(null);
+
+        // 构建响应数据
+        Map<String, Object> response = new HashMap<>();
+        response.put("current_experience", user.getCurrentExperience());
+        response.put("level", currentLevel.getLevelName());
+        response.put("next_level_experience", nextLevel != null ? nextLevel.getRequiredExperience() : 0);
+
+        return response;
+    }
+
+    public Map<String, Object> updateExperience(Long userId, Integer experience, String source) {
+        // 获取用户信息
+        Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("用户不存在"));
+
+        // 更新用户的经验值
+        user.setCurrentExperience(user.getCurrentExperience() + experience);
+
+        // 保存更新后的用户信息
+        userRepository.save(user);
+
+        // 创建经验更新历史记录
+        ExperienceHistory experienceHistory = new ExperienceHistory();
+        experienceHistory.setUserId(userId);
+        experienceHistory.setExperienceChange(experience);
+        experienceHistory.setSource(source);
+        experienceHistory.setUpdateTime(new Date());
+
+        // 保存更新历史
+        experienceHistoryRepository.save(experienceHistory);
+
+        // 返回更新后的经验值和消息
+        Map<String, Object> response = new LinkedHashMap<>();
+        response.put("status", "success");
+        response.put("message", "经验更新成功");
+        response.put("current_experience", user.getCurrentExperience());  // 返回更新后的经验值
+
+        return response;
+    }
+
+    public Map<String, Object> checkUpgrade(Long userId) {
+        // 获取用户信息
+        Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("用户不存在"));
+
+        // 获取当前等级
+        Level currentLevel = levelRepository.findById(user.getLevel())
+                .orElseThrow(() -> new RuntimeException("用户等级信息不存在"));
+
+        // 获取下一个等级的经验需求
+        Level nextLevel = levelRepository.findById(currentLevel.getLevelId() + 1).orElse(null);
+
+        // 构建响应数据
+        Map<String, Object> response = new LinkedHashMap<>();
+
+        // 判断用户是否可以升级
+        boolean canUpgrade = user.getCurrentExperience() >= (nextLevel != null ? nextLevel.getRequiredExperience() : 0);
+        response.put("can_upgrade", canUpgrade);
+        // 构建响应数据
+
+        response.put("next_level_experience", nextLevel != null ? nextLevel.getRequiredExperience() : 0);
+        response.put("current_experience", user.getCurrentExperience());
+
+
+        return response;
+    }
+
+    public Map<String, Object> upgradeUserLevel(Long userId, Boolean canUpgrade) {
+        // 获取用户信息
+        Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("User not found"));
+
+        // 创建响应对象
+        Map<String, Object> response = new HashMap<>();
+
+        if (canUpgrade) {
+            // 获取当前等级
+            Level currentLevel = levelRepository.findById(user.getLevel())
+                    .orElseThrow(() -> new RuntimeException("Level not found"));
+
+            // 获取下一个等级的经验需求
+            Level nextLevel = levelRepository.findById(currentLevel.getLevelId() + 1).orElse(null);
+
+            if (nextLevel != null) {
+                user.setLevel(user.getLevel() + 1);
+                userRepository.save(user);
+                Level newLevel = levelRepository.findById(user.getLevel())
+                        .orElseThrow(() -> new RuntimeException("Level not found"));
+                response.put("message", "升级成功");
+                response.put("status", "success");
+                response.put("new_level", newLevel.getLevelName());
+            } else {
+                response.put("message", "用户已达到最高等级");
+                response.put("status", "error");
+            }
+        } else {
+            response.put("message", "用户不满足升级条件");
+            response.put("status", "error");
+        }
+
+        return response;
+    }
+
+}