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,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.xyzh</groupId>
<artifactId>api</artifactId>
<version>${school-news.version}</version>
</parent>
<groupId>org.xyzh</groupId>
<artifactId>api-achievement</artifactId>
<version>${school-news.version}</version>
<packaging>jar</packaging>
<name>api-achievement</name>
<description>成就模块API接口</description>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
</project>

View File

@@ -0,0 +1,184 @@
package org.xyzh.api.achievement;
import org.xyzh.common.core.domain.ResultDomain;
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.usercenter.TbAchievement;
import org.xyzh.common.dto.usercenter.TbUserAchievement;
import org.xyzh.common.dto.usercenter.TbUserAchievementProgress;
import java.util.List;
import java.util.Map;
/**
* @description 成就服务接口
* @filename AchievementService.java
* @author yslg
* @copyright xyzh
* @since 2025-10-24
*/
public interface AchievementService {
// ==================== 成就定义管理 ====================
/**
* @description 创建成就
* @param achievement 成就信息
* @return ResultDomain<TbAchievement> 创建结果
*/
ResultDomain<TbAchievement> createAchievement(TbAchievement achievement);
/**
* @description 更新成就
* @param achievement 成就信息
* @return ResultDomain<TbAchievement> 更新结果
*/
ResultDomain<TbAchievement> updateAchievement(TbAchievement achievement);
/**
* @description 删除成就
* @param achievementID 成就ID
* @return ResultDomain<Void> 删除结果
*/
ResultDomain<Void> deleteAchievement(String achievementID);
/**
* @description 获取所有成就列表
* @param type 成就类型(可选)
* @param level 成就等级(可选)
* @return ResultDomain<TbAchievement> 成就列表
*/
ResultDomain<TbAchievement> getAllAchievements(Integer type, Integer level);
/**
* @description 分页查询成就
* @param filter 过滤条件
* @param pageParam 分页参数
* @return ResultDomain<TbAchievement> 成就分页数据
*/
ResultDomain<TbAchievement> getAchievementPage(TbAchievement filter, PageParam pageParam);
/**
* @description 获取成就详情
* @param achievementID 成就ID
* @return ResultDomain<TbAchievement> 成就详情
*/
ResultDomain<TbAchievement> getAchievementDetail(String achievementID);
// ==================== 用户成就管理 ====================
/**
* @description 获取用户已获得的成就
* @param userID 用户ID
* @param type 成就类型(可选)
* @return ResultDomain<TbUserAchievement> 用户成就列表
*/
ResultDomain<TbUserAchievement> getUserAchievements(String userID, Integer type);
/**
* @description 获取当前用户的成就列表
* @param type 成就类型(可选)
* @return ResultDomain<TbUserAchievement> 用户成就列表
*/
ResultDomain<TbUserAchievement> getMyAchievements(Integer type);
/**
* @description 检查用户是否已获得成就
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<Boolean> 是否已获得
*/
ResultDomain<Boolean> hasAchievement(String userID, String achievementID);
/**
* @description 手动授予用户成就(管理员功能)
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<TbUserAchievement> 授予结果
*/
ResultDomain<TbUserAchievement> grantAchievement(String userID, String achievementID);
/**
* @description 撤销用户成就(管理员功能)
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<Void> 撤销结果
*/
ResultDomain<Void> revokeAchievement(String userID, String achievementID);
// ==================== 成就进度管理 ====================
/**
* @description 获取用户成就进度
* @param userID 用户ID
* @param achievementID 成就ID可选为空则获取所有进度
* @return ResultDomain<TbUserAchievementProgress> 成就进度列表
*/
ResultDomain<TbUserAchievementProgress> getUserAchievementProgress(String userID, String achievementID);
/**
* @description 获取当前用户的成就进度
* @param achievementID 成就ID可选
* @return ResultDomain<TbUserAchievementProgress> 成就进度列表
*/
ResultDomain<TbUserAchievementProgress> getMyAchievementProgress(String achievementID);
/**
* @description 更新用户成就进度
* @param userID 用户ID
* @param achievementID 成就ID
* @param incrementValue 增量值
* @return ResultDomain<TbUserAchievementProgress> 更新后的进度
*/
ResultDomain<TbUserAchievementProgress> updateProgress(String userID, String achievementID, Integer incrementValue);
// ==================== 成就检测与触发 ====================
/**
* @description 处理成就事件(核心方法)
* @param event 成就事件
* @return ResultDomain<List<TbUserAchievement>> 本次触发的成就列表
*/
ResultDomain<List<TbUserAchievement>> processAchievementEvent(AchievementEvent event);
/**
* @description 检查用户是否满足成就条件
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<Boolean> 是否满足条件
*/
ResultDomain<Boolean> checkAchievementCondition(String userID, String achievementID);
/**
* @description 批量检查用户可获得的成就
* @param userID 用户ID
* @return ResultDomain<List<TbAchievement>> 可获得的成就列表
*/
ResultDomain<List<TbAchievement>> checkAvailableAchievements(String userID);
// ==================== 成就统计 ====================
/**
* @description 获取用户成就统计
* @param userID 用户ID
* @return ResultDomain<Map<String, Object>> 统计信息
*/
ResultDomain<Map<String, Object>> getUserAchievementStatistics(String userID);
/**
* @description 获取成就排行榜
* @param limit 排行榜条数
* @return ResultDomain<Map<String, Object>> 排行榜数据
*/
ResultDomain<Map<String, Object>> getAchievementRanking(Integer limit);
/**
* @description 获取最近获得成就的用户
* @param achievementID 成就ID
* @param limit 查询条数
* @return ResultDomain<List<TbUserAchievement>> 用户成就列表
*/
ResultDomain<List<TbUserAchievement>> getRecentAchievers(String achievementID, Integer limit);
}

