diff --git a/web/src/main/java/com/ibeetl/jlw/dao/StudentDao.java b/web/src/main/java/com/ibeetl/jlw/dao/StudentDao.java
index 7a438ff3..bf7d1cd1 100644
--- a/web/src/main/java/com/ibeetl/jlw/dao/StudentDao.java
+++ b/web/src/main/java/com/ibeetl/jlw/dao/StudentDao.java
@@ -5,9 +5,9 @@ import com.ibeetl.jlw.entity.CourseInfo;
 import com.ibeetl.jlw.entity.Student;
 import com.ibeetl.jlw.entity.StudentExtendSchoolInfo;
 import com.ibeetl.jlw.entity.api.student.StudentActiveInfo;
-import com.ibeetl.jlw.entity.dto.ApplicationUseLogsAnalysisDTO;
+import com.ibeetl.jlw.entity.dto.SystemUseLogsAnalysisDTO;
 import com.ibeetl.jlw.entity.dto.StudentEditPasswordDTO;
-import com.ibeetl.jlw.entity.vo.ApplicationUseLogsAnalysisVO;
+import com.ibeetl.jlw.entity.vo.SystemUseLogsAnalysisVO;
 import com.ibeetl.jlw.entity.vo.StudentLogAnalysisVO;
 import com.ibeetl.jlw.entity.vo.StudentLoginLogVO;
 import com.ibeetl.jlw.entity.vo.StudentUseLogVO;
@@ -91,5 +91,5 @@ public interface StudentDao extends BaseMapper<Student>{
      * @param dto
      * @return
      */
-    PageQuery<ApplicationUseLogsAnalysisVO> applicationUseLogsAnalysis(PageQuery<ApplicationUseLogsAnalysisDTO> dto);
+    PageQuery<SystemUseLogsAnalysisVO> applicationUseLogsAnalysis(PageQuery<SystemUseLogsAnalysisDTO> dto);
 }
\ No newline at end of file
diff --git a/web/src/main/java/com/ibeetl/jlw/dao/SysLogDao.java b/web/src/main/java/com/ibeetl/jlw/dao/SysLogDao.java
index b116cd04..8a36a7e9 100644
--- a/web/src/main/java/com/ibeetl/jlw/dao/SysLogDao.java
+++ b/web/src/main/java/com/ibeetl/jlw/dao/SysLogDao.java
@@ -1,6 +1,7 @@
 package com.ibeetl.jlw.dao;
 
 import com.ibeetl.jlw.entity.SysLog;
+import com.ibeetl.jlw.web.AnalysisController;
 import org.beetl.sql.core.engine.PageQuery;
 import org.beetl.sql.mapper.BaseMapper;
 import org.beetl.sql.mapper.annotation.SqlResource;
@@ -34,5 +35,6 @@ public interface SysLogDao extends BaseMapper<SysLog> {
 
     List<Map<String, Object>> visitGoodsNum(Date startTime, Date endTime);
 
+    List<AnalysisController.SystemUseCountVO> systemUseLogsAnalysis(AnalysisController.SystemUseCountDTO dto);
 
 }
\ No newline at end of file
diff --git a/web/src/main/java/com/ibeetl/jlw/entity/dto/ApplicationUseLogsAnalysisDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/dto/SystemUseLogsAnalysisDTO.java
similarity index 83%
rename from web/src/main/java/com/ibeetl/jlw/entity/dto/ApplicationUseLogsAnalysisDTO.java
rename to web/src/main/java/com/ibeetl/jlw/entity/dto/SystemUseLogsAnalysisDTO.java
index 5aa2df3c..06e8a970 100644
--- a/web/src/main/java/com/ibeetl/jlw/entity/dto/ApplicationUseLogsAnalysisDTO.java
+++ b/web/src/main/java/com/ibeetl/jlw/entity/dto/SystemUseLogsAnalysisDTO.java
@@ -7,14 +7,14 @@ import java.util.Date;
 
 /**
  * 功能描述: <br>
- * 子系统应用,使用时间的统计分析实体
+ * 各模块,使用时间的统计分析实体
  * @author: mlx
  * @description:
  * @date: 2023/3/15 23:02
  * @version: 1.0
  */
 @Data
