统计在线人数

beetlsql3-dev
Mlxa0324 2 years ago
parent 260581b550
commit 3801ef6ee0

@ -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);
}

@ -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);
}

@ -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 {
/**
* 使-

@ -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;
/**
*
*/

@ -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());
}
}
}

@ -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);
}
}

@ -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;

@ -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;
}
}

@ -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));
}
}

@ -1077,4 +1077,5 @@ public class IndexController {
public String weixinTextAuth() {
return environment.getProperty("weinxin.auth-text-value", "kR8QcYpBTyrYJWvG");
}
}

@ -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;
}
}

@ -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
@}

@ -278,7 +278,7 @@ studentScoreList
@}
from (
SELECT
*
distinct *
FROM
(
SELECT

Loading…
Cancel
Save