From 3801ef6ee0168989a784ff09a24adf089a71ddde Mon Sep 17 00:00:00 2001 From: Mlxa0324 Date: Sat, 18 Mar 2023 17:05:01 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=9C=A8=E7=BA=BF=E4=BA=BA?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ibeetl/jlw/dao/StudentDao.java | 6 +- .../java/com/ibeetl/jlw/dao/SysLogDao.java | 2 + ...DTO.java => SystemUseLogsAnalysisDTO.java} | 4 +- ...isVO.java => SystemUseLogsAnalysisVO.java} | 10 +- .../com/ibeetl/jlw/job/OnLineRecordJob.java | 67 ++++++++++ .../ibeetl/jlw/service/AnalysisService.java | 54 +++++++++ .../ibeetl/jlw/service/StudentService.java | 11 -- .../ibeetl/jlw/web/AnalysisController.java | 114 ++++++++++++++++++ .../jlw/web/ApplicationRunnerController.java | 11 ++ .../com/ibeetl/jlw/web/IndexController.java | 1 + .../com/ibeetl/jlw/web/StudentController.java | 39 +----- web/src/main/resources/sql/jlw/sysLog.md | 25 ++++ .../sql/jlw/teacherOpenCourseQuestionLog.md | 2 +- 13 files changed, 285 insertions(+), 61 deletions(-) rename web/src/main/java/com/ibeetl/jlw/entity/dto/{ApplicationUseLogsAnalysisDTO.java => SystemUseLogsAnalysisDTO.java} (83%) rename web/src/main/java/com/ibeetl/jlw/entity/vo/{ApplicationUseLogsAnalysisVO.java => SystemUseLogsAnalysisVO.java} (80%) create mode 100644 web/src/main/java/com/ibeetl/jlw/job/OnLineRecordJob.java create mode 100644 web/src/main/java/com/ibeetl/jlw/service/AnalysisService.java create mode 100644 web/src/main/java/com/ibeetl/jlw/web/AnalysisController.java 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{ * @param dto * @return */ - PageQuery applicationUseLogsAnalysis(PageQuery dto); + PageQuery applicationUseLogsAnalysis(PageQuery 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 { List> visitGoodsNum(Date startTime, Date endTime); + List 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; /** * 功能描述:
- * 子系统应用,使用时间的统计分析实体 + * 各模块,使用时间的统计分析实体 * @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 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; + +/** + * 功能描述:
+ * + * @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 systemUseLogsAnalysis(AnalysisController.SystemUseCountDTO dto) { + return sqlManager.getMapper(SysLogDao.class).systemUseLogsAnalysis(dto); + } + + /** + * 分页查询使用记录,院校级别的统计。不关心哪个用户 + * @param page + * @return + */ + public PageQuery applicationUseLogsAnalysis(PageQuery 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{ } } - /** - * 分页查询使用记录,院校级别的统计。不关心哪个用户 - * @param page - * @return - */ - public PageQuery applicationUseLogsAnalysis(PageQuery page) { - return studentDao.applicationUseLogsAnalysis(page); - } - //大赛任务二答卷 线程处理 private class TaskCallableForCT2Q implements Callable { 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; + +/** + * 功能描述:
+ * + * @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> 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())); + } + + /** + * 功能描述:
+ * 学生登录日志 导出 + * + * @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 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())); - } - - /** - * 功能描述:
- * 学生登录日志 导出 - * - * @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 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