mirror of
https://github.com/PlayEdu/PlayEdu
synced 2025-06-24 13:22: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.domain.UserCourseRecord;
|
||||||
import xyz.playedu.api.exception.ServiceException;
|
import xyz.playedu.api.exception.ServiceException;
|
||||||
import xyz.playedu.api.request.frontend.ChangePasswordRequest;
|
import xyz.playedu.api.request.frontend.ChangePasswordRequest;
|
||||||
import xyz.playedu.api.service.CourseService;
|
import xyz.playedu.api.service.*;
|
||||||
import xyz.playedu.api.service.DepartmentService;
|
|
||||||
import xyz.playedu.api.service.UserCourseRecordService;
|
|
||||||
import xyz.playedu.api.service.UserService;
|
|
||||||
import xyz.playedu.api.types.JsonResponse;
|
import xyz.playedu.api.types.JsonResponse;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -42,6 +39,9 @@ public class UserController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserCourseRecordService userCourseRecordService;
|
private UserCourseRecordService userCourseRecordService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserLearnDurationStatsService userLearnDurationStatsService;
|
||||||
|
|
||||||
@GetMapping("/detail")
|
@GetMapping("/detail")
|
||||||
public JsonResponse detail() {
|
public JsonResponse detail() {
|
||||||
User user = FCtx.getUser();
|
User user = FCtx.getUser();
|
||||||
@ -67,6 +67,7 @@ public class UserController {
|
|||||||
|
|
||||||
@GetMapping("/courses")
|
@GetMapping("/courses")
|
||||||
public JsonResponse courses(@RequestParam HashMap<String, Object> params) {
|
public JsonResponse courses(@RequestParam HashMap<String, Object> params) {
|
||||||
|
Integer isRequired = MapUtils.getInteger(params, "is_required");
|
||||||
Integer depId = MapUtils.getInteger(params, "dep_id");
|
Integer depId = MapUtils.getInteger(params, "dep_id");
|
||||||
if (depId == null || depId == 0) {
|
if (depId == null || depId == 0) {
|
||||||
return JsonResponse.error("请选择部门");
|
return JsonResponse.error("请选择部门");
|
||||||
@ -91,13 +92,14 @@ public class UserController {
|
|||||||
}});
|
}});
|
||||||
// 全部部门课
|
// 全部部门课
|
||||||
List<Course> openCourses = courseService.getOpenCoursesAndShow(500);
|
List<Course> openCourses = courseService.getOpenCoursesAndShow(500);
|
||||||
|
// 汇总到一个list中
|
||||||
if (depCourses != null && depCourses.size() > 0) {
|
if (depCourses != null && depCourses.size() > 0) {
|
||||||
courses.addAll(depCourses);
|
courses.addAll(depCourses);
|
||||||
}
|
}
|
||||||
if (openCourses != null && openCourses.size() > 0) {
|
if (openCourses != null && openCourses.size() > 0) {
|
||||||
courses.addAll(openCourses);
|
courses.addAll(openCourses);
|
||||||
}
|
}
|
||||||
|
// 对结果进行排序->按照课程id倒序
|
||||||
if (courses.size() > 0) {
|
if (courses.size() > 0) {
|
||||||
courses = courses.stream().sorted(Comparator.comparing(Course::getId).reversed()).toList();
|
courses = courses.stream().sorted(Comparator.comparing(Course::getId).reversed()).toList();
|
||||||
}
|
}
|
||||||
@ -107,13 +109,45 @@ public class UserController {
|
|||||||
// -------- 读取学习进度 ----------
|
// -------- 读取学习进度 ----------
|
||||||
Map<Integer, UserCourseRecord> learnCourseRecords = new HashMap<>();
|
Map<Integer, UserCourseRecord> learnCourseRecords = new HashMap<>();
|
||||||
if (courses.size() > 0) {
|
if (courses.size() > 0) {
|
||||||
learnCourseRecords = userCourseRecordService
|
learnCourseRecords = userCourseRecordService.chunk(FCtx.getUserId(), courses.stream().map(Course::getId).toList()).stream().collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e));
|
||||||
.chunk(FCtx.getUserId(), courses.stream().map(Course::getId).toList())
|
|
||||||
.stream()
|
|
||||||
.collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e));
|
|
||||||
}
|
}
|
||||||
data.put("learn_course_records", learnCourseRecords);
|
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);
|
return JsonResponse.data(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,14 +5,18 @@ import xyz.playedu.api.domain.UserLearnDurationStats;
|
|||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author tengteng
|
* @author tengteng
|
||||||
* @description 针对表【user_learn_duration_stats】的数据库操作Mapper
|
* @description 针对表【user_learn_duration_stats】的数据库操作Mapper
|
||||||
* @createDate 2023-03-22 13:55:29
|
* @createDate 2023-03-22 13:55:29
|
||||||
* @Entity xyz.playedu.api.domain.UserLearnDurationStats
|
* @Entity xyz.playedu.api.domain.UserLearnDurationStats
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface UserLearnDurationStatsMapper extends BaseMapper<UserLearnDurationStats> {
|
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();
|
Long yesterdayTotal();
|
||||||
|
|
||||||
List<UserLearnDurationStats> top10();
|
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());
|
String today = simpleDateFormat.format(new Date());
|
||||||
return list(query().getWrapper().eq("created_date", today).orderByDesc("duration").last("limit 10"));
|
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>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id,user_id,duration,
|
id,user_id,duration,
|
||||||
created_date
|
created_date
|
||||||
</sql>
|
</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>
|
</mapper>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user