diff --git a/src/main/java/com/sqx/modules/course/controller/app/AppCourseController.java b/src/main/java/com/sqx/modules/course/controller/app/AppCourseController.java index 537433fc..b4fc3674 100644 --- a/src/main/java/com/sqx/modules/course/controller/app/AppCourseController.java +++ b/src/main/java/com/sqx/modules/course/controller/app/AppCourseController.java @@ -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") diff --git a/src/main/java/com/sqx/modules/course/dao/CourseDetailsDao.java b/src/main/java/com/sqx/modules/course/dao/CourseDetailsDao.java index 92e7c8a0..b65b5775 100644 --- a/src/main/java/com/sqx/modules/course/dao/CourseDetailsDao.java +++ b/src/main/java/com/sqx/modules/course/dao/CourseDetailsDao.java @@ -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 { + /** + * @param courseId 剧的id + * @param isPrice 是否收费 true 收费 + * @param price 全剧价格 + * @param wholesalePrice 10集价格 + */ + List courseSets(@Param("courseId") Long courseId, boolean isPrice, BigDecimal price, BigDecimal wholesalePrice); - List findByCourseId(@Param("id") Long id,@Param("userId") Long userId); + List courseDetails(@Param("courseId") Long courseId, @Param("collect") Integer collect, + @Param("starSort") Integer starSort, @Param("endSort") Integer endSort); - List selectCoursePageByCourseId(@Param("id") Long id,@Param("good") Integer good); + List findByCourseId(@Param("id") Long id, @Param("userId") Long userId); - List findByCourseIdNotUrl(@Param("id") Long id,@Param("userId") Long userId); + List selectCoursePageByCourseId(@Param("id") Long id, @Param("good") Integer good); + + List findByCourseIdNotUrl(@Param("id") Long id, @Param("userId") Long userId); int deleteCourseDetails(String[] ids); - Map countCourse(Long courseId); + /** + * 播放数 + * 点赞数 + * 总集数 + */ + Map countCourse(Long courseId); + + Integer countCourseByCourseId(Long courseId); List countByCourseId(); } diff --git a/src/main/java/com/sqx/modules/course/dao/CourseUserDao.java b/src/main/java/com/sqx/modules/course/dao/CourseUserDao.java index 536532b1..71ae2fe5 100644 --- a/src/main/java/com/sqx/modules/course/dao/CourseUserDao.java +++ b/src/main/java/com/sqx/modules/course/dao/CourseUserDao.java @@ -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 { @@ -19,6 +20,8 @@ public interface CourseUserDao extends BaseMapper { CourseUser selectCourseUser(@Param("id") Long id, @Param("userId") Long userId); List selectCourseUserList(@Param("id") Long id, @Param("userId") Long userId); + //查询用户已购买的集 + Set selectUserCourseDetailsId(@Param("id") Long id, @Param("userId") Long userId); /** * 修改时间 diff --git a/src/main/java/com/sqx/modules/course/service/CourseDetailsService.java b/src/main/java/com/sqx/modules/course/service/CourseDetailsService.java index bbad4fca..71a3534e 100644 --- a/src/main/java/com/sqx/modules/course/service/CourseDetailsService.java +++ b/src/main/java/com/sqx/modules/course/service/CourseDetailsService.java @@ -14,6 +14,16 @@ public interface CourseDetailsService extends IService { 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); diff --git a/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java b/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java index f2d96893..f3da39a5 100644 --- a/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java +++ b/src/main/java/com/sqx/modules/course/service/impl/CourseDetailsServiceImpl.java @@ -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().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 courseDetailsSetVos; + if (freeWatch || courseUser != null) { + courseDetailsSetVos = baseMapper.courseSets(courseId, false, null, null); + } else { + courseDetailsSetVos = baseMapper.courseSets(courseId, true, bean.getPrice(), bean.getWholesalePrice()); + //查询用户是否单独购买了集 + Set 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().eq("course_id", courseId) + .eq("user_id", userId).eq("classify", 3).last("limit 1")); + CourseDetails courseDetails = baseMapper.selectOne(new QueryWrapper() + .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() + .eq("user_id", userId).eq("course_id", courseId) + .eq("classify", 1).last("limit 1")); + List courseDetailsVos = baseMapper.courseDetails(courseId, collect, startSort, endSort); + courseDetailsVos.stream().forEach(s -> { + CourseCollect isGood = courseCollectDao.selectOne(new QueryWrapper() + .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 diff --git a/src/main/java/com/sqx/modules/course/vo/CourseDetailsSetVo.java b/src/main/java/com/sqx/modules/course/vo/CourseDetailsSetVo.java new file mode 100644 index 00000000..5f923ded --- /dev/null +++ b/src/main/java/com/sqx/modules/course/vo/CourseDetailsSetVo.java @@ -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; +} diff --git a/src/main/java/com/sqx/modules/course/vo/CourseDetailsVo.java b/src/main/java/com/sqx/modules/course/vo/CourseDetailsVo.java new file mode 100644 index 00000000..5d506d75 --- /dev/null +++ b/src/main/java/com/sqx/modules/course/vo/CourseDetailsVo.java @@ -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; +} diff --git a/src/main/resources/mapper/course/CourseDetailsDao.xml b/src/main/resources/mapper/course/CourseDetailsDao.xml index d327e975..bcbe20a4 100644 --- a/src/main/resources/mapper/course/CourseDetailsDao.xml +++ b/src/main/resources/mapper/course/CourseDetailsDao.xml @@ -2,6 +2,34 @@ + + + + + select + count(1) + from course_details + where course_id = #{courseId} + + + + update course_user set update_time =#{courseUser.updateTime}