View File

@@ -24,6 +24,10 @@
<groupId>org.xyzh</groupId>
<artifactId>api-auth</artifactId>
</dependency>
<dependency>
<groupId>org.xyzh</groupId>
<artifactId>api-achievement</artifactId>
</dependency>
<dependency>
<groupId>org.xyzh</groupId>
@@ -45,6 +49,9 @@
<groupId>org.xyzh</groupId>
<artifactId>api-ai</artifactId>
</dependency>
<dependency>
<groupId>org.xyzh</groupId>
<artifactId>api-file</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -106,7 +106,7 @@ public interface ResourceService {
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbResource> incrementViewCount(String resourceID);
ResultDomain<Boolean> incrementViewCount(String resourceID);
/**
* @description 增加点赞次数

View File

@@ -6,6 +6,7 @@ import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.study.TbCourse;
import org.xyzh.common.dto.study.TbCourseChapter;
import org.xyzh.common.dto.study.TbCourseNode;
import org.xyzh.common.dto.study.TbLearningRecord;
import org.xyzh.common.vo.CourseVO;
import java.util.List;

View File

@@ -19,12 +19,12 @@ public interface LearningRecordService {
* @description 获取用户学习记录
* @param userID 用户ID
* @param resourceType 资源类型(可选)
* @param taskID 任务ID可选
* @param resourceID 资源ID可选
* @return ResultDomain<TbLearningRecord> 学习记录列表
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbLearningRecord> getUserLearningRecords(String userID, Integer resourceType, String taskID);
ResultDomain<TbLearningRecord> getLearningRecord(TbLearningRecord learningRecord);
/**
* @description 获取资源学习记录
@@ -34,7 +34,7 @@ public interface LearningRecordService {
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbLearningRecord> getResourceLearningRecords(Integer resourceType, String resourceID);
ResultDomain<TbLearningRecord> getResourceLearningRecords(TbLearningRecord learningRecord);
/**
* @description 创建或更新学习记录
@@ -43,32 +43,25 @@ public interface LearningRecordService {
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbLearningRecord> saveLearningRecord(TbLearningRecord learningRecord);
ResultDomain<TbLearningRecord> insertLearningRecord(TbLearningRecord learningRecord);
/**
* @description 更新学习进度
* @param userID 用户ID
* @param resourceType 资源类型
* @param resourceID 资源ID
* @param progress 进度
* @param duration 学习时长(秒)
* @param learningRecord 学习记录
* @return ResultDomain<TbLearningRecord> 更新结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbLearningRecord> updateLearningProgress(String userID, Integer resourceType, String resourceID, BigDecimal progress, Integer duration);
ResultDomain<TbLearningRecord> updateLearningRecord(TbLearningRecord learningRecord);
/**
* @description 标记学习完成
* @param userID 用户ID
* @param resourceType 资源类型
* @param resourceID 资源ID
* @param taskID 任务ID可选
* @param learningRecord 学习记录
* @return ResultDomain<TbLearningRecord> 更新结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbLearningRecord> markLearningComplete(String userID, Integer resourceType, String resourceID, String taskID);
ResultDomain<TbLearningRecord> markLearningComplete(TbLearningRecord learningRecord);
/**
* @description 获取用户学习统计
@@ -108,4 +101,13 @@ public interface LearningRecordService {
* @since 2025-10-15
*/
ResultDomain<TbLearningRecord> getTaskLearningStatistics(String taskID);
/**
* @description 获取用户课程的学习记录
* @param learningRecord 学习记录
* @return ResultDomain<TbLearningRecord> 学习记录
* @author yslg
* @since 2025-10-24
*/
ResultDomain<TbLearningRecord> getCourseLearningRecord(TbLearningRecord learningRecord);
}

View File

