From 990910d2c6b5b487f65555096a3ec86b0d4dd08e Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Fri, 28 Nov 2025 18:55:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=88=90=E5=B0=B1=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.bin/mysql/sql/initAchievementData.sql | 2 +- .../impl/ACHAchievementServiceImpl.java | 33 +++++++++---------- .../user/user-center/MyAchievementsView.vue | 2 +- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/schoolNewsServ/.bin/mysql/sql/initAchievementData.sql b/schoolNewsServ/.bin/mysql/sql/initAchievementData.sql index 239e32f..8cb56c1 100644 --- a/schoolNewsServ/.bin/mysql/sql/initAchievementData.sql +++ b/schoolNewsServ/.bin/mysql/sql/initAchievementData.sql @@ -5,7 +5,7 @@ -- 等级成就 -- V1段:初学者 (0-10小时,每2小时一级) INSERT INTO `tb_achievement` (`id`, `achievement_id`, `name`,`icon`, `description`, `type`, `level`, `condition_type`, `condition_value`, `points`, `order_num`, `deleted`) VALUES -('ACH001', 'learning_time_l1_1', '初学者 I', 'v1-icon.svg', '开始学习之旅', 2, 1.1, 1, 0, 5, 1, 0), +('ACH001', 'learning_time_l1_1', '初学者 I', 'v1-icon.svg', '开始学习之旅', 2, 1.1, 1, 60*60, 5, 1, 0), ('ACH002', 'learning_time_l1_2', '初学者 II', 'v1-icon.svg', '累计学习时长达到2小时', 2, 1.2, 1, 2*60*60, 10, 2, 0), ('ACH003', 'learning_time_l1_3', '初学者 III', 'v1-icon.svg', '累计学习时长达到4小时', 2, 1.3, 1, 4*60*60, 15, 3, 0), ('ACH004', 'learning_time_l1_4', '初学者 IV', 'v1-icon.svg', '累计学习时长达到6小时', 2, 1.4, 1, 6*60*60, 20, 4, 0), diff --git a/schoolNewsServ/achievement/src/main/java/org/xyzh/achievement/service/impl/ACHAchievementServiceImpl.java b/schoolNewsServ/achievement/src/main/java/org/xyzh/achievement/service/impl/ACHAchievementServiceImpl.java index f3203a1..5990199 100644 --- a/schoolNewsServ/achievement/src/main/java/org/xyzh/achievement/service/impl/ACHAchievementServiceImpl.java +++ b/schoolNewsServ/achievement/src/main/java/org/xyzh/achievement/service/impl/ACHAchievementServiceImpl.java @@ -298,7 +298,7 @@ public class ACHAchievementServiceImpl implements AchievementService { Map payload = new HashMap<>(); payload.put("current", null); payload.put("next", null); - rd.success("无等级成就", payload); + rd.success("无等级成就配置", payload); return rd; } @@ -315,36 +315,35 @@ public class ACHAchievementServiceImpl implements AchievementService { Comparator.nullsFirst(Comparator.naturalOrder()) ); - // 当前:已获得的最高等级,否则取最低等级 + // 当前:已获得的最高等级 List obtained = levels.stream() .filter(a -> Boolean.TRUE.equals(a.getObtained())) .sorted(byLevelAsc.reversed()) .collect(Collectors.toList()); AchievementVO current; + final float currentLevel; // 用户实际等级 + if (!obtained.isEmpty()) { + // 已获得等级成就,取最高等级 current = obtained.get(0); + currentLevel = current.getLevel() != null ? current.getLevel() : 1.0f; } else { - current = levels.stream() - .sorted(byLevelAsc) - .findFirst() - .orElse(null); + // 没有获得任何等级成就,默认 Lv1.0 + current = null; + currentLevel = 1.0f; } // 下一等级:比当前等级大的最小等级 - AchievementVO next = null; - if (current != null && current.getLevel() != null) { - float curLevel = current.getLevel(); - next = levels.stream() - .filter(a -> (a.getLevel() != null) && a.getLevel() > curLevel) - .sorted(byLevelAsc) - .findFirst() - .orElse(null); - } + AchievementVO next = levels.stream() + .filter(a -> (a.getLevel() != null) && a.getLevel() > currentLevel) + .sorted(byLevelAsc) + .findFirst() + .orElse(null); Map payload = new HashMap<>(); - payload.put("current", current); - payload.put("next", next); + payload.put("current", current); // 当前获得的最高等级成就,null 表示默认 Lv1.0 + payload.put("next", next); // 下一个等级成就 rd.success("获取等级状态成功", payload); return rd; } catch (Exception e) { diff --git a/schoolNewsWeb/src/views/user/user-center/MyAchievementsView.vue b/schoolNewsWeb/src/views/user/user-center/MyAchievementsView.vue index 9ce6279..c47d3bd 100644 --- a/schoolNewsWeb/src/views/user/user-center/MyAchievementsView.vue +++ b/schoolNewsWeb/src/views/user/user-center/MyAchievementsView.vue @@ -120,7 +120,7 @@ const nextDeltaText = computed(() => { const need = Math.max(0, tar - cur); const nextName = nextLevelAchievement.value.name || `Lv.${formatLevelNumber(nextLevelAchievement.value.level)}`; if (need <= 0) return `即将升级至 ${nextName}`; - return `下一级:${nextName},还差 ${formatConditionValue(nextLevelAchievement.value.conditionType, need)}`; + return `下一级: LV${nextLevelAchievement.value.level},还差 ${formatConditionValue(nextLevelAchievement.value.conditionType, need)}`; }); // ===== 勋章成就部分 =====