diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java index 58e3f4dd6..25eb62228 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java @@ -1,5 +1,6 @@ package org.dromara.app; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.wzj.soopin.member.business.IMemberBusiness; import com.wzj.soopin.member.convert.AccountBillConvert; @@ -50,6 +51,7 @@ import org.dromara.common.ratelimiter.annotation.RateLimiter; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.utils.SocialUtils; +import org.springframework.data.annotation.LastModifiedDate; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -139,8 +141,10 @@ public class AppMemberController { if (memberAccount == null) { throw new ServiceException("用户未绑定账户"); } - bo.setAccountId(memberAccount.getId()); - Page memberPage = accountBillService.page(page, bo.toWrapper()); + LambdaQueryWrapper queryWrapper = bo.toWrapper(); + queryWrapper.eq(AccountBill::getAccountId, memberAccount.getId()); + queryWrapper.orderByDesc(AccountBill::getCreateTime); + Page memberPage = accountBillService.page(page, queryWrapper); return R.ok(accountBillConvert.toVO(memberPage)); } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java index a90cc234b..5db5409c6 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java @@ -76,6 +76,22 @@ public interface GlobalConstants { String GLOBAL_MEMBER_FANS_COUNT="global:member:myfans:count:"; + /** + * 我关注的视频数量 redis key + */ + String GLOBAL_MEMBER_FOLLOW_COUNT="global:member:myfollow:count:"; + + + /** + * 我关注的视频数量 redis key + */ + String GLOBAL_MEMBER_FRIENDS_COUNT="global:member:myfriends:count:"; + + String GLOBAL_MEMBER_DOIFOLLOW="global:member:doifollow:"; + + + + } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/consumer/VlogUploadMessageConsumer.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/consumer/VlogUploadMessageConsumer.java index 73f37ed6e..b4af18607 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/consumer/VlogUploadMessageConsumer.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/consumer/VlogUploadMessageConsumer.java @@ -36,7 +36,7 @@ import java.nio.file.Path; @RequiredArgsConstructor @RocketMQMessageListener( topic = RocketMQConfig.VLOG_UPLOAD_TOPIC, - consumerGroup = "VLOG_UPLOAD_GROUP_LOCAL", + consumerGroup = RocketMQConfig.VLOG_UPLOAD_GROUP, selectorExpression = RocketMQConfig.VLOG_UPLOAD_TAG ) public class VlogUploadMessageConsumer implements RocketMQListener { diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/MyLikedVlog.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/MyLikedVlog.java index 0665e4e45..896dfe32d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/MyLikedVlog.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/MyLikedVlog.java @@ -25,10 +25,12 @@ public class MyLikedVlog extends BaseAudit { /** * 喜欢的短视频id */ - @TableField("vlog_id") private String vlogId; + private Long vloggerId; + + diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IMyLikeVlogService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IMyLikeVlogService.java index fae15bbae..f490c79b3 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IMyLikeVlogService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/IMyLikeVlogService.java @@ -10,7 +10,7 @@ public interface IMyLikeVlogService extends IService { * @param vlogId 短视频id * @return 是否喜欢成功 */ - boolean like(String vlogId,Long memberId); + boolean like(String vlogId,Long vloggerId,Long memberId); /** * 取消喜欢短视频 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MyLikeVlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MyLikeVlogServiceImpl.java index b9828180a..c388fe60c 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MyLikeVlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MyLikeVlogServiceImpl.java @@ -20,10 +20,11 @@ public class MyLikeVlogServiceImpl extends ServiceImpl myLikeVlog(Long memberId) { + public List myLikeVlog(Long memberId) { return this.baseMapper.selectList(new LambdaQueryWrapper() - .eq(MyLikedVlog::getMemberId, memberId.toString())) - .stream().map(MyLikedVlog::getVlogId).map(Long::valueOf).collect(Collectors.toList()); + .eq(MyLikedVlog::getMemberId, memberId)) + .stream().map(MyLikedVlog::getVlogId).collect(Collectors.toList()); } @Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_LIKED_COUNT, key = "#vlogId") @@ -51,7 +52,7 @@ public class MyLikeVlogServiceImpl extends ServiceImpl() - .eq(MyLikedVlog::getMemberId, memberId.toString())).intValue(); + .eq(MyLikedVlog::getVloggerId, memberId.toString())).intValue(); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java index 351c2247c..b93b5b97b 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java @@ -69,7 +69,9 @@ public class VlogPullServiceImpl implements IVlogPullService { List vlogVOList = vlogService.getIndexVlogList(vlogBO); //标记已读 - saveMyReadVlog(vlogVOList, loginUser.getUserId()); + if(loginUser!=null){ + saveMyReadVlog(vlogVOList, loginUser.getUserId()); + } return page.setRecords(vlogVOList); } else { if (loginUser != null) { @@ -82,7 +84,9 @@ public class VlogPullServiceImpl implements IVlogPullService { //先临时取10条数据 Page indexVlogVOPage = vlogService.getIndexVlogList(null, page); //标记已读 - saveMyReadVlog(indexVlogVOPage.getRecords(), loginUser.getUserId()); + if(loginUser!=null){ + saveMyReadVlog(indexVlogVOPage.getRecords(), loginUser.getUserId()); + } //直接获取数据库数据,并要求push类推送数据 return indexVlogVOPage; } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index 96d3a36bb..6e2797a3b 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -47,7 +47,6 @@ import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.satoken.utils.LoginHelper; -import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -126,7 +125,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl vlog.setStatus(VlogStatusEnum.AUDITING.type); vlog.setIsPrivate(YesOrNo.NO.type); - vlog.setMemberId(loginUser.getUserId()+""); + vlog.setMemberId(loginUser.getUserId() + ""); vlog.setUrl("#"); vlogMapper.insert(vlog); @@ -140,7 +139,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl .tag("upload") .sendTime(LocalDateTime.now()) .build(); - MqUtil.sendMessage(RocketMQConfig.VLOG_UPLOAD_TOPIC+":"+"upload", message); + MqUtil.sendMessage(RocketMQConfig.VLOG_UPLOAD_TOPIC + ":" + "upload", message); } @Override @@ -154,8 +153,8 @@ public class VlogServiceImpl extends ServiceImpl implements Vl try { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser != null) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(loginUser.getUserId() + "", vlog.getMemberId())); - vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlogId,loginUser.getUserId() )); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(loginUser.getUserId(), Long.valueOf(vlog.getMemberId()))); + vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlogId, loginUser.getUserId())); } } catch (Exception e) { log.error(e.getMessage()); @@ -215,8 +214,8 @@ public class VlogServiceImpl extends ServiceImpl implements Vl uid = user != null ? String.valueOf(user.getUserId()) : null; } if (StringUtils.isNotBlank(uid)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(uid, vlog.getMemberId())); - vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog( vlog.getId(),Long.valueOf(uid))); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(Long.valueOf(uid), Long.valueOf(vlog.getMemberId()))); + vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlog.getId(), Long.valueOf(uid))); } vo.setLikeCounts(myLikeVlogService.getVLogLikeCount(vlog.getId())); vo.setCommentsCounts(commentService.getCommentCount(vlog.getId())); @@ -248,25 +247,25 @@ public class VlogServiceImpl extends ServiceImpl implements Vl throw new ServiceException("视频不存在"); } //先检查是否已经点过赞了 - if (myLikeVlogService.doILikeVlog(vlogId,Long.valueOf(userId))) { + if (myLikeVlogService.doILikeVlog(vlogId, Long.valueOf(userId))) { throw new ServiceException("您已经点过赞了"); } // 我点赞的视频,关联关系保存到数据库 - myLikeVlogService.like( vlogId,Long.valueOf(userId)); - clearMemberVlogCache(vlogId,userId); + myLikeVlogService.like(vlogId, Long.valueOf(vlog.getMemberId()), Long.valueOf(userId)); + clearMemberVlogCache(vlogId, userId); //发送消息 MqUtil.sendIMMessage(buildMessage(vlog)); } - private MQMessage buildMessage(Vlog vlog){ + private MQMessage buildMessage(Vlog vlog) { - Map params=new HashMap<>(); - LoginUser loginUser=LoginHelper.getLoginUser(); + Map params = new HashMap<>(); + LoginUser loginUser = LoginHelper.getLoginUser(); params.put("userID", loginUser.getUserId()); params.put("nickName", loginUser.getNickname() == null ? "" : loginUser.getNickname()); - params.put("faceUrl", loginUser.getAvatar() ); - params.put("vlogId",vlog.getId()); - params.put("firstFrameImg",vlog.getFirstFrameImg()); + params.put("faceUrl", loginUser.getAvatar()); + params.put("vlogId", vlog.getId()); + params.put("firstFrameImg", vlog.getFirstFrameImg()); MQMessage mqMessage = new MQMessage(); mqMessage.setMessageType(MQMessageType.IM.name()); mqMessage.setTag(MessageActionEnum.INTERACTION_LIKE.name()); @@ -300,15 +299,16 @@ public class VlogServiceImpl extends ServiceImpl implements Vl } // 我取消点赞的视频,关联关系删除 - myLikeVlogService.unLike(vlogId,Long.valueOf(userId)); - clearMemberVlogCache(vlogId,userId); + myLikeVlogService.unLike(vlogId, Long.valueOf(userId)); + clearMemberVlogCache(vlogId, userId); } - private void clearMemberVlogCache(String vlogId,String userId) { + private void clearMemberVlogCache(String vlogId, String userId) { RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_MY_LIKED_LIST, userId); RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_LIKED_COUNT, vlogId); RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, userId); } + @Override public Page getMyLikedVlogList(Page page) { @@ -379,7 +379,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl // 这里不再统计,避免重复计算 // 获取粉丝数量:优先 Redis,无则 MySQL - Long fansCounts = fansService.countFansByVloggerId(Long.valueOf(vlog.getMemberId())); + int fansCounts = fansService.myFansCount(Long.valueOf(vlog.getMemberId())); result.put("fansCounts", fansCounts); } else { result.put("vlogId", null); @@ -410,7 +410,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl result.put("comments", comments); // 从Redis获取点赞数 - Integer likeCounts = myLikeVlogService.getVLogLikeCount(vlog.getId()); + Integer likeCounts = myLikeVlogService.getVLogLikeCount(vlog.getId()); result.put("likeCounts", likeCounts); result.put("vlogId", vlog.getId()); @@ -576,8 +576,8 @@ public class VlogServiceImpl extends ServiceImpl implements Vl LoginUser user = LoginHelper.getLoginUser(); vlogList.parallelStream().forEach(vlog -> { if (user != null) { - vlog.setDoIFollowVloger(fansService.queryDoIFollowVloger(user.getUserId() + "", vlog.getMemberId())); - vlog.setDoILikeThisVlog(myLikeVlogService.doILikeVlog( vlog.getId(),user.getUserId())); + vlog.setDoIFollowVloger(fansService.queryDoIFollowVloger(user.getUserId(), Long.valueOf(vlog.getMemberId()))); + vlog.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlog.getId(), user.getUserId())); } vlog.setLikeCounts(myLikeVlogService.getVLogLikeCount(vlog.getId())); vlog.setCommentsCounts(commentService.getCommentCount(vlog.getId())); @@ -651,8 +651,8 @@ public class VlogServiceImpl extends ServiceImpl implements Vl List voList = vlogList.stream().map(v -> { IndexVlogVO vo = MapstructUtils.convert(v, IndexVlogVO.class); if (StringUtils.isNotBlank(userId)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getMemberId())); - vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(v.getId(),Long.valueOf(userId))); + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(Long.valueOf(userId), Long.valueOf(v.getMemberId()))); + vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(v.getId(), Long.valueOf(userId))); } vo.setLikeCounts(myLikeVlogService.getVLogLikeCount(v.getId())); vo.setCommentsCounts(commentService.getCommentCount(v.getId())); diff --git a/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java b/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java index 2c628b830..cbfa1f133 100644 --- a/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java +++ b/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java @@ -21,8 +21,7 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor @RocketMQMessageListener( topic = RocketMQConfig.TOPIC_IM_MSG, -// consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG, - consumerGroup = "cosumer1", + consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG, selectorExpression = "*" // ackMode = AckMode.MANUAL ) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java index 5e5c42b07..678671c2b 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java @@ -10,9 +10,11 @@ import com.wzj.soopin.member.service.IFansService; import com.wzj.soopin.member.service.IMemberService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.redis.redis.RedisCache; +import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BusinessImpl; import org.springframework.stereotype.Service; @@ -83,12 +85,20 @@ public class MemberBusinessImpl extends BusinessImpl { " WHERE um.id = #{spreadUid} ") String getReferenceTenantIdBySpreadUid(@Param("spreadUid") Long spreadUid); + @Select("SELECT " + + " count(1)" + + "FROM " + + " cont_my_liked_vlog um " + + " " + + " WHERE um.vlogger_id = #{memberId} ") + Integer selectMyVlogLikeCount(@Param("memberId") Long memberId); + + + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IFansService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IFansService.java index ecfa3270a..819b315cb 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IFansService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IFansService.java @@ -11,30 +11,36 @@ public interface IFansService extends IService { /** * 关注 */ - public boolean doFollow(Long myId, Long vloggerId); + boolean doFollow(Long myId, Long vloggerId); /** * 取关 */ - public boolean doCancel(Long myId, Long vloggerId); + boolean doCancel(Long myId, Long vloggerId); /** * 查询用户是否关注博主 */ - public boolean queryDoIFollowVloger(Long myId, Long vloggerId); - - public boolean queryDoIFollowVloger(String myId, String vloggerId); + boolean queryDoIFollowVloger(Long myId, Long vloggerId); /** * 查询我的粉丝列表 */ - public IPage queryMyFans(Long myId, - Integer page, - Integer pageSize); + IPage queryMyFans(Long myId, + Integer page, + Integer pageSize); - Long countFansByVloggerId(Long vloggerId); + Integer myFansCount(Long vloggerId); + + /** + * 查询我的关注列表 + */ + Integer myFollowCount(Long fanId); + + /** + * 查询我的关注列表 + */ + Integer myFriendsCount(Long fanId); - // 拉黑前只删除“我关注对方”的关系 - void removeFansRelationship(Long myId, Long vloggerId); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java index 704518e5d..d6794de22 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IMemberService.java @@ -106,4 +106,7 @@ public interface IMemberService extends IService { * @param smsCode 短信验证码 */ void revoked(String smsCode); + + + Integer getMyVlogLikeCount(Long memberId); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java index e96c77edc..4c4ab0e41 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.wzj.soopin.member.domain.po.Fans; @@ -48,7 +49,7 @@ public class FansServiceImpl extends ServiceImpl implements IF @Transactional(rollbackFor = Exception.class) @Override - @CacheEvict(value = GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, key = "#vloggerId") + @Cacheable(value = GlobalConstants.GLOBAL_MEMBER_DOIFOLLOW, key = "#vloggerId" + "-" + "#myId") public boolean doFollow(Long myId, Long vloggerId) { // 幂等性校验:已存在则不再插入 @@ -74,6 +75,7 @@ public class FansServiceImpl extends ServiceImpl implements IF } baseMapper.insert(fans); + clearMemberFansCache(vloggerId, myId); MqUtil.sendIMMessage(buildMessage(fans)); return true; } @@ -87,7 +89,7 @@ public class FansServiceImpl extends ServiceImpl implements IF Map params = new HashMap<>(); params.put("userId", follower.getId()); params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname()); - params.put("faceUrl", vlogger.getAvatar() ); + params.put("faceUrl", vlogger.getAvatar()); MQMessage message = MQMessage.builder() .messageType(MQMessageType.IM.name()) .data(params) @@ -112,7 +114,7 @@ public class FansServiceImpl extends ServiceImpl implements IF @Transactional(rollbackFor = Exception.class) @Override - @CacheEvict(value = GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, key = "#vloggerId") + @CacheEvict(value = GlobalConstants.GLOBAL_MEMBER_DOIFOLLOW, key = "#vloggerId" + "-" + "#myId") public boolean doCancel(Long myId, Long vloggerId) { // 判断我们是否朋友关系,如果是,则需要取消双方的关系 Fans fan = queryFansRelationship(myId, vloggerId); @@ -135,75 +137,66 @@ public class FansServiceImpl extends ServiceImpl implements IF log.warn("取消关注时未找到自己的粉丝关系,myId={}, vloggerId={}", myId, vloggerId); return true; } - // 博主的粉丝-1,我的关注-1 - RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId); - RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId); + clearMemberFansCache(vloggerId, myId); return true; } @Override public boolean queryDoIFollowVloger(Long myId, Long vloggerId) { - Fans vlogger = queryFansRelationship(myId, vloggerId); - return vlogger != null; + + Boolean result = RedisUtils.getCacheMapValue(GlobalConstants.GLOBAL_MEMBER_DOIFOLLOW, vloggerId + "-" + myId); + if (result == null) { + result = baseMapper.selectCount(new LambdaQueryWrapper().eq(Fans::getFanId, myId).eq(Fans::getVloggerId, vloggerId)) > 0; + RedisUtils.setCacheMapValue(GlobalConstants.GLOBAL_MEMBER_DOIFOLLOW, vloggerId + "-" + myId, result); + } + + return result != null ? result : false; } - @Override - public boolean queryDoIFollowVloger(String myId, String vloggerId) { - try { - // Try to convert string IDs to Long if they are numeric - if (myId != null && vloggerId != null && - myId.matches("\\d+") && vloggerId.matches("\\d+")) { - Fans vlogger = queryFansRelationship(Long.valueOf(myId), Long.valueOf(vloggerId)); - return vlogger != null; - } else { - // If IDs contain non-numeric characters, return false for now - // This prevents the NumberFormatException - log.warn("Cannot convert string IDs to Long: myId={}, vloggerId={}", myId, vloggerId); - return false; - } - } catch (NumberFormatException e) { - log.warn("Failed to convert string IDs to Long: myId={}, vloggerId={}", myId, vloggerId, e); - return false; - } - } @Override public IPage queryMyFans(Long myId, Integer pageNo, Integer pageSize) { Map map = new HashMap<>(); map.put("myId", myId); // 查询粉丝列表 - Page page = new Page<>(); + Page page = new Page<>(); page.setCurrent(pageNo); page.setSize(pageSize); - for (FansVO f : page.getRecords()) { - String relationship = redisCache.getCacheObject( - CacheConstants.MEMBER_FANS + ":" + myId + ":" + f.getFan().getId()); - if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Fans::getVloggerId, myId); + IPage fansPage = baseMapper.selectPage(page, queryWrapper); + for (Fans f : page.getRecords()) { + //看看他是否也关注了我 + Boolean doesHeFollowMe = queryDoIFollowVloger(f.getFanId(), myId); + if (doesHeFollowMe) { f.setFriendFlag(YesOrNo.YES.type); } } - return null; } - @Override + private void clearMemberFansCache(Long vloggerId, Long userId) { + RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, vloggerId + ""); + RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_MEMBER_FOLLOW_COUNT, userId + ""); + RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_MEMBER_FRIENDS_COUNT, userId + ""); + } + @Override @Cacheable(value = GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, key = "#vloggerId") - public Long countFansByVloggerId(Long vloggerId) { - return baseMapper.selectCount(new LambdaQueryWrapper().eq(Fans::getVloggerId, vloggerId)); + public Integer myFansCount(Long vloggerId) { + return baseMapper.selectCount(new LambdaQueryWrapper().eq(Fans::getVloggerId, vloggerId)).intValue(); } - // 拉黑前只删除“我关注对方”的关系 @Override - @CacheEvict(value = GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, key = "#vloggerId") - public void removeFansRelationship(Long myId, Long vloggerId) { - Fans fan = queryFansRelationship(myId, vloggerId); - if (fan != null) { - baseMapper.deleteById(fan.getId()); - } + @Cacheable(value = GlobalConstants.GLOBAL_MEMBER_FOLLOW_COUNT, key = "#fanId") + public Integer myFollowCount(Long fanId) { + return baseMapper.selectCount(new LambdaQueryWrapper().eq(Fans::getFanId, fanId)).intValue(); } - //从缓存中获取我的关注列表 - + @Override + @Cacheable(value = GlobalConstants.GLOBAL_MEMBER_FRIENDS_COUNT, key = "#fanId") + public Integer myFriendsCount(Long fanId) { + return baseMapper.selectCount(new LambdaQueryWrapper().eq(Fans::getFanId, fanId).eq(Fans::getFriendFlag, YesOrNo.YES.type)).intValue(); + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java index 8157cb7e2..b9e65ec64 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java @@ -413,4 +413,9 @@ public class MemberServiceImpl extends ServiceImpl implemen public boolean updateById(Member entity) { return super.updateById(entity); } + + @Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, key = "#memberId") + public Integer getMyVlogLikeCount(Long memberId) { + return baseMapper.selectMyVlogLikeCount(memberId); + } } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java index 00aab2831..2175a8663 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/AccountBillServiceImpl.java @@ -78,7 +78,7 @@ public class AccountBillServiceImpl extends } BigDecimal balance = memberAccount.getWallet(); - BigDecimal newBalance = balance.add(money); + BigDecimal newBalance = (balance==null?BigDecimal.ZERO:balance).add(money); //锁定用户余额 memberAccountService.updateById(memberAccount.toBuilder().wallet(newBalance).build());