Преглед изворни кода

运行状态总览统计功能

东方国信-蔡芳 пре 6 месеци
родитељ
комит
64467ad603

+ 54 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/PlatformStatusOverviewController.java

@@ -0,0 +1,54 @@
+package vip.xiaonuo.disk.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.disk.service.PlatformStatusOverviewService;
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 平台运行状态总览
+ * @author pans
+ */
+@Api(tags = "平台运行状态总览")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@RequestMapping("/platformStatusOverview")
+public class PlatformStatusOverviewController {
+
+    @Resource
+    private PlatformStatusOverviewService platformStatusOverviewService;
+
+    @ApiOperation("系统状态")
+    @GetMapping("/systemStatus")
+    public CommonResult<Map<String, Object>> systemStatus() {
+        return CommonResult.data(platformStatusOverviewService.getSystemStatus());
+    }
+
+    @ApiOperation("热门课程")
+    @GetMapping("/popularCourses")
+    public CommonResult<Map<String, Object>> popularCourses() {
+        return CommonResult.data(platformStatusOverviewService.getPopularCourses());
+    }
+
+    @ApiOperation("所有开课课程")
+    @GetMapping("/allCourses")
+    public CommonResult<Map<String, Object>> allCourses() {
+        return CommonResult.data(platformStatusOverviewService.getAllCourses());
+    }
+
+    @ApiOperation("指定课程近7天访问量趋势")
+    @GetMapping("/courseVisitTrend")
+    public CommonResult<Map<String, Object>> courseVisitTrend(
+            @ApiParam(value = "课程ID", required = true)
+            @RequestParam("courseId") Long courseId) {
+        return CommonResult.data(platformStatusOverviewService.getCourseVisitTrend(courseId));
+    }
+}

+ 37 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/PlatformStatusOverviewMapper.java

@@ -0,0 +1,37 @@
+package vip.xiaonuo.disk.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 平台运行状态总览Mapper接口
+ * @author pans
+ */
+public interface PlatformStatusOverviewMapper {
+
+    /**
+     * 获取用户总数
+     * @return 用户总数
+     */
+    Map<String, Object> getSystemStatus();
+
+    /**
+     * 获取热门课程
+     * @return 热门课程列表
+     */
+    List<Map<String, Object>> getPopularCourses();
+
+    /**
+     * 获取所有课程
+     * @return 所有课程列表
+     */
+    List<Map<String, Object>> getAllCourses();
+
+    /**
+     * 获取指定课程近7天访问量趋势
+     * @param courseId 课程ID
+     * @return 近7天访问量趋势
+     */
+    List<Map<String, Object>> getCourseVisitTrend(@Param("courseId") Long courseId);
+}

