用户
Change-Id: I33150cf6ffdea3bf582023bf540394075d081af9
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;
+ }
+
+}