Merge remote-tracking branch 'origin/wzj-main' into wzj-main

This commit is contained in:
huk 2025-09-30 11:37:49 +08:00
commit 8e3dd9899e
17 changed files with 157 additions and 103 deletions

View File

@ -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<AccountBill> memberPage = accountBillService.page(page, bo.toWrapper());
LambdaQueryWrapper<AccountBill> queryWrapper = bo.toWrapper();
queryWrapper.eq(AccountBill::getAccountId, memberAccount.getId());
queryWrapper.orderByDesc(AccountBill::getCreateTime);
Page<AccountBill> memberPage = accountBillService.page(page, queryWrapper);
return R.ok(accountBillConvert.toVO(memberPage));
}

View File

@ -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:";
}

View File

@ -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<MessageExt> {

View File

@ -25,10 +25,12 @@ public class MyLikedVlog extends BaseAudit {
/**
* 喜欢的短视频id
*/
@TableField("vlog_id")
private String vlogId;
private Long vloggerId;

View File

@ -10,7 +10,7 @@ public interface IMyLikeVlogService extends IService<MyLikedVlog> {
* @param vlogId 短视频id
* @return 是否喜欢成功
*/
boolean like(String vlogId,Long memberId);
boolean like(String vlogId,Long vloggerId,Long memberId);
/**
* 取消喜欢短视频

View File

@ -20,10 +20,11 @@ public class MyLikeVlogServiceImpl extends ServiceImpl<MyLikedVlogMapper, MyLike
@Override
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_LIKED, key = "#vlogId + '_' + #memberId")
public boolean like(String vlogId, Long memberId) {
public boolean like(String vlogId, Long vloggerId,Long memberId) {
MyLikedVlog myLikedVlog = new MyLikedVlog();
myLikedVlog.setMemberId(memberId);
myLikedVlog.setVlogId(vlogId.toString());
myLikedVlog.setVloggerId(vloggerId);
return this.save(myLikedVlog);
}
@ -36,10 +37,10 @@ public class MyLikeVlogServiceImpl extends ServiceImpl<MyLikedVlogMapper, MyLike
}
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_MY_LIKED_LIST, key = "#memberId")
public List<Long> myLikeVlog(Long memberId) {
public List<String> myLikeVlog(Long memberId) {
return this.baseMapper.selectList(new LambdaQueryWrapper<MyLikedVlog>()
.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<MyLikedVlogMapper, MyLike
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, key = "#memberId")
public Integer getMyVlogLikeCount(Long memberId) {
return this.baseMapper.selectCount(new LambdaQueryWrapper<MyLikedVlog>()
.eq(MyLikedVlog::getMemberId, memberId.toString())).intValue();
.eq(MyLikedVlog::getVloggerId, memberId.toString())).intValue();
}

View File

@ -69,7 +69,9 @@ public class VlogPullServiceImpl implements IVlogPullService {
List<IndexVlogVO> 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<IndexVlogVO> indexVlogVOPage = vlogService.getIndexVlogList(null, page);
//标记已读
saveMyReadVlog(indexVlogVOPage.getRecords(), loginUser.getUserId());
if(loginUser!=null){
saveMyReadVlog(indexVlogVOPage.getRecords(), loginUser.getUserId());
}
//直接获取数据库数据并要求push类推送数据
return indexVlogVOPage;
}

View File

@ -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<VlogMapper, Vlog> 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<VlogMapper, Vlog> 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<VlogMapper, Vlog> 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<VlogMapper, Vlog> 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<VlogMapper, Vlog> 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<String,Object> params=new HashMap<>();
LoginUser loginUser=LoginHelper.getLoginUser();
Map<String, Object> 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<VlogMapper, Vlog> 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<IndexVlogVO> getMyLikedVlogList(Page page) {
@ -379,7 +379,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> 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<VlogMapper, Vlog> 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<VlogMapper, Vlog> 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<VlogMapper, Vlog> implements Vl
List<IndexVlogVO> 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()));

View File

@ -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
)

View File

@ -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<IMemberService, MemberConve
@Override
public MemberVO info(Serializable id) {
MemberVO vo= super.info(id);
Double score = cache.zSetScore(REDIS_VLOGER_BE_LIKED_COUNTS, String.valueOf(id));
vo.setVlogLikeCount(score != null ? score.intValue() : 0);
Double myFansCount= cache.zSetScore(REDIS_MY_FANS_COUNTS, String.valueOf(id));
vo.setFansCount(myFansCount != null ? myFansCount.intValue() : 0);
Double myFollowCount= cache.zSetScore(REDIS_MY_FOLLOWS_COUNTS, String.valueOf(id));
vo.setFollowCount(myFollowCount != null ? myFollowCount.intValue() : 0);
Integer score = service.getMyVlogLikeCount(Long.valueOf(id.toString()));
vo.setVlogLikeCount(score);
Integer myFansCount= fansService.myFansCount(Long.valueOf(id.toString()));
vo.setFansCount(myFansCount != null ? myFansCount : 0);
Integer myFollowCount= fansService.myFollowCount(Long.valueOf(id.toString()));
vo.setFollowCount(myFollowCount != null ? myFollowCount : 0);
Integer myFriendsCount= fansService.myFriendsCount(Long.valueOf(id.toString()));
vo.setFriendsCount(myFriendsCount != null ? myFriendsCount : 0);
LoginUser loginUser = LoginHelper.getLoginUser();
if (loginUser != null) {
boolean doIFollowVlogger = fansService.queryDoIFollowVloger(loginUser.getUserId() ,Long.valueOf(id.toString()));
vo.setDoIFollowVloger(doIFollowVlogger);
}
return vo;
}
}

View File

@ -114,7 +114,7 @@ public class FansController {
}
// 拉黑前只删除"我关注对方"的关系
service.removeFansRelationship(myId, vloggerId);
// service.removeFansRelationship(myId, vloggerId);
//检查是否已在黑名单中
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);

View File

@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.io.Serializable;
import java.util.List;
/**
@ -67,4 +68,14 @@ public interface MemberMapper extends BaseMapper<Member> {
" 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);
}

View File

@ -11,30 +11,36 @@ public interface IFansService extends IService<Fans> {
/**
* 关注
*/
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<FansVO> queryMyFans(Long myId,
Integer page,
Integer pageSize);
IPage<FansVO> 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);
}

View File

@ -106,4 +106,7 @@ public interface IMemberService extends IService<Member> {
* @param smsCode 短信验证码
*/
void revoked(String smsCode);
Integer getMyVlogLikeCount(Long memberId);
}

View File

@ -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<FansMapper, Fans> 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<FansMapper, Fans> implements IF
}
baseMapper.insert(fans);
clearMemberFansCache(vloggerId, myId);
MqUtil.sendIMMessage(buildMessage(fans));
return true;
}
@ -87,7 +89,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
Map<String, Object> 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<FansMapper, Fans> 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<FansMapper, Fans> 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<Fans>().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<FansVO> queryMyFans(Long myId, Integer pageNo, Integer pageSize) {
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
// 查询粉丝列表
Page<FansVO> page = new Page<>();
Page<Fans> 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<Fans> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Fans::getVloggerId, myId);
IPage<Fans> 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<Fans>().eq(Fans::getVloggerId, vloggerId));
public Integer myFansCount(Long vloggerId) {
return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().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<Fans>().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<Fans>().eq(Fans::getFanId, fanId).eq(Fans::getFriendFlag, YesOrNo.YES.type)).intValue();
}
}

View File

@ -413,4 +413,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> 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);
}
}

View File

@ -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());