-public class ApplicationUseLogsAnalysisDTO extends PageParam {
+public class SystemUseLogsAnalysisDTO extends PageParam {
 
     /**
      * 使用时间-开始时间
diff --git a/web/src/main/java/com/ibeetl/jlw/entity/vo/ApplicationUseLogsAnalysisVO.java b/web/src/main/java/com/ibeetl/jlw/entity/vo/SystemUseLogsAnalysisVO.java
similarity index 80%
rename from web/src/main/java/com/ibeetl/jlw/entity/vo/ApplicationUseLogsAnalysisVO.java
rename to web/src/main/java/com/ibeetl/jlw/entity/vo/SystemUseLogsAnalysisVO.java
index 1cb3e35d..b8755570 100644
--- a/web/src/main/java/com/ibeetl/jlw/entity/vo/ApplicationUseLogsAnalysisVO.java
+++ b/web/src/main/java/com/ibeetl/jlw/entity/vo/SystemUseLogsAnalysisVO.java
@@ -12,16 +12,12 @@ import lombok.Data;
  * @version: 1.0
  */
 @Data
-public class ApplicationUseLogsAnalysisVO extends BaseEntity {
+public class SystemUseLogsAnalysisVO extends BaseEntity {
 
     /**
-     * 子系统名称
+     * 日志名称(原型图上写的是子系统名称,其实不是)
      */
-    private String applicationName;
-    /**
-     * 子系统ID
-     */
-    private String applicationId;
+    private String name;
     /**
      * 归属模块
      */
diff --git a/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java b/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java
new file mode 100644
index 00000000..1d5d1b48
--- /dev/null
+++ b/web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java
@@ -0,0 +1,67 @@
+package com.ibeetl.jlw.job;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.ibeetl.jlw.entity.SysLog;
+import com.ibeetl.jlw.service.SysLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.Set;
+
+import static cn.hutool.core.date.DatePattern.NORM_DATETIME_MINUTE_PATTERN;
+import static com.ibeetl.admin.core.service.CorePlatformService.TOKEN_KEY;
+
+/**
+ * 在线人数统计脚本
+ *
+ * 每过15分钟 执行一次任务
+ * 0 0/15 * * * ?
+ * 00:15  00:30  00:45
+ * @author lx
+ */
+@Slf4j
+@Component
+public class OnLineRecordJob implements Job {
+
+    // 存到日志中方法名
+    public final static String ON_LINE_METHOD_NAME = "com.ibeetl.jlw.job.OnLineRecordJob.execute";
+
+    @Autowired
+    private SysLogService sysLogService;
+    @Autowired
+    private StringRedisTemplate stringRedisTemplate;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        try {
+
+            // 查询redis中现在还存在的session Key数量
+            Set<String> keys = CollUtil.emptyIfNull(stringRedisTemplate.keys(TOKEN_KEY + ":*"));
+
+            SysLog model = new SysLog();
+            // 格式化到分钟
+            Date nowDate = DateUtil.parse(DateUtil.now(), NORM_DATETIME_MINUTE_PATTERN);
+
+            // 这里固定该接口的请求路径
+            model.setMethod(ON_LINE_METHOD_NAME);
+            model.setRequestUrl("在线人数统计");
+            model.setParams("");
+            model.setResult(keys.size() + "");
+            model.setIp("127.0.0.1");
+            model.setCreateTime(nowDate);
+            model.setResultTime(nowDate);
+            sysLogService.insert(model);
+
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.toString());
+        }
+    }
+}
diff --git a/web/src/main/java/com/ibeetl/jlw/service/AnalysisService.java b/web/src/main/java/com/ibeetl/jlw/service/AnalysisService.java
new file mode 100644
index 00000000..1a09160f
--- /dev/null
+++ b/web/src/main/java/com/ibeetl/jlw/service/AnalysisService.java
@@ -0,0 +1,54 @@
+package com.ibeetl.jlw.service;
+
+import com.ibeetl.jlw.dao.StudentDao;
+import com.ibeetl.jlw.dao.SysLogDao;
+import com.ibeetl.jlw.entity.dto.SystemUseLogsAnalysisDTO;
+import com.ibeetl.jlw.entity.vo.SystemUseLogsAnalysisVO;
+import com.ibeetl.jlw.web.AnalysisController;
+import lombok.extern.slf4j.Slf4j;
+import org.beetl.sql.core.SQLManager;
+import org.beetl.sql.core.engine.PageQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 功能描述: <br>
+ *
+ * @author: mlx
+ * @description:
+ * @date: 2023/3/18 16:26
+ * @version: 1.0
+ */
+@Slf4j
+@Transactional
+@Service
+public class AnalysisService {
+
+    @Autowired
+    private StudentDao studentDao;
+    @Resource
+    private SQLManager sqlManager;
+
+    /**
+     * 系统日志分析
+     *
+     * @param dto
+     * @return
+     */
+    public List<AnalysisController.SystemUseCountVO> systemUseLogsAnalysis(AnalysisController.SystemUseCountDTO dto) {
+        return sqlManager.getMapper(SysLogDao.class).systemUseLogsAnalysis(dto);
+    }
+
+    /**
+     * 分页查询使用记录,院校级别的统计。不关心哪个用户
+     * @param page
+     * @return
+     */
+    public PageQuery<SystemUseLogsAnalysisVO> applicationUseLogsAnalysis(PageQuery<SystemUseLogsAnalysisDTO> page) {
+        return studentDao.applicationUseLogsAnalysis(page);
+    }
+}
diff --git a/web/src/main/java/com/ibeetl/jlw/service/StudentService.java b/web/src/main/java/com/ibeetl/jlw/service/StudentService.java
index 3fb448d1..11e00232 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/StudentService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/StudentService.java
@@ -23,8 +23,6 @@ import com.ibeetl.admin.core.web.JsonReturnCode;
 import com.ibeetl.jlw.dao.SchoolClassDao;
 import com.ibeetl.jlw.dao.StudentDao;
 import com.ibeetl.jlw.entity.*;
-import com.ibeetl.jlw.entity.dto.ApplicationUseLogsAnalysisDTO;
-import com.ibeetl.jlw.entity.vo.ApplicationUseLogsAnalysisVO;
 import com.ibeetl.jlw.entity.vo.StudentLogAnalysisVO;
 import com.ibeetl.jlw.entity.vo.StudentLoginLogVO;
 import com.ibeetl.jlw.entity.vo.StudentUseLogVO;
@@ -1003,15 +1001,6 @@ public class StudentService extends CoreBaseService<Student>{
         }
     }
 
-    /**
-     * 分页查询使用记录,院校级别的统计。不关心哪个用户
-     * @param page
-     * @return
-     */
-    public PageQuery<ApplicationUseLogsAnalysisVO> applicationUseLogsAnalysis(PageQuery<ApplicationUseLogsAnalysisDTO> page) {
-        return studentDao.applicationUseLogsAnalysis(page);
-    }
-
     //大赛任务二答卷 线程处理
     private class TaskCallableForCT2Q implements Callable<Boolean> {
         CompetitionTaskSecondQuestionStepQuery condition;
diff --git a/web/src/main/java/com/ibeetl/jlw/web/AnalysisController.java b/web/src/main/java/com/ibeetl/jlw/web/AnalysisController.java
new file mode 100644
index 00000000..9170e326
--- /dev/null
+++ b/web/src/main/java/com/ibeetl/jlw/web/AnalysisController.java
@@ -0,0 +1,114 @@
+package com.ibeetl.jlw.web;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import cn.jlw.Interceptor.SCoreUser;
+import com.ibeetl.admin.core.entity.CoreUser;
+import com.ibeetl.admin.core.web.JsonResult;
+import com.ibeetl.jlw.entity.dto.SystemUseLogsAnalysisDTO;
+import com.ibeetl.jlw.entity.vo.SystemUseLogsAnalysisVO;
+import com.ibeetl.jlw.service.AnalysisService;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.beetl.sql.core.engine.PageQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+
+import static com.ibeetl.admin.core.util.ExcelUtil.write;
+import static com.ibeetl.jlw.job.OnLineRecordJob.ON_LINE_METHOD_NAME;
+
+/**
+ * 功能描述: <br>
+ *
+ * @author: mlx
+ * @description:
+ * @date: 2023/3/18 16:07
+ * @version: 1.0
+ */
+@Slf4j
+@RestController
+public class AnalysisController extends BaseController {
+
+    private static final String MODEL = "/jlw/analysis";
+    private static final String API = "/api/analysis";
+
+    @Autowired
+    private AnalysisService analysisService;
+
+    /**
+     * 元宵在线人数折线图  查询条件
+     */
+    @Data
+    public static class SystemUseCountDTO {
+
+        // 选择日期
+        private Date day;
+        // 日志中的某个字段
+        private String requestUrl;
+        // 日志中的某个字段
+        private String method;
+    }
+    /**
+     * 元宵在线人数折线图  查询条件
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class SystemUseCountVO {
+
+        // 选择日期
+        private String time;
+        // 选择日期
+        private Long count;
+    }
+
+    @PostMapping(MODEL + "/systemUseLogsAnalysis.json")
+    @ResponseBody
+    public JsonResult<List<SystemUseCountVO>> systemUseLogsAnalysis(SystemUseCountDTO dto, @SCoreUser CoreUser coreUser){
+        dto.setMethod(ON_LINE_METHOD_NAME);
+        dto.setRequestUrl("在线人数统计");
+        return JsonResult.success(analysisService.systemUseLogsAnalysis(dto));
+    }
+    /**
+     * 分页查询使用记录,院校级别的统计。不关心哪个用户
+     * TODO 理想 这里还没写完。
+     * @param dto
+     * @return
+     */
+    @PostMapping(MODEL + "/applicationUseLogsAnalysis.json")
+    @ResponseBody
+    public JsonResult applicationUseLogsAnalysis(SystemUseLogsAnalysisDTO dto, @SCoreUser CoreUser coreUser) {
+        return JsonResult.success(analysisService.applicationUseLogsAnalysis(dto.getPageQuery()));
+    }
+
+    /**
+     * 功能描述: <br>
+     * 学生登录日志 导出
+     *
+     * @param condition
+     * @param coreUser
+     * @Author: lx
+     * @Date: 2022/12/17 3:34
+     */
+    @GetMapping(MODEL + "/applicationUseLogsAnalysisExport.json")
+    @ResponseBody
+    public String applicationUseLogsAnalysisExport(SystemUseLogsAnalysisDTO condition, @SCoreUser CoreUser coreUser) throws IOException {
+        Assert.isFalse(coreUser.isStudent(), "暂无权限访问!");
+
+        condition.setPage(1); condition.setLimit(Integer.MAX_VALUE + 0L);
+        PageQuery<SystemUseLogsAnalysisVO> page = analysisService.applicationUseLogsAnalysis(condition.getPageQuery());
+
+        String filename = StrUtil.format("院校使用日志导出{}.xlsx", System.currentTimeMillis());
+        write(response, filename, "Sheet1", SystemUseLogsAnalysisVO.class, page.getList());
+        return null;
+    }
+}
diff --git a/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java b/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java
index 188d3296..d392b52b 100644
--- a/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java
+++ b/web/src/main/java/com/ibeetl/jlw/web/ApplicationRunnerController.java
@@ -154,6 +154,17 @@ public class ApplicationRunnerController implements ApplicationRunner {
             quartzService.save(quartz, null);
         }
 
+        {
+            Quartz quartz = new Quartz();
+            quartz.setJobName("启动OnLineRecordJob");
+            quartz.setJobGroup("定时任务在线人数统计脚本");
+            quartz.setJobClassName("com.ibeetl.jlw.job.OnLineRecordJob");
+            quartz.setDescription("计划任务启动OnLineRecordJob");
+            // 每过15分钟 执行一次任务
+            quartz.setCronExpression("0 0/15 * * * ?");
+            quartzService.save(quartz, null);
+        }
+
         System.out.println("启动加载用时:" + (System.currentTimeMillis() - l));
     }
 }
