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