| 
					
				 | 
			
			
				@@ -0,0 +1,93 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.yonge.cooleshow.biz.dal.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.metadata.IPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.toolkit.Wrappers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.dao.StudentDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.dao.StudentStarDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.entity.Student; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.SysConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.redisson.api.RedissonClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.entity.StudentTotal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.dto.search.StudentTotalSearch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.dao.StudentTotalDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.StudentTotalService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class StudentTotalServiceImpl extends ServiceImpl<StudentTotalDao, StudentTotal> implements StudentTotalService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final static Logger log = LoggerFactory.getLogger(StudentTotalServiceImpl.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private StudentDao studentDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private StudentStarDao studentStarDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private CourseScheduleDao courseScheduleDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysConfigService sysConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private RedissonClient redissonClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public StudentTotalVo detail(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseMapper.detail(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public IPage<StudentTotalVo> selectPage(IPage<StudentTotalVo> page, StudentTotalSearch query){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return page.setRecords(baseMapper.selectPage(page, query)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<StudentTotal> queryStudentTotal() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Student> students = studentDao.selectList(Wrappers.<Student>emptyWrapper() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .select("userId")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //查询关注老师数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<StudentTotalVo> studentStarTotal = studentStarDao.queryStudentTotal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, StudentTotalVo> studentStarMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!CollectionUtils.isEmpty(studentStarTotal)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            studentStarMap = studentStarTotal.stream().collect(Collectors.toMap(StudentTotalVo::getUserId, o -> o)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //查询已上未上课时数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<StudentTotalVo> studentCourseTotal = courseScheduleDao.queryStudentTotal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, StudentTotalVo> studentCourseMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!CollectionUtils.isEmpty(studentCourseTotal)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            studentCourseMap = studentCourseTotal.stream().collect(Collectors.toMap(StudentTotalVo::getUserId, o -> o)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<StudentTotal> resultList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Student student : students) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            StudentTotal studentTotal = new StudentTotal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            studentTotal.setUserId(student.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            StudentTotalVo starTotal = studentStarMap.get(student.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != starTotal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                studentTotal.setStarTeacherNum(starTotal.getStarTeacherNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            StudentTotalVo courseTotal = studentCourseMap.get(student.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != courseTotal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                studentTotal.setFinshClassHours(courseTotal.getFinshClassHours()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                studentTotal.setUnfinshClassHours(courseTotal.getUnfinshClassHours()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //todo 缺少累计练习天数 累计练习时长 累计评测次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resultList.add(studentTotal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(studentTotal.getUserId())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .set(studentTotal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        saveOrUpdateBatch(resultList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return resultList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |