视频 查看集 和 集数列表 拆分

This commit is contained in:
2025-01-04 13:50:32 +08:00
parent 362e99c8c9
commit 1096c17345
9 changed files with 221 additions and 5 deletions

View File

@@ -45,6 +45,20 @@ public class AppCourseController extends AbstractController {
null, over, wxCourse, dyCourse, wxShow, dyShow);
}
@Login
@GetMapping("/courseSets")
@ApiOperation("根据id查询短剧集数列表")
public Result courseSets(@RequestAttribute("userId") Long userId, Long courseId) {
return courseDetailsService.courseSets(userId, courseId);
}
@Login
@GetMapping("/courseSets")
@ApiOperation("查询短剧 内容")
public Result courseDetails(@RequestAttribute("userId") Long userId, Long courseId, Integer sort) {
return courseDetailsService.courseDetails(userId, courseId, sort);
}
@Login
@GetMapping("/selectCourseDetailsById")

View File

@@ -2,27 +2,47 @@ package com.sqx.modules.course.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sqx.modules.course.entity.CourseDetails;
import com.sqx.modules.course.vo.CourseDetailsSetVo;
import com.sqx.modules.course.vo.CourseDetailsVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Mapper
public interface CourseDetailsDao extends BaseMapper<CourseDetails> {
/**
* @param courseId 剧的id
* @param isPrice 是否收费 true 收费
* @param price 全剧价格
* @param wholesalePrice 10集价格
*/
List<CourseDetailsSetVo> courseSets(@Param("courseId") Long courseId, boolean isPrice, BigDecimal price, BigDecimal wholesalePrice);
List<CourseDetails> findByCourseId(@Param("id") Long id,@Param("userId") Long userId);
List<CourseDetailsVo> courseDetails(@Param("courseId") Long courseId, @Param("collect") Integer collect,
@Param("starSort") Integer starSort, @Param("endSort") Integer endSort);
List<CourseDetails> selectCoursePageByCourseId(@Param("id") Long id,@Param("good") Integer good);
List<CourseDetails> findByCourseId(@Param("id") Long id, @Param("userId") Long userId);
List<CourseDetails> findByCourseIdNotUrl(@Param("id") Long id,@Param("userId") Long userId);
List<CourseDetails> selectCoursePageByCourseId(@Param("id") Long id, @Param("good") Integer good);
List<CourseDetails> findByCourseIdNotUrl(@Param("id") Long id, @Param("userId") Long userId);
int deleteCourseDetails(String[] ids);
Map<String,Object> countCourse(Long courseId);
/**
* 播放数
* 点赞数
* 总集数
*/
Map<String, Object> countCourse(Long courseId);
Integer countCourseByCourseId(Long courseId);
List<CourseDetails> countByCourseId();
}

View File

