From 32affb9328997ab51b2c88f7f034c16a1e7ed6d0 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 30 五月 2025 17:15:20 +0800 Subject: [PATCH] 评论点赞 --- framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java | 17 + framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml | 37 ++- framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java | 8 framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml | 44 ++++ framework/src/main/java/cn/lili/modules/lmk/domain/entity/ThumbsUpRecord.java | 32 ++ framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java | 53 ++++ framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java | 88 +++++++ framework/src/main/java/cn/lili/cache/impl/RedisCache.java | 40 +++ framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java | 34 +++ framework/src/main/java/cn/lili/modules/lmk/domain/form/ThumbsUpRecordForm.java | 42 +++ framework/src/main/java/cn/lili/cache/Cache.java | 26 ++ framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoCommentQuery.java | 3 framework/src/main/java/cn/lili/cache/CachePrefix.java | 15 + framework/src/main/java/cn/lili/modules/lmk/domain/query/ThumbsUpRecordQuery.java | 22 ++ framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java | 91 ++++++++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/ThumbsUpRecordVO.java | 42 +++ buyer-api/src/main/java/cn/lili/controller/lmk/VideoCommentController.java | 13 + framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoCommentVO.java | 5 18 files changed, 589 insertions(+), 23 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoCommentController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoCommentController.java index 81ce413..d43fea6 100644 --- a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoCommentController.java +++ b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoCommentController.java @@ -2,6 +2,7 @@ import cn.lili.group.Update; import cn.lili.group.Add; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import lombok.RequiredArgsConstructor; @@ -32,6 +33,18 @@ private final VideoCommentService videoCommentService; + @PostMapping("/thumbs_up") + @ApiOperation(value = "鐐硅禐璇勮", notes = "鐐硅禐璇勮") + public Result thumbsUp(@RequestBody @Validated(Add.class) ThumbsUpRecordForm form) { + return videoCommentService.thumbsUp(form); + } + + @PostMapping("/cancel/thumbs_up") + @ApiOperation(value = "鍙栨秷鐐硅禐璇勮", notes = "鍙栨秷鐐硅禐璇勮") + public Result cancelThumbsUp(@RequestBody @Validated(Add.class) ThumbsUpRecordForm form) { + return videoCommentService.cancelThumbsUp(form); + } + @PostMapping("/comment") @ApiOperation(value = "璇勮", notes = "璇勮") public Result comment(@RequestBody @Validated(Add.class) VideoCommentForm form) { diff --git a/framework/src/main/java/cn/lili/cache/Cache.java b/framework/src/main/java/cn/lili/cache/Cache.java index 41d309d..8e6d97c 100644 --- a/framework/src/main/java/cn/lili/cache/Cache.java +++ b/framework/src/main/java/cn/lili/cache/Cache.java @@ -228,6 +228,15 @@ * @return 璁℃暟鍣ㄧ粨鏋� */ Long incr(String key); + + /** + * redis 鑷噺涓� + * + * @param key + * @return + */ + Long decr(String key); + //-----------------------------------------------redis璁℃暟--------------------------------------------- /** @@ -302,4 +311,21 @@ * @return 鍒犻櫎鏁伴噺 */ Long zRemove(String key, String... value); + + /** + * 璁剧疆key杩囨湡鏃堕棿 + * + * @param key + * @param timeout 杩囨湡鏃堕暱 + * @param timeUnit 鏃堕暱鍗曚綅 + */ + void setExpire(String key, long timeout, TimeUnit timeUnit); + + /** + * 妫�鏌ey鏄惁瀛樺湪 + * + * @param key + * @return + */ + boolean exist(String key); } diff --git a/framework/src/main/java/cn/lili/cache/CachePrefix.java b/framework/src/main/java/cn/lili/cache/CachePrefix.java index f25f042..63f20dd 100644 --- a/framework/src/main/java/cn/lili/cache/CachePrefix.java +++ b/framework/src/main/java/cn/lili/cache/CachePrefix.java @@ -514,6 +514,11 @@ SENSITIVE, /** + * 瑙嗛璇勮鐐硅禐鏁伴噺 + */ + VIDEO_COMMENT_LIKE_NUM, + + /** * 鎵爜鐧诲綍 * * @param str @@ -536,6 +541,16 @@ } /** + * 鐩存帴鎶奿d鎷间笂 + * + * @param id + * @return + */ + public String getPrefixWithId(String id) { + return "{" + this.name() + "}_" + id; + } + + /** * 閫氱敤鑾峰彇缂撳瓨key鍊� * * @param typeEnum 淇冮攢鏋氫妇 diff --git a/framework/src/main/java/cn/lili/cache/impl/RedisCache.java b/framework/src/main/java/cn/lili/cache/impl/RedisCache.java index ac56702..471ac00 100644 --- a/framework/src/main/java/cn/lili/cache/impl/RedisCache.java +++ b/framework/src/main/java/cn/lili/cache/impl/RedisCache.java @@ -1,8 +1,8 @@ package cn.lili.cache.impl; import cn.lili.cache.Cache; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.*; import org.springframework.data.redis.support.atomic.RedisAtomicLong; @@ -21,14 +21,10 @@ */ @Slf4j @Component +@RequiredArgsConstructor public class RedisCache implements Cache { - @Autowired - private RedisTemplate<Object, Object> redisTemplate; - - public RedisCache() { - - } + private final RedisTemplate<Object, Object> redisTemplate; @Override public Object get(Object key) { @@ -226,6 +222,13 @@ return entityIdCounter.getAndIncrement(); } + @Override + public Long decr(String key) { + RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory()); + return entityIdCounter.getAndDecrement(); + } + + /** * 浣跨敤Sorted Set璁板綍keyword * zincrby鍛戒护锛屽浜庝竴涓猄orted Set锛屽瓨鍦ㄧ殑灏辨妸鍒嗘暟鍔爔(x鍙嚜琛岃瀹�)锛屼笉瀛樺湪灏卞垱寤轰竴涓垎鏁颁负1鐨勬垚鍛� @@ -314,4 +317,27 @@ public Long zRemove(String key, String... value) { return redisTemplate.opsForZSet().remove(key, value); } + + /** + * 璁剧疆杩囨湡鏃堕棿 + * + * @param key + * @param timeout 杩囨湡鏃堕暱 + * @param timeUnit 鏃堕暱鍗曚綅 + */ + @Override + public void setExpire(String key, long timeout, TimeUnit timeUnit) { + redisTemplate.expire(key, timeout, timeUnit); + } + + /** + * 鍒ゆ柇鏌愪釜key鏄惁瀛樺湪 + * + * @param key + * @return + */ + @Override + public boolean exist(String key) { + return redisTemplate.hasKey(key); + } } diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ThumbsUpRecord.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ThumbsUpRecord.java new file mode 100644 index 0000000..0a28ecc --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ThumbsUpRecord.java @@ -0,0 +1,32 @@ +package cn.lili.modules.lmk.domain.entity; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 鐐硅禐琛� + * + * @author xp + * @since 2025-05-29 + */ +@Data +@TableName("lmk_thumbs_up_record") +public class ThumbsUpRecord extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("ref_id") + /** 鐐硅禐鐨勫璞d */ + private String refId; + + @TableField("thumbs_up_type") + /** 鐐硅禐瀵硅薄绫诲瀷 */ + private String thumbsUpType; + + @TableField("user_id") + /** 鐐硅禐浜� */ + private String userId; +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java index db26f9e..b13ac36 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java @@ -50,6 +50,10 @@ /** 璇勮鐘舵�� */ private String status; + @TableField("thumbs_up_num") + /** 鐐硅禐鏁伴噺 */ + private Long thumbsUpNum; + @TableField("user_nickname") /** 璇勮浜烘樀绉� */ private String userNickname; @@ -57,4 +61,8 @@ @TableField("user_avatar") /** 璇勮浜哄ご鍍� */ private String userAvatar; + + @TableField("user_id") + /** 璇勮浜� */ + private String userId; } diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/ThumbsUpRecordForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ThumbsUpRecordForm.java new file mode 100644 index 0000000..8251012 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ThumbsUpRecordForm.java @@ -0,0 +1,42 @@ +package cn.lili.modules.lmk.domain.form; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import cn.lili.base.AbsForm; +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; +import org.springframework.beans.BeanUtils; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.lang.NonNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鐐硅禐琛ㄨ〃鍗� + * + * @author xp + * @since 2025-05-29 + */ +@Data +@ApiModel(value = "ThumbsUpRecord琛ㄥ崟", description = "鐐硅禐琛ㄨ〃鍗�") +public class ThumbsUpRecordForm extends AbsForm { + + @NotBlank(message = "鐐硅禐鐨勫璞d涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鐐硅禐鐨勫璞d") + private String refId; + + @NotBlank(message = "鐐硅禐瀵硅薄绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鐐硅禐瀵硅薄绫诲瀷") + private String thumbsUpType; + + public static ThumbsUpRecord getEntityByForm(@NonNull ThumbsUpRecordForm form, ThumbsUpRecord entity) { + if(entity == null) { + entity = new ThumbsUpRecord(); + } + BeanUtils.copyProperties(form, entity); + return entity; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/ThumbsUpRecordQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ThumbsUpRecordQuery.java new file mode 100644 index 0000000..5b0e853 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ThumbsUpRecordQuery.java @@ -0,0 +1,22 @@ +package cn.lili.modules.lmk.domain.query; + +import cn.lili.base.AbsQuery; +import java.util.List; +import org.springframework.lang.NonNull; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 鐐硅禐琛ㄦ煡璇� + * + * @author xp + * @since 2025-05-29 + */ +@Data +@ApiModel(value = "ThumbsUpRecord鏌ヨ鍙傛暟", description = "鐐硅禐琛ㄦ煡璇㈠弬鏁�") +public class ThumbsUpRecordQuery extends AbsQuery { +} + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoCommentQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoCommentQuery.java index 3756e9e..ba3b183 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoCommentQuery.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoCommentQuery.java @@ -28,5 +28,8 @@ @ApiModelProperty(hidden = true) private String replyId; + @ApiModelProperty(hidden = true) + private String userId; + } diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ThumbsUpRecordVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ThumbsUpRecordVO.java new file mode 100644 index 0000000..be05342 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ThumbsUpRecordVO.java @@ -0,0 +1,42 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.base.AbsVo; +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; +import java.util.List; +import org.springframework.lang.NonNull; +import org.springframework.beans.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鐐硅禐琛ㄥ睍绀� + * + * @author xp + * @since 2025-05-29 + */ +@Data +@ApiModel(value = "鐐硅禐琛ㄥ搷搴旀暟鎹�", description = "鐐硅禐琛ㄥ搷搴旀暟鎹�") +public class ThumbsUpRecordVO extends AbsVo { + + /** 鐐硅禐鐨勫璞d */ + @ApiModelProperty("鐐硅禐鐨勫璞d") + private String refId; + + /** 鐐硅禐瀵硅薄绫诲瀷 */ + @ApiModelProperty("鐐硅禐瀵硅薄绫诲瀷") + private String thumbsUpType; + + @ApiModelProperty("鐐硅禐浜�") + private String userId; + + public static ThumbsUpRecordVO getVoByEntity(@NonNull ThumbsUpRecord entity, ThumbsUpRecordVO vo) { + if(vo == null) { + vo = new ThumbsUpRecordVO(); + } + BeanUtils.copyProperties(entity, vo); + return vo; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoCommentVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoCommentVO.java index 34acb8e..27f1273 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoCommentVO.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoCommentVO.java @@ -56,7 +56,7 @@ private String userAvatar; @ApiModelProperty("璇勮鐐硅禐鏁�") - private Long thumbsUpCount; + private Long thumbsUpNum; @ApiModelProperty("涓昏瘎璁轰笅闈㈡�诲叡鏈夊灏戞潯鍥炲") private Long replyTotalCount; @@ -67,6 +67,9 @@ @ApiModelProperty("鏄惁灞曞紑瀛愯瘎璁�") private Boolean expandReply = false; + @ApiModelProperty("褰撳墠鐢ㄦ埛鏄惁宸茬粡鐐硅禐") + private Boolean hasThumbsUp; + public static VideoCommentVO getVoByEntity(@NonNull VideoComment entity, VideoCommentVO vo) { if(vo == null) { vo = new VideoCommentVO(); diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java new file mode 100644 index 0000000..124dbb0 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.mapper; + +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.lili.modules.lmk.domain.vo.ThumbsUpRecordVO; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; +import cn.lili.modules.lmk.domain.query.ThumbsUpRecordQuery; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 鐐硅禐琛� Mapper 鎺ュ彛 + * + * @author xp + * @since 2025-05-29 + */ +@Mapper +public interface ThumbsUpRecordMapper extends BaseMapper<ThumbsUpRecord> { + + /** + * id鏌ユ壘鐐硅禐琛� + * @param id + * @return + */ + ThumbsUpRecordVO getById(String id); + + /** + * 鍒嗛〉 + */ + IPage getPage(IPage page, @Param("query") ThumbsUpRecordQuery query); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java new file mode 100644 index 0000000..0612b04 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java @@ -0,0 +1,53 @@ +package cn.lili.modules.lmk.service; + +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; +import cn.lili.modules.lmk.domain.query.ThumbsUpRecordQuery; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 鐐硅禐琛� 鏈嶅姟绫� + * + * @author xp + * @since 2025-05-29 + */ +public interface ThumbsUpRecordService extends IService<ThumbsUpRecord> { + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + Result remove(List<String> ids); + + /** + * id鍒犻櫎 + * @param id + * @return + */ + Result removeById(String id); + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + Result page(ThumbsUpRecordQuery query); + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + Result detail(String id); + + /** + * 鍒楄〃 + * @return + */ + Result all(); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java index bf8038f..fd159c4 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java @@ -1,6 +1,7 @@ package cn.lili.modules.lmk.service; import cn.lili.modules.lmk.domain.entity.VideoComment; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; import com.baomidou.mybatisplus.extension.service.IService; import cn.lili.base.Result; @@ -71,4 +72,20 @@ * @return */ List<CollectTypeNumVO> countNumGroupByVideo(); + + /** + * 鐐硅禐璇勮 + * + * @param form + * @return + */ + Result thumbsUp(ThumbsUpRecordForm form); + + /** + * 鍙栨秷鐐硅禐璇勮 + * + * @param form + * @return + */ + Result cancelThumbsUp(ThumbsUpRecordForm form); } diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java new file mode 100644 index 0000000..dad82ef --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java @@ -0,0 +1,91 @@ +package cn.lili.modules.lmk.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; +import cn.lili.modules.lmk.mapper .ThumbsUpRecordMapper; +import cn.lili.modules.lmk.service.ThumbsUpRecordService; +import cn.lili.base.Result; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; +import cn.lili.modules.lmk.domain.vo.ThumbsUpRecordVO; +import cn.lili.modules.lmk.domain.query.ThumbsUpRecordQuery; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import cn.lili.utils.PageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 鐐硅禐琛� 鏈嶅姟瀹炵幇绫� + * + * @author xp + * @since 2025-05-29 + */ +@Service +@RequiredArgsConstructor +public class ThumbsUpRecordServiceImpl extends ServiceImpl<ThumbsUpRecordMapper, ThumbsUpRecord> implements ThumbsUpRecordService { + + private final ThumbsUpRecordMapper thumbsUpRecordMapper; + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @Override + public Result remove(List<String> ids) { + baseMapper.deleteBatchIds(ids); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * id鍒犻櫎 + * @param id + * @return + */ + @Override + public Result removeById(String id) { + baseMapper.deleteById(id); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + @Override + public Result page(ThumbsUpRecordQuery query) { + IPage<ThumbsUpRecordVO> page = PageUtil.getPage(query, ThumbsUpRecordVO.class); + baseMapper.getPage(page, query); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + @Override + public Result detail(String id) { + ThumbsUpRecordVO vo = baseMapper.getById(id); + Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); + return Result.ok().data(vo); + } + + /** + * 鍒楄〃 + * @return + */ + @Override + public Result all() { + List<ThumbsUpRecord> entities = baseMapper.selectList(null); + List<ThumbsUpRecordVO> vos = entities.stream() + .map(entity -> ThumbsUpRecordVO.getVoByEntity(entity, null)) + .collect(Collectors.toList()); + return Result.ok().data(vos); + } +} 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 f71a858..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,20 +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; @@ -24,6 +33,7 @@ import java.util.List; import java.util.Objects; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -37,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; /** * 娣诲姞 @@ -58,13 +77,14 @@ } } 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); + // 鍒濆鍖杛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")); } @@ -129,14 +149,21 @@ @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()).total(page.getTotal()); } @@ -146,4 +173,59 @@ 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); + } } diff --git a/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml b/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml new file mode 100644 index 0000000..674236c --- /dev/null +++ b/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.lili.modules.lmk.mapper.ThumbsUpRecordMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.ThumbsUpRecordVO"> + <id column="id" property="id"/> + <result column="ref_id" property="refId" /> + <result column="thumbs_up_type" property="thumbsUpType" /> + <result column="user_id" property="userId" /> + </resultMap> + + + + + + + + <select id="getById" resultMap="BaseResultMap"> + SELECT + LTUR.ref_id, + LTUR.thumbs_up_type, + LTUR.user_id, + LTUR.id + FROM + lmk_thumbs_up_record LTUR + WHERE + LTUR.id = #{id} AND LTUR.delete_flag = 0 + </select> + + + <select id="getPage" resultMap="BaseResultMap"> + SELECT + LTUR.ref_id, + LTUR.user_id, + LTUR.thumbs_up_type, + LTUR.id + FROM + lmk_thumbs_up_record LTUR + WHERE + LTUR.delete_flag = 0 + </select> + +</mapper> diff --git a/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml b/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml index bfe9329..759dfc5 100644 --- a/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml +++ b/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml @@ -13,11 +13,13 @@ <result column="reply_user_avatar" property="replyUserAvatar" /> <result column="master_comment_id" property="masterCommentId" /> <result column="status" property="status" /> - <result column="create_by" property="userId" /> + <result column="thumbs_up_num" property="thumbsUpNum" /> + <result column="userId" property="userId" /> <result column="user_nickname" property="userNickname" /> <result column="user_avatar" property="userAvatar" /> <result column="create_time" property="createTime" /> <result column="replyTotalCount" property="replyTotalCount" /> + <result column="has_thumbs_up" property="hasThumbsUp" /> </resultMap> @@ -35,8 +37,9 @@ LVC.reply_user_nickname, LVC.master_comment_id, LVC.status, + LVC.thumbs_up_num, LVC.id, - LVC.create_by, + LVC.user_id, LVC.user_nickname, LVC.user_avatar, LVC.create_time @@ -56,8 +59,9 @@ LVC.reply_user_nickname, LVC.master_comment_id, LVC.status, + LVC.thumbs_up_num, LVC.id, - LVC.create_by, + LVC.user_id, LVC.user_nickname, LVC.user_avatar, LVC.create_time @@ -78,18 +82,21 @@ LVC.reply_user_avatar, LVC.master_comment_id, LVC.status, + LVC.thumbs_up_num, LVC.id, - LVC.create_by, + LVC.user_id, LVC.user_nickname, LVC.user_avatar, LVC.create_time, - COUNT(replies.id) as replyTotalCount + COUNT(replies.id) as replyTotalCount, + CASE + WHEN TUC.id IS NOT NULL THEN 1 + ELSE 0 + END AS has_thumbs_up FROM lmk_video_comment LVC - LEFT JOIN - lmk_video_comment replies ON replies.master_comment_id = LVC.id - AND replies.status = 'normal' - AND replies.delete_flag = 0 + LEFT JOIN lmk_video_comment replies ON replies.master_comment_id = LVC.id AND replies.status = 'normal' AND replies.delete_flag = 0 + LEFT JOIN lmk_thumbs_up_record TUC ON LVC.id = TUC.ref_id AND TUC.thumbs_up_type = 'video_comment' AND TUC.user_id = #{query.userId} AND TUC.delete_flag = 0 WHERE LVC.master_comment_id IS NULL AND LVC.video_id = #{query.videoId} @@ -98,7 +105,7 @@ GROUP BY LVC.id, LVC.video_id, LVC.comment_content, LVC.reply_id, LVC.reply_user_id, LVC.reply_user_nickname, LVC.master_comment_id, - LVC.status, LVC.create_by, LVC.user_nickname, LVC.user_avatar, LVC.create_time + LVC.status, LVC.user_id, LVC.user_nickname, LVC.user_avatar, LVC.create_time ORDER BY LVC.create_time DESC </select> @@ -113,14 +120,20 @@ LVC.reply_user_avatar, LVC.master_comment_id, LVC.status, + LVC.thumbs_up_num, LVC.id, - LVC.create_by, + LVC.user_id, LVC.user_nickname, LVC.user_avatar, LVC.create_time, - 0 as replyTotalCount + 0 as replyTotalCount, + CASE + WHEN TUC.id IS NOT NULL THEN 1 + ELSE 0 + END AS has_thumbs_up FROM lmk_video_comment LVC + LEFT JOIN lmk_thumbs_up_record TUC ON LVC.id = TUC.ref_id AND TUC.thumbs_up_type = 'video_comment' AND TUC.user_id = #{query.userId} AND TUC.delete_flag = 0 WHERE LVC.video_id = #{query.videoId} AND LVC.master_comment_id = #{query.masterCommentId} -- Gitblit v1.8.0