| 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; |
| } |
| |
| } |