mirror of
https://github.com/PlayEdu/PlayEdu
synced 2025-06-23 20:42:42 +08:00
返回学习统计
This commit is contained in:
parent
83717baafe
commit
761458c370
@ -12,10 +12,7 @@ import xyz.playedu.api.domain.User;
|
||||
import xyz.playedu.api.domain.UserCourseRecord;
|
||||
import xyz.playedu.api.exception.ServiceException;
|
||||
import xyz.playedu.api.request.frontend.ChangePasswordRequest;
|
||||
import xyz.playedu.api.service.CourseService;
|
||||
import xyz.playedu.api.service.DepartmentService;
|
||||
import xyz.playedu.api.service.UserCourseRecordService;
|
||||
import xyz.playedu.api.service.UserService;
|
||||
import xyz.playedu.api.service.*;
|
||||
import xyz.playedu.api.types.JsonResponse;
|
||||
|
||||
import java.util.*;
|
||||
@ -42,6 +39,9 @@ public class UserController {
|
||||
@Autowired
|
||||
private UserCourseRecordService userCourseRecordService;
|
||||
|
||||
@Autowired
|
||||
private UserLearnDurationStatsService userLearnDurationStatsService;
|
||||
|
||||
@GetMapping("/detail")
|
||||
public JsonResponse detail() {
|
||||
User user = FCtx.getUser();
|
||||
@ -67,6 +67,7 @@ public class UserController {
|
||||
|
||||
@GetMapping("/courses")
|
||||
public JsonResponse courses(@RequestParam HashMap<String, Object> params) {
|
||||
Integer isRequired = MapUtils.getInteger(params, "is_required");
|
||||
Integer depId = MapUtils.getInteger(params, "dep_id");
|
||||
if (depId == null || depId == 0) {
|
||||
return JsonResponse.error("请选择部门");
|
||||
@ -91,13 +92,14 @@ public class UserController {
|
||||
}});
|
||||
// 全部部门课
|
||||
List<Course> openCourses = courseService.getOpenCoursesAndShow(500);
|
||||
// 汇总到一个list中
|
||||
if (depCourses != null && depCourses.size() > 0) {
|
||||
courses.addAll(depCourses);
|
||||
}
|
||||
if (openCourses != null && openCourses.size() > 0) {
|
||||
courses.addAll(openCourses);
|
||||
}
|
||||
|
||||
// 对结果进行排序->按照课程id倒序
|
||||
if (courses.size() > 0) {
|
||||
courses = courses.stream().sorted(Comparator.comparing(Course::getId).reversed()).toList();
|
||||
}
|
||||
@ -107,13 +109,45 @@ public class UserController {
|
||||
// -------- 读取学习进度 ----------
|
||||
Map<Integer, UserCourseRecord> learnCourseRecords = new HashMap<>();
|
||||
if (courses.size() > 0) {
|
||||
learnCourseRecords = userCourseRecordService
|
||||
.chunk(FCtx.getUserId(), courses.stream().map(Course::getId).toList())
|
||||
.stream()
|
||||
.collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e));
|
||||
learnCourseRecords = userCourseRecordService.chunk(FCtx.getUserId(), courses.stream().map(Course::getId).toList()).stream().collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e));
|
||||
}
|
||||
data.put("learn_course_records", learnCourseRecords);
|
||||
|
||||
Integer requiredHourCount = 0;//必修课时
|
||||
Integer nunRequiredHourCount = 0;//选修课时
|
||||
Integer requiredFinishedHourCount = 0;//已完成必修课时
|
||||
Integer nunRequiredFinishedHourCount = 0;//已完成选修课时
|
||||
Integer todayLearnDuration = userLearnDurationStatsService.todayUserDuration(FCtx.getUserId());//今日学习时长
|
||||
Integer learnDuration = userLearnDurationStatsService.userDuration(FCtx.getUserId());//学习总时长
|
||||
|
||||
// -------- 学习数据统计 ----------
|
||||
if (courses.size() > 0) {
|
||||
for (Course courseItem : courses) {
|
||||
if (courseItem.getIsRequired() == 1) {
|
||||
requiredHourCount += courseItem.getClassHour();
|
||||
} else {
|
||||
nunRequiredHourCount += courseItem.getClassHour();
|
||||
}
|
||||
UserCourseRecord learnRecord = learnCourseRecords.get(courseItem.getId());
|
||||
if (learnRecord == null) {
|
||||
continue;
|
||||
}
|
||||
if (courseItem.getIsRequired() == 1) {
|
||||
requiredFinishedHourCount += learnRecord.getFinishedCount();
|
||||
} else {
|
||||
nunRequiredFinishedHourCount += learnRecord.getFinishedCount();
|
||||
}
|
||||
}
|
||||
}
|
||||
HashMap<String, Integer> stats = new HashMap<>();
|
||||
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);
|
||||
|
||||
return JsonResponse.data(data);
|
||||
}
|
||||
|
||||
|
@ -5,14 +5,18 @@ import xyz.playedu.api.domain.UserLearnDurationStats;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author tengteng
|
||||
* @description 针对表【user_learn_duration_stats】的数据库操作Mapper
|
||||
* @createDate 2023-03-22 13:55:29
|
||||
* @Entity xyz.playedu.api.domain.UserLearnDurationStats
|
||||
*/
|
||||
* @author tengteng
|
||||
* @description 针对表【user_learn_duration_stats】的数据库操作Mapper
|
||||
* @createDate 2023-03-22 13:55:29
|
||||
* @Entity xyz.playedu.api.domain.UserLearnDurationStats
|
||||
*/
|
||||
@Mapper
|
||||
public interface UserLearnDurationStatsMapper extends BaseMapper<UserLearnDurationStats> {
|
||||
|
||||
Integer getUserDateDuration(Integer userId, String createdDate);
|
||||
|
||||
Integer getUserDuration(Integer userId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -18,4 +18,8 @@ public interface UserLearnDurationStatsService extends IService<UserLearnDuratio
|
||||
Long yesterdayTotal();
|
||||
|
||||
List<UserLearnDurationStats> top10();
|
||||
|
||||
Integer todayUserDuration(Integer userId);
|
||||
|
||||
Integer userDuration(Integer userId);
|
||||
}
|
||||
|
@ -66,6 +66,17 @@ public class UserLearnDurationStatsServiceImpl extends ServiceImpl<UserLearnDura
|
||||
String today = simpleDateFormat.format(new Date());
|
||||
return list(query().getWrapper().eq("created_date", today).orderByDesc("duration").last("limit 10"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer todayUserDuration(Integer userId) {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
return getBaseMapper().getUserDateDuration(userId, simpleDateFormat.format(new Date()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer userDuration(Integer userId) {
|
||||
return getBaseMapper().getUserDuration(userId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,7 +12,18 @@
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,user_id,duration,
|
||||
id,user_id,duration,
|
||||
created_date
|
||||
</sql>
|
||||
<select id="getUserDateDuration" resultType="java.lang.Integer">
|
||||
SELECT `duration`
|
||||
FROM `user_learn_duration_stats`
|
||||
where `user_id` = #{userId}
|
||||
and `created_date` = #{createdDate};
|
||||
</select>
|
||||
<select id="getUserDuration" resultType="java.lang.Integer">
|
||||
SELECT sum(`duration`)
|
||||
FROM `user_learn_duration_stats`
|
||||
where `user_id` = #{userId};
|
||||
</select>
|
||||
</mapper>
|
||||
|
Loading…
x
Reference in New Issue
Block a user