修复后台显示的学员线上课初次学习时间不准确bug

This commit is contained in:
xxx 2023-11-13 13:58:12 +08:00
parent 82c53ed87f
commit 23ff7068f7
5 changed files with 42 additions and 3 deletions

View File

@ -515,6 +515,10 @@ public class UserController {
UserCourseHourRecordCourseCountMapper::getCourseId, UserCourseHourRecordCourseCountMapper::getCourseId,
UserCourseHourRecordCourseCountMapper::getTotal)); UserCourseHourRecordCourseCountMapper::getTotal));
// 获取学员每个课程最早的学习课时记录
List<UserCourseHourRecord> perCourseEarliestRecords =
userCourseHourRecordService.getUserPerCourseEarliestRecord(id);
HashMap<String, Object> data = new HashMap<>(); HashMap<String, Object> data = new HashMap<>();
data.put("open_courses", openCourses); data.put("open_courses", openCourses);
data.put("departments", departments); data.put("departments", departments);
@ -524,6 +528,10 @@ public class UserController {
userCourseRecords.stream() userCourseRecords.stream()
.collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e))); .collect(Collectors.toMap(UserCourseRecord::getCourseId, e -> e)));
data.put("user_course_hour_count", userCourseHourCount); data.put("user_course_hour_count", userCourseHourCount);
data.put(
"per_course_earliest_records",
perCourseEarliestRecords.stream()
.collect(Collectors.toMap(UserCourseHourRecord::getCourseId, e -> e)));
return JsonResponse.data(data); return JsonResponse.data(data);
} }

View File

@ -48,4 +48,6 @@ public interface UserCourseHourRecordMapper extends BaseMapper<UserCourseHourRec
List<UserCourseHourRecord> paginate(UserCourseHourRecordPaginateFilter filter); List<UserCourseHourRecord> paginate(UserCourseHourRecordPaginateFilter filter);
Long paginateCount(UserCourseHourRecordPaginateFilter filter); Long paginateCount(UserCourseHourRecordPaginateFilter filter);
List<UserCourseHourRecord> getUserPerCourseEarliestRecord(Integer userId);
} }

View File

@ -66,4 +66,6 @@ public interface UserCourseHourRecordService extends IService<UserCourseHourReco
PaginationResult<UserCourseHourRecord> paginate( PaginationResult<UserCourseHourRecord> paginate(
int page, int size, UserCourseHourRecordPaginateFilter filter); int page, int size, UserCourseHourRecordPaginateFilter filter);
List<UserCourseHourRecord> getUserPerCourseEarliestRecord(Integer userId);
} }

View File

@ -123,7 +123,7 @@ public class UserCourseHourRecordServiceImpl
@Override @Override
public List<UserCourseHourRecordCourseCountMapper> getUserCourseHourCount( public List<UserCourseHourRecordCourseCountMapper> getUserCourseHourCount(
Integer userId, List<Integer> courseIds, Integer isFinished) { Integer userId, List<Integer> courseIds, Integer isFinished) {
if (courseIds == null || courseIds.size() == 0) { if (courseIds == null || courseIds.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
return getBaseMapper().getUserCourseHourCount(userId, courseIds, isFinished); return getBaseMapper().getUserCourseHourCount(userId, courseIds, isFinished);
@ -132,7 +132,7 @@ public class UserCourseHourRecordServiceImpl
@Override @Override
public List<UserCourseHourRecordUserCountMapper> getUserCourseHourUserCount( public List<UserCourseHourRecordUserCountMapper> getUserCourseHourUserCount(
Integer courseId, List<Integer> userIds, Integer isFinished) { Integer courseId, List<Integer> userIds, Integer isFinished) {
if (userIds == null || userIds.size() == 0) { if (userIds == null || userIds.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
return getBaseMapper().getUserCourseHourUserCount(courseId, userIds, isFinished); return getBaseMapper().getUserCourseHourUserCount(courseId, userIds, isFinished);
@ -174,9 +174,14 @@ public class UserCourseHourRecordServiceImpl
@Override @Override
public List<UserCourseHourRecordUserFirstCreatedAtMapper> getUserCourseHourUserFirstCreatedAt( public List<UserCourseHourRecordUserFirstCreatedAtMapper> getUserCourseHourUserFirstCreatedAt(
Integer courseId, List<Integer> userIds) { Integer courseId, List<Integer> userIds) {
if (userIds == null || userIds.size() == 0) { if (userIds == null || userIds.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
return getBaseMapper().getUserCourseHourUserFirstCreatedAt(courseId, userIds); return getBaseMapper().getUserCourseHourUserFirstCreatedAt(courseId, userIds);
} }
@Override
public List<UserCourseHourRecord> getUserPerCourseEarliestRecord(Integer userId) {
return getBaseMapper().getUserPerCourseEarliestRecord(userId);
}
} }

View File

@ -128,6 +128,7 @@
</if> </if>
GROUP BY `user_id`; GROUP BY `user_id`;
</select> </select>
<select id="getUserCourseHourUserFirstCreatedAt" <select id="getUserCourseHourUserFirstCreatedAt"
resultType="xyz.playedu.common.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper"> resultType="xyz.playedu.common.types.mapper.UserCourseHourRecordUserFirstCreatedAtMapper">
SELECT `t1`.`created_at`, `t1`.`user_id` SELECT `t1`.`created_at`, `t1`.`user_id`
@ -146,4 +147,25 @@
AND `t1`.`user_id` IN (<foreach collection="userIds" item="userId" separator=",">#{userId}</foreach>) AND `t1`.`user_id` IN (<foreach collection="userIds" item="userId" separator=",">#{userId}</foreach>)
</if> </if>
</select> </select>
<select id="getUserPerCourseEarliestRecord" resultType="xyz.playedu.course.domain.UserCourseHourRecord">
SELECT
`a`.*
FROM
`user_course_hour_records` AS `a`
INNER JOIN (
SELECT
min(`created_at`) AS `min_created_at`,
`course_id`,
`user_id`
FROM
`user_course_hour_records`
WHERE
`user_id` = #{userId}
GROUP BY
`user_id`,
`course_id`) AS `b` ON `b`.`min_created_at` = `a`.`created_at`
AND `b`.`course_id` = `a`.`course_id`
AND `b`.`user_id` = `a`.`user_id`;
</select>
</mapper> </mapper>