[fix]修改关注和粉丝
This commit is contained in:
parent
4ee40f0bdb
commit
6ed0f56462
@ -1,5 +1,6 @@
|
|||||||
package org.dromara.app;
|
package org.dromara.app;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.wzj.soopin.member.business.IMemberBusiness;
|
import com.wzj.soopin.member.business.IMemberBusiness;
|
||||||
import com.wzj.soopin.member.convert.AccountBillConvert;
|
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.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.social.config.properties.SocialProperties;
|
import org.dromara.common.social.config.properties.SocialProperties;
|
||||||
import org.dromara.common.social.utils.SocialUtils;
|
import org.dromara.common.social.utils.SocialUtils;
|
||||||
|
import org.springframework.data.annotation.LastModifiedDate;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@ -139,8 +141,10 @@ public class AppMemberController {
|
|||||||
if (memberAccount == null) {
|
if (memberAccount == null) {
|
||||||
throw new ServiceException("用户未绑定账户");
|
throw new ServiceException("用户未绑定账户");
|
||||||
}
|
}
|
||||||
bo.setAccountId(memberAccount.getId());
|
LambdaQueryWrapper<AccountBill> queryWrapper = bo.toWrapper();
|
||||||
Page<AccountBill> memberPage = accountBillService.page(page, 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));
|
return R.ok(accountBillConvert.toVO(memberPage));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +76,22 @@ public interface GlobalConstants {
|
|||||||
|
|
||||||
String GLOBAL_MEMBER_FANS_COUNT="global:member:myfans:count:";
|
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:";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ import java.nio.file.Path;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RocketMQMessageListener(
|
@RocketMQMessageListener(
|
||||||
topic = RocketMQConfig.VLOG_UPLOAD_TOPIC,
|
topic = RocketMQConfig.VLOG_UPLOAD_TOPIC,
|
||||||
consumerGroup = "VLOG_UPLOAD_GROUP_LOCAL",
|
consumerGroup = RocketMQConfig.VLOG_UPLOAD_GROUP,
|
||||||
selectorExpression = RocketMQConfig.VLOG_UPLOAD_TAG
|
selectorExpression = RocketMQConfig.VLOG_UPLOAD_TAG
|
||||||
)
|
)
|
||||||
public class VlogUploadMessageConsumer implements RocketMQListener<MessageExt> {
|
public class VlogUploadMessageConsumer implements RocketMQListener<MessageExt> {
|
||||||
|
@ -25,10 +25,12 @@ public class MyLikedVlog extends BaseAudit {
|
|||||||
/**
|
/**
|
||||||
* 喜欢的短视频id
|
* 喜欢的短视频id
|
||||||
*/
|
*/
|
||||||
@TableField("vlog_id")
|
|
||||||
private String vlogId;
|
private String vlogId;
|
||||||
|
|
||||||
|
|
||||||
|
private Long vloggerId;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ public interface IMyLikeVlogService extends IService<MyLikedVlog> {
|
|||||||
* @param vlogId 短视频id
|
* @param vlogId 短视频id
|
||||||
* @return 是否喜欢成功
|
* @return 是否喜欢成功
|
||||||
*/
|
*/
|
||||||
boolean like(String vlogId,Long memberId);
|
boolean like(String vlogId,Long vloggerId,Long memberId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 取消喜欢短视频
|
* 取消喜欢短视频
|
||||||
|
@ -20,10 +20,11 @@ public class MyLikeVlogServiceImpl extends ServiceImpl<MyLikedVlogMapper, MyLike
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_LIKED, key = "#vlogId + '_' + #memberId")
|
@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 myLikedVlog = new MyLikedVlog();
|
||||||
myLikedVlog.setMemberId(memberId);
|
myLikedVlog.setMemberId(memberId);
|
||||||
myLikedVlog.setVlogId(vlogId.toString());
|
myLikedVlog.setVlogId(vlogId.toString());
|
||||||
|
myLikedVlog.setVloggerId(vloggerId);
|
||||||
return this.save(myLikedVlog);
|
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")
|
@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>()
|
return this.baseMapper.selectList(new LambdaQueryWrapper<MyLikedVlog>()
|
||||||
.eq(MyLikedVlog::getMemberId, memberId.toString()))
|
.eq(MyLikedVlog::getMemberId, memberId))
|
||||||
.stream().map(MyLikedVlog::getVlogId).map(Long::valueOf).collect(Collectors.toList());
|
.stream().map(MyLikedVlog::getVlogId).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_LIKED_COUNT, key = "#vlogId")
|
@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")
|
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, key = "#memberId")
|
||||||
public Integer getMyVlogLikeCount(Long memberId) {
|
public Integer getMyVlogLikeCount(Long memberId) {
|
||||||
return this.baseMapper.selectCount(new LambdaQueryWrapper<MyLikedVlog>()
|
return this.baseMapper.selectCount(new LambdaQueryWrapper<MyLikedVlog>()
|
||||||
.eq(MyLikedVlog::getMemberId, memberId.toString())).intValue();
|
.eq(MyLikedVlog::getVloggerId, memberId.toString())).intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +69,9 @@ public class VlogPullServiceImpl implements IVlogPullService {
|
|||||||
List<IndexVlogVO> vlogVOList = vlogService.getIndexVlogList(vlogBO);
|
List<IndexVlogVO> vlogVOList = vlogService.getIndexVlogList(vlogBO);
|
||||||
|
|
||||||
//标记已读
|
//标记已读
|
||||||
saveMyReadVlog(vlogVOList, loginUser.getUserId());
|
if(loginUser!=null){
|
||||||
|
saveMyReadVlog(vlogVOList, loginUser.getUserId());
|
||||||
|
}
|
||||||
return page.setRecords(vlogVOList);
|
return page.setRecords(vlogVOList);
|
||||||
} else {
|
} else {
|
||||||
if (loginUser != null) {
|
if (loginUser != null) {
|
||||||
@ -82,7 +84,9 @@ public class VlogPullServiceImpl implements IVlogPullService {
|
|||||||
//先临时取10条数据
|
//先临时取10条数据
|
||||||
Page<IndexVlogVO> indexVlogVOPage = vlogService.getIndexVlogList(null, page);
|
Page<IndexVlogVO> indexVlogVOPage = vlogService.getIndexVlogList(null, page);
|
||||||
//标记已读
|
//标记已读
|
||||||
saveMyReadVlog(indexVlogVOPage.getRecords(), loginUser.getUserId());
|
if(loginUser!=null){
|
||||||
|
saveMyReadVlog(indexVlogVOPage.getRecords(), loginUser.getUserId());
|
||||||
|
}
|
||||||
//直接获取数据库数据,并要求push类推送数据
|
//直接获取数据库数据,并要求push类推送数据
|
||||||
return indexVlogVOPage;
|
return indexVlogVOPage;
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,6 @@ import org.dromara.common.mq.utils.MqUtil;
|
|||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
import org.dromara.common.redis.utils.RedisUtils;
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.cache.annotation.CacheEvict;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
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.setStatus(VlogStatusEnum.AUDITING.type);
|
||||||
vlog.setIsPrivate(YesOrNo.NO.type);
|
vlog.setIsPrivate(YesOrNo.NO.type);
|
||||||
|
|
||||||
vlog.setMemberId(loginUser.getUserId()+"");
|
vlog.setMemberId(loginUser.getUserId() + "");
|
||||||
vlog.setUrl("#");
|
vlog.setUrl("#");
|
||||||
vlogMapper.insert(vlog);
|
vlogMapper.insert(vlog);
|
||||||
|
|
||||||
@ -140,7 +139,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
.tag("upload")
|
.tag("upload")
|
||||||
.sendTime(LocalDateTime.now())
|
.sendTime(LocalDateTime.now())
|
||||||
.build();
|
.build();
|
||||||
MqUtil.sendMessage(RocketMQConfig.VLOG_UPLOAD_TOPIC+":"+"upload", message);
|
MqUtil.sendMessage(RocketMQConfig.VLOG_UPLOAD_TOPIC + ":" + "upload", message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -154,8 +153,8 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
try {
|
try {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
if (loginUser != null) {
|
if (loginUser != null) {
|
||||||
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(loginUser.getUserId() + "", vlog.getMemberId()));
|
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(loginUser.getUserId(), Long.valueOf(vlog.getMemberId())));
|
||||||
vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlogId,loginUser.getUserId() ));
|
vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlogId, loginUser.getUserId()));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage());
|
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;
|
uid = user != null ? String.valueOf(user.getUserId()) : null;
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(uid)) {
|
if (StringUtils.isNotBlank(uid)) {
|
||||||
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(uid, vlog.getMemberId()));
|
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(Long.valueOf(uid), Long.valueOf(vlog.getMemberId())));
|
||||||
vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog( vlog.getId(),Long.valueOf(uid)));
|
vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlog.getId(), Long.valueOf(uid)));
|
||||||
}
|
}
|
||||||
vo.setLikeCounts(myLikeVlogService.getVLogLikeCount(vlog.getId()));
|
vo.setLikeCounts(myLikeVlogService.getVLogLikeCount(vlog.getId()));
|
||||||
vo.setCommentsCounts(commentService.getCommentCount(vlog.getId()));
|
vo.setCommentsCounts(commentService.getCommentCount(vlog.getId()));
|
||||||
@ -248,25 +247,25 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
throw new ServiceException("视频不存在");
|
throw new ServiceException("视频不存在");
|
||||||
}
|
}
|
||||||
//先检查是否已经点过赞了
|
//先检查是否已经点过赞了
|
||||||
if (myLikeVlogService.doILikeVlog(vlogId,Long.valueOf(userId))) {
|
if (myLikeVlogService.doILikeVlog(vlogId, Long.valueOf(userId))) {
|
||||||
throw new ServiceException("您已经点过赞了");
|
throw new ServiceException("您已经点过赞了");
|
||||||
}
|
}
|
||||||
// 我点赞的视频,关联关系保存到数据库
|
// 我点赞的视频,关联关系保存到数据库
|
||||||
myLikeVlogService.like( vlogId,Long.valueOf(userId));
|
myLikeVlogService.like(vlogId, Long.valueOf(vlog.getMemberId()), Long.valueOf(userId));
|
||||||
clearMemberVlogCache(vlogId,userId);
|
clearMemberVlogCache(vlogId, userId);
|
||||||
//发送消息
|
//发送消息
|
||||||
MqUtil.sendIMMessage(buildMessage(vlog));
|
MqUtil.sendIMMessage(buildMessage(vlog));
|
||||||
}
|
}
|
||||||
|
|
||||||
private MQMessage buildMessage(Vlog vlog){
|
private MQMessage buildMessage(Vlog vlog) {
|
||||||
|
|
||||||
Map<String,Object> params=new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
LoginUser loginUser=LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
params.put("userID", loginUser.getUserId());
|
params.put("userID", loginUser.getUserId());
|
||||||
params.put("nickName", loginUser.getNickname() == null ? "" : loginUser.getNickname());
|
params.put("nickName", loginUser.getNickname() == null ? "" : loginUser.getNickname());
|
||||||
params.put("faceUrl", loginUser.getAvatar() );
|
params.put("faceUrl", loginUser.getAvatar());
|
||||||
params.put("vlogId",vlog.getId());
|
params.put("vlogId", vlog.getId());
|
||||||
params.put("firstFrameImg",vlog.getFirstFrameImg());
|
params.put("firstFrameImg", vlog.getFirstFrameImg());
|
||||||
MQMessage mqMessage = new MQMessage();
|
MQMessage mqMessage = new MQMessage();
|
||||||
mqMessage.setMessageType(MQMessageType.IM.name());
|
mqMessage.setMessageType(MQMessageType.IM.name());
|
||||||
mqMessage.setTag(MessageActionEnum.INTERACTION_LIKE.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));
|
myLikeVlogService.unLike(vlogId, Long.valueOf(userId));
|
||||||
clearMemberVlogCache(vlogId,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_MY_LIKED_LIST, userId);
|
||||||
RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_LIKED_COUNT, vlogId);
|
RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_LIKED_COUNT, vlogId);
|
||||||
RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, userId);
|
RedisUtils.delCacheMapValue(GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<IndexVlogVO> getMyLikedVlogList(Page page) {
|
public Page<IndexVlogVO> getMyLikedVlogList(Page page) {
|
||||||
|
|
||||||
@ -379,7 +379,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
// 这里不再统计,避免重复计算
|
// 这里不再统计,避免重复计算
|
||||||
|
|
||||||
// 获取粉丝数量:优先 Redis,无则 MySQL
|
// 获取粉丝数量:优先 Redis,无则 MySQL
|
||||||
Long fansCounts = fansService.countFansByVloggerId(Long.valueOf(vlog.getMemberId()));
|
int fansCounts = fansService.myFansCount(Long.valueOf(vlog.getMemberId()));
|
||||||
result.put("fansCounts", fansCounts);
|
result.put("fansCounts", fansCounts);
|
||||||
} else {
|
} else {
|
||||||
result.put("vlogId", null);
|
result.put("vlogId", null);
|
||||||
@ -410,7 +410,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
result.put("comments", comments);
|
result.put("comments", comments);
|
||||||
|
|
||||||
// 从Redis获取点赞数
|
// 从Redis获取点赞数
|
||||||
Integer likeCounts = myLikeVlogService.getVLogLikeCount(vlog.getId());
|
Integer likeCounts = myLikeVlogService.getVLogLikeCount(vlog.getId());
|
||||||
|
|
||||||
result.put("likeCounts", likeCounts);
|
result.put("likeCounts", likeCounts);
|
||||||
result.put("vlogId", vlog.getId());
|
result.put("vlogId", vlog.getId());
|
||||||
@ -576,8 +576,8 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
LoginUser user = LoginHelper.getLoginUser();
|
LoginUser user = LoginHelper.getLoginUser();
|
||||||
vlogList.parallelStream().forEach(vlog -> {
|
vlogList.parallelStream().forEach(vlog -> {
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
vlog.setDoIFollowVloger(fansService.queryDoIFollowVloger(user.getUserId() + "", vlog.getMemberId()));
|
vlog.setDoIFollowVloger(fansService.queryDoIFollowVloger(user.getUserId(), Long.valueOf(vlog.getMemberId())));
|
||||||
vlog.setDoILikeThisVlog(myLikeVlogService.doILikeVlog( vlog.getId(),user.getUserId()));
|
vlog.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(vlog.getId(), user.getUserId()));
|
||||||
}
|
}
|
||||||
vlog.setLikeCounts(myLikeVlogService.getVLogLikeCount(vlog.getId()));
|
vlog.setLikeCounts(myLikeVlogService.getVLogLikeCount(vlog.getId()));
|
||||||
vlog.setCommentsCounts(commentService.getCommentCount(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 -> {
|
List<IndexVlogVO> voList = vlogList.stream().map(v -> {
|
||||||
IndexVlogVO vo = MapstructUtils.convert(v, IndexVlogVO.class);
|
IndexVlogVO vo = MapstructUtils.convert(v, IndexVlogVO.class);
|
||||||
if (StringUtils.isNotBlank(userId)) {
|
if (StringUtils.isNotBlank(userId)) {
|
||||||
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getMemberId()));
|
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(Long.valueOf(userId), Long.valueOf(v.getMemberId())));
|
||||||
vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(v.getId(),Long.valueOf(userId)));
|
vo.setDoILikeThisVlog(myLikeVlogService.doILikeVlog(v.getId(), Long.valueOf(userId)));
|
||||||
}
|
}
|
||||||
vo.setLikeCounts(myLikeVlogService.getVLogLikeCount(v.getId()));
|
vo.setLikeCounts(myLikeVlogService.getVLogLikeCount(v.getId()));
|
||||||
vo.setCommentsCounts(commentService.getCommentCount(v.getId()));
|
vo.setCommentsCounts(commentService.getCommentCount(v.getId()));
|
||||||
|
@ -21,8 +21,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RocketMQMessageListener(
|
@RocketMQMessageListener(
|
||||||
topic = RocketMQConfig.TOPIC_IM_MSG,
|
topic = RocketMQConfig.TOPIC_IM_MSG,
|
||||||
// consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG,
|
consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG,
|
||||||
consumerGroup = "cosumer1",
|
|
||||||
selectorExpression = "*"
|
selectorExpression = "*"
|
||||||
// ackMode = AckMode.MANUAL
|
// ackMode = AckMode.MANUAL
|
||||||
)
|
)
|
||||||
|
@ -10,9 +10,11 @@ import com.wzj.soopin.member.service.IFansService;
|
|||||||
import com.wzj.soopin.member.service.IMemberService;
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.redis.redis.RedisCache;
|
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.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.web.core.BusinessImpl;
|
import org.dromara.common.web.core.BusinessImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -83,12 +85,20 @@ public class MemberBusinessImpl extends BusinessImpl<IMemberService, MemberConve
|
|||||||
@Override
|
@Override
|
||||||
public MemberVO info(Serializable id) {
|
public MemberVO info(Serializable id) {
|
||||||
MemberVO vo= super.info(id);
|
MemberVO vo= super.info(id);
|
||||||
Double score = cache.zSetScore(REDIS_VLOGER_BE_LIKED_COUNTS, String.valueOf(id));
|
Integer score = service.getMyVlogLikeCount(Long.valueOf(id.toString()));
|
||||||
vo.setVlogLikeCount(score != null ? score.intValue() : 0);
|
vo.setVlogLikeCount(score);
|
||||||
Double myFansCount= cache.zSetScore(REDIS_MY_FANS_COUNTS, String.valueOf(id));
|
Integer myFansCount= fansService.myFansCount(Long.valueOf(id.toString()));
|
||||||
vo.setFansCount(myFansCount != null ? myFansCount.intValue() : 0);
|
vo.setFansCount(myFansCount != null ? myFansCount : 0);
|
||||||
Double myFollowCount= cache.zSetScore(REDIS_MY_FOLLOWS_COUNTS, String.valueOf(id));
|
Integer myFollowCount= fansService.myFollowCount(Long.valueOf(id.toString()));
|
||||||
vo.setFollowCount(myFollowCount != null ? myFollowCount.intValue() : 0);
|
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;
|
return vo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ public class FansController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 拉黑前只删除"我关注对方"的关系
|
// 拉黑前只删除"我关注对方"的关系
|
||||||
service.removeFansRelationship(myId, vloggerId);
|
// service.removeFansRelationship(myId, vloggerId);
|
||||||
|
|
||||||
//检查是否已在黑名单中
|
//检查是否已在黑名单中
|
||||||
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);
|
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);
|
||||||
|
@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
|
|||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,4 +68,14 @@ public interface MemberMapper extends BaseMapper<Member> {
|
|||||||
" WHERE um.id = #{spreadUid} ")
|
" WHERE um.id = #{spreadUid} ")
|
||||||
String getReferenceTenantIdBySpreadUid(@Param("spreadUid") Long 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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
boolean queryDoIFollowVloger(Long myId, Long vloggerId);
|
||||||
|
|
||||||
public boolean queryDoIFollowVloger(String myId, String vloggerId);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询我的粉丝列表
|
* 查询我的粉丝列表
|
||||||
*/
|
*/
|
||||||
public IPage<FansVO> queryMyFans(Long myId,
|
IPage<FansVO> queryMyFans(Long myId,
|
||||||
Integer page,
|
Integer page,
|
||||||
Integer pageSize);
|
Integer pageSize);
|
||||||
|
|
||||||
|
|
||||||
Long countFansByVloggerId(Long vloggerId);
|
Integer myFansCount(Long vloggerId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询我的关注列表
|
||||||
|
*/
|
||||||
|
Integer myFollowCount(Long fanId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询我的关注列表
|
||||||
|
*/
|
||||||
|
Integer myFriendsCount(Long fanId);
|
||||||
|
|
||||||
// 拉黑前只删除“我关注对方”的关系
|
|
||||||
void removeFansRelationship(Long myId, Long vloggerId);
|
|
||||||
}
|
}
|
||||||
|
@ -106,4 +106,7 @@ public interface IMemberService extends IService<Member> {
|
|||||||
* @param smsCode 短信验证码
|
* @param smsCode 短信验证码
|
||||||
*/
|
*/
|
||||||
void revoked(String smsCode);
|
void revoked(String smsCode);
|
||||||
|
|
||||||
|
|
||||||
|
Integer getMyVlogLikeCount(Long memberId);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
|
|||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
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.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.wzj.soopin.member.domain.po.Fans;
|
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)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@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) {
|
public boolean doFollow(Long myId, Long vloggerId) {
|
||||||
// 幂等性校验:已存在则不再插入
|
// 幂等性校验:已存在则不再插入
|
||||||
|
|
||||||
@ -74,6 +75,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
}
|
}
|
||||||
baseMapper.insert(fans);
|
baseMapper.insert(fans);
|
||||||
|
|
||||||
|
clearMemberFansCache(vloggerId, myId);
|
||||||
MqUtil.sendIMMessage(buildMessage(fans));
|
MqUtil.sendIMMessage(buildMessage(fans));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -87,7 +89,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("userId", follower.getId());
|
params.put("userId", follower.getId());
|
||||||
params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname());
|
params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname());
|
||||||
params.put("faceUrl", vlogger.getAvatar() );
|
params.put("faceUrl", vlogger.getAvatar());
|
||||||
MQMessage message = MQMessage.builder()
|
MQMessage message = MQMessage.builder()
|
||||||
.messageType(MQMessageType.IM.name())
|
.messageType(MQMessageType.IM.name())
|
||||||
.data(params)
|
.data(params)
|
||||||
@ -112,7 +114,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@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) {
|
public boolean doCancel(Long myId, Long vloggerId) {
|
||||||
// 判断我们是否朋友关系,如果是,则需要取消双方的关系
|
// 判断我们是否朋友关系,如果是,则需要取消双方的关系
|
||||||
Fans fan = queryFansRelationship(myId, 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);
|
log.warn("取消关注时未找到自己的粉丝关系,myId={}, vloggerId={}", myId, vloggerId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// 博主的粉丝-1,我的关注-1
|
clearMemberFansCache(vloggerId, myId);
|
||||||
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
|
|
||||||
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean queryDoIFollowVloger(Long myId, Long vloggerId) {
|
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
|
@Override
|
||||||
public IPage<FansVO> queryMyFans(Long myId, Integer pageNo, Integer pageSize) {
|
public IPage<FansVO> queryMyFans(Long myId, Integer pageNo, Integer pageSize) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
map.put("myId", myId);
|
map.put("myId", myId);
|
||||||
// 查询粉丝列表
|
// 查询粉丝列表
|
||||||
Page<FansVO> page = new Page<>();
|
Page<Fans> page = new Page<>();
|
||||||
page.setCurrent(pageNo);
|
page.setCurrent(pageNo);
|
||||||
page.setSize(pageSize);
|
page.setSize(pageSize);
|
||||||
for (FansVO f : page.getRecords()) {
|
LambdaQueryWrapper<Fans> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
String relationship = redisCache.getCacheObject(
|
queryWrapper.eq(Fans::getVloggerId, myId);
|
||||||
CacheConstants.MEMBER_FANS + ":" + myId + ":" + f.getFan().getId());
|
IPage<Fans> fansPage = baseMapper.selectPage(page, queryWrapper);
|
||||||
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
|
for (Fans f : page.getRecords()) {
|
||||||
|
//看看他是否也关注了我
|
||||||
|
Boolean doesHeFollowMe = queryDoIFollowVloger(f.getFanId(), myId);
|
||||||
|
if (doesHeFollowMe) {
|
||||||
f.setFriendFlag(YesOrNo.YES.type);
|
f.setFriendFlag(YesOrNo.YES.type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
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")
|
@Cacheable(value = GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, key = "#vloggerId")
|
||||||
public Long countFansByVloggerId(Long vloggerId) {
|
public Integer myFansCount(Long vloggerId) {
|
||||||
return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().eq(Fans::getVloggerId, vloggerId));
|
return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().eq(Fans::getVloggerId, vloggerId)).intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 拉黑前只删除“我关注对方”的关系
|
|
||||||
@Override
|
@Override
|
||||||
@CacheEvict(value = GlobalConstants.GLOBAL_MEMBER_FANS_COUNT, key = "#vloggerId")
|
@Cacheable(value = GlobalConstants.GLOBAL_MEMBER_FOLLOW_COUNT, key = "#fanId")
|
||||||
public void removeFansRelationship(Long myId, Long vloggerId) {
|
public Integer myFollowCount(Long fanId) {
|
||||||
Fans fan = queryFansRelationship(myId, vloggerId);
|
return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().eq(Fans::getFanId, fanId)).intValue();
|
||||||
if (fan != null) {
|
|
||||||
baseMapper.deleteById(fan.getId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//从缓存中获取我的关注列表
|
@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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -413,4 +413,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
|||||||
public boolean updateById(Member entity) {
|
public boolean updateById(Member entity) {
|
||||||
return super.updateById(entity);
|
return super.updateById(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cacheable(cacheNames = GlobalConstants.GLOBAL_VLOG_ALL_LIKED_COUNT, key = "#memberId")
|
||||||
|
public Integer getMyVlogLikeCount(Long memberId) {
|
||||||
|
return baseMapper.selectMyVlogLikeCount(memberId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ public class AccountBillServiceImpl extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
BigDecimal balance = memberAccount.getWallet();
|
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());
|
memberAccountService.updateById(memberAccount.toBuilder().wallet(newBalance).build());
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user