diff --git a/schoolNewsServ/admin/src/main/resources/log4j2-spring.xml b/schoolNewsServ/admin/src/main/resources/log4j2-spring.xml index 1076c41..a55fb70 100644 --- a/schoolNewsServ/admin/src/main/resources/log4j2-spring.xml +++ b/schoolNewsServ/admin/src/main/resources/log4j2-spring.xml @@ -111,6 +111,9 @@ + + + diff --git a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java index 63eb5a1..fac7967 100644 --- a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java +++ b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java @@ -246,4 +246,13 @@ public interface LearningTaskService { * @since 2025-11-14 */ ResultDomain getLearningTaskCount(TbLearningTask filter); + + /** + * @description 获取学习任务统计 + * @param filter 过滤条件 + * @return ResultDomain> 学习任务统计 + * @author yslg + * @since 2025-11-17 + */ + ResultDomain> getMyTotalStatistics(String startTime, String endTime); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java index 9635c27..c093fbc 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java @@ -179,5 +179,16 @@ public class LearningTaskController { public ResultDomain> getTaskStatisticsRankings(@PathVariable("taskID") String taskID) { return learningTaskService.getTaskStatisticsRankings(taskID); } + + /** + * @description 首页任务学习进度统计, + * @param + * @author yslg + * @since 2025-11-17 + */ + @GetMapping("/statistics") + public ResultDomain> getStatistics(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) { + return learningTaskService.getMyTotalStatistics(startTime, endTime); + } } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java index d75e7cd..81082b4 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningRecordMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbLearningRecord; +import org.xyzh.common.dto.study.TbLearningTask; import org.xyzh.common.vo.UserDeptRoleVO; import java.util.List; diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java index 8766a92..e42289e 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java @@ -9,6 +9,7 @@ import org.xyzh.common.vo.UserDeptRoleVO; import org.xyzh.common.vo.TaskItemVO; import java.util.List; +import java.util.Map; /** * @description LearningTaskMapper.java文件描述 学习任务数据访问层 @@ -182,4 +183,17 @@ public interface LearningTaskMapper extends BaseMapper { * @since 2025-10-15 */ long countLearningTasks(@Param("filter") TbLearningTask filter, @Param("userDeptRoles") List userDeptRoles); + + /** + * @description 获取任务统计(按标签分组,统计指定时间范围内当前用户任务的完成进度) + * @param filter 过滤条件(包含开始、结束时间) + * @param userDeptRoles 用户部门角色列表 + * @param userId 当前用户ID + * @return List> 任务统计列表 + * @author yslg + * @since 2025-10-15 + */ + List> getTaskStaticByTag(@Param("filter") TbLearningTask filter, + @Param("userDeptRoles") List userDeptRoles, + @Param("userId") String userId); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java index 2195bcc..39043ce 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningRecordServiceImpl.java @@ -1,6 +1,7 @@ package org.xyzh.study.service.impl; import java.math.BigDecimal; +import java.text.DateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -13,6 +14,7 @@ import org.springframework.stereotype.Service; import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.core.enums.TaskItemType; import org.xyzh.common.dto.study.TbLearningRecord; +import org.xyzh.common.dto.study.TbLearningTask; import org.xyzh.common.dto.study.TbTaskItem; import org.xyzh.common.dto.study.TbTaskUser; import org.xyzh.common.dto.user.TbSysUser; @@ -241,21 +243,19 @@ public class SCLearningRecordServiceImpl implements LearningRecordService { int completedRequired = 0; for (TaskItemVO item : allTaskItems) { - if (item.getRequired() != null && item.getRequired()) { + // if (item.getRequired() != null && item.getRequired()) { totalRequired++; if (item.getStatus() != null && item.getStatus() == 2) { completedRequired++; } else { allCompleted = false; } - } - } - if (!allCompleted) { - return; + // } } + // 计算总进度 - BigDecimal progressPercent = BigDecimal.valueOf(100); + BigDecimal progressPercent = BigDecimal.valueOf(completedRequired/(totalRequired * 1.0) * 100); // 更新 task_user 状态 TbTaskUser taskUser = new TbTaskUser(); @@ -265,7 +265,7 @@ public class SCLearningRecordServiceImpl implements LearningRecordService { taskUser.setUpdater(userId); // 全部完成 - taskUser.setStatus(2); + taskUser.setStatus(totalRequired == completedRequired? 2:1); taskUser.setCompleteTime(new Date()); taskUserMapper.updateTaskUser(taskUser); logger.info("更新任务用户状态成功 - taskId: {}, userId: {}, status: {}, progress: {}", diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java index 09d715d..eb1c572 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java @@ -1,6 +1,8 @@ package org.xyzh.study.service.impl; import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -827,4 +829,39 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } return resultDomain; } + + @Override + public ResultDomain> getMyTotalStatistics(String startTime, String endTime) { + ResultDomain> resultDomain = new ResultDomain<>(); + try { + TbSysUser currentUser = LoginUtil.getCurrentUser(); + if (currentUser == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + + Map statisticsData = new HashMap<>(); + + // 获取当前用户的部门角色信息 + List userDeptRoles = LoginUtil.getCurrentDeptRole(); + + // 解析时间范围 + TbLearningTask filter = new TbLearningTask(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + filter.setStartTime(df.parse(startTime)); + filter.setEndTime(df.parse(endTime)); + + // 按标签统计当前用户在时间范围内任务的平均完成进度 + List> tagProgressList = learningTaskMapper.getTaskStaticByTag(filter, userDeptRoles, + currentUser.getID()); + + statisticsData.put("tagProgressList", tagProgressList); + + resultDomain.success("获取学习记录统计数据成功", statisticsData); + } catch (Exception e) { + logger.error("获取学习记录统计数据失败", e); + resultDomain.fail("获取学习记录统计数据失败:" + e.getMessage()); + } + return resultDomain; + } } diff --git a/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml index 366792d..76f1a08 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/LearningRecordMapper.xml @@ -357,4 +357,9 @@ LIMIT 10 + + + diff --git a/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml index 115c952..65a13ee 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml @@ -352,4 +352,22 @@ + + + diff --git a/schoolNewsWeb/src/apis/study/learning-task.ts b/schoolNewsWeb/src/apis/study/learning-task.ts index 98e80f0..0815408 100644 --- a/schoolNewsWeb/src/apis/study/learning-task.ts +++ b/schoolNewsWeb/src/apis/study/learning-task.ts @@ -57,6 +57,19 @@ export const learningTaskApi = { const response = await api.post(`${this.learningTaskPrefix}/page`, {pageParam, filter}); return response.data; }, + + /** + * 首页学习进度统计(按标签) + * @param startTime 开始时间,格式:yyyy-MM-dd HH:mm:ss + * @param endTime 结束时间,格式:yyyy-MM-dd HH:mm:ss + */ + async getMyStatistics(startTime: string, endTime: string): Promise> { + const response = await api.get(`${this.learningTaskPrefix}/statistics`, { + startTime, + endTime, + }); + return response.data; + }, /** * 创建学习任务 * @param task 任务数据 diff --git a/schoolNewsWeb/src/views/admin/manage/study/components/TaskStatics.vue b/schoolNewsWeb/src/views/admin/manage/study/components/TaskStatics.vue index 8193bf8..14cf7f7 100644 --- a/schoolNewsWeb/src/views/admin/manage/study/components/TaskStatics.vue +++ b/schoolNewsWeb/src/views/admin/manage/study/components/TaskStatics.vue @@ -6,12 +6,12 @@
总学习人数
-
{{ taskInfo.totalTaskNum || 0 }}
+
{{ totalPerson }}
已完成人数
-
{{ taskInfo.completedTaskNum || 0 }}
+
{{ completedPerson }}
@@ -138,6 +138,7 @@ import * as echarts from 'echarts'; import type { ECharts } from 'echarts'; import { learningTaskApi } from '@/apis/study/learning-task'; import { ElMessage } from 'element-plus'; +import { TaskVO } from '@/types'; // Props const props = defineProps<{ @@ -146,7 +147,7 @@ const props = defineProps<{ // 响应式数据 const loading = ref(false); -const taskInfo = ref({}); +const taskInfo = ref(); const durationDistribution = ref([]); const progressDistribution = ref([]); const completionRanking = ref([]); @@ -158,12 +159,12 @@ const progressChartRef = ref(); let durationChart: ECharts | null = null; let progressChart: ECharts | null = null; +const totalPerson = computed(() => taskInfo.value?.taskUsers?.length || 0); +const completedPerson = computed(() => taskInfo.value?.taskUsers?.filter((user: any) => user.status === 2).length || 0); // 计算完成率 const completionRate = computed(() => { - const total = taskInfo.value.totalTaskNum || 0; - const completed = taskInfo.value.completedTaskNum || 0; - if (total === 0) return 0; - return ((completed / total) * 100).toFixed(1); + if (totalPerson.value === 0) return 0; + return ((completedPerson.value / totalPerson.value) * 100).toFixed(1); }); // 获取排名样式类 diff --git a/schoolNewsWeb/src/views/public/article/ArticleShowView.vue b/schoolNewsWeb/src/views/public/article/ArticleShowView.vue index 851e2c0..8d34f50 100644 --- a/schoolNewsWeb/src/views/public/article/ArticleShowView.vue +++ b/schoolNewsWeb/src/views/public/article/ArticleShowView.vue @@ -1,6 +1,7 @@