视频 查看集 和 集数列表 拆分
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
30
src/main/java/com/sqx/modules/course/vo/CourseDetailsVo.java
Normal file
30
src/main/java/com/sqx/modules/course/vo/CourseDetailsVo.java
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user