From 70e7eace440e324c74fb7dfe2b30dc5ba5b67205 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期二, 29 九月 2026 11:51:19 +0800
Subject: [PATCH] feat(养生课程): 新增当前在学人数统计与展示功能

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
index 62cad09..4f4be04 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/course/service/AppHealthCourseService.java
@@ -153,6 +153,7 @@
             itemVO.setDifficultyName(trimToEmpty(row.getDifficultyName()));
             itemVO.setSalePrice(defaultPrice(row.getSalePrice()));
             itemVO.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
+            itemVO.setStudyingCount(defaultNumber(row.getStudyingCount()));
             result.add(itemVO);
         }
         return result;
@@ -166,6 +167,8 @@
         if (courseDetail.getStatus() == null || courseDetail.getStatus().intValue() != COURSE_STATUS_ENABLED) {
             throw new IllegalArgumentException("养生课程不存在");
         }
+        // 进入课程详情即视为一次学习行为,正在学习人数自增;返回值按自增后的口径展示
+        incrementStudyingCount(courseId);
 
         List<HealthCourseVideo> enabledVideos = listEnabledVideos(courseId);
         AppHealthCourseDetailVO detailVO = new AppHealthCourseDetailVO();
@@ -176,6 +179,7 @@
         detailVO.setDifficultyName(trimToEmpty(courseDetail.getDifficultyName()));
         detailVO.setSalePrice(defaultPrice(courseDetail.getSalePrice()));
         detailVO.setLearnUserCount(defaultNumber(courseDetail.getLearnUserCount()));
+        detailVO.setStudyingCount(Integer.valueOf(defaultNumber(courseDetail.getStudyingCount()) + 1));
         detailVO.setSummary(trimToEmpty(courseDetail.getSummary()));
         detailVO.setTargetUsers(trimToEmpty(courseDetail.getTargetUsers()));
         detailVO.setContent(trimToEmpty(courseDetail.getContent()));
@@ -218,6 +222,7 @@
             itemVO.setTeacherName(trimToEmpty(row.getTeacherName()));
             itemVO.setTeacherAvatar(trimToEmpty(row.getTeacherAvatar()));
             itemVO.setLearnUserCount(defaultNumber(row.getLearnUserCount()));
+            itemVO.setStudyingCount(defaultNumber(row.getStudyingCount()));
             itemVO.setFavoritedAt(row.getFavoritedAt());
             result.add(itemVO);
         }
@@ -1410,6 +1415,16 @@
     }
 
     /**
+     * 正在学习人数自增 1,进入课程详情时调用。
+     */
+    private void incrementStudyingCount(Long courseId) {
+        LambdaUpdateWrapper<HealthCourse> updateWrapper = new LambdaUpdateWrapper<HealthCourse>()
+                .eq(HealthCourse::getId, courseId)
+                .setSql("studying_count = COALESCE(studying_count, 0) + 1");
+        healthCourseMapper.update(null, updateWrapper);
+    }
+
+    /**
      * 构造收藏操作返回结果,避免控制器层重复拼装。
      */
     private AppHealthCourseFavoriteResultVO buildFavoriteResult(Long courseId, boolean favorited, Integer favoriteCount) {

--
Gitblit v1.7.1