|  | @@ -0,0 +1,126 @@
 | 
	
		
			
				|  |  | +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.StudentStarDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.Teacher;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 | 
	
		
			
				|  |  | +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.TeacherTotal;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dto.search.TeacherTotalSearch;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.dao.TeacherTotalDao;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
 | 
	
		
			
				|  |  | +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 TeacherTotalServiceImpl extends ServiceImpl<TeacherTotalDao, TeacherTotal> implements TeacherTotalService {
 | 
	
		
			
				|  |  | +    private final static Logger log = LoggerFactory.getLogger(TeacherTotalServiceImpl.class);
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private TeacherDao teacherDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentStarDao studentStarDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private CourseScheduleDao courseScheduleDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private RedissonClient redissonClient;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private LiveRoomService liveRoomService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public TeacherTotalVo detail(Long id) {
 | 
	
		
			
				|  |  | +        return baseMapper.detail(id);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public IPage<TeacherTotalVo> selectPage(IPage<TeacherTotalVo> page, TeacherTotalSearch query) {
 | 
	
		
			
				|  |  | +        return page.setRecords(baseMapper.selectPage(page, query));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<TeacherTotal> queryTeacherTotal() {
 | 
	
		
			
				|  |  | +        List<Teacher> teachers = teacherDao.selectList(Wrappers.<Teacher>emptyWrapper()
 | 
	
		
			
				|  |  | +                .select("userId"));
 | 
	
		
			
				|  |  | +        //查询粉丝数
 | 
	
		
			
				|  |  | +        List<TeacherTotalVo> teacherStarTotal = studentStarDao.queryTeacherTotal();
 | 
	
		
			
				|  |  | +        Map<Long, TeacherTotalVo> teacherStarMap = new HashMap<>();
 | 
	
		
			
				|  |  | +        if (!CollectionUtils.isEmpty(teacherStarTotal)) {
 | 
	
		
			
				|  |  | +            teacherStarMap = teacherStarTotal.stream().collect(Collectors.toMap(TeacherTotalVo::getUserId, o -> o));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //查询已上未上课时数
 | 
	
		
			
				|  |  | +        List<TeacherTotalVo> teacherCourseTotal = courseScheduleDao.queryTeacherTotal();
 | 
	
		
			
				|  |  | +        Map<Long, TeacherTotalVo> teacherCourseMap = new HashMap<>();
 | 
	
		
			
				|  |  | +        if (!CollectionUtils.isEmpty(teacherCourseTotal)) {
 | 
	
		
			
				|  |  | +            teacherCourseMap = teacherCourseTotal.stream().collect(Collectors.toMap(TeacherTotalVo::getUserId, o -> o));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //查询老师正在直播的直播间
 | 
	
		
			
				|  |  | +        List<LiveRoom> templist = liveRoomService.list(Wrappers.<LiveRoom>lambdaQuery()
 | 
	
		
			
				|  |  | +                .eq(LiveRoom::getLiveState, 1)
 | 
	
		
			
				|  |  | +                .eq(LiveRoom::getRoomState, 0)
 | 
	
		
			
				|  |  | +                .eq(LiveRoom::getType, "TEMP"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<Long, Boolean> liveMap = new HashMap<>();
 | 
	
		
			
				|  |  | +        for (LiveRoom liveRoom : templist) {
 | 
	
		
			
				|  |  | +            liveMap.put(liveRoom.getSpeakerId(), true);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<TeacherTotal> resultList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (Teacher teacher : teachers) {
 | 
	
		
			
				|  |  | +            TeacherTotal teacherTotal = new TeacherTotal();
 | 
	
		
			
				|  |  | +            teacherTotal.setUserId(teacher.getUserId());
 | 
	
		
			
				|  |  | +            //粉丝数
 | 
	
		
			
				|  |  | +            TeacherTotalVo fansTotal = teacherStarMap.get(teacher.getUserId());
 | 
	
		
			
				|  |  | +            if (null != fansTotal && null != fansTotal.getFansNum()) {
 | 
	
		
			
				|  |  | +                teacherTotal.setFansNum(fansTotal.getFansNum());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            TeacherTotalVo courseTotal = teacherCourseMap.get(teacher.getUserId());
 | 
	
		
			
				|  |  | +            if (null != courseTotal) {
 | 
	
		
			
				|  |  | +                //课时数
 | 
	
		
			
				|  |  | +                if (null != courseTotal.getExpTime()) {
 | 
	
		
			
				|  |  | +                    teacherTotal.setExpTime(courseTotal.getExpTime());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (null != courseTotal.getUnExpTime()) {
 | 
	
		
			
				|  |  | +                    teacherTotal.setUnExpTime(courseTotal.getUnExpTime());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //星级
 | 
	
		
			
				|  |  | +                Double starGrade = courseTotal.getStarGrade();
 | 
	
		
			
				|  |  | +                if (null != starGrade) {
 | 
	
		
			
				|  |  | +                    Long round = Math.round(starGrade);
 | 
	
		
			
				|  |  | +                    teacherTotal.setStarGrade(round.doubleValue());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //是否正在直播
 | 
	
		
			
				|  |  | +            teacherTotal.setLiveFlag(null == liveMap.get(teacher.getUserId()) ? false : true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            resultList.add(teacherTotal);
 | 
	
		
			
				|  |  | +            redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(teacherTotal.getUserId()))
 | 
	
		
			
				|  |  | +                    .set(teacherTotal);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //统计信息入库
 | 
	
		
			
				|  |  | +        //批量入库
 | 
	
		
			
				|  |  | +        saveOrUpdateBatch(resultList);
 | 
	
		
			
				|  |  | +        return resultList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public Object getRedisValueByKey(String key) {
 | 
	
		
			
				|  |  | +        return redissonClient.getBucket(key).get();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |