package com.gkhy.exam.institutionalaccess.service.serviceImpl; import com.gkhy.exam.institutionalaccess.entity.*; import com.gkhy.exam.institutionalaccess.enums.FinishStatus; import com.gkhy.exam.institutionalaccess.model.query.ThBatchQuery; import com.gkhy.exam.institutionalaccess.model.resp.ThBatchCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentCourseRespDTO; import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO; import com.gkhy.exam.institutionalaccess.model.vo.*; import com.gkhy.exam.institutionalaccess.service.*; import com.gkhy.exam.institutionalaccess.utils.ConvertTimeUtils; import com.gkhy.exam.institutionalaccess.utils.SendMessageUtil; import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @Service("ThBatchManagerService") public class ThBatchManagerServiceImpl implements ThBatchManagerService { @Autowired private ThBatchService thBatchService; @Autowired private ThBatchCourseService thBatchCourseService; @Autowired private ThStudentBatchService thStudentBatchService; @Autowired private ThStudyDetailService thStudyDetailService; @Autowired private ThBatchCourseChapterService thBatchCourseChapterService; @Autowired private ThSubjectTypeService subjectTypeService; @Autowired private ThStudentManagerService thStudentManagerService; @Autowired private SendMessageUtil sendMessageUtil; @Override public List listByPage(ThBatchQuery query) { List thBatchVOS = thBatchService.listByPage(query); //统计学员 List thStatisticStudentVOS = thStudentBatchService.statisticByBatchUuid(); if (!CollectionUtils.isEmpty(thBatchVOS)) { List batchUuids = thBatchVOS.stream().map(ThBatchVO::getUuid).collect(Collectors.toList()); List batchCourseList = thBatchCourseService.getListByBatchUuids(batchUuids); //章节 List chapterList = thBatchCourseChapterService.getListByBatchUuids(batchUuids); for (ThBatchVO thBatchVO : thBatchVOS) { thBatchVO.setSubjectName(getObtainSuperiors(thBatchVO.getSubjectCode())); //课程 List collect = batchCourseList.stream() .filter(bc -> bc.getBatchUuid().equals(thBatchVO.getUuid())) .map(bc -> { ThBatchCourseVO thBatchCourseVO = new ThBatchCourseVO(); BeanUtils.copyProperties(bc, thBatchCourseVO); List chapterVOs = chapterList.stream(). filter(cc -> cc.getCourseUuid().equals(bc.getCourseUuid()) && cc.getParentUuid().equals("0")) .map(cc -> { ThBatchCourseChapterVO thBatchCourseChapterVO = new ThBatchCourseChapterVO(); BeanUtils.copyProperties(cc, thBatchCourseChapterVO); thBatchCourseChapterVO.setChildren(getChildren(chapterList,cc.getChapterUuid())); return thBatchCourseChapterVO; }) .collect(Collectors.toList()); thBatchCourseVO.setChapterList(chapterVOs); return thBatchCourseVO; }) .collect(Collectors.toList()); //学员 List ssList = thStatisticStudentVOS.stream().filter(ss -> ss.getBatchUuid().equals(thBatchVO.getUuid())).collect(Collectors.toList()); if(ssList.size() > 0) { thBatchVO.setStudentCount(ssList.get(0).getCount()); }else { thBatchVO.setStudentCount(0); } thBatchVO.setCourseVOList(collect); } } return thBatchVOS; } //获取章节 private List getChildren(List chapterList, String parentUuid) { List sectionList = chapterList .stream() .filter(cc -> cc.getParentUuid().equals(parentUuid)) .map(cc -> { ThBatchCourseChapterVO thBatchCourseChapterVO = new ThBatchCourseChapterVO(); BeanUtils.copyProperties(cc, thBatchCourseChapterVO); return thBatchCourseChapterVO; }) .collect(Collectors.toList()); return sectionList; } @Override public List period(String batchUuid) { //获取批次关联课程(课程的视频总时长) List batchCourseVOS = thBatchCourseService.getListByBatchUuid(batchUuid); //获取关联学生(学时) List thStudentCourseVOS = thStudentBatchService.getStudentBatchCourseVOByBatchUuid(batchUuid); //根据批次获取学习记录 List studyVOS = thStudyDetailService.statisticDurationByIdcard(batchUuid); List batchCourseRespDTOS = new ArrayList<>(); if (!CollectionUtils.isEmpty(batchCourseVOS)) { for (ThBatchCourseVO VO : batchCourseVOS) { ThBatchCourseRespDTO thBatchCourseRespDTO = new ThBatchCourseRespDTO(); BeanUtils.copyProperties(VO, thBatchCourseRespDTO); //视频时长 thBatchCourseRespDTO.setDurationDesc(ConvertTimeUtils.convertTimeToString(VO.getDuration())); //过滤学生 List studentList = thStudentCourseVOS .stream() .filter(sc -> sc.getCourseUuid().equals(VO.getCourseUuid())) .map(sc -> { ThStudentCourseRespDTO thStudentCourseRespDTO = new ThStudentCourseRespDTO(); BeanUtils.copyProperties(sc, thStudentCourseRespDTO); List collect = studyVOS.stream().filter(s -> s.getIdcard().equals(sc.getIdcard()) && s.getCourseUuid().equals(VO.getCourseUuid())).collect(Collectors.toList()); if(collect.size() > 0) { thStudentCourseRespDTO.setDuration(collect.get(0).getDuration()); }else { thStudentCourseRespDTO.setDuration(0l); } return thStudentCourseRespDTO; }) .collect(Collectors.toList()); thBatchCourseRespDTO.setStudentList(studentList); batchCourseRespDTOS.add(thBatchCourseRespDTO); } } return batchCourseRespDTOS; } @Override public List getStudent(String batchUuid) { //获取学生信息 List thStudentBatches = thStudentBatchService.getStudentBatchVOByBatchUuid(batchUuid); //获取学生学习记录 List studyDetails = thStudyDetailService.listByBatchUuid(batchUuid); List respDTOS = new ArrayList<>(); if (!CollectionUtils.isEmpty(thStudentBatches)) { for (ThStudentBatchVO VO : thStudentBatches) { ThStudentStudyRespDTO thStudentStudyRespDTO = new ThStudentStudyRespDTO(); thStudentStudyRespDTO.setIdcard(VO.getIdcard()); thStudentStudyRespDTO.setName(VO.getName()); thStudentStudyRespDTO.setBatchLessonNum(VO.getBatchLessonNum()); thStudentStudyRespDTO.setFinishStatus(VO.getFinishStatus()); thStudentStudyRespDTO.setBatchUuid(VO.getBatchUuid()); BigDecimal lessNum = new BigDecimal(0); List collect = studyDetails .stream() .filter(sd -> sd.getIdcard().equals(VO.getIdcard())) .collect(Collectors.toList()); StringBuffer stringBuffer = new StringBuffer(); for (ThStudyDetailVO studyDetail : collect) { //是否完成 if(studyDetail.getFinishStatus().equals(FinishStatus.YES.getStatus())){ lessNum = lessNum.add(studyDetail.getLessonNum()); } //是否有学时报告 if(!StringUtils.isEmpty(studyDetail.getLessonReportUrl())){ stringBuffer.append(studyDetail.getLessonReportUrl()).append(","); } } if(!StringUtils.isEmpty(stringBuffer.toString())){ stringBuffer.deleteCharAt(stringBuffer.length()-1); } thStudentStudyRespDTO.setUrl(stringBuffer.toString()); thStudentStudyRespDTO.setLessonNum(lessNum); respDTOS.add(thStudentStudyRespDTO); } } return respDTOS; } //短信提醒 @Override public AjaxResult sendMes(String idcard) { ThStudent thStudent = thStudentManagerService.findByIdCard(idcard); if (StringUtils.isEmpty(thStudent.getPhone()) || thStudent.getPhone().equals("-")){ return AjaxResult.error("该学员未绑定手机号"); } //调用短信接口 String[] phone={thStudent.getPhone()}; HashMap map = new HashMap<>(); map.put("name",thStudent.getName()); map.put("platform",thStudent.getInstitutionName()); Boolean b = sendMessageUtil.sendMessageCheck(phone, map); if (b){ return AjaxResult.success(); } return AjaxResult.error(); } public String getObtainSuperiors(String code){ List subjectTypeList = subjectTypeService.getSubjectTypeList(); if(StringUtils.isEmpty(code)){ return "未知"; } StringBuffer stringBuffer = new StringBuffer(); String subjectName = "未知"; ThSubjectType currentSubject = getThSubejctInfoByCode(subjectTypeList,code); if(currentSubject != null){ subjectName = currentSubject.getName(); } //一级 if(code.length() == 1){ stringBuffer.append(subjectName); } //二级 if(code.length() == 3){ ThSubjectType parentSubject = getThSubejctInfoByCode(subjectTypeList,currentSubject.getParentCode()); stringBuffer.append(parentSubject.getName()).append("/").append(subjectName); } //三级 if(code.length() == 5){ ThSubjectType parentSubject = getThSubejctInfoByCode(subjectTypeList,currentSubject.getParentCode()); ThSubjectType grandpaSubject = getThSubejctInfoByCode(subjectTypeList,parentSubject.getParentCode()); stringBuffer.append(grandpaSubject.getName()).append("/").append(parentSubject.getName()).append("/").append(subjectName); } return stringBuffer.toString(); } public ThSubjectType getThSubejctInfoByCode(List list, String code){ List selectList = list.stream().filter(subjectType -> subjectType.getCode().equals(code)).collect(Collectors.toList()); if(selectList.size() > 0){ return selectList.get(0); } return null; } }