|
@@ -1,14 +1,20 @@
|
|
package com.fs.course.service.impl;
|
|
package com.fs.course.service.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
|
+import com.fs.common.core.redis.RedisCache;
|
|
import com.fs.common.exception.ServiceException;
|
|
import com.fs.common.exception.ServiceException;
|
|
|
|
+import com.fs.common.utils.StringUtils;
|
|
import com.fs.course.domain.FsUserCoursePeriod;
|
|
import com.fs.course.domain.FsUserCoursePeriod;
|
|
import com.fs.course.domain.FsUserCoursePeriodDays;
|
|
import com.fs.course.domain.FsUserCoursePeriodDays;
|
|
import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
|
|
import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
|
|
import com.fs.course.mapper.FsUserCoursePeriodMapper;
|
|
import com.fs.course.mapper.FsUserCoursePeriodMapper;
|
|
import com.fs.course.mapper.FsUserCourseVideoRedPackageMapper;
|
|
import com.fs.course.mapper.FsUserCourseVideoRedPackageMapper;
|
|
|
|
+import com.fs.course.param.PeriodStatisticCountParam;
|
|
import com.fs.course.service.IFsUserCoursePeriodService;
|
|
import com.fs.course.service.IFsUserCoursePeriodService;
|
|
|
|
+import com.fs.course.vo.FsCourseStaticsCountVO;
|
|
import com.fs.course.vo.FsUserCoursePeriodVO;
|
|
import com.fs.course.vo.FsUserCoursePeriodVO;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -16,6 +22,7 @@ import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.math.BigDecimal;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
@@ -23,6 +30,7 @@ import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -37,6 +45,8 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
|
|
@Autowired
|
|
@Autowired
|
|
private FsUserCoursePeriodMapper fsUserCoursePeriodMapper;
|
|
private FsUserCoursePeriodMapper fsUserCoursePeriodMapper;
|
|
@Resource
|
|
@Resource
|
|
|
|
+ RedisCache redisCache;
|
|
|
|
+ @Resource
|
|
private FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
|
|
private FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
|
|
@Resource
|
|
@Resource
|
|
private FsUserCourseVideoRedPackageMapper fsUserCourseVideoRedPackageMapper;
|
|
private FsUserCourseVideoRedPackageMapper fsUserCourseVideoRedPackageMapper;
|
|
@@ -241,4 +251,44 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
|
|
// 关营
|
|
// 关营
|
|
fsUserCoursePeriodMapper.endPeriod(LocalDate.now());
|
|
fsUserCoursePeriodMapper.endPeriod(LocalDate.now());
|
|
}
|
|
}
|
|
|
|
+ @Override
|
|
|
|
+ public FsCourseStaticsCountVO periodCourseStatisticCount(PeriodStatisticCountParam param) {
|
|
|
|
+ String redisKey = "user:trainingCampId:periodId:" + param.getUserId() + ":" + param.getTrainingCampId();
|
|
|
|
+ if (ObjectUtil.isNotEmpty(param.getPeriodId())){
|
|
|
|
+ redisKey=redisKey+":"+param.getPeriodId();
|
|
|
|
+ }
|
|
|
|
+ FsCourseStaticsCountVO durationStr = redisCache.getCacheObject(redisKey);
|
|
|
|
+ if (ObjectUtil.isNotEmpty(durationStr)){
|
|
|
|
+ return durationStr;
|
|
|
|
+ }
|
|
|
|
+ FsCourseStaticsCountVO fsCourseStaticsCountVO = new FsCourseStaticsCountVO();
|
|
|
|
+ try {
|
|
|
|
+ Long courseCompleteNum = fsUserCoursePeriodMapper.setlectCourseCompleteNum(param);
|
|
|
|
+ fsCourseStaticsCountVO.setCourseCompleteNum(courseCompleteNum != null ? courseCompleteNum : 0L);
|
|
|
|
+
|
|
|
|
+ Long courseWatchNum = fsUserCoursePeriodMapper.setlectCourseWatchNum(param);
|
|
|
|
+ fsCourseStaticsCountVO.setCourseWatchNum(courseWatchNum != null ? courseWatchNum : 0L);
|
|
|
|
+
|
|
|
|
+ Long redPacketCount = fsUserCoursePeriodMapper.setlectRedPacketCount(param);
|
|
|
|
+ fsCourseStaticsCountVO.setRedPacketCount(redPacketCount != null ? redPacketCount : 0L);
|
|
|
|
+
|
|
|
|
+ BigDecimal redPacketAmount = fsUserCoursePeriodMapper.setlectRedPacketAmount(param);
|
|
|
|
+ fsCourseStaticsCountVO.setRedPacketAmount(redPacketAmount != null ? redPacketAmount : BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+ Long correctAnswerNum = fsUserCoursePeriodMapper.setlectCorrectAnswerNum(param);
|
|
|
|
+ fsCourseStaticsCountVO.setCorrectAnswerNum(correctAnswerNum != null ? correctAnswerNum : 0L);
|
|
|
|
+ redisCache.setCacheObject(redisKey,fsCourseStaticsCountVO);
|
|
|
|
+ // 设置 Redis 记录的过期时间(例如 5 分钟)
|
|
|
|
+ redisCache.expire(redisKey, 600, TimeUnit.SECONDS);
|
|
|
|
+ return fsCourseStaticsCountVO;
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ return fsCourseStaticsCountVO;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<FsUserCoursePeriod> selectFsPeriodlist(PeriodStatisticCountParam param) {
|
|
|
|
+ return fsUserCoursePeriodMapper.selectFsPeriodlist(param);
|
|
|
|
+ }
|
|
}
|
|
}
|