diff --git a/web/src/main/java/com/ibeetl/jlw/web/IndexController.java b/web/src/main/java/com/ibeetl/jlw/web/IndexController.java
index 2d9eb784..7addb9a0 100644
--- a/web/src/main/java/com/ibeetl/jlw/web/IndexController.java
+++ b/web/src/main/java/com/ibeetl/jlw/web/IndexController.java
@@ -1077,4 +1077,5 @@ public class IndexController {
 	public String weixinTextAuth() {
 		return environment.getProperty("weinxin.auth-text-value", "kR8QcYpBTyrYJWvG");
 	}
+
 }
diff --git a/web/src/main/java/com/ibeetl/jlw/web/StudentController.java b/web/src/main/java/com/ibeetl/jlw/web/StudentController.java
index 6c6efa41..6312a08e 100644
--- a/web/src/main/java/com/ibeetl/jlw/web/StudentController.java
+++ b/web/src/main/java/com/ibeetl/jlw/web/StudentController.java
@@ -24,10 +24,10 @@ import com.ibeetl.admin.core.util.TimeTool;
 import com.ibeetl.admin.core.web.JsonResult;
 import com.ibeetl.jlw.dao.SchoolClassDao;
 import com.ibeetl.jlw.entity.*;
-import com.ibeetl.jlw.entity.dto.ApplicationUseLogsAnalysisDTO;
+import com.ibeetl.jlw.entity.dto.SystemUseLogsAnalysisDTO;
 import com.ibeetl.jlw.entity.dto.StudentBatchImportAdminDTO;
 import com.ibeetl.jlw.entity.dto.StudentBatchImportUniAdminDTO;