@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
@Mapper
public interface CourseUserDao extends BaseMapper<CourseUser> {
@@ -19,6 +20,8 @@ public interface CourseUserDao extends BaseMapper<CourseUser> {
CourseUser selectCourseUser(@Param("id") Long id, @Param("userId") Long userId);
List<CourseUser> selectCourseUserList(@Param("id") Long id, @Param("userId") Long userId);
//查询用户已购买的集
Set<Long> selectUserCourseDetailsId(@Param("id") Long id, @Param("userId") Long userId);
/**
* 修改时间

View File

@@ -14,6 +14,16 @@ public interface CourseDetailsService extends IService<CourseDetails> {
Result deleteCourseDetails(String ids);
/**
* 集数列表
* @param userId
* @param courseId
* @return
*/
Result courseSets(Long userId, Long courseId);
Result courseDetails(Long userId, Long courseId, Integer sort);
Result selectCourseDetailsById(Long id,String token,String courseDetailsId);
Result selectCourseDetailsList(Integer page,Integer limit,String token,String randomNum,Integer wxShow,Integer dyShow);

View File

@@ -1,6 +1,8 @@
package com.sqx.modules.course.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
@@ -31,6 +33,8 @@ import com.sqx.modules.course.entity.CourseDetails;
import com.sqx.modules.course.entity.CourseUser;
import com.sqx.modules.course.service.CourseDetailsService;
import com.sqx.modules.course.vo.CourseDetailsIn;
import com.sqx.modules.course.vo.CourseDetailsSetVo;
import com.sqx.modules.course.vo.CourseDetailsVo;
import com.sqx.modules.orders.dao.OrdersDao;
import com.sqx.modules.orders.service.OrdersService;
import com.sqx.modules.redisService.impl.RedisServiceImpl;
@@ -50,6 +54,8 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Slf4j
@@ -133,12 +139,90 @@ public class CourseDetailsServiceImpl extends ServiceImpl<CourseDetailsDao, Cour
}
//更新 播放量 周播放量
private void setCourseView(Course course) {
if (course.getViewCounts() == null) {
course.setViewCounts(1);
} else {
course.setViewCounts(course.getViewCounts() + 1);
}
if (ApiAccessLimitUtil.isAccessAllowed("setCourseView:" + course.getCourseId(), "updateAuthCertInfo", 1, 600)) {
int courseViewCount = redisServiceImpl.getCourseWeekViewCount(course.getCourseId());
course.setWeekView(courseViewCount);
courseDao.updateById(course);
}
courseDao.updateById(course);
}
@Override
public Result courseSets(Long userId, Long courseId) {
CourseCollect courseCollect = courseCollectDao.selectOne(new QueryWrapper<CourseCollect>().eq("course_id", courseId)
.eq("user_id", userId).eq("classify", 3).last("limit 1"));
Course bean = courseDao.selectById(courseId);
//查询用户是否购买了整集
CourseUser courseUser = courseUserDao.selectCourseUser(courseId, userId);
// 每天购买超过上限,获得免费时间段资格
boolean freeWatch = checkFreeWatchPayCount(userId);
List<CourseDetailsSetVo> courseDetailsSetVos;
if (freeWatch || courseUser != null) {
courseDetailsSetVos = baseMapper.courseSets(courseId, false, null, null);
} else {
courseDetailsSetVos = baseMapper.courseSets(courseId, true, bean.getPrice(), bean.getWholesalePrice());
//查询用户是否单独购买了集
Set<Long> detailsId = courseUserDao.selectUserCourseDetailsId(courseId, userId);
if (CollectionUtil.isNotEmpty(detailsId)) {
courseDetailsSetVos = courseDetailsSetVos.stream()
.peek(s -> {
if (s.getCourseDetailsId().equals(courseCollect.getCourseDetailsId())) {
s.setCurrent(1);
}
if (detailsId.contains(s.getCourseDetailsId())) {
s.setIsPrice(2);
}
})
.filter(s -> s.getCurrent() == 1 || s.getIsPrice() == 2)
.collect(Collectors.toList());
}
}
return new Result().put("data", courseDetailsSetVos);
}
@Override
public Result courseDetails(Long userId, Long courseId, Integer sort) {
Course bean = courseDao.selectById(courseId);
Integer detailCount = baseMapper.countCourseByCourseId(courseId);
if (detailCount == null || detailCount.equals(0)) {
return Result.error("暂无可看剧集,请观看其它影片。");
}
int startSort = 0;
int endSort = 5;
if (sort == null) {
CourseCollect courseCollect = courseCollectDao.selectOne(new QueryWrapper<CourseCollect>().eq("course_id", courseId)
.eq("user_id", userId).eq("classify", 3).last("limit 1"));
CourseDetails courseDetails = baseMapper.selectOne(new QueryWrapper<CourseDetails>()
.eq("course_details_id", courseCollect.getCourseDetailsId()).eq("course_id", courseCollect.getCourseId()).last("limit 1"));
sort = courseDetails.getSort();
}
if (sort != null && sort > 2) {
startSort = sort - 3;
endSort = sort + 3;
if (detailCount < endSort) {
startSort = detailCount - 5;
endSort = detailCount + 1;
}
}
Integer collect = courseCollectDao.selectCount(new QueryWrapper<CourseCollect>()
.eq("user_id", userId).eq("course_id", courseId)
.eq("classify", 1).last("limit 1"));
List<CourseDetailsVo> courseDetailsVos = baseMapper.courseDetails(courseId, collect, startSort, endSort);
courseDetailsVos.stream().forEach(s -> {
CourseCollect isGood = courseCollectDao.selectOne(new QueryWrapper<CourseCollect>()
.eq("user_id", userId).eq("course_details_id", s.getCourseDetailsId()).eq("classify", 2).last("limit 1"));
s.setIsGood(isGood == null ? 0 : 1);
});
ThreadUtil.execAsync(() -> {
setCourseView(bean);
});
return new Result().put("data", courseDetailsVos);
}
@Override

View File

@@ -0,0 +1,16 @@
package com.sqx.modules.course.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class CourseDetailsSetVo {
private Long courseId;
private Long courseDetailsId;
private String courseDetailsName;
private Integer current = 0;
private Integer isPrice;
private BigDecimal price;
private BigDecimal wholesalePrice;
}

View File

@@ -0,0 +1,30 @@
package com.sqx.modules.course.vo;
import lombok.Data;
@Data
public class CourseDetailsVo {
private Long courseId;
private Long courseDetailsId;
private String courseDetailsName;
/**
* 封面图
*/
private String titleImg;
/**
* 视频地址
*/
private String videoUrl;
/**
* 点赞数
*/
private Integer goodNum;
/**
* 是否已追
*/
private Integer isCollect;
/**
* 是否点赞
*/
private Integer isGood;
}