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 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 scoreWapper = new QueryWrapper(); scoreWapper.eq("user_id", userId); List 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 meetList = new ArrayList<>(); List 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 meetQueryWrapper = new QueryWrapper<>(); meetQueryWrapper.in("classes_id",classes); meetQueryWrapper.between("start_time", now,sevenDayLater); List meets = meetMapper.selectList(meetQueryWrapper); for (Meet meet : meets) { MeetVO meetVO = new MeetVO(); BeanUtils.copyProperties(meet,meetVO); meetList.add(meetVO); } //我的考试 QueryWrapper examQueryWrapper = new QueryWrapper<>(); examQueryWrapper.in("classes_id",classes); examQueryWrapper.between("start_time", now,sevenDayLater); List 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); } }