-import com.ibeetl.jlw.entity.vo.ApplicationUseLogsAnalysisVO;
+import com.ibeetl.jlw.entity.vo.SystemUseLogsAnalysisVO;
 import com.ibeetl.jlw.entity.vo.StudentLogAnalysisVO;
 import com.ibeetl.jlw.entity.vo.StudentLoginLogVO;
 import com.ibeetl.jlw.entity.vo.StudentUseLogVO;
@@ -3013,39 +3013,4 @@ public class StudentController extends BaseController{
             listener.putFailMessage(e.getMessage());
         }
     }
-
-    /**
-     * 分页查询使用记录,院校级别的统计。不关心哪个用户
-     * TODO 理想 这里还没写完。
-     * @param dto
-     * @return
-     */
-    @PostMapping(MODEL + "/applicationUseLogsAnalysis.json")
-    @ResponseBody
-    public JsonResult applicationUseLogsAnalysis(ApplicationUseLogsAnalysisDTO dto, @SCoreUser CoreUser coreUser) {
-        return JsonResult.success(studentService.applicationUseLogsAnalysis(dto.getPageQuery()));
-    }
-
-    /**
-     * 功能描述: <br>
-     * 学生登录日志 导出
-     *
-     * @param condition
-     * @param coreUser
-     * @Author: lx
-     * @Date: 2022/12/17 3:34
-     */
-    @GetMapping(MODEL + "/applicationUseLogsAnalysisExport.json")
-    @ResponseBody
-    public String applicationUseLogsAnalysisExport(ApplicationUseLogsAnalysisDTO condition, @SCoreUser CoreUser coreUser) throws IOException {
-        Assert.isFalse(coreUser.isStudent(), "暂无权限访问!");
-
-        condition.setPage(1); condition.setLimit(Integer.MAX_VALUE + 0L);
-        PageQuery<ApplicationUseLogsAnalysisVO> page = studentService.applicationUseLogsAnalysis(condition.getPageQuery());
-
-        String filename = StrUtil.format("院校使用日志导出{}.xlsx", System.currentTimeMillis());
-        write(response, filename, "Sheet1", ApplicationUseLogsAnalysisVO.class, page.getList());
-        return null;
-    }
-
 }
