blob: 92f50eda8c6298be413e92128ee9d8c1597b2131 [file] [log] [blame]
223011385e9c35a2025-06-04 15:52:45 +08001package com.example.myproject.service;
2
3import com.example.myproject.entity.ExperienceHistory;
4import com.example.myproject.entity.Users;
5import com.example.myproject.entity.Level;
6import com.example.myproject.repository.ExperienceHistoryRepository;
7import com.example.myproject.repository.UserRepository;
8import com.example.myproject.repository.LevelRepository;
9import org.springframework.beans.factory.annotation.Autowired;
10import org.springframework.stereotype.Service;
11
12
13import java.util.Date;
14import java.util.LinkedHashMap;
15import java.util.Map;
16import java.util.HashMap;
17
18@Service
19public class LevelService {
20
21 @Autowired
22 private UserRepository userRepository;
23
24 @Autowired
25 private LevelRepository levelRepository;
26
27 @Autowired
28 private ExperienceHistoryRepository experienceHistoryRepository;
29
30
31 public Map<String, Object> getUserExperience(Long userId) {
32 // 获取用户信息
33 Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("User not found"));
34
35 // 获取当前等级
36 Level currentLevel = levelRepository.findById(user.getLevel()).orElseThrow(() -> new RuntimeException("Level not found"));
37
38 // 获取下一个等级的经验需求
39 Level nextLevel = levelRepository.findById(currentLevel.getLevelId() + 1).orElse(null);
40
41 // 构建响应数据
42 Map<String, Object> response = new HashMap<>();
43 response.put("current_experience", user.getCurrentExperience());
44 response.put("level", currentLevel.getLevelName());
45 response.put("next_level_experience", nextLevel != null ? nextLevel.getRequiredExperience() : 0);
46
47 return response;
48 }
49
50 public Map<String, Object> updateExperience(Long userId, Integer experience, String source) {
51 // 获取用户信息
52 Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("用户不存在"));
53
54 // 更新用户的经验值
55 user.setCurrentExperience(user.getCurrentExperience() + experience);
56
57 // 保存更新后的用户信息
58 userRepository.save(user);
59
60 // 创建经验更新历史记录
61 ExperienceHistory experienceHistory = new ExperienceHistory();
62 experienceHistory.setUserId(userId);
63 experienceHistory.setExperienceChange(experience);
64 experienceHistory.setSource(source);
65 experienceHistory.setUpdateTime(new Date());
66
67 // 保存更新历史
68 experienceHistoryRepository.save(experienceHistory);
69
70 // 返回更新后的经验值和消息
71 Map<String, Object> response = new LinkedHashMap<>();
72 response.put("status", "success");
73 response.put("message", "经验更新成功");
74 response.put("current_experience", user.getCurrentExperience()); // 返回更新后的经验值
75
76 return response;
77 }
78
79 public Map<String, Object> checkUpgrade(Long userId) {
80 // 获取用户信息
81 Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("用户不存在"));
82
83 // 获取当前等级
84 Level currentLevel = levelRepository.findById(user.getLevel())
85 .orElseThrow(() -> new RuntimeException("用户等级信息不存在"));
86
87 // 获取下一个等级的经验需求
88 Level nextLevel = levelRepository.findById(currentLevel.getLevelId() + 1).orElse(null);
89
90 // 构建响应数据
91 Map<String, Object> response = new LinkedHashMap<>();
92
93 // 判断用户是否可以升级
94 boolean canUpgrade = user.getCurrentExperience() >= (nextLevel != null ? nextLevel.getRequiredExperience() : 0);
95 response.put("can_upgrade", canUpgrade);
96 // 构建响应数据
97
98 response.put("next_level_experience", nextLevel != null ? nextLevel.getRequiredExperience() : 0);
99 response.put("current_experience", user.getCurrentExperience());
100
101
102 return response;
103 }
104
105 public Map<String, Object> upgradeUserLevel(Long userId, Boolean canUpgrade) {
106 // 获取用户信息
107 Users user = userRepository.findById(userId).orElseThrow(() -> new RuntimeException("User not found"));
108
109 // 创建响应对象
110 Map<String, Object> response = new HashMap<>();
111
112 if (canUpgrade) {
113 // 获取当前等级
114 Level currentLevel = levelRepository.findById(user.getLevel())
115 .orElseThrow(() -> new RuntimeException("Level not found"));
116
117 // 获取下一个等级的经验需求
118 Level nextLevel = levelRepository.findById(currentLevel.getLevelId() + 1).orElse(null);
119
120 if (nextLevel != null) {
121 user.setLevel(user.getLevel() + 1);
122 userRepository.save(user);
123 Level newLevel = levelRepository.findById(user.getLevel())
124 .orElseThrow(() -> new RuntimeException("Level not found"));
125 response.put("message", "升级成功");
126 response.put("status", "success");
127 response.put("new_level", newLevel.getLevelName());
128 } else {
129 response.put("message", "用户已达到最高等级");
130 response.put("status", "error");
131 }
132 } else {
133 response.put("message", "用户不满足升级条件");
134 response.put("status", "error");
135 }
136
137 return response;
138 }
139
140}