收藏 点赞 观看记录

This commit is contained in:
wangw 2025-01-06 15:47:23 +08:00
parent 42cd464a33
commit 9d8a057620
3 changed files with 64 additions and 41 deletions

View File

@ -1,5 +1,6 @@
package com.sqx.modules.course.controller.app;
import com.sqx.common.annotation.Debounce;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.course.entity.CourseCollect;
@ -21,7 +22,8 @@ public class AppCourseCollectController extends AbstractController {
@Login
@PostMapping("/insertCourseCollect")
@ApiOperation("app收藏短剧信息")
public Result insertCourseCollect(@RequestBody CourseCollect courseCollect,@RequestAttribute("userId") Long userId){
@Debounce(interval = 3000, value = "#userId,#courseCollect.courseId,#courseCollect.classify,#courseCollect.type")
public Result insertCourseCollect(@RequestBody CourseCollect courseCollect, @RequestAttribute("userId") Long userId) {
courseCollect.setUserId(userId);
return courseCollectService.insertCourseCollect(courseCollect);
}
@ -29,13 +31,13 @@ public class AppCourseCollectController extends AbstractController {
@Login
@GetMapping("/selectByUserId")
@ApiOperation("app查询收藏短剧信息")
public Result selectByUserId(Integer page, Integer limit,@RequestAttribute("userId") Long userId,Integer classify){
return courseCollectService.selectByUserId(page,limit,userId,classify);
public Result selectByUserId(Integer page, Integer limit, @RequestAttribute("userId") Long userId, Integer classify) {
return courseCollectService.selectByUserId(page, limit, userId, classify);
}
@Login
@GetMapping("/collectVideoSummary")
public Result collectVideoSummary(@RequestAttribute("userId") Long userId){
public Result collectVideoSummary(@RequestAttribute("userId") Long userId) {
return courseCollectService.collectVideoSummary(userId);
}

View File

@ -61,6 +61,9 @@ public class CourseCollect implements Serializable {
* 更新时间
*/
private String updateTime;
/**
* 1 写入 2 删除
*/
@TableField(exist = false)
private Integer type;

View File

@ -1,8 +1,10 @@
package com.sqx.modules.course.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@ -21,6 +23,7 @@ import com.sqx.modules.course.service.CourseDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
@ -48,23 +51,20 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
@Override
@CacheEvict(value = "app:courseCollect", key = "#courseCollect.userId")
public Result insertCourseCollect(CourseCollect courseCollect) {
reentrantReadWriteLock.writeLock().lock();
// reentrantReadWriteLock.writeLock().lock();
try {
if (courseCollect.getClassify() == 3) {
QueryWrapper<CourseCollect> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", courseCollect.getUserId()).eq("classify", 3).eq("course_id", courseCollect.getCourseId());
queryWrapper.orderByDesc("create_time");
PageHelper.startPage(1, 1);
List<CourseCollect> courseCollects = baseMapper.selectList(queryWrapper);
CourseCollect collect;
if (CollectionUtil.isNotEmpty(courseCollects)) {
collect = courseCollects.get(0);
if (collect != null) {
collect.setUpdateTime(DateUtils.format(new Date()));
collect.setCourseCollectId(courseCollect.getCourseCollectId());
baseMapper.updateById(collect);
return Result.success("操作成功!");
}
queryWrapper.eq("user_id", courseCollect.getUserId())
.eq("classify", 3)
.eq("course_id", courseCollect.getCourseId());
queryWrapper.orderByDesc("create_time").last("limit 1");
CourseCollect collect = baseMapper.selectOne(queryWrapper);
if (collect != null) {
collect.setUpdateTime(DateUtils.format(new Date()));
collect.setCourseDetailsId(courseCollect.getCourseDetailsId());
baseMapper.updateById(collect);
return Result.success("操作成功!");
}
collect = new CourseCollect()
.setUserId(courseCollect.getUserId())
@ -76,43 +76,58 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
baseMapper.insert(collect);
return Result.success("操作成功!");
}
// 1收藏 2点赞
CourseCollect courseCollect1 = selectCourseCollectUserIdAnd(courseCollect.getUserId(), courseCollect.getCourseId(),
courseCollect.getClassify(), courseCollect.getClassify() == 1 ? null : courseCollect.getCourseDetailsId());
if (courseCollect.getType() == 1) {
if (courseCollect1 == null) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
courseCollect.setCreateTime(df.format(new Date()));
if (courseCollect.getClassify().equals(1)) {
courseCollect.setCourseDetailsId(null);
}
courseCollect.setCreateTime(DateUtil.now());
courseCollect.setUpdateTime(courseCollect.getCreateTime());
baseMapper.insert(courseCollect);
if (courseCollect.getClassify() == 2) {
CourseDetails courseDetails = courseDetailsService.getById(courseCollect.getCourseDetailsId());
courseDetails.setGoodNum(courseDetails.getGoodNum() + 1);
courseDetailsService.updateById(courseDetails);
}
} else {
courseCollect1.setUpdateTime(DateUtils.format(new Date()));
baseMapper.updateById(courseCollect1);
}
} else {
if (courseCollect1 != null) {
baseMapper.deleteById(courseCollect1.getCourseCollectId());
if (courseCollect.getClassify() == 2) {
CourseDetails courseDetails = courseDetailsService.getById(courseCollect.getCourseDetailsId());
courseDetails.setGoodNum(courseDetails.getGoodNum() - 1);
courseDetailsService.updateById(courseDetails);
}
LambdaQueryWrapper<CourseCollect> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CourseCollect::getCourseCollectId, courseCollect1.getCourseCollectId());
queryWrapper.eq(CourseCollect::getCourseId, courseCollect1.getCourseId());
baseMapper.delete(queryWrapper);
}
}
upGoodNum(courseCollect, courseCollect.getType());
return Result.success("操作成功!");
} catch (Exception e) {
e.printStackTrace();
// e.printStackTrace();
log.error("收藏短剧出错了!" + e.getMessage());
} finally {
reentrantReadWriteLock.writeLock().unlock();
}
// finally {
// reentrantReadWriteLock.writeLock().unlock();
// }
return Result.error("系统繁忙,请稍后再试!");
}
/**
* 更新点赞数量
*
* @param collect courseId courseDetailsId 必须有值
* @param isGood 1为加一 其它为 减一
*/
@Async
public void upGoodNum(CourseCollect collect, Integer isGood) {
LambdaQueryWrapper<CourseDetails> queryWrapper = new LambdaQueryWrapper<CourseDetails>()
.eq(CourseDetails::getCourseId, collect.getCourseId())
.eq(CourseDetails::getCourseDetailsId, collect.getCourseDetailsId());
CourseDetails courseDetails = courseDetailsService.getOne(queryWrapper);
LambdaUpdateWrapper<CourseDetails> updateWrapper = new LambdaUpdateWrapper<CourseDetails>()
.eq(CourseDetails::getCourseId, collect.getCourseId())
.eq(CourseDetails::getCourseDetailsId, collect.getCourseDetailsId())
.set(CourseDetails::getGoodNum, courseDetails.getGoodNum() == null ? 0 : courseDetails.getGoodNum() - (isGood.equals(1) ? 1 : -1));
courseDetailsService.update(updateWrapper);
}
@Override
@CachePut(value = "app:courseCollect", key = "#userId")
public Result selectByUserId(Integer page, Integer limit, Long userId, Integer classify) {
@ -131,11 +146,10 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
}
List<Course> courseList = courseIdList.isEmpty() ? new ArrayList<>() : courseDao.selectList(new LambdaQueryWrapper<Course>().in(Course::getCourseId, courseIdList));
// List<Course> courseList = baseMapper.selectCourseByCollect(userId, classify);
Set<Long> detailIdList = courseCollectList.stream().map(CourseCollect::getCourseDetailsId).collect(Collectors.toSet());
Map<Long, CourseDetails> courseDetailsMap = detailIdList.isEmpty() ? new HashMap<>() : courseDetailsService.list(new LambdaQueryWrapper<CourseDetails>()
.in(CourseDetails::getCourseDetailsId, detailIdList)).stream()
.collect(Collectors.toMap(CourseDetails::getCourseDetailsId, item->item));
.collect(Collectors.toMap(CourseDetails::getCourseDetailsId, item -> item));
Map<Long, Integer> countMap = courseDetailsDao.countByCourseId().stream().collect(Collectors.toMap(CourseDetails::getCourseId, CourseDetails::getCourseDetailsCount));
@ -146,7 +160,7 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
course.setCourseClassification(courseClassificationDao.selectById(course.getClassifyId()));
CourseCollect courseCollect = courseCollectHashMap.get(course.getCourseId());
CourseDetails courseDetails = courseCollect == null ? null : courseDetailsMap.get(courseCollect.getCourseDetailsId());
course.setCourseDetailsCount(courseCollect == null ? 0 :countMap.get(courseCollect.getCourseId()));
course.setCourseDetailsCount(courseCollect == null ? 0 : countMap.get(courseCollect.getCourseId()));
if (courseDetails != null) {
course.setCourseDetailsName(courseDetails.getCourseDetailsName());
course.setCourseDetailsId(courseDetails.getCourseDetailsId());
@ -163,7 +177,11 @@ public class CourseCollectServiceImpl extends ServiceImpl<CourseCollectDao, Cour
@Override
public CourseCollect selectCourseCollectUserIdAnd(Long userId, Long courseId, Integer classify, Long courseDetailsId) {
return baseMapper.selectOne(new QueryWrapper<CourseCollect>().eq(courseDetailsId != null, "course_details_id", courseDetailsId).eq("user_id", userId).eq("classify", classify).eq("course_id", courseId));
return baseMapper.selectOne(new QueryWrapper<CourseCollect>()
.eq(courseDetailsId != null, "course_details_id", courseDetailsId)
.eq("user_id", userId)
.eq("classify", classify)
.eq("course_id", courseId));
}