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) {
|
Long studyTime = studyRecord.getStudyTime();
|
BigDecimal studyTimeVo = new BigDecimal(studyTime).divide(new BigDecimal(3600), 1, RoundingMode.HALF_UP);
|
vo.setLastTime(studyRecord.getLastTime());
|
vo.setStudyTime(studyTimeVo);
|
vo.setMeetCount(studyRecord.getMeetCount());
|
}else {
|
vo.setStudyTime(BigDecimal.ZERO);
|
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);
|
}
|
}
|