diff --git a/src/main/java/com/sqx/modules/course/controller/app/AppCourseCollectController.java b/src/main/java/com/sqx/modules/course/controller/app/AppCourseCollectController.java index a4401c1a..81c132e2 100644 --- a/src/main/java/com/sqx/modules/course/controller/app/AppCourseCollectController.java +++ b/src/main/java/com/sqx/modules/course/controller/app/AppCourseCollectController.java @@ -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 = 1000, 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); } 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 ff89c12b..b9c5a2e2 100644 --- a/src/main/java/com/sqx/modules/course/dao/CourseDetailsDao.java +++ b/src/main/java/com/sqx/modules/course/dao/CourseDetailsDao.java @@ -31,6 +31,15 @@ public interface CourseDetailsDao extends BaseMapper { List findByCourseIdNotUrl(@Param("id") Long id, @Param("userId") Long userId); + /** + * 更新播放数量 + * + * @param courseId courseId 必须有值 + * @param courseDetailsId courseDetailsId 必须有值 + * @param state 1为 ViewCount 其它 为 PlayCompleteCount + */ + void updateViewCount(@Param("courseId") Long courseId,@Param("courseDetailsId") Long courseDetailsId, @Param("state") int state); + int deleteCourseDetails(String[] ids); diff --git a/src/main/java/com/sqx/modules/course/entity/CourseCollect.java b/src/main/java/com/sqx/modules/course/entity/CourseCollect.java index e4837766..81de92f4 100644 --- a/src/main/java/com/sqx/modules/course/entity/CourseCollect.java +++ b/src/main/java/com/sqx/modules/course/entity/CourseCollect.java @@ -61,6 +61,9 @@ public class CourseCollect implements Serializable { * 更新时间 */ private String updateTime; + /** + * 1 写入 2 删除 + */ @TableField(exist = false) private Integer type; diff --git a/src/main/java/com/sqx/modules/course/service/impl/CourseCollectServiceImpl.java b/src/main/java/com/sqx/modules/course/service/impl/CourseCollectServiceImpl.java index 574927b4..8ca6f91c 100644 --- a/src/main/java/com/sqx/modules/course/service/impl/CourseCollectServiceImpl.java +++ b/src/main/java/com/sqx/modules/course/service/impl/CourseCollectServiceImpl.java @@ -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 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 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 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 queryWrapper = new LambdaQueryWrapper() + .eq(CourseDetails::getCourseId, collect.getCourseId()) + .eq(CourseDetails::getCourseDetailsId, collect.getCourseDetailsId()); + CourseDetails courseDetails = courseDetailsService.getOne(queryWrapper); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .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 courseList = courseIdList.isEmpty() ? new ArrayList<>() : courseDao.selectList(new LambdaQueryWrapper().in(Course::getCourseId, courseIdList)); -// List courseList = baseMapper.selectCourseByCollect(userId, classify); Set detailIdList = courseCollectList.stream().map(CourseCollect::getCourseDetailsId).collect(Collectors.toSet()); Map courseDetailsMap = detailIdList.isEmpty() ? new HashMap<>() : courseDetailsService.list(new LambdaQueryWrapper() .in(CourseDetails::getCourseDetailsId, detailIdList)).stream() - .collect(Collectors.toMap(CourseDetails::getCourseDetailsId, item->item)); + .collect(Collectors.toMap(CourseDetails::getCourseDetailsId, item -> item)); Map countMap = courseDetailsDao.countByCourseId().stream().collect(Collectors.toMap(CourseDetails::getCourseId, CourseDetails::getCourseDetailsCount)); @@ -146,7 +160,7 @@ public class CourseCollectServiceImpl extends ServiceImpl().eq(courseDetailsId != null, "course_details_id", courseDetailsId).eq("user_id", userId).eq("classify", classify).eq("course_id", courseId)); + return baseMapper.selectOne(new QueryWrapper() + .eq(courseDetailsId != null, "course_details_id", courseDetailsId) + .eq("user_id", userId) + .eq("classify", classify) + .eq("course_id", courseId)); } diff --git a/src/main/java/com/sqx/modules/course/service/impl/CourseServiceImpl.java b/src/main/java/com/sqx/modules/course/service/impl/CourseServiceImpl.java index 01efa8b7..cea19ce5 100644 --- a/src/main/java/com/sqx/modules/course/service/impl/CourseServiceImpl.java +++ b/src/main/java/com/sqx/modules/course/service/impl/CourseServiceImpl.java @@ -32,6 +32,7 @@ import com.sqx.modules.course.dao.CourseDao; import com.sqx.modules.course.dao.CourseDetailsDao; import com.sqx.modules.course.dao.CourseUserDao; import com.sqx.modules.course.entity.Course; +import com.sqx.modules.course.entity.CourseCollect; import com.sqx.modules.course.entity.CourseDetails; import com.sqx.modules.course.entity.CourseUser; import com.sqx.modules.course.service.CourseService; @@ -1287,21 +1288,21 @@ public class CourseServiceImpl extends ServiceImpl implements if (course == null) { return Result.error("短剧不存在"); } - - CourseDetails details = courseDetailsDao.selectById(courseDetailsId); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CourseDetails::getCourseId, courseId); + queryWrapper.eq(CourseDetails::getCourseDetailsId, courseDetailsId); + queryWrapper.orderByDesc(CourseDetails::getCreateTime).last("limit 1"); + CourseDetails details = courseDetailsDao.selectOne(queryWrapper); if (details == null) { return Result.error("短剧集不存在"); } if ("start".equals(type)) { //开始播放 - details.setViewCount(details.getViewCount() + 1); - courseDetailsDao.updateById(details); - baseMapper.updateById(course); + courseDetailsDao.updateViewCount(details.getCourseId(),details.getCourseDetailsId(), 1); } else if ("end".equals(type)) { //播放完成 - details.setPlayCompleteCount(details.getPlayCompleteCount() + 1); - courseDetailsDao.updateById(details); + courseDetailsDao.updateViewCount(details.getCourseId(),details.getCourseDetailsId(), 2); } return Result.success(); diff --git a/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java b/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java index 9c0251cc..7d51a06d 100644 --- a/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java +++ b/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java @@ -225,7 +225,7 @@ public class InviteServiceImpl extends ServiceImpl implements UserMoney userMoney = userMoneyService.selectUserMoneyByUserId(userEntity.getUserId()); userMoney.setMoney(userMoney.getMoney() == null ? BigDecimal.valueOf(money) : userMoney.getMoney().add(BigDecimal.valueOf(money))); userMoney.setInviteIncomeCoin(userMoney.getInviteIncomeCoin() == null ? new BigDecimal(money) : userMoney.getInviteIncomeCoin().add(new BigDecimal(money))); - userMoneyService.update(null, new LambdaQueryWrapper().eq(UserMoney::getUserId, userMoney.getUserId()).eq(UserMoney::getId, userMoney.getId())); + userMoneyService.update(userMoney, new LambdaQueryWrapper().eq(UserMoney::getUserId, userMoney.getUserId()).eq(UserMoney::getId, userMoney.getId())); } //助力活动 diff --git a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java index 5c0b0c41..227d4996 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java @@ -113,7 +113,7 @@ public class WuyouController { payDetailsDao.insert(payDetails); } else { payDetails.setTradeNo(AliPayOrderUtil.createOrderId()); - payDetailsDao.updateById(payDetails); + payDetailsDao.update(payDetails, new LambdaQueryWrapper().eq(PayDetails::getId, payDetails.getId()).eq(PayDetails::getUserId, payDetails.getUserId())); } if (order.getPayMoney().compareTo(BigDecimal.ZERO) == 0) { diff --git a/src/main/resources/mapper/app/UserMoneyDao.xml b/src/main/resources/mapper/app/UserMoneyDao.xml index c0a797fa..f378f0c0 100644 --- a/src/main/resources/mapper/app/UserMoneyDao.xml +++ b/src/main/resources/mapper/app/UserMoneyDao.xml @@ -25,27 +25,5 @@ where user_id=#{userId} - - update user_money set - - money=money+#{money} - - - money=money-#{money} - - where sys_user_id=#{sysUserId} - - - - update user_money set - - amount=amount+#{amount} - - - amount=amount-#{amount} - - where sys_user_id=#{sysUserId} - - diff --git a/src/main/resources/mapper/course/CourseDetailsDao.xml b/src/main/resources/mapper/course/CourseDetailsDao.xml index f49e8d58..229a948b 100644 --- a/src/main/resources/mapper/course/CourseDetailsDao.xml +++ b/src/main/resources/mapper/course/CourseDetailsDao.xml @@ -22,12 +22,16 @@ - + + update course_details + set + + view_count = view_count + 1 + + + play_complete_count = play_complete_count + 1 + + where + course_id=#{courseId} + and course_details_id =#{courseDetailsId} + DELETE FROM course_details WHERE course_details_id IN @@ -71,31 +92,26 @@