From 59e297cc9d51ef9c6df0dac71664bf1b492fc941 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期六, 14 六月 2025 13:23:29 +0800 Subject: [PATCH] insert 完成厨神视频后台页面接口(增删改查/上架/下架) --- framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java | 106 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 95 insertions(+), 11 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java index 3874f5d..fecee7f 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java @@ -1,19 +1,29 @@ package cn.lili.modules.lmk.service.impl; +import cn.lili.cache.Cache; +import cn.lili.cache.CachePrefix; +import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.sensitive.SensitiveWordsFilter; +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; +import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; import cn.lili.modules.lmk.enums.general.VideoCommentStatusEnum; +import cn.lili.modules.lmk.service.ThumbsUpRecordService; import com.baomidou.mybatisplus.core.metadata.IPage; import cn.lili.modules.lmk.domain.entity.VideoComment; import cn.lili.modules.lmk.mapper.VideoCommentMapper; import cn.lili.modules.lmk.service.VideoCommentService; import cn.lili.base.Result; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.lili.modules.lmk.domain.form.VideoCommentForm; import cn.lili.modules.lmk.domain.vo.VideoCommentVO; import cn.lili.modules.lmk.domain.query.VideoCommentQuery; import org.apache.commons.lang3.StringUtils; +import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import cn.lili.utils.PageUtil; @@ -23,6 +33,7 @@ import java.util.List; import java.util.Objects; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -36,6 +47,15 @@ public class VideoCommentServiceImpl extends ServiceImpl<VideoCommentMapper, VideoComment> implements VideoCommentService { private final VideoCommentMapper videoCommentMapper; + private final Cache cache; + private final ThumbsUpRecordService thumbsUpRecordService; + private final RocketMQTemplate rocketMQTemplate; + private final RocketmqCustomProperties rocketmqCustomProperties; + + /** + * 璇勮鐐硅禐鏁扮殑杩囨湡鏃堕棿 + */ + public final static long EXPIRE_TIME = 15l; /** * 娣诲姞 @@ -43,7 +63,6 @@ * @return */ @Override - @Transactional(rollbackFor = Exception.class) public Result comment(VideoCommentForm form) { // 鐩戞祴鍐呭鏄惁鍖呭惈鏁忔劅璇� if (SensitiveWordsFilter.includeSentenceWord(form.getCommentContent())) { @@ -58,19 +77,15 @@ } } VideoComment entity = VideoCommentForm.getEntityByForm(form, null); - entity.setStatus(VideoCommentStatusEnum.AUDITING.getValue()); - + entity.setStatus(VideoCommentStatusEnum.NORMAL.getValue()); + entity.setUserId(UserContext.getCurrentUserId()); AuthUser currentUser = UserContext.getCurrentUser(); entity.setUserNickname(currentUser.getNickName()); entity.setUserAvatar(currentUser.getFace()); - baseMapper.insert(entity); - if (StringUtils.isBlank(entity.getReplyId())) { - // 涓嶆槸鍥炲璇勮锛岄偅涔堝氨鏄富璇勮锛屼富璇勮鐨刴asterId璁剧疆涓鸿嚜宸辩殑id - entity.setMasterCommentId(entity.getId()); - } - baseMapper.updateById(entity); - return Result.ok("娣诲姞鎴愬姛"); + // 鍒濆鍖杛edis涓瘎璁虹殑鐐硅禐鏁伴噺 + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(entity.getId()), 0, EXPIRE_TIME, TimeUnit.DAYS); + return Result.ok("娣诲姞鎴愬姛").data(this.detail(entity.getId()).get("data")); } /** @@ -134,14 +149,83 @@ @Override public Result wxPage(VideoCommentQuery query) { + query.setUserId(UserContext.getCurrentUserId()); IPage<VideoCommentVO> page = PageUtil.getPage(query, VideoCommentVO.class); if (StringUtils.isNotBlank(query.getMasterCommentId())) { // 鍔犺浇瀛愯瘎璁虹殑鎯呭喌 baseMapper.replyCommentPage(page, query); + for (VideoCommentVO comment : page.getRecords()) { + comment.setThumbsUpNum(this.getCommentThumbsUpNum(comment.getId(), comment.getThumbsUpNum())); + } + return Result.ok().data(page.getRecords()); } else { // 鍔犺浇涓昏瘎璁虹殑鎯呭喌銆備富璇勮id = masterCommentId baseMapper.masterCommentPage(page, query); + for (VideoCommentVO comment : page.getRecords()) { + comment.setThumbsUpNum(this.getCommentThumbsUpNum(comment.getId(), comment.getThumbsUpNum())); + } } - return Result.ok().data(page.getRecords()); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + + @Override + public List<CollectTypeNumVO> countNumGroupByVideo() { + return baseMapper.countNumGroupByVideo(); + } + + @Override + public Result thumbsUp(ThumbsUpRecordForm form) { + boolean exists = new LambdaQueryChainWrapper<>(thumbsUpRecordService.getBaseMapper()) + .eq(ThumbsUpRecord::getRefId, form.getRefId()) + .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId()) + .exists(); + if (exists) { + return Result.ok(); + } + ThumbsUpRecord record = ThumbsUpRecordForm.getEntityByForm(form, null); + record.setUserId(UserContext.getCurrentUserId()); + thumbsUpRecordService.save(record); + if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()))) { + cache.incr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId())); + } else { + VideoComment comment = baseMapper.selectById(form.getRefId()); + if (Objects.nonNull(comment)) { + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, EXPIRE_TIME, TimeUnit.DAYS); + } + } + // TODO 浣跨敤rocketmq寮傛鍐欏叆鍒癿ysql涓� +// rocketMQTemplate.asyncSend(); + return Result.ok(); + } + + @Override + public Result cancelThumbsUp(ThumbsUpRecordForm form) { + new LambdaUpdateChainWrapper<>(thumbsUpRecordService.getBaseMapper()) + .eq(ThumbsUpRecord::getRefId, form.getRefId()) + .eq(ThumbsUpRecord::getThumbsUpType, form.getThumbsUpType()) + .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId()) + .remove(); + // redis鏁伴噺鍑忎竴 + cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId())); + // TODO mq寮傛鍚屾鍒癿ysql + return Result.ok(); + } + + /** + * 浠巖edis涓幏鍙栬瘎璁烘暟閲忥紝濡傛灉redis涓病鏈夊垯灏唌ysql涓殑鏁伴噺鍐欏叆鍒皉edis + * + * @param commentId + * @param mysqlNum + * @return + */ + private long getCommentThumbsUpNum(String commentId, long mysqlNum) { + Object redisNum = cache.get(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId)); + if (Objects.isNull(redisNum)) { + // redis涓病鏈夊氨鎶婃暟鎹簱鐨勫啓鍒皉edis涓� + cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId), mysqlNum, EXPIRE_TIME, TimeUnit.DAYS); + return mysqlNum; + } + return Long.valueOf((Integer) redisNum); } } -- Gitblit v1.8.0