fix:【FCJDFDXTXS-143】默认展示全部学习时长从studyCourse表的totalDuration修改为studyCourseItem的studyDuration字段求和(原逻辑只有筛选时间段后求和,测试数据有不对应情况,因此改为所有情况均求和)

This commit is contained in:
miaowenbo
2025-12-16 17:55:55 +08:00
parent 5b3443330c
commit f481888d55

View File

@@ -220,7 +220,7 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
}
}
// 25.12.3新增,添加基于时间的查询条件,规则如下:
if (sc != null && StringUtils.isNotBlank(sc.getCourseId()) && StringUtils.isNotBlank(sc.getQueryStartTime()) && StringUtils.isNotBlank(sc.getQueryFinishTime())) {
if (sc != null && StringUtils.isNotBlank(sc.getCourseId())) {
List<StudyCourseItem> studyCourseItemList = studyCourseService.getStudyCourseItemByCourseId(sc.getCourseId());
if (studyCourseItemList != null && !studyCourseItemList.isEmpty()) {
// 将学习内容按照studyId进行分组便于后续计算每个studyId下的总学习时长
@@ -231,23 +231,28 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
for (StudyCourse studyCourse : studyCourses) {
// 实体类解耦
entityManager.detach(studyCourse);
// 解析查询时间范围
LocalDate startDate = LocalDate.parse(queryStartTime);
LocalDate endDate = LocalDate.parse(queryFinishTime);
// 如果有查询时间范围,则计算筛选后的学习时长
// 25.12.16修改,无论有没有筛选时间范围,都计算总学习时长
if (itemsByStudyId.containsKey(studyCourse.getId())) {
List<StudyCourseItem> items = itemsByStudyId.get(studyCourse.getId());
int filteredDuration = 0;
for (StudyCourseItem item : items) {
LocalDateTime finishTime = item.getFinishTime();
LocalDate finishDate = finishTime.toLocalDate();
// 判断结束时间是否在筛选范围内
boolean inRange = true;
if (finishDate.isBefore(startDate)) {
inRange = false;
}
if (finishDate.isAfter(endDate)) {
inRange = false;
// 如果筛选了学习时间,判断结束时间是否在筛选范围内,未筛选学习时间则默认全部求和
if (StringUtils.isNotBlank(sc.getQueryStartTime()) && StringUtils.isNotBlank(sc.getQueryFinishTime())) {
// 解析查询时间范围
LocalDate startDate = LocalDate.parse(queryStartTime);
LocalDate endDate = LocalDate.parse(queryFinishTime);
// 以结束时间筛选
LocalDateTime finishTime = item.getFinishTime();
LocalDate finishDate = finishTime.toLocalDate();
if (finishDate.isBefore(startDate)) {
inRange = false;
}
if (finishDate.isAfter(endDate)) {
inRange = false;
}
}
// 如果在范围内,则累加学习时长
if (inRange) {
@@ -863,7 +868,7 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
}
// 25.12.3新增,添加基于时间的查询条件,规则如下:
List<StudyCourse> studyCourses = studyCourseDao.findList(query.builder());
if (sc != null && StringUtils.isNotBlank(sc.getCourseId()) && StringUtils.isNotBlank(sc.getQueryStartTime()) && StringUtils.isNotBlank(sc.getQueryFinishTime())) {
if (sc != null && StringUtils.isNotBlank(sc.getCourseId())) {
List<StudyCourseItem> studyCourseItemList = studyCourseService.getStudyCourseItemByCourseId(sc.getCourseId());
if (studyCourseItemList != null && !studyCourseItemList.isEmpty()) {
// 将学习内容按照studyId进行分组便于后续计算每个studyId下的总学习时长
@@ -874,23 +879,28 @@ public class StudyCourseServiceImpl implements IStudyCourseService{
for (StudyCourse studyCourse : studyCourses) {
// 实体类解耦
entityManager.detach(studyCourse);
// 解析查询时间范围
LocalDate startDate = LocalDate.parse(queryStartTime);
LocalDate endDate = LocalDate.parse(queryFinishTime);
// 如果有查询时间范围,则计算筛选后的学习时长
// 25.12.16修改,无论有没有筛选时间范围,都计算总学习时长
if (itemsByStudyId.containsKey(studyCourse.getId())) {
List<StudyCourseItem> items = itemsByStudyId.get(studyCourse.getId());
int filteredDuration = 0;
for (StudyCourseItem item : items) {
LocalDateTime finishTime = item.getFinishTime();
LocalDate finishDate = finishTime.toLocalDate();
// 判断结束时间是否在筛选范围内
boolean inRange = true;
if (finishDate.isBefore(startDate)) {
inRange = false;
}
if (finishDate.isAfter(endDate)) {
inRange = false;
// 如果筛选了学习时间,判断结束时间是否在筛选范围内,未筛选学习时间则默认全部求和
if (StringUtils.isNotBlank(sc.getQueryStartTime()) && StringUtils.isNotBlank(sc.getQueryFinishTime())) {
// 解析查询时间范围
LocalDate startDate = LocalDate.parse(queryStartTime);
LocalDate endDate = LocalDate.parse(queryFinishTime);
// 以结束时间筛选
LocalDateTime finishTime = item.getFinishTime();
LocalDate finishDate = finishTime.toLocalDate();
if (finishDate.isBefore(startDate)) {
inRange = false;
}
if (finishDate.isAfter(endDate)) {
inRange = false;
}
}
// 如果在范围内,则累加学习时长
if (inRange) {