serv-学习

This commit is contained in:
2025-10-24 18:28:26 +08:00
parent 6f5603dd8b
commit 8968409b2d
55 changed files with 2144 additions and 2570 deletions

View File

@@ -0,0 +1,90 @@
package org.xyzh.common.core.enums;
/**
* @description 成就条件类型枚举
* @filename AchievementConditionType.java
* @author yslg
* @copyright xyzh
* @since 2025-10-24
*/
public enum AchievementConditionType {
/**
* 1-学习时长(分钟)
*/
LEARNING_TIME(1, "学习时长"),
/**
* 2-浏览资源数量
*/
RESOURCE_VIEW_COUNT(2, "浏览资源数量"),
/**
* 3-完成课程数量
*/
COURSE_COMPLETE_COUNT(3, "完成课程数量"),
/**
* 4-连续登录天数
*/
CONTINUOUS_LOGIN_DAYS(4, "连续登录天数"),
/**
* 5-收藏资源数量
*/
RESOURCE_COLLECT_COUNT(5, "收藏资源数量"),
/**
* 6-完成任务数量
*/
TASK_COMPLETE_COUNT(6, "完成任务数量"),
/**
* 7-获得积分数量
*/
POINTS_EARNED(7, "获得积分数量"),
/**
* 8-发表评论数量
*/
COMMENT_COUNT(8, "发表评论数量"),
/**
* 9-完成章节数量
*/
CHAPTER_COMPLETE_COUNT(9, "完成章节数量"),
/**
* 10-累计登录天数
*/
TOTAL_LOGIN_DAYS(10, "累计登录天数");
private final int code;
private final String description;
AchievementConditionType(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
/**
* 根据code获取条件类型
*/
public static AchievementConditionType fromCode(int code) {
for (AchievementConditionType type : values()) {
if (type.code == code) {
return type;
}
}
return null;
}
}

View File

@@ -0,0 +1,84 @@
package org.xyzh.common.core.enums;
/**
* @description 成就事件类型枚举
* @filename AchievementEventType.java
* @author yslg
* @copyright xyzh
* @since 2025-10-24
*/
public enum AchievementEventType {
/**
* 学习相关事件
*/
LEARNING_TIME_UPDATED("learning_time_updated", "学习时长更新"),
COURSE_COMPLETED("course_completed", "课程完成"),
COURSE_STARTED("course_started", "开始学习课程"),
CHAPTER_COMPLETED("chapter_completed", "章节完成"),
/**
* 资源相关事件
*/
RESOURCE_VIEWED("resource_viewed", "浏览资源"),
RESOURCE_COLLECTED("resource_collected", "收藏资源"),
RESOURCE_SHARED("resource_shared", "分享资源"),
/**
* 任务相关事件
*/
TASK_COMPLETED("task_completed", "任务完成"),
TASK_ITEM_COMPLETED("task_item_completed", "任务项完成"),
/**
* 互动相关事件
*/
COMMENT_POSTED("comment_posted", "发表评论"),
LIKE_GIVEN("like_given", "点赞"),
/**
* 登录相关事件
*/
USER_LOGIN("user_login", "用户登录"),
CONTINUOUS_LOGIN("continuous_login", "连续登录"),
/**
* 积分相关事件
*/
POINTS_EARNED("points_earned", "获得积分"),
/**
* 测试相关事件
*/
TEST_PASSED("test_passed", "测试通过"),
TEST_PERFECT_SCORE("test_perfect_score", "测试满分");
private final String code;
private final String description;
AchievementEventType(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
/**
* 根据code获取事件类型
*/
public static AchievementEventType fromCode(String code) {
for (AchievementEventType type : values()) {
if (type.code.equals(code)) {
return type;
}
}
return null;
}
}

View File

@@ -0,0 +1,33 @@
package org.xyzh.common.core.enums;
/**
* @description 任务项类型常量
* @filename TaskItemType.java
* @author yslg
* @copyright xyzh
* @since 2025-10-24
*/
public enum TaskItemType {
/**
* 资源类型
*/
RESOURCE(1),
/**
* 课程类型
*/
COURSE(2);
private int value;
TaskItemType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}

View File

@@ -0,0 +1,151 @@
package org.xyzh.common.core.event;
import org.xyzh.common.core.enums.AchievementEventType;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @description 成就事件数据类
* @filename AchievementEvent.java
* @author yslg
* @copyright xyzh
* @since 2025-10-24
*/
public class AchievementEvent {
/**
* 用户ID
*/
private String userID;
/**
* 事件类型
*/
private AchievementEventType eventType;
/**
* 事件值(如学习时长、资源数量等)
*/
private Integer eventValue;
/**
* 事件时间
*/
private Date eventTime;
/**
* 额外数据
*/
private Map<String, Object> extraData;
public AchievementEvent() {
this.eventTime = new Date();
this.extraData = new HashMap<>();
}
public AchievementEvent(String userID, AchievementEventType eventType, Integer eventValue) {
this.userID = userID;
this.eventType = eventType;
this.eventValue = eventValue;
this.eventTime = new Date();
this.extraData = new HashMap<>();
}
/**
* 构建器模式
*/
public static class Builder {
private final AchievementEvent event;
public Builder(String userID, AchievementEventType eventType) {
event = new AchievementEvent();
event.userID = userID;
event.eventType = eventType;
}
public Builder value(Integer value) {
event.eventValue = value;
return this;
}
public Builder extra(String key, Object value) {
event.extraData.put(key, value);
return this;
}
public Builder time(Date time) {
event.eventTime = time;
return this;
}
public AchievementEvent build() {
return event;
}
}
public static Builder builder(String userID, AchievementEventType eventType) {
return new Builder(userID, eventType);
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public AchievementEventType getEventType() {
return eventType;
}
public void setEventType(AchievementEventType eventType) {
this.eventType = eventType;
}
public Integer getEventValue() {
return eventValue;
}
public void setEventValue(Integer eventValue) {
this.eventValue = eventValue;
}
public Date getEventTime() {
return eventTime;
}
public void setEventTime(Date eventTime) {
this.eventTime = eventTime;
}
public Map<String, Object> getExtraData() {
return extraData;
}
public void setExtraData(Map<String, Object> extraData) {
this.extraData = extraData;
}
public Object getExtraData(String key) {
return extraData.get(key);
}
public void putExtraData(String key, Object value) {
this.extraData.put(key, value);
}
@Override
public String toString() {
return "AchievementEvent{" +
"userID='" + userID + '\'' +
", eventType=" + eventType +
", eventValue=" + eventValue +
", eventTime=" + eventTime +
", extraData=" + extraData +
'}';
}
}