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