修正消息中心不显示
This commit is contained in:
@@ -18,6 +18,7 @@ import org.xyzh.common.core.event.AchievementEvent;
|
||||
import org.xyzh.common.core.page.PageDomain;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
import org.xyzh.common.dto.user.TbSysUser;
|
||||
import org.xyzh.common.dto.user.TbSysUserInfo;
|
||||
import org.xyzh.common.dto.usercenter.TbAchievement;
|
||||
import org.xyzh.common.dto.usercenter.TbUserAchievement;
|
||||
import org.xyzh.common.dto.usercenter.TbUserAchievementProgress;
|
||||
@@ -26,6 +27,7 @@ import org.xyzh.common.utils.IDUtils;
|
||||
import org.xyzh.common.vo.AchievementVO;
|
||||
import org.xyzh.system.utils.LoginUtil;
|
||||
import org.xyzh.api.system.permission.ResourcePermissionService;
|
||||
import org.xyzh.system.mapper.UserInfoMapper;
|
||||
import org.xyzh.common.vo.UserDeptRoleVO;
|
||||
import org.xyzh.common.core.enums.ResourceType;
|
||||
|
||||
@@ -62,6 +64,9 @@ public class ACHAchievementServiceImpl implements AchievementService {
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Autowired
|
||||
private UserInfoMapper userInfoMapper;
|
||||
|
||||
// ==================== 成就定义管理 ====================
|
||||
|
||||
@@ -551,7 +556,7 @@ public class ACHAchievementServiceImpl implements AchievementService {
|
||||
|
||||
// 检查是否达成
|
||||
if (checker.check(event, achievement, currentProgress)) {
|
||||
TbUserAchievement userAchievement = grantAchievementInternal(event.getUserID(), achievement.getAchievementID());
|
||||
TbUserAchievement userAchievement = grantAchievementInternal(event.getUserID(), achievement);
|
||||
if (userAchievement != null) {
|
||||
newAchievements.add(userAchievement);
|
||||
logger.info("用户 {} 通过事件 {} 获得成就: {}", event.getUserID(), event.getEventType(), achievement.getName());
|
||||
@@ -748,17 +753,21 @@ public class ACHAchievementServiceImpl implements AchievementService {
|
||||
/**
|
||||
* 内部授予成就方法(不检查是否已获得)
|
||||
*/
|
||||
private TbUserAchievement grantAchievementInternal(String userID, String achievementID) {
|
||||
private TbUserAchievement grantAchievementInternal(String userID, TbAchievement achievement) {
|
||||
try {
|
||||
TbUserAchievement userAchievement = new TbUserAchievement();
|
||||
userAchievement.setID(IDUtils.generateID());
|
||||
userAchievement.setUserID(userID);
|
||||
userAchievement.setAchievementID(achievementID);
|
||||
userAchievement.setAchievementID(achievement.getAchievementID());
|
||||
userAchievement.setObtainTime(new Date());
|
||||
|
||||
int result = userAchievementMapper.insertUserAchievement(userAchievement);
|
||||
if (result > 0) {
|
||||
updateProgressToCompleted(userID, achievementID);
|
||||
updateProgressToCompleted(userID, achievement.getAchievementID());
|
||||
|
||||
// 检查是否需要更新用户等级(learning_time开头的成就)
|
||||
updateUserLevelIfNeeded(userID, achievement);
|
||||
|
||||
return userAchievement;
|
||||
}
|
||||
return null;
|
||||
@@ -824,5 +833,56 @@ public class ACHAchievementServiceImpl implements AchievementService {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查并更新用户等级(仅针对learning_time开头的成就)
|
||||
* @param userID 用户ID
|
||||
* @param achievement 成就对象
|
||||
*/
|
||||
private void updateUserLevelIfNeeded(String userID, TbAchievement achievement) {
|
||||
try {
|
||||
// 检查成就ID是否以learning_time开头
|
||||
if (achievement == null || achievement.getAchievementID() == null ||
|
||||
!achievement.getAchievementID().startsWith("learning_time")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查成就是否有等级信息
|
||||
if (achievement.getLevel() == null) {
|
||||
logger.warn("成就没有等级信息: {}", achievement.getAchievementID());
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取用户当前信息
|
||||
TbSysUserInfo userInfo = userInfoMapper.selectById(userID);
|
||||
if (userInfo == null) {
|
||||
logger.warn("用户信息不存在: {}", userID);
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否需要更新等级(只有当成就等级高于当前用户等级时才更新)
|
||||
Integer currentLevel = userInfo.getLevel() != null ? userInfo.getLevel() : 0;
|
||||
Integer achievementLevel = achievement.getLevel();
|
||||
|
||||
if (achievementLevel > currentLevel) {
|
||||
userInfo.setLevel(achievementLevel);
|
||||
int updateResult = userInfoMapper.updateUserInfo(userInfo);
|
||||
|
||||
if (updateResult > 0) {
|
||||
logger.info("用户 {} 通过成就 {} 等级从 {} 提升到 {}",
|
||||
userID, achievement.getAchievementID(), currentLevel, achievementLevel);
|
||||
} else {
|
||||
logger.error("更新用户等级失败: userID={}, achievementID={}", userID, achievement.getAchievementID());
|
||||
}
|
||||
} else {
|
||||
logger.debug("用户 {} 当前等级 {} 已达到或超过成就等级 {},无需更新",
|
||||
userID, currentLevel, achievementLevel);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("更新用户等级时发生异常: userID={}, achievementID={}, error={}",
|
||||
userID, achievement.getAchievementID(), e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user