diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherDao.java index 20c9b833..4dd01ec2 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherDao.java @@ -2,6 +2,7 @@ package com.ibeetl.jlw.dao; import com.ibeetl.jlw.entity.Teacher; import com.ibeetl.jlw.entity.TeacherExtendSchoolInfo; +import com.ibeetl.jlw.entity.api.teacher.TeacherUserCenterData; import com.ibeetl.jlw.web.query.TeacherQuery; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.mapper.BaseMapper; @@ -50,4 +51,6 @@ public interface TeacherDao extends BaseMapper{ * @return */ List getTeacherExtendSchoolInfoListByUserIds(String userIds); + + List getTeacherUserInfoRuleInfo(Long userId, Long teacherId); } \ No newline at end of file diff --git a/web/src/main/java/com/ibeetl/jlw/entity/StudentExtendSchoolInfo.java b/web/src/main/java/com/ibeetl/jlw/entity/StudentExtendSchoolInfo.java index 139310ea..f2f9d93c 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/StudentExtendSchoolInfo.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/StudentExtendSchoolInfo.java @@ -51,6 +51,14 @@ public class StudentExtendSchoolInfo extends Student implements ExtendSchoolInfo * 院校名称 */ private String universitiesCollegesName; + /** + * 院校所在省份 + */ + private String universitiesCollegesProvince; + /** + * 院校所在市区 + */ + private String universitiesCollegesCity; } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherExtendSchoolInfo.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherExtendSchoolInfo.java index 85025a7e..181bed43 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherExtendSchoolInfo.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherExtendSchoolInfo.java @@ -41,4 +41,13 @@ public class TeacherExtendSchoolInfo extends Teacher implements ExtendSchoolInfo * 院校名称 */ private String universitiesCollegesName; + + /** + * 院校所在省份 + */ + private String universitiesCollegesProvince; + /** + * 院校所在市区 + */ + private String universitiesCollegesCity; } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/api/student/StudentUserCenterData.java b/web/src/main/java/com/ibeetl/jlw/entity/api/student/StudentUserCenterData.java new file mode 100644 index 00000000..ee4cc84b --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/api/student/StudentUserCenterData.java @@ -0,0 +1,34 @@ +package com.ibeetl.jlw.entity.api.student; + +import com.ibeetl.admin.core.entity.CoreUser; +import com.ibeetl.jlw.entity.Student; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 教师端-首页实体 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@Accessors(chain = true) +public class StudentUserCenterData { + + /** + * 学生信息 + */ + private Student studentInfo; + /** + * 用户信息 + */ + private CoreUser userInfo; + /** + * 活跃度信息 + */ + private StudentActiveInfo activeInfo; + +} diff --git a/web/src/main/java/com/ibeetl/jlw/entity/api/teacher/TeacherUserCenterData.java b/web/src/main/java/com/ibeetl/jlw/entity/api/teacher/TeacherUserCenterData.java new file mode 100644 index 00000000..65ba8e3a --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/api/teacher/TeacherUserCenterData.java @@ -0,0 +1,64 @@ +package com.ibeetl.jlw.entity.api.teacher; + +import com.ibeetl.admin.core.entity.BaseEntity; +import com.ibeetl.admin.core.entity.CoreUser; +import com.ibeetl.jlw.entity.Teacher; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 教师端-首页实体 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@Accessors(chain = true) +public class TeacherUserCenterData { + + /** + * 教师信息 + */ + private Teacher teacherInfo; + /** + * 用户信息 + */ + private CoreUser userInfo; + /** + * 权限信息 + */ + private TeacherRuleInfo ruleInfo; + + @Data + public static class TeacherRuleInfo extends BaseEntity { + + /** + * 教师姓名 + */ + private String teacherName; + /** + * 学校名称 + */ + private String universitiesCollegesName; + /** + * 学校所在省市 + */ + private String universitiesCollegesAddress; + /** + * 院系名称 + */ + private String universityFacultyName; + /** + * 专业名称 + */ + private String universitySystemName; + /** + * 班级名称,多个顿号隔开 + */ + private String classNames; + + } +} diff --git a/web/src/main/java/com/ibeetl/jlw/service/StatisticalAnalysisService.java b/web/src/main/java/com/ibeetl/jlw/service/StatisticalAnalysisService.java index dfa82e17..d118b487 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/StatisticalAnalysisService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/StatisticalAnalysisService.java @@ -269,8 +269,9 @@ public class StatisticalAnalysisService { if (stime != null && etime != null) { logDaoLambdaQuery.andBetween(SysLog::getCreateTime, stime, etime); } + long loginCount = logDaoLambdaQuery.andLike(SysLog::getRequestUrl, "%login%").andLike(SysLog::getResult, "%成功%").count(); - long loginDistinctCount = logDaoLambdaQuery.distinct().andLike("request_url", "%login%").andLike("result", "%成功%").select("user_id").stream().count(); + long loginDistinctCount = CollectionUtil.emptyIfNull(logDaoLambdaQuery.distinct().andLike("request_url", "%login%").andLike("result", "%成功%").select("user_id")).stream().count(); //登录人数 data.put("loginNumber", loginDistinctCount); diff --git a/web/src/main/java/com/ibeetl/jlw/service/SysLogService.java b/web/src/main/java/com/ibeetl/jlw/service/SysLogService.java index 56b4e4b5..72fceaa3 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/SysLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/SysLogService.java @@ -1,6 +1,9 @@ package com.ibeetl.jlw.service; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.Header; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -14,6 +17,7 @@ import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.entity.SysLog; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; +import org.beetl.sql.core.query.LambdaQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -169,4 +173,42 @@ public class SysLogService extends CoreBaseService { } + /** + * 设置用户的登录次数和最后登录时间等信息 + * 这样查询日志表来统计登录信息,不太好,但是没得时间了 + * @param userId + * @param dbUser + */ + public void setLoginLogInfo(Long userId, CoreUser dbUser) { + if (ObjectUtil.isAllEmpty(userId, dbUser)) { + return; + } + + LambdaQuery sysLogLambdaQuery = sysLogDao.createLambdaQuery(); + + + long loginCount = sysLogLambdaQuery.andLike(SysLog::getRequestUrl, "%login%").andLike(SysLog::getResult, "%成功%").andEq(SysLog::getUserId, userId).count(); + // 登录次数 + dbUser.set("loginCount", loginCount); + + + //最后登陆时间 + SysLog lastLoginLog = sysLogLambdaQuery.andLike(SysLog::getRequestUrl, "%login%").andLike(SysLog::getResult, "%成功%") + .andEq(SysLog::getUserId, userId).desc(SysLog::getResultTime).limit(0, 1).single("result_time"); + + // 最后登录时间,默认置空 + dbUser.set("lastLoginTime", "-"); + if (lastLoginLog != null) { + dbUser.set("lastLoginTime", lastLoginLog.getResultTime()); + } + + + // 登录天数 + List loginDaysLogList = sysLogLambdaQuery.andLike(SysLog::getRequestUrl, "%login%").andLike(SysLog::getResult, "%成功%") + .andEq(SysLog::getUserId, userId).desc(SysLog::getResultTime).select(SysLog::getResultTime); + + long loginDays = CollectionUtil.emptyIfNull(loginDaysLogList).stream().map(item -> DateUtil.formatDate(item.getResultTime())).distinct().count(); + dbUser.set("loginDays", loginDays); + } + } \ No newline at end of file diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java index 4ceeb0af..878c37cf 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java @@ -114,6 +114,16 @@ public class TeacherOpenCourseMergeStudentService extends CoreBaseServicequeryByCondition(PageQuery query){ PageQuery ret = universitiesCollegesDao.queryByCondition(query); @@ -215,11 +217,16 @@ public class UniversitiesCollegesService extends CoreBaseService @@ -53,6 +54,8 @@ public class ApiStudentService { @Autowired private UniversitiesCollegesService universitiesCollegesService; @Autowired private PasswordConfig.PasswordEncryptService passwordEncryptService; @Autowired private CoreUserService coreUserService; + @Autowired + private SysLogService sysLogService; /** * 教师端-首页数据 @@ -220,4 +223,29 @@ public class ApiStudentService { Assert.notNull(student, "该接口只能学生查看!"); return studentDao.studentActiveInfo(student.getStudentId()); } + + public StudentUserCenterData userCenter() { + + CoreUser user = getUser(); + Assert.isTrue(user.isStudent(), "该接口只能学生访问!"); + Long userId = user.getId(); + + List extendStudentList = studentDao.getStudentExtendSchoolInfoListByUserIds(userId.toString()); + StudentExtendSchoolInfo studentExtendSchoolInfo = null; + if (ObjectUtil.isNotEmpty(extendStudentList)) { + studentExtendSchoolInfo = extendStudentList.get(0); + } + CoreUser coreUser = coreUserService.getUserById(userId); + + // 设置登录时间和最后登录时间 + sysLogService.setLoginLogInfo(userId, coreUser); + + // 活跃度 + StudentActiveInfo studentActiveInfo = studentActiveInfo(); + + + return StudentUserCenterData.builder().userInfo(coreUser) + .studentInfo(studentExtendSchoolInfo).activeInfo(studentActiveInfo) + .build(); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/service/api/teacher/ApiTeacherService.java b/web/src/main/java/com/ibeetl/jlw/service/api/teacher/ApiTeacherService.java index 914d78c8..3d3243eb 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/api/teacher/ApiTeacherService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/api/teacher/ApiTeacherService.java @@ -2,10 +2,15 @@ package com.ibeetl.jlw.service.api.teacher; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.ibeetl.admin.core.entity.CoreUser; +import com.ibeetl.admin.core.service.CoreUserService; +import com.ibeetl.jlw.dao.TeacherDao; import com.ibeetl.jlw.dao.TeacherMergeApplicationDao; import com.ibeetl.jlw.entity.*; import com.ibeetl.jlw.entity.api.CurrentUserInfo; import com.ibeetl.jlw.entity.api.teacher.TeacherIndexData; +import com.ibeetl.jlw.entity.api.teacher.TeacherUserCenterData; import com.ibeetl.jlw.service.*; import com.ibeetl.jlw.service.api.ApiIndexBaseService; import com.ibeetl.jlw.web.query.ResourcesApplicationQuery; @@ -19,6 +24,8 @@ import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; +import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; + /** *

* 教师端-API接口 @@ -43,6 +50,12 @@ public class ApiTeacherService { private ResourcesApplicationService resourcesApplicationService; @Autowired private TeacherService teacherService; + @Autowired + private TeacherDao teacherDao; + @Autowired + private CoreUserService coreUserService; + @Autowired + private SysLogService sysLogService; /** * 教师端-首页数据 @@ -88,4 +101,34 @@ public class ApiTeacherService { .myOpenCourseList(openCourseList) .build(); } + + /** + * 功能描述:
+ * 教师端-用户中心 + * + * @return {@link TeacherUserCenterData} + * @Author: 87966 + * @Date: 2022/12/21 14:52 + */ + public TeacherUserCenterData userCenter() { + CoreUser user = getUser(); + Assert.isTrue(user.isTeacher(), "该接口只能教师访问!"); + Long userId = user.getId(); + + Teacher teacher = teacherDao.getByUserId(userId); + CoreUser coreUser = coreUserService.getUserById(userId); + + // 设置登录时间和最后登录时间 + sysLogService.setLoginLogInfo(userId, coreUser); + + List ruleInfoList = teacherDao.getTeacherUserInfoRuleInfo(userId, null); + + TeacherUserCenterData.TeacherRuleInfo teacherRuleInfo = null; + if (ObjectUtil.isNotEmpty(ruleInfoList)) { + teacherRuleInfo = ruleInfoList.get(0); + } + + return TeacherUserCenterData.builder() + .teacherInfo(teacher).userInfo(coreUser).ruleInfo(teacherRuleInfo).build(); + } } 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 63079ed7..12e19977 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/IndexController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/IndexController.java @@ -1045,7 +1045,7 @@ public class IndexController { @PostMapping("/logout.json") @ResponseBody - public JsonResult logout() { + public JsonResult logout(@SCoreUser CoreUser coreUser) { return JsonResult.success(platformService.logout()); } diff --git a/web/src/main/java/com/ibeetl/jlw/web/api/student/ApiStudentController.java b/web/src/main/java/com/ibeetl/jlw/web/api/student/ApiStudentController.java index 6a0c779f..5926b88f 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/api/student/ApiStudentController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/api/student/ApiStudentController.java @@ -2,12 +2,14 @@ package com.ibeetl.jlw.web.api.student; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.jlw.entity.api.student.StudentIndexData; +import com.ibeetl.jlw.entity.api.student.StudentUserCenterData; import com.ibeetl.jlw.entity.dto.StudentEditPasswordDTO; import com.ibeetl.jlw.entity.dto.StudentRegisterDTO; import com.ibeetl.jlw.service.api.student.ApiStudentService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -62,4 +64,14 @@ public class ApiStudentController { public JsonResult studentActiveInfo() { return JsonResult.success(apiStudentService.studentActiveInfo()); } + + + /** + * 学生端-用户中心 + * @return + */ + @GetMapping("userCenter.do") + public JsonResult userCenter() { + return JsonResult.success(apiStudentService.userCenter()); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/api/teacher/ApiTeacherController.java b/web/src/main/java/com/ibeetl/jlw/web/api/teacher/ApiTeacherController.java index 2f674630..f748480d 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/api/teacher/ApiTeacherController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/api/teacher/ApiTeacherController.java @@ -2,10 +2,12 @@ package com.ibeetl.jlw.web.api.teacher; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.jlw.entity.api.teacher.TeacherIndexData; +import com.ibeetl.jlw.entity.api.teacher.TeacherUserCenterData; import com.ibeetl.jlw.service.api.teacher.ApiTeacherService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -32,4 +34,14 @@ public class ApiTeacherController { return JsonResult.success(apiTeacherService.index()); } + + /** + * 教师端-用户中心 + * @return + */ + @GetMapping("userCenter.do") + public JsonResult userCenter() { + return JsonResult.success(apiTeacherService.userCenter()); + } + } diff --git a/web/src/main/resources/sql/jlw/student.md b/web/src/main/resources/sql/jlw/student.md index 426bb474..fc641b54 100644 --- a/web/src/main/resources/sql/jlw/student.md +++ b/web/src/main/resources/sql/jlw/student.md @@ -1388,7 +1388,9 @@ getStudentExtendSchoolInfo tc.university_faculty_id, tc.university_faculty_name, td.universities_colleges_id, - td.universities_colleges_name + td.universities_colleges_name, + td.universities_colleges_city, + td.universities_colleges_province FROM student t LEFT JOIN school_class ta ON ta.class_id = t.class_id @@ -1417,7 +1419,9 @@ getStudentExtendSchoolInfoListByUserIds tc.university_faculty_id, tc.university_faculty_name, td.universities_colleges_id, - td.universities_colleges_name + td.universities_colleges_name, + td.universities_colleges_city, + td.universities_colleges_province FROM student t LEFT JOIN school_class ta ON ta.class_id = t.class_id diff --git a/web/src/main/resources/sql/jlw/teacher.md b/web/src/main/resources/sql/jlw/teacher.md index 26e7577d..07409785 100644 --- a/web/src/main/resources/sql/jlw/teacher.md +++ b/web/src/main/resources/sql/jlw/teacher.md @@ -475,7 +475,9 @@ getTeacherExtendSchoolInfo tc.university_faculty_id, tc.university_faculty_name, td.universities_colleges_id, - td.universities_colleges_name + td.universities_colleges_name, + td.universities_colleges_city, + td.universities_colleges_province FROM teacher t LEFT JOIN university_system tb ON tb.university_system_id = t.university_system_id @@ -499,7 +501,9 @@ getTeacherExtendSchoolInfoListByUserIds tc.university_faculty_id, tc.university_faculty_name, td.universities_colleges_id, - td.universities_colleges_name + td.universities_colleges_name, + td.universities_colleges_city, + td.universities_colleges_province FROM teacher t LEFT JOIN university_system tb ON tb.university_system_id = t.university_system_id @@ -510,4 +514,47 @@ getTeacherExtendSchoolInfoListByUserIds AND td.universities_colleges_status = 1 WHERE 1 = 1 - AND FIND_IN_SET(t.user_id,#userIds#) \ No newline at end of file + AND FIND_IN_SET(t.user_id,#userIds#) + + + +getTeacherUserInfoRuleInfo +=== +* 通过用户ID 获取教师的学校信息 用户中心 + + SELECT + t.teacher_name, + tb.university_system_name, + tc.university_faculty_name, + td.universities_colleges_name, + concat( td.universities_colleges_province, universities_colleges_city ) AS universities_colleges_address, + ( + SELECT + GROUP_CONCAT(class_name separator '、') + FROM + school_class ab + WHERE + ab.class_id IN ( + SELECT DISTINCT + a.school_class_id + FROM + teacher_open_course_merge_school_class a + WHERE + a.teacher_open_course_id IN ( SELECT DISTINCT teacher_open_course_id FROM teacher_open_course_merge_teacher b WHERE b.teacher_id = t.teacher_id ))) AS class_names + FROM + teacher t + INNER JOIN university_system tb ON tb.university_system_id = t.university_system_id + AND tb.university_system_status = 1 + INNER JOIN university_faculty tc ON tc.university_faculty_id = t.university_faculty_id + AND tc.university_faculty_status = 1 + INNER JOIN universities_colleges td ON td.universities_colleges_id = t.universities_colleges_id + AND td.universities_colleges_status = 1 + WHERE + 1 = 1 + @if(!isEmpty(teacherId)){ + and t.teacher_id =#teacherId# + @} + @if(!isEmpty(userId)){ + and t.user_id =#userId# + @} +