diff --git a/web/src/main/resources/sql/jlw/sysLog.md b/web/src/main/resources/sql/jlw/sysLog.md
index 080db07d..1a13cbf6 100644
--- a/web/src/main/resources/sql/jlw/sysLog.md
+++ b/web/src/main/resources/sql/jlw/sysLog.md
@@ -206,4 +206,29 @@ listTimeRangeVisitGoods
 
 
 
+systemUseLogsAnalysis
+===
+* 系统使用分析
+
+ select count(1) as count,
+ @// 如果没指定天数,则默认是月度统计
+ @if(!isEmpty(day)) {
+ DATE_FORMAT(create_time, '%Y-%m-%d') as time
+ @} else {
+ DATE_FORMAT(create_time, '%Y-%m') as time
+ @}
+
+ from sys_log t
+ where t.request_url = #requestUrl#
+ where t.method = #method#
+ group by 1
+
+ @if(!isEmpty(day)) {
+ and DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(#day#, '%Y-%m-%d')
+ order by DATE_FORMAT(create_time, '%Y-%m-%d') asc
+ @// 如果没指定天数,则默认是月度统计
+ @} else {
+ order by DATE_FORMAT(create_time, '%Y-%m') asc
+ @}
+ 
         
\ No newline at end of file
diff --git a/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md b/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md
index 61869bda..a633b821 100644
--- a/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md
+++ b/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md
@@ -278,7 +278,7 @@ studentScoreList
   @}
   from (
     SELECT
-      *
+      distinct *
     FROM
     (
     SELECT