diff --git a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java index 07c5a81..9b13b2d 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/UserController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/UserController.java @@ -13,6 +13,7 @@ import xyz.playedu.api.exception.ServiceException; import xyz.playedu.api.request.frontend.ChangePasswordRequest; import xyz.playedu.api.service.*; import xyz.playedu.api.types.JsonResponse; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; import xyz.playedu.api.types.response.UserLatestLearn; import xyz.playedu.api.util.PrivacyUtil; @@ -121,10 +122,12 @@ public class UserController { data.put("courses", courses); + List courseIds = courses.stream().map(Course::getId).toList(); + // -------- 读取学习进度 ---------- Map learnCourseRecords = new HashMap<>(); if (courses.size() > 0) { - learnCourseRecords = userCourseRecordService.chunk(FCtx.getId(), courses.stream().map(Course::getId).toList()).stream().collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e)); + learnCourseRecords = userCourseRecordService.chunk(FCtx.getId(), courseIds).stream().collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e)); } data.put("learn_course_records", learnCourseRecords); @@ -167,18 +170,21 @@ public class UserController { } } HashMap stats = new HashMap<>(); - stats.put("required_course_count", requiredCourseCount); - stats.put("nun_required_course_count", nunRequiredCourseCount); - stats.put("required_finished_course_count", requiredFinishedCourseCount); - stats.put("nun_required_finished_course_count", nunRequiredFinishedCourseCount); - stats.put("required_hour_count", requiredHourCount); - stats.put("nun_required_hour_count", nunRequiredHourCount); - stats.put("required_finished_hour_count", requiredFinishedHourCount); - stats.put("nun_required_finished_hour_count", nunRequiredFinishedHourCount); - stats.put("today_learn_duration", todayLearnDuration); - stats.put("learn_duration", learnDuration); + stats.put("required_course_count", requiredCourseCount);//必修课数量 + stats.put("nun_required_course_count", nunRequiredCourseCount);//选修课数量 + stats.put("required_finished_course_count", requiredFinishedCourseCount);//必修已完成线上课数 + stats.put("nun_required_finished_course_count", nunRequiredFinishedCourseCount);//选修已完成线上课数 + stats.put("required_hour_count", requiredHourCount);//必修课时总数 + stats.put("nun_required_hour_count", nunRequiredHourCount);//选修课时总数 + stats.put("required_finished_hour_count", requiredFinishedHourCount);//必修已完成课时数 + stats.put("nun_required_finished_hour_count", nunRequiredFinishedHourCount);//选修已完成课时数 + stats.put("today_learn_duration", todayLearnDuration);//今日学习时长[单位:毫秒] + stats.put("learn_duration", learnDuration);//学习总时长[单位:毫秒] data.put("stats", stats); + // 当前学员每个线上课的学习课时数量(只要学习了就算,不一定需要完成) + data.put("user_course_hour_count", userCourseHourRecordService.getUserCourseHourCount(FCtx.getId(), courseIds, null).stream().collect(Collectors.toMap(UserCourseHourRecordCountMapper::getCourseId, UserCourseHourRecordCountMapper::getTotal))); + return JsonResponse.data(data); } diff --git a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java index 8c00fc0..87d0fe2 100644 --- a/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java +++ b/src/main/java/xyz/playedu/api/mapper/UserCourseHourRecordMapper.java @@ -3,6 +3,7 @@ package xyz.playedu.api.mapper; import org.apache.ibatis.annotations.Mapper; import xyz.playedu.api.domain.UserCourseHourRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; import java.util.List; @@ -15,6 +16,8 @@ import java.util.List; @Mapper public interface UserCourseHourRecordMapper extends BaseMapper { List getUserLatestRecords(Integer userId, Integer size); + + List getUserCourseHourCount(Integer userId, List courseIds, Integer isFinished); } diff --git a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java index a9b3c4f..ea0dfbc 100644 --- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java +++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java @@ -2,6 +2,7 @@ package xyz.playedu.api.service; import xyz.playedu.api.domain.UserCourseHourRecord; import com.baomidou.mybatisplus.extension.service.IService; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; import java.util.List; @@ -22,4 +23,6 @@ public interface UserCourseHourRecordService extends IService getLatestCourseIds(Integer userId, Integer size); void removeByCourseId(Integer courseId); + + List getUserCourseHourCount(Integer userId, List courseIds, Integer isFinished); } diff --git a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java index a1be9f9..a40165a 100644 --- a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java @@ -8,6 +8,7 @@ import xyz.playedu.api.event.UserCourseHourFinishedEvent; import xyz.playedu.api.service.UserCourseHourRecordService; import xyz.playedu.api.mapper.UserCourseHourRecordMapper; import org.springframework.stereotype.Service; +import xyz.playedu.api.types.mapper.UserCourseHourRecordCountMapper; import java.util.Date; import java.util.List; @@ -89,6 +90,11 @@ public class UserCourseHourRecordServiceImpl extends ServiceImpl getUserCourseHourCount(Integer userId, List courseIds, Integer isFinished) { + return getBaseMapper().getUserCourseHourCount(userId, courseIds, isFinished); + } } diff --git a/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCountMapper.java b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCountMapper.java new file mode 100644 index 0000000..75af2b7 --- /dev/null +++ b/src/main/java/xyz/playedu/api/types/mapper/UserCourseHourRecordCountMapper.java @@ -0,0 +1,15 @@ +package xyz.playedu.api.types.mapper; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @Author 杭州白书科技有限公司 + * @create 2023/3/29 10:01 + */ +@Data +public class UserCourseHourRecordCountMapper { + @JsonProperty("course_id") + private Integer courseId; + private Integer total; +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7be9b3f..96ecb99 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -34,9 +34,9 @@ spring: task: execution: pool: - max-size: 8 #最大线程数量 - core-size: 4 #初始化线程数量 - queue-capacity: 1000 #队列最大长度 + max-size: 4 #最大线程数量 + core-size: 2 #初始化线程数量 + queue-capacity: 10000 #队列最大长度 keep-alive: 60s #线程终止前允许保存的最大时间 shutdown: await-termination: true diff --git a/src/main/resources/mapper/UserCourseHourRecordMapper.xml b/src/main/resources/mapper/UserCourseHourRecordMapper.xml index 7706a99..45cc49e 100644 --- a/src/main/resources/mapper/UserCourseHourRecordMapper.xml +++ b/src/main/resources/mapper/UserCourseHourRecordMapper.xml @@ -39,4 +39,17 @@ order by `t1`.`updated_at` desc limit #{size}; +