diff --git a/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java b/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java index 4483a775..0d20d50d 100644 --- a/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java +++ b/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java @@ -12,7 +12,9 @@ import com.auth0.jwt.interfaces.Claim; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.enums.MenuEnums; import com.ibeetl.admin.core.service.CoreUserService; +import com.ibeetl.jlw.dao.StudentTeacherSystemUseLogAnalysisDao; import com.ibeetl.jlw.dao.SysLogDao; +import com.ibeetl.jlw.entity.StudentTeacherSystemUseLogAnalysis; import com.ibeetl.jlw.entity.SysLog; import com.ibeetl.jlw.service.SysLogService; import lombok.extern.slf4j.Slf4j; @@ -53,6 +55,8 @@ public class KeyExpiredListener extends KeyExpirationEventMessageListener { @Autowired private SysLogDao sysLogDao; + @Autowired + private StudentTeacherSystemUseLogAnalysisDao studentTeacherSystemUseLogAnalysisDao; public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); @@ -123,6 +127,15 @@ public class KeyExpiredListener extends KeyExpirationEventMessageListener { sysLog.setStudentId(Long.valueOf(realId)); } sysLogService.insert(sysLog); + + List teacherSystemUseLogAnalyses = studentTeacherSystemUseLogAnalysisDao.getSQLManager() + .lambdaQuery(StudentTeacherSystemUseLogAnalysis.class) + .andIsNull(StudentTeacherSystemUseLogAnalysis::getDayTime).select(); + teacherSystemUseLogAnalyses.forEach(item ->{ + long time = (Objects.isNull(item.getAddTime()) ? 0 : item.getAddTime().getTime()) + (Objects.isNull(item.getUseDuration()) ? 0 : (item.getUseDuration() * 60 * 1000)); + item.setDayTime(DateUtil.formatDateTime(DateUtil.date(time))); + studentTeacherSystemUseLogAnalysisDao.updateTemplateById(item); + }); } } catch (Exception e) { 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 aae155a1..048ee945 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/StudentDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/StudentDao.java @@ -49,6 +49,13 @@ public interface StudentDao extends BaseMapper{ } List getStudentLog (StudentQuery studentQuery); PageQuery queryStudentUseLogByCondition(PageQuery query); + + /** + * 系统日志-使用日志 + * @param query + * @return + */ + PageQuery queryStudentTeacherOrUseLogBy(PageQuery query); PageQuery queryStudentLoginLogByCondition(PageQuery query); /** diff --git a/web/src/main/java/com/ibeetl/jlw/entity/StudentTeacherSystemUseLogAnalysis.java b/web/src/main/java/com/ibeetl/jlw/entity/StudentTeacherSystemUseLogAnalysis.java index 08393673..93914b75 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/StudentTeacherSystemUseLogAnalysis.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/StudentTeacherSystemUseLogAnalysis.java @@ -165,7 +165,7 @@ public class StudentTeacherSystemUseLogAnalysis extends BaseEntity{ public String getDayTime(){ return dayTime; } - /**日期 + /**日期(修改成登出时间) *@param dayTime */ public void setDayTime(String dayTime){ diff --git a/web/src/main/java/com/ibeetl/jlw/entity/vo/StudentLoginLogVO.java b/web/src/main/java/com/ibeetl/jlw/entity/vo/StudentLoginLogVO.java index 47c130ce..df1efd9c 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/vo/StudentLoginLogVO.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/vo/StudentLoginLogVO.java @@ -57,44 +57,38 @@ public class StudentLoginLogVO extends BaseEntity { /** * 班级名称 */ -// @ExcelProperty(value = "班级名称", index = 4) + @ExcelProperty(value = "班级名称", index = 4) private String className; /** * 登入时间 */ -// @ExcelProperty(value = "登入时间", index = 5) - @ExcelProperty(value = "登入时间", index = 4) + @ExcelProperty(value = "登入时间", index = 5) private String loginTime; /** * 登出时间 */ -// @ExcelProperty(value = "登出时间", index = 6) - @ExcelProperty(value = "登出时间", index = 5) + @ExcelProperty(value = "登出时间", index = 6) private String logoutTime; /** * 指定时间内的,在线时长 */ -// @ExcelProperty(value = "在线时长", index = 7) - @ExcelProperty(value = "在线时长", index = 6) + @ExcelProperty(value = "在线时长", index = 7) private String onlineDuration; /** * 是否在线 */ -// @ExcelProperty(value = "是否在线", index = 8) - @ExcelProperty(value = "是否在线", index = 7) + @ExcelProperty(value = "是否在线", index = 8) private Boolean isOnLine; /** * 登录IP */ -// @ExcelProperty(value = "登录IP", index = 9) - @ExcelProperty(value = "登录IP", index = 8) + @ExcelProperty(value = "登录IP", index = 9) private String ip; /** * IP所属地 */ -// @ExcelProperty(value = "IP所属地", index = 10) - @ExcelProperty(value = "IP所属地", index = 9) + @ExcelProperty(value = "IP所属地", index = 10) private String ipAddress; /** * 登录次数 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 c9484568..ce7f34f0 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/StudentService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/StudentService.java @@ -224,7 +224,8 @@ public class StudentService extends CoreBaseService{ if (null != uniAdmin) { query.setPara("universitiesCollegesId", uniAdmin.getUniversitiesCollegesId()); } - return studentDao.queryStudentUseLogByCondition(query); +// return studentDao.queryStudentUseLogByCondition(query); + return studentDao.queryStudentTeacherOrUseLogBy(query); } /** diff --git a/web/src/main/java/com/ibeetl/jlw/service/StudentTeacherSystemUseLogAnalysisService.java b/web/src/main/java/com/ibeetl/jlw/service/StudentTeacherSystemUseLogAnalysisService.java index b1b04840..a6e834d3 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/StudentTeacherSystemUseLogAnalysisService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/StudentTeacherSystemUseLogAnalysisService.java @@ -49,9 +49,10 @@ import static com.ibeetl.admin.core.util.ExcelUtil.getCellFormatValue; @Service @Transactional @Validated -public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService{ +public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService { - @Autowired private StudentTeacherSystemUseLogAnalysisDao studentTeacherSystemUseLogAnalysisDao; + @Autowired + private StudentTeacherSystemUseLogAnalysisDao studentTeacherSystemUseLogAnalysisDao; @Autowired private StudentService studentService; @Autowired @@ -59,30 +60,30 @@ public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseServicequeryByCondition(PageQuery query){ - PageQuery ret = studentTeacherSystemUseLogAnalysisDao.queryByCondition(query); + public PageQuery queryByCondition(PageQuery query) { + PageQuery ret = studentTeacherSystemUseLogAnalysisDao.queryByCondition(query); queryListAfter(ret.getList()); return ret; } - public PageQueryqueryByConditionQuery(PageQuery query){ - PageQuery ret = studentTeacherSystemUseLogAnalysisDao.queryByConditionQuery(query); + public PageQuery queryByConditionQuery(PageQuery query) { + PageQuery ret = studentTeacherSystemUseLogAnalysisDao.queryByConditionQuery(query); queryListAfter(ret.getList()); return ret; } - public void deleteByList(List list){ + public void deleteByList(List list) { String ids = ""; ToolUtils.deleteNullList(list); - for(int i=0;null != list && i studentTeacherSystemUseLogAnalysisList = new ArrayList<>(); try { @@ -98,11 +99,12 @@ public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService0){ - for(int i=0;i 0) { + for (int i = 0; i < studentTeacherSystemUseLogAnalysisList.size(); i++) { StudentTeacherSystemUseLogAnalysis studentTeacherSystemUseLogAnalysis = studentTeacherSystemUseLogAnalysisList.get(i); studentTeacherSystemUseLogAnalysis.setUserId(studentTeacherSystemUseLogAnalysisQuery.getUserId()); studentTeacherSystemUseLogAnalysis.setOrgId(studentTeacherSystemUseLogAnalysisQuery.getOrgId()); @@ -112,7 +114,7 @@ public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService 0; - if(!flag){ + if (!flag) { msg = "更新指定参数失败"; } - }else{ + } else { msg = "指定参数为空"; } return msg; } - public List getValues (Object paras){ + public List getValues(Object paras) { return sqlManager.select(SqlId.of("jlw.studentTeacherSystemUseLogAnalysis.getStudentTeacherSystemUseLogAnalysisValues"), StudentTeacherSystemUseLogAnalysis.class, paras); } - public List getValuesByQuery (StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery){ + public List getValuesByQuery(StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery) { return studentTeacherSystemUseLogAnalysisDao.getValuesByQuery(studentTeacherSystemUseLogAnalysisQuery); } - public List getValuesByQueryNotWithPermission (StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery){ + public List getValuesByQueryNotWithPermission(StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery) { return studentTeacherSystemUseLogAnalysisDao.getValuesByQueryNotWithPermission(studentTeacherSystemUseLogAnalysisQuery); } - public StudentTeacherSystemUseLogAnalysis getInfo (Long id){ + public StudentTeacherSystemUseLogAnalysis getInfo(Long id) { StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery = new StudentTeacherSystemUseLogAnalysisQuery(); studentTeacherSystemUseLogAnalysisQuery.setId(id); List list = studentTeacherSystemUseLogAnalysisDao.getValuesByQuery(studentTeacherSystemUseLogAnalysisQuery); - if(null != list && list.size()>0){ + if (null != list && list.size() > 0) { return list.get(0); - }else{ + } else { return null; } } - public StudentTeacherSystemUseLogAnalysis getInfo (StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery){ + public StudentTeacherSystemUseLogAnalysis getInfo(StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery) { List list = studentTeacherSystemUseLogAnalysisDao.getValuesByQuery(studentTeacherSystemUseLogAnalysisQuery); - if(null != list && list.size()>0){ + if (null != list && list.size() > 0) { return list.get(0); - }else{ + } else { return null; } } - public JsonResult importTemplate(List fileEntityList,Listlist,CoreUser coreUser){ - ListerrMsg = new ArrayList<>(); - String msg =""; + public JsonResult importTemplate(List fileEntityList, List list, CoreUser coreUser) { + List errMsg = new ArrayList<>(); + String msg = ""; int count = 0; Date date = new Date(); - for(int item=0;null != fileEntityList && item map = new HashMap<>();//获取需要的表头的列 + Map map = new HashMap<>();//获取需要的表头的列 //从第一列找到需要的表头 - for (int i=0; i0?JsonReturnCode.SUCCESS.getCode():JsonReturnCode.FAIL.getCode()); + jsonResult.setCode(count > 0 ? JsonReturnCode.SUCCESS.getCode() : JsonReturnCode.FAIL.getCode()); jsonResult.setData(errMsg); - jsonResult.setMsg((count>0?"导入成功,共导入"+count+"条":"导入失败")+(StringUtils.isNotBlank(msg)?"
"+msg:"")); + jsonResult.setMsg((count > 0 ? "导入成功,共导入" + count + "条" : "导入失败") + (StringUtils.isNotBlank(msg) ? "
" + msg : "")); return jsonResult; } - public List> getExcelValues (StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery){ + public List> getExcelValues(StudentTeacherSystemUseLogAnalysisQuery studentTeacherSystemUseLogAnalysisQuery) { return studentTeacherSystemUseLogAnalysisDao.getExcelValues(studentTeacherSystemUseLogAnalysisQuery); } /** * 分页查询使用记录,院校级别的统计。不关心哪个用户 + * * @param page * @return */ @@ -379,28 +373,97 @@ public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService logAnalysisList = getValuesByQueryNotWithPermission(query); +// +// // 如果查询到数据,则追加使用时长(分钟) +// if (CollectionUtil.isNotEmpty(logAnalysisList)) { +// StudentTeacherSystemUseLogAnalysis logAnalysis = getFirst(logAnalysisList); +// logAnalysis.setUseDuration(defaultIfNull(logAnalysis.getUseDuration(), 0L) + appendUseDuration); +// updateTemplate(logAnalysis); +// } +// +// // 否则新增一条数据 +// else { +// StudentTeacherSystemUseLogAnalysis useLogAnalysis = new StudentTeacherSystemUseLogAnalysis(); +// useLogAnalysis.setFirstName(firstName); +// useLogAnalysis.setSecondName(secondName); +// useLogAnalysis.setUniversitiesCollegesName(universitiesCollegesName); +// useLogAnalysis.setUniversitiesCollegesId(universitiesCollegesId); +// useLogAnalysis.setUserType(useType); +// useLogAnalysis.setProvince(province); +// useLogAnalysis.setDayTime(today); +// useLogAnalysis.setUseDuration(appendUseDuration); +// useLogAnalysis.setAddTime(now()); +// useLogAnalysis.setOrgId(orgId); +// useLogAnalysis.setUserId(userId); +// +// insert(useLogAnalysis); +// } + + // 追加的使用时长 + Long appendUseDuration = defaultIfNull(dto.getUseDuration(), 5L); + + String firstName = Objects.isNull(dto.getFirstName()) ? null : dto.getFirstName().trim(); + String secondName = Objects.isNull(dto.getSecondName()) ? null : dto.getSecondName().trim(); + Long userId = coreUser.getId(); + Long orgId = coreUser.getOrgId(); + // 院校名称 String universitiesCollegesName = ""; // 院校ID - Long universitiesCollegesId = null; + Long universitiesCollegesId = null; // 院校所在省 - String province = null; + String province = null; // 用户类型 - UseTypeEnum useType = null; + UseTypeEnum useType = null; - // 查询唯一的条件,如果没查到那肯定是要新增一条数据咯 - StudentTeacherSystemUseLogAnalysisQuery query = new StudentTeacherSystemUseLogAnalysisQuery(); - query.setFirstName(firstName); - query.setSecondName(secondName); - query.setUserId(userId); - query.setOrgId(orgId); - query.setDayTime(today); // 追加院校ID条件 if (coreUser.isStudent()) { @@ -408,35 +471,45 @@ public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService logAnalysisList = getValuesByQueryNotWithPermission(query); + + StudentTeacherSystemUseLogAnalysis logAnalysis = sqlManager.lambdaQuery(StudentTeacherSystemUseLogAnalysis.class) + .andEq(StudentTeacherSystemUseLogAnalysis::getUniversitiesCollegesId, universitiesCollegesId) + .andEq(StudentTeacherSystemUseLogAnalysis::getOrgId, orgId) + .andEq(StudentTeacherSystemUseLogAnalysis::getUserId, userId) + .orderBy("id DESC") + .limit(0, 1) + .single(); // 如果查询到数据,则追加使用时长(分钟) - if (CollectionUtil.isNotEmpty(logAnalysisList)) { - StudentTeacherSystemUseLogAnalysis logAnalysis = getFirst(logAnalysisList); + //查看数据库最新一条进行对比,如果是相同模块就累计时间 + if (!Objects.isNull(logAnalysis) && StringUtils.equals(logAnalysis.getFirstName(), firstName) && StringUtils.isEmpty(logAnalysis.getDayTime())) { logAnalysis.setUseDuration(defaultIfNull(logAnalysis.getUseDuration(), 0L) + appendUseDuration); updateTemplate(logAnalysis); - } + } else { + if (!Objects.isNull(logAnalysis) && StringUtils.isEmpty(logAnalysis.getDayTime())) { + long time = (Objects.isNull(logAnalysis.getAddTime()) ? 0 : logAnalysis.getAddTime().getTime()) + (Objects.isNull(logAnalysis.getUseDuration()) ? 0 : (logAnalysis.getUseDuration() * 60 * 1000)); + logAnalysis.setDayTime(DateUtil.formatDateTime(DateUtil.date(time))); + updateTemplate(logAnalysis); + } - // 否则新增一条数据 - else { + // 否则新增一条数据 StudentTeacherSystemUseLogAnalysis useLogAnalysis = new StudentTeacherSystemUseLogAnalysis(); useLogAnalysis.setFirstName(firstName); useLogAnalysis.setSecondName(secondName); @@ -444,7 +517,6 @@ public class StudentTeacherSystemUseLogAnalysisService extends CoreBaseService page = studentService.queryStudentLoginLogByCondition(condition.getPageQuery()); PageQuery page = studentService.queryUserLoginLogByCondition(condition.getPageQuery()); diff --git a/web/src/main/resources/sql/jlw/student.md b/web/src/main/resources/sql/jlw/student.md index 064dfc0a..91d11cba 100644 --- a/web/src/main/resources/sql/jlw/student.md +++ b/web/src/main/resources/sql/jlw/student.md @@ -1970,7 +1970,8 @@ queryUserLoginLogByCondition jsl.create_time AS logout_time, timediff(jsl.create_time,a.create_time) AS online_duration, isnull(jsl.create_time) AS is_on_line, - a.ip + a.ip, + tb.class_name @} FROM sys_log a @@ -1980,6 +1981,15 @@ queryUserLoginLogByCondition universities_colleges uc ON uc.org_id = cu.ORG_ID LEFT JOIN sys_log jsl ON jsl.request_url = #logoutPath# AND jsl.user_id = a.user_id AND FIND_IN_SET(a.id,jsl.result) + LEFT JOIN + ( + SELECT + sc.class_name, + s.user_id + FROM + student s + LEFT JOIN school_class sc ON sc.class_id = s.class_id + ) tb on tb.user_id = a.user_id WHERE a.request_url LIKE #'%'+loginPath+'%'# AND a.user_id IS NOT NULL @@ -2058,4 +2068,47 @@ queryStatisticalStatementNumberPeopleByCondition ORDER BY any_value(a.create_time) DESC ) b GROUP BY b.time,b.universities_colleges_name,b.universities_colleges_province - ) c \ No newline at end of file + ) c + +queryStudentTeacherOrUseLogBy +=== +* 使用日志: +* 院校管理员 只能查看他院校下面的学生、教师、院校管理跳转子应用的日志 +* 超管 查看院校菜单导航栏功能模块的使用时长 + + SELECT + @pageTag() { + cu.`NAME`, + cu.`CODE`, + a.universities_colleges_name, + a.province AS universities_colleges_province, + a.first_name AS platform, + a.add_time AS login_time, + a.day_time AS logout_time, + SEC_TO_TIME(a.use_duration * 60) AS online_duration, + tb.class_name + @} + FROM + student_teacher_system_use_log_analysis a + LEFT JOIN core_user cu ON cu.ID = a.user_id + LEFT JOIN + ( + SELECT + sc.class_name, + s.user_id + FROM + student s + LEFT JOIN school_class sc ON sc.class_id = s.class_id + ) tb on tb.user_id = a.user_id + WHERE + 1=1 + @if(!isEmpty(codeOrName)) { + AND concat(cu.`NAME`, cu.`CODE`) LIKE #'%'+codeOrName+'%'# + @} + @if(!isEmpty(universitiesCollegesId)) { + AND a.universities_colleges_id = #universitiesCollegesId# + @} + @if(!isEmpty(loginStartTime) && !isEmpty(loginEndTime)) { + AND a.add_time between str_to_date(#loginStartTime#,'%Y-%m-%d') AND date_add(str_to_date(#loginEndTime#,'%Y-%m-%d'),interval 1 day) + @} + ORDER BY a.add_time DESC