@@ -6,8 +6,7 @@ import org.xyzh.common.dto.study.TbLearningTask;
import org.xyzh.common.dto.study.TbTaskUser;
import org.xyzh.common.vo.TaskItemVO;
import org.xyzh.common.vo.TaskVO;
import org.xyzh.common.dto.study.TbTaskCourse;
import org.xyzh.common.dto.study.TbTaskResource;
import org.xyzh.common.dto.study.TbTaskItem;
import java.util.List;
@@ -48,6 +47,15 @@ public interface LearningTaskService {
*/
ResultDomain<TaskVO> getTaskById(String taskID);
/**
* @description 根据ID获取任务用户详情
* @param taskID 任务ID
* @return ResultDomain<TaskItemVO> 任务用户详情
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TaskVO> getTaskUser(String taskID);
/**
* @description 创建学习任务
* @param task 任务信息
@@ -154,20 +162,20 @@ public interface LearningTaskService {
/**
* @description 获取任务课程列表
* @param taskID 任务ID
* @return ResultDomain<TbTaskCourse> 课程列表
* @return ResultDomain<TbTaskItem> 课程列表
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbTaskCourse> getTaskCourses(String taskID);
ResultDomain<TbTaskItem> getTaskCourses(String taskID);
/**
* @description 添加任务课程
* @param taskCourse 任务课程信息
* @return ResultDomain<TbTaskCourse> 添加结果
* @param taskItem 任务信息
* @return ResultDomain<TbTaskItem> 添加结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbTaskCourse> addTaskCourse(TbTaskCourse taskCourse);
ResultDomain<TbTaskItem> addTaskCourse(TbTaskItem taskItem);
/**
* @description 移除任务课程
@@ -184,20 +192,20 @@ public interface LearningTaskService {
/**
* @description 获取任务资源列表
* @param taskID 任务ID
* @return ResultDomain<TbTaskResource> 资源列表
* @return ResultDomain<TbTaskItem> 资源列表
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbTaskResource> getTaskResources(String taskID);
ResultDomain<TbTaskItem> getTaskResources(String taskID);
/**
* @description 添加任务资源
* @param taskResource 任务资源信息
* @return ResultDomain<TbTaskResource> 添加结果
* @param taskItem 任务信息
* @return ResultDomain<TbTaskItem> 添加结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbTaskResource> addTaskResource(TbTaskResource taskResource);
ResultDomain<TbTaskItem> addTaskResource(TbTaskItem taskItem);
/**
* @description 移除任务资源

View File

@@ -1,76 +0,0 @@
package org.xyzh.api.usercenter.achievement;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.usercenter.TbAchievement;
import org.xyzh.common.dto.usercenter.TbUserAchievement;
import java.util.List;
/**
* @description 用户成就服务接口
* @filename UserAchievementService.java
* @author yslg
* @copyright xyzh
* @since 2025-10-15
*/
public interface UserAchievementService {
/**
* @description 获取所有成就列表
* @param type 成就类型(可选)
* @param level 成就等级(可选)
* @return ResultDomain<TbAchievement> 成就列表
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAchievement> getAllAchievements(Integer type, Integer level);
/**
* @description 获取用户已获得的成就
* @param userID 用户ID
* @param type 成就类型(可选)
* @return ResultDomain<TbUserAchievement> 用户成就列表
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbUserAchievement> getUserAchievements(String userID, Integer type);
/**
* @description 检查用户是否已获得成就
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<Boolean> 是否已获得
* @author yslg
* @since 2025-10-15
*/
ResultDomain<Boolean> hasAchievement(String userID, String achievementID);
/**
* @description 授予用户成就
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<TbUserAchievement> 授予结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbUserAchievement> grantAchievement(String userID, String achievementID);
/**
* @description 获取成就详情
* @param achievementID 成就ID
* @return ResultDomain<TbAchievement> 成就详情
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAchievement> getAchievementDetail(String achievementID);
/**
* @description 检查用户是否满足成就条件
* @param userID 用户ID
* @param achievementID 成就ID
* @return ResultDomain<Boolean> 是否满足条件
* @author yslg
* @since 2025-10-15
*/
ResultDomain<Boolean> checkAchievementCondition(String userID, String achievementID);
}

View File

@@ -23,14 +23,12 @@ public interface UserCollectionService {
/**
* @description 取消收藏
* @param userID 用户ID
* @param collectionType 收藏类型
* @param collectionID 收藏对象ID
* @param userCollection 收藏信息
* @return ResultDomain<Boolean> 取消结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<Boolean> removeCollection(String userID, Integer collectionType, String collectionID);
ResultDomain<Boolean> removeCollection(TbUserCollection userCollection);
/**
* @description 检查是否已收藏

View File

@@ -18,6 +18,7 @@
<module>api-auth</module>
<module>api-system</module>
<module>api-usercenter</module>
<module>api-achievement</module>
<module>api-ai</module>
<module>api-study</module>
<module>api-news</module>
@@ -61,6 +62,11 @@
<artifactId>api-usercenter</artifactId>
<version>${school-news.version}</version>
</dependency>
<dependency>
<groupId>org.xyzh</groupId>
<artifactId>api-achievement</artifactId>
<version>${school-news.version}</version>
</dependency>
<dependency>
<groupId>org.xyzh</groupId>
<artifactId>api-ai</artifactId>
@@ -71,7 +77,11 @@
<artifactId>api-news</artifactId>
<version>${school-news.version}</version>
</dependency>
<dependency>
<groupId>org.xyzh</groupId>
<artifactId>api-file</artifactId>
<version>${school-news.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>