| | |
| | | import com.gkhy.exam.system.domain.ExStudentStudy; |
| | | import com.gkhy.exam.system.mapper.ExResourceMapper; |
| | | import com.gkhy.exam.system.mapper.ExStudentStudyMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.math.BigDecimal; |
| | |
| | | /** |
| | | * 学习进度job |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class UserStudyJob { |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private RedisUtils redisUtils; |
| | | |
| | | public void progress(){ |
| | | Set<String> keys = redisUtils.keys(CacheConstant.STUDY_PROCESS_KEY + "*"); |
| | | if(ObjectUtil.isNotEmpty(keys)){ |
| | | for(String key:keys){ |
| | | ExStudentStudy studentStudy = (ExStudentStudy) redisUtils.get(key); |
| | | ExResource resource=resourceMapper.selectById(studentStudy.getResourceId()); |
| | | if(ResourceTypeEnum.VIDEO.getCode().equals(resource.getResourceType())||ResourceTypeEnum.AUDIO.getCode().equals(resource.getResourceType())){ |
| | | studentStudy.setProgress(new BigDecimal(studentStudy.getCurrentDuration()).divide(new BigDecimal(resource.getResourceLength()),BigDecimal.ROUND_CEILING).multiply(BigDecimal.valueOf(100))); |
| | | }else{ |
| | | studentStudy.setProgress(BigDecimal.valueOf(studentStudy.getCurrentPage()).divide(BigDecimal.valueOf(resource.getDocPage()).multiply(BigDecimal.valueOf(100)))); |
| | | |
| | | /** |
| | | * 建议:每10秒执行一次 |
| | | */ |
| | | @Scheduled(cron = "*/10 * * * * ?") |
| | | public void doprogress(){ |
| | | try { |
| | | Set<String> keys = redisUtils.keys(CacheConstant.STUDY_PROCESS_KEY + "*"); |
| | | if (ObjectUtil.isNotEmpty(keys)) { |
| | | for (String key : keys) { |
| | | ExStudentStudy studentStudy = (ExStudentStudy) redisUtils.get(key); |
| | | ExResource resource = resourceMapper.selectById(studentStudy.getResourceId()); |
| | | if (ResourceTypeEnum.VIDEO.getCode().equals(resource.getResourceType()) || ResourceTypeEnum.AUDIO.getCode().equals(resource.getResourceType())) { |
| | | studentStudy.setProgress(new BigDecimal(studentStudy.getCurrentDuration()).divide(new BigDecimal(resource.getResourceLength()), BigDecimal.ROUND_CEILING).multiply(BigDecimal.valueOf(100))); |
| | | } else { |
| | | studentStudy.setProgress(BigDecimal.valueOf(studentStudy.getCurrentPage()).divide(BigDecimal.valueOf(resource.getDocPage()).multiply(BigDecimal.valueOf(100)))); |
| | | } |
| | | studentStudyMapper.updateById(studentStudy); |
| | | redisUtils.del(key); |
| | | } |
| | | studentStudyMapper.updateById(studentStudy); |
| | | redisUtils.del(key); |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("UserStudyJob doprogress error:{}",e.getMessage()); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 统计学员学习总进度 |
| | | */ |
| | | public void staticProgress(){ |
| | | |
| | | } |
| | | } |