修正成就查询
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
-- 等级成就
|
-- 等级成就
|
||||||
-- V1段:初学者 (0-10小时,每2小时一级)
|
-- 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
|
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),
|
('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),
|
('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),
|
('ACH004', 'learning_time_l1_4', '初学者 IV', 'v1-icon.svg', '累计学习时长达到6小时', 2, 1.4, 1, 6*60*60, 20, 4, 0),
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ public class ACHAchievementServiceImpl implements AchievementService {
|
|||||||
Map<String, Object> payload = new HashMap<>();
|
Map<String, Object> payload = new HashMap<>();
|
||||||
payload.put("current", null);
|
payload.put("current", null);
|
||||||
payload.put("next", null);
|
payload.put("next", null);
|
||||||
rd.success("无等级成就", payload);
|
rd.success("无等级成就配置", payload);
|
||||||
return rd;
|
return rd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,36 +315,35 @@ public class ACHAchievementServiceImpl implements AchievementService {
|
|||||||
Comparator.nullsFirst(Comparator.naturalOrder())
|
Comparator.nullsFirst(Comparator.naturalOrder())
|
||||||
);
|
);
|
||||||
|
|
||||||
// 当前:已获得的最高等级,否则取最低等级
|
// 当前:已获得的最高等级
|
||||||
List<AchievementVO> obtained = levels.stream()
|
List<AchievementVO> obtained = levels.stream()
|
||||||
.filter(a -> Boolean.TRUE.equals(a.getObtained()))
|
.filter(a -> Boolean.TRUE.equals(a.getObtained()))
|
||||||
.sorted(byLevelAsc.reversed())
|
.sorted(byLevelAsc.reversed())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
AchievementVO current;
|
AchievementVO current;
|
||||||
|
final float currentLevel; // 用户实际等级
|
||||||
|
|
||||||
if (!obtained.isEmpty()) {
|
if (!obtained.isEmpty()) {
|
||||||
|
// 已获得等级成就,取最高等级
|
||||||
current = obtained.get(0);
|
current = obtained.get(0);
|
||||||
|
currentLevel = current.getLevel() != null ? current.getLevel() : 1.0f;
|
||||||
} else {
|
} else {
|
||||||
current = levels.stream()
|
// 没有获得任何等级成就,默认 Lv1.0
|
||||||
.sorted(byLevelAsc)
|
current = null;
|
||||||
.findFirst()
|
currentLevel = 1.0f;
|
||||||
.orElse(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 下一等级:比当前等级大的最小等级
|
// 下一等级:比当前等级大的最小等级
|
||||||
AchievementVO next = null;
|
AchievementVO next = levels.stream()
|
||||||
if (current != null && current.getLevel() != null) {
|
.filter(a -> (a.getLevel() != null) && a.getLevel() > currentLevel)
|
||||||
float curLevel = current.getLevel();
|
.sorted(byLevelAsc)
|
||||||
next = levels.stream()
|
.findFirst()
|
||||||
.filter(a -> (a.getLevel() != null) && a.getLevel() > curLevel)
|
.orElse(null);
|
||||||
.sorted(byLevelAsc)
|
|
||||||
.findFirst()
|
|
||||||
.orElse(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> payload = new HashMap<>();
|
Map<String, Object> payload = new HashMap<>();
|
||||||
payload.put("current", current);
|
payload.put("current", current); // 当前获得的最高等级成就,null 表示默认 Lv1.0
|
||||||
payload.put("next", next);
|
payload.put("next", next); // 下一个等级成就
|
||||||
rd.success("获取等级状态成功", payload);
|
rd.success("获取等级状态成功", payload);
|
||||||
return rd;
|
return rd;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ const nextDeltaText = computed(() => {
|
|||||||
const need = Math.max(0, tar - cur);
|
const need = Math.max(0, tar - cur);
|
||||||
const nextName = nextLevelAchievement.value.name || `Lv.${formatLevelNumber(nextLevelAchievement.value.level)}`;
|
const nextName = nextLevelAchievement.value.name || `Lv.${formatLevelNumber(nextLevelAchievement.value.level)}`;
|
||||||
if (need <= 0) return `即将升级至 ${nextName}`;
|
if (need <= 0) return `即将升级至 ${nextName}`;
|
||||||
return `下一级:${nextName},还差 ${formatConditionValue(nextLevelAchievement.value.conditionType, need)}`;
|
return `下一级: LV${nextLevelAchievement.value.level},还差 ${formatConditionValue(nextLevelAchievement.value.conditionType, need)}`;
|
||||||
});
|
});
|
||||||
|
|
||||||
// ===== 勋章成就部分 =====
|
// ===== 勋章成就部分 =====
|
||||||
|
|||||||
Reference in New Issue
Block a user