blob: 92f50eda8c6298be413e92128ee9d8c1597b2131 [file] [log] [blame]
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;
}
}