From 257b9a1d149333678b05196909517a4daa2b12ee Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 04 七月 2024 16:48:23 +0800
Subject: [PATCH] 首页接口,学生上课记录
---
src/main/java/com/ycl/jxkg/domain/entity/MeetStudent.java | 16 +++
src/main/java/com/ycl/jxkg/job/StudyRecordJob.java | 1
src/main/java/com/ycl/jxkg/mapper/MeetMapper.java | 2
src/main/resources/mapper/StudyRecordMapper.xml | 1
src/main/java/com/ycl/jxkg/service/HomeService.java | 20 ++++
src/main/java/com/ycl/jxkg/service/impl/HomeServiceImpl.java | 119 +++++++++++++++++++++++
src/main/java/com/ycl/jxkg/controller/student/HomeController.java | 25 +++++
src/main/java/com/ycl/jxkg/domain/vo/student/HomeVO.java | 32 ++++++
src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java | 30 +++++
src/main/java/com/ycl/jxkg/domain/entity/StudyRecord.java | 2
src/main/java/com/ycl/jxkg/mapper/MeetStudentMapper.java | 21 ++++
11 files changed, 267 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/ycl/jxkg/controller/student/HomeController.java b/src/main/java/com/ycl/jxkg/controller/student/HomeController.java
new file mode 100644
index 0000000..fdeeae4
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/controller/student/HomeController.java
@@ -0,0 +1,25 @@
+package com.ycl.jxkg.controller.student;
+import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.service.HomeService;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequiredArgsConstructor
+@RestController("HomeController")
+@RequestMapping(value = "/api/student/home")
+public class HomeController {
+
+ @Autowired
+ private HomeService homeService;
+
+ @GetMapping()
+ @ApiOperation(value = "棣栭〉", notes = "棣栭〉")
+ public Result home() {
+ Result home = homeService.home();
+ return Result.ok(home);
+ }
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/MeetStudent.java b/src/main/java/com/ycl/jxkg/domain/entity/MeetStudent.java
new file mode 100644
index 0000000..774663b
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/entity/MeetStudent.java
@@ -0,0 +1,16 @@
+package com.ycl.jxkg.domain.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MeetStudent {
+
+ private Integer id;
+ private Integer meetId;
+ private Integer studentId;
+ private Date startTime;
+ private Date createTime;
+ private Long duringTime;
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/StudyRecord.java b/src/main/java/com/ycl/jxkg/domain/entity/StudyRecord.java
index 4c51e07..970de0c 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/StudyRecord.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/StudyRecord.java
@@ -21,4 +21,6 @@
@TableField("last_time")
private Date lastTime;
+ @TableField("meet_count")
+ private Integer meetCount;
}
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/student/HomeVO.java b/src/main/java/com/ycl/jxkg/domain/vo/student/HomeVO.java
new file mode 100644
index 0000000..2f8c523
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/vo/student/HomeVO.java
@@ -0,0 +1,32 @@
+package com.ycl.jxkg.domain.vo.student;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ycl.jxkg.domain.entity.Exam;
+import com.ycl.jxkg.domain.entity.Meet;
+import com.ycl.jxkg.domain.vo.ExamVO;
+import com.ycl.jxkg.domain.vo.MeetVO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class HomeVO {
+ private Integer userId;
+ //鐪嬭棰戞椂闀�
+ private Long studyTime;
+
+ //鏈�鍚庣湅瑙嗛鏃堕棿
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date lastTime;
+ //宸茬粡涓婅繃璇剧殑娆℃暟
+ private Integer meetCount;
+ //骞冲潎鍒�
+ private String scoreAverage;
+ //浼氳
+ private List<MeetVO> meetList;
+ //鑰冭瘯
+ private List<ExamVO> examList;
+
+
+}
diff --git a/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java b/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java
index 0167d8d..9d2ffc4 100644
--- a/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java
+++ b/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java
@@ -56,6 +56,7 @@
if (record.getStudentId().equals(cacheRecord.getStudentId())) {
cacheRecord.setId(record.getId());
cacheRecord.setStudyTime(record.getStudyTime() + cacheRecord.getStudyTime());
+ cacheRecord.setMeetCount(record.getMeetCount());
}
}
}
diff --git a/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java b/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java
index 9f5c1b5..d074aa8 100644
--- a/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java
+++ b/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java
@@ -22,7 +22,7 @@
* @param id
* @return
*/
- MeetVO getById(Integer id);
+ Meet getById(Integer id);
/**
* 鍒嗛〉
diff --git a/src/main/java/com/ycl/jxkg/mapper/MeetStudentMapper.java b/src/main/java/com/ycl/jxkg/mapper/MeetStudentMapper.java
new file mode 100644
index 0000000..462ca02
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/mapper/MeetStudentMapper.java
@@ -0,0 +1,21 @@
+package com.ycl.jxkg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.jxkg.domain.entity.Meet;
+import com.ycl.jxkg.domain.entity.MeetStudent;
+import com.ycl.jxkg.domain.query.MeetQuery;
+import com.ycl.jxkg.domain.vo.MeetVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 瀛︾敓浼氳璁板綍琛� Mapper 鎺ュ彛
+ *
+ * @author flq
+ * @since 2024-06-17
+ */
+@Mapper
+public interface MeetStudentMapper extends BaseMapper<MeetStudent> {
+
+}
diff --git a/src/main/java/com/ycl/jxkg/service/HomeService.java b/src/main/java/com/ycl/jxkg/service/HomeService.java
new file mode 100644
index 0000000..8d6a657
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/service/HomeService.java
@@ -0,0 +1,20 @@
+package com.ycl.jxkg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.domain.entity.Meet;
+import com.ycl.jxkg.domain.form.MeetForm;
+import com.ycl.jxkg.domain.query.MeetQuery;
+
+import java.util.List;
+
+/**
+ * 棣栭〉 鏈嶅姟绫�
+ *
+ * @author flq
+ * @since 2024-06-17
+ */
+public interface HomeService {
+
+ Result home();
+}
diff --git a/src/main/java/com/ycl/jxkg/service/impl/HomeServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/HomeServiceImpl.java
new file mode 100644
index 0000000..b61702f
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/service/impl/HomeServiceImpl.java
@@ -0,0 +1,119 @@
+package com.ycl.jxkg.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.context.WebContext;
+import com.ycl.jxkg.domain.entity.Exam;
+import com.ycl.jxkg.domain.entity.ExamPaperScore;
+import com.ycl.jxkg.domain.entity.Meet;
+import com.ycl.jxkg.domain.entity.StudyRecord;
+import com.ycl.jxkg.domain.vo.ExamVO;
+import com.ycl.jxkg.domain.vo.MeetVO;
+import com.ycl.jxkg.domain.vo.student.HomeVO;
+import com.ycl.jxkg.mapper.*;
+import com.ycl.jxkg.service.ExamPaperScoreService;
+import com.ycl.jxkg.service.HomeService;
+import lombok.RequiredArgsConstructor;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 棣栭〉 鏈嶅姟瀹炵幇绫�
+ *
+ * @author flq
+ * @since 2024-06-17
+ */
+@Service
+@RequiredArgsConstructor
+public class HomeServiceImpl implements HomeService {
+ @Autowired
+ private WebContext webContext;
+ @Autowired
+ private MeetMapper meetMapper;
+ @Autowired
+ private ExamMapper examMapper;
+ @Autowired
+ private StudyRecordMapper studyRecordMapper;
+ @Autowired
+ private ExamPaperScoreMapper scoreMapper;
+ @Autowired
+ private ClassesUserMapper classesUserMapper;
+
+ @Override
+ public Result home() {
+ HomeVO vo = new HomeVO();
+ Integer userId = webContext.getCurrentUser().getId();
+ vo.setUserId(userId);
+ //鎵�鍦ㄧ殑鐝骇
+ List<Integer> classes = classesUserMapper.getClassesByUserId(userId);
+ //瀛︿範璁板綍
+ StudyRecord studyRecord = studyRecordMapper.getByStudentId(userId);
+ if (studyRecord != null) {
+ vo.setLastTime(studyRecord.getLastTime());
+ vo.setStudyTime(studyRecord.getStudyTime());
+ vo.setMeetCount(studyRecord.getMeetCount());
+ }else {
+ vo.setStudyTime(0L);
+ vo.setMeetCount(0);
+ }
+ //骞冲潎鍒�
+ QueryWrapper<ExamPaperScore> scoreWapper = new QueryWrapper<ExamPaperScore>();
+ scoreWapper.eq("user_id", userId);
+ List<ExamPaperScore> examPaperScores = scoreMapper.selectList(scoreWapper);
+ if (CollectionUtils.isEmpty(examPaperScores)) {
+ vo.setScoreAverage("0");
+ } else {
+ BigDecimal totalScore = examPaperScores.stream()
+ .map(ExamPaperScore::getScore)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ int size = examPaperScores.size();
+ vo.setScoreAverage(totalScore.divide(new BigDecimal(size), 1, RoundingMode.HALF_UP) + "");
+ }
+ List<MeetVO> meetList = new ArrayList<>();
+ List<ExamVO> examList = new ArrayList<>();
+ if (!CollectionUtils.isEmpty(classes)) {
+ LocalDate nowDate = LocalDate.now();
+ // 璁$畻涓冨ぉ鍚庣殑鏃ユ湡
+ LocalDate sevenDayLaterDate = nowDate.plusDays(7);
+ LocalDateTime now = LocalDateTime.of(nowDate, LocalTime.MIN);
+ LocalDateTime sevenDayLater = LocalDateTime.of(sevenDayLaterDate, LocalTime.MIN);
+ //鎴戠殑璇剧▼
+ QueryWrapper<Meet> meetQueryWrapper = new QueryWrapper<>();
+ meetQueryWrapper.in("classes_id",classes);
+ meetQueryWrapper.between("start_time", now,sevenDayLater);
+ List<Meet> meets = meetMapper.selectList(meetQueryWrapper);
+ for (Meet meet : meets) {
+ MeetVO meetVO = new MeetVO();
+ BeanUtils.copyProperties(meet,meetVO);
+ meetList.add(meetVO);
+ }
+ //鎴戠殑鑰冭瘯
+ QueryWrapper<Exam> examQueryWrapper = new QueryWrapper<>();
+ examQueryWrapper.in("classes_id",classes);
+ examQueryWrapper.between("start_time", now,sevenDayLater);
+ List<Exam> exams = examMapper.selectList(examQueryWrapper);
+ for (Exam exam : exams) {
+ ExamVO examVO = new ExamVO();
+ BeanUtils.copyProperties(exam,examVO);
+ examList.add(examVO);
+ }
+ }
+ //鎴戠殑璇剧▼
+ vo.setMeetList(meetList);
+ //鎴戠殑鑰冭瘯
+ vo.setExamList(examList);
+ return Result.ok(vo);
+ }
+}
diff --git a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
index 147057f..ccef48e 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
@@ -8,12 +8,16 @@
import com.ycl.jxkg.base.SystemCode;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.entity.Meet;
+import com.ycl.jxkg.domain.entity.MeetStudent;
+import com.ycl.jxkg.domain.entity.StudyRecord;
import com.ycl.jxkg.domain.form.MeetForm;
import com.ycl.jxkg.domain.query.MeetQuery;
import com.ycl.jxkg.domain.vo.MeetVO;
import com.ycl.jxkg.enums.MeetStatusEnum;
import com.ycl.jxkg.mapper.ClassesUserMapper;
import com.ycl.jxkg.mapper.MeetMapper;
+import com.ycl.jxkg.mapper.MeetStudentMapper;
+import com.ycl.jxkg.mapper.StudyRecordMapper;
import com.ycl.jxkg.rabbitmq.msg.MeetStatusMsg;
import com.ycl.jxkg.rabbitmq.product.Producer;
import com.ycl.jxkg.service.MeetService;
@@ -46,6 +50,8 @@
@Autowired
private ClassesUserMapper classesUserMapper;
private final Producer producer;
+ private final MeetStudentMapper meetStudentMapper;
+ private final StudyRecordMapper studyRecordMapper;
/**
* 娣诲姞
* @param form
@@ -161,9 +167,31 @@
*/
@Override
public Result detail(Integer id) {
- MeetVO vo = baseMapper.getById(id);
+ Meet vo = baseMapper.getById(id);
Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
if(vo.getStatus().equals(MeetStatusEnum.Starting.getCode())){
+ //澧炲姞瀛︾敓涓婅璁板綍
+ Integer userId = webContext.getCurrentUser().getId();
+ MeetStudent meetStudent = new MeetStudent();
+ meetStudent.setMeetId(id);
+ meetStudent.setStudentId(userId);
+ meetStudent.setCreateTime(new Date());
+ meetStudent.setStartTime(vo.getStartTime());
+ //TODO锛氭殏鏃跺鐞嗭紝鍚庢湡鑰冭檻jitsiApi
+ meetStudent.setDuringTime((vo.getEndTime().getTime()-new Date().getTime())/1000);
+ meetStudentMapper.insert(meetStudent);
+ //瀛︾敓瀛︿範妗f鏇存柊
+ StudyRecord studyRecord = studyRecordMapper.getByStudentId(userId);
+ if(studyRecord ==null){
+ StudyRecord record = new StudyRecord();
+ record.setMeetCount(0);
+ record.setStudyTime(0L);
+ record.setStudentId(userId);
+ studyRecordMapper.insert(record);
+ }else {
+ studyRecord.setMeetCount(studyRecord.getMeetCount()+1);
+ studyRecordMapper.updateById(studyRecord);
+ }
return Result.ok();
}else {
return Result.fail(SystemCode.InnerError.getCode(),"鎴块棿灏氭湭寮�濮嬫垨宸茬粨鏉�");
diff --git a/src/main/resources/mapper/StudyRecordMapper.xml b/src/main/resources/mapper/StudyRecordMapper.xml
index 3b371cb..3f6a632 100644
--- a/src/main/resources/mapper/StudyRecordMapper.xml
+++ b/src/main/resources/mapper/StudyRecordMapper.xml
@@ -8,6 +8,7 @@
<result column="student_id" property="studentId"/>
<result column="study_time" property="studyTime"/>
<result column="last_time" property="lastTime"/>
+ <result column="meet_count" property="meetCount"/>
</resultMap>
--
Gitblit v1.8.0