返回学习统计

This commit is contained in:
none 2023-03-24 11:50:47 +08:00
parent 83717baafe
commit 761458c370
5 changed files with 79 additions and 15 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -18,4 +18,8 @@ public interface UserLearnDurationStatsService extends IService<UserLearnDuratio
Long yesterdayTotal();
List<UserLearnDurationStats> top10();
Integer todayUserDuration(Integer userId);
Integer userDuration(Integer userId);
}

View File

@ -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);
}
}

View File

@ -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>