+ 106 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/PlatformStatusOverviewMapper.xml

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.disk.mapper.PlatformStatusOverviewMapper">
+
+    <select id="getSystemStatus" resultType="java.util.Map">
+        SELECT
+            *
+        FROM
+            ( SELECT COUNT( ci.COURSE_ID ) COURSE_TOTAL FROM COURSE_INFO ci WHERE ci.DELETE_FLAG = 'NOT_DELETE' ) r1,
+            ( SELECT COUNT( co.ID ) COURSE_OPEN_TOTAL FROM COURSE_OPEN co WHERE co.DELETE_FLAG = 'NOT_DELETE' ) r2,
+            ( SELECT COUNT( su.ID ) TEACHER_TOTAL FROM SYS_USER su WHERE su.EDU_IDENTITY = 1 AND su.DELETE_FLAG = 'NOT_DELETE' ) r3,
+            ( SELECT COUNT( su.ID ) STUDENT_TOTAL FROM SYS_USER su WHERE su.EDU_IDENTITY = 2 AND su.DELETE_FLAG = 'NOT_DELETE' ) r4
+    </select>
+
+    <select id="getPopularCourses" resultType="map">
+        SELECT
+            ci.COURSE_ID,
+            ci.COURSE_NAME,
+            su.NAME TEACHER_NAME,
+            ci.VIEW_COUNT,
+            IFNULL( r1.COLLECT_COUNT, 0 ) COLLECT_COUNT
+        FROM
+            COURSE_INFO ci
+                LEFT JOIN SYS_USER su ON ci.TEACHER_ID = su.ID
+                LEFT JOIN ( SELECT COUNT( csc.ID ) COLLECT_COUNT, csc.COURSE_ID FROM COURSE_STUDENT_COLLECT csc WHERE csc.DELETE_FLAG = 'NOT_DELETE' GROUP BY COURSE_ID ) r1 ON ci.COURSE_ID = r1.COURSE_ID
+        WHERE
+            ci.DELETE_FLAG = 'NOT_DELETE'
+          AND ci.PUTAWAY_STATUS = 1
+        ORDER BY
+            ci.VIEW_COUNT DESC,
+            r1.COLLECT_COUNT DESC
+            LIMIT 5
+    </select>
+
+    <select id="getAllCourses" resultType="map">
+        SELECT
+            co.ID,
+            co.COURSE_ID,
+            ci.COURSE_NAME,
+            co.TEACHER_ID,
+            su.NAME TEACHER_NAME,
+            co.START_TIME,
+            ci.VIEW_COUNT,
+            IFNULL( r1.STUDENT_COUNT, 0 ) STUDENT_COUNT
+        FROM
+            COURSE_OPEN co
+                LEFT JOIN COURSE_INFO ci ON co.COURSE_ID = ci.COURSE_ID
+                LEFT JOIN SYS_USER su ON co.TEACHER_ID = su.ID
+                LEFT JOIN (
+                SELECT
+                    COUNT( su.ID ) STUDENT_COUNT,
+                    su.GRADES_ID
+                FROM
+                    SYS_USER su
+                WHERE
+                    su.DELETE_FLAG = 'NOT_DELETE'
+                  AND su.EDU_IDENTITY = 2
+                GROUP BY
+                    su.GRADES_ID
+            ) r1 ON co.GRADES_ID = r1.GRADES_ID
+        WHERE
+            co.DELETE_FLAG = 'NOT_DELETE'
+          AND co.STATUS = 0
+    </select>
+
+    <select id="getCourseVisitTrend" resultType="map">
+        SELECT
+        r1.visitDate,
+        IFNULL( r2.visitCount, 0 ) AS visitCount
+        FROM
+        ( SELECT TO_CHAR ( SYSDATE - ROWNUM + 1, 'YYYY-MM-DD' ) AS visitDate FROM DUAL CONNECT BY ROWNUM  &lt;= 7 ORDER BY visitDate ) r1
+        LEFT JOIN (
+        SELECT
+        TO_CHAR ( csb.CREATE_TIME, 'YYYY-MM-DD' ) AS visitDate,
+        COUNT( csb.ID ) AS visitCount,
+        WM_CONCAT ( csb.ID ) AS employees
+        FROM
+        COURSE_STUDENT_BURIALPOINT csb
+        WHERE
+        csb.DELETE_FLAG = 'NOT_DELETE'
+        AND csb.HOUR_ID IN (
+        SELECT
+        ID
+        FROM
+        COURSE_CLASSHOUR cc
+        WHERE
+        cc.DELETE_FLAG = 'NOT_DELETE'
+        AND cc.CHAPTER_ID IN (
+        SELECT
+        ID
+        FROM
+        COURSE_CHAPTER
+        WHERE
+        DELETE_FLAG = 'NOT_DELETE'
+        AND COURSE_ID IN ( SELECT co.COURSE_ID FROM COURSE_OPEN co WHERE co.DELETE_FLAG = 'NOT_DELETE' AND co.ID = #{courseId} )
+        )
+        )
+        AND csb.CREATE_TIME >= TRUNC ( SYSDATE ) - 6
+        GROUP BY
+        TO_CHAR ( csb.CREATE_TIME, 'YYYY-MM-DD' )
+        ) r2 ON r1.visitDate = r2.visitDate
+        ORDER BY
+        r1.visitDate ASC
+    </select>
+
+</mapper>

+ 35 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/PlatformStatusOverviewService.java

@@ -0,0 +1,35 @@
+package vip.xiaonuo.disk.service;
+
+import java.util.Map;
+
+/**
+ * 平台运行状态总览服务接口
+ * @author pans
+ */
+public interface PlatformStatusOverviewService {
+
+    /**
+     * 获取系统状态
+     * @return 系统状态信息
+     */
+    Map<String, Object> getSystemStatus();
+
+    /**
+     * 获取热门课程
+     * @return 热门课程信息
+     */
+    Map<String, Object> getPopularCourses();
+
+    /**
+     * 获取所有课程
+     * @return 所有课程信息
+     */
+    Map<String, Object> getAllCourses();
+
+    /**
+     * 获取指定课程近7天访问量趋势
+     * @param courseId 课程ID
+     * @return 访问量趋势数据
+     */
+    Map<String, Object> getCourseVisitTrend(Long courseId);
+}

+ 54 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/PlatformStatusOverviewServiceImpl.java

@@ -0,0 +1,54 @@
+package vip.xiaonuo.disk.service.impl;
+
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.disk.mapper.PlatformStatusOverviewMapper;
+import vip.xiaonuo.disk.service.PlatformStatusOverviewService;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 平台运行状态总览服务实现类
+ * @author pans
+ */
+@Service
+public class PlatformStatusOverviewServiceImpl implements PlatformStatusOverviewService {
+
+    @Resource
+    private PlatformStatusOverviewMapper platformStatusOverviewMapper;
+
+    @Override
+    public Map<String, Object> getSystemStatus() {
+        return platformStatusOverviewMapper.getSystemStatus();
+    }
+
+    @Override
+    public Map<String, Object> getPopularCourses() {
+        Map<String, Object> result = new HashMap<>();
+        // 获取热门课程数据
+        List<Map<String, Object>> popularCourses = platformStatusOverviewMapper.getPopularCourses();
+        result.put("popularCourses", popularCourses);
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getAllCourses() {
+        Map<String, Object> result = new HashMap<>();
+        // 获取所有课程数据
+        List<Map<String, Object>> allCourses = platformStatusOverviewMapper.getAllCourses();
+        result.put("allCourses", allCourses);
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getCourseVisitTrend(Long courseId) {
+        Map<String, Object> result = new HashMap<>();
+        // 获取近7天访问量趋势
+        List<Map<String, Object>> visitTrend = platformStatusOverviewMapper.getCourseVisitTrend(courseId);
+        result.put("visitTrend", visitTrend);
+
+        return result;
+    }
+}