修改vlog

This commit is contained in:
cjh 2025-05-30 15:25:48 +08:00
parent 00104f0580
commit 378aa9df54
11 changed files with 300 additions and 754 deletions

View File

@ -37,7 +37,7 @@ public class UsersVO {
private Integer totalLikeMeCounts;
//private Token shopToken;
private boolean IsFollowed; // 关注状态
private String FollowStatus; // 关注状态
private boolean isFollowed; // 关注状态
private String followStatus; // 关注状态
}

View File

@ -32,4 +32,14 @@ public enum UserInfoModifyType {
GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_ERROR);
}
}
public static UserInfoModifyType getTypeByValue(Integer type) {
for (UserInfoModifyType modifyType : UserInfoModifyType.values()) {
if (modifyType.type.equals(type)) {
return modifyType;
}
}
GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_ERROR);
return null;
}
}

View File

@ -1,5 +1,6 @@
package com.wzj.soopin.content.mapper.mapper;
import com.wzj.soopin.content.domain.po.UserMember;
import com.wzj.soopin.content.domain.po.Users;
import com.wzj.soopin.content.domain.vo.UsersVO;
import org.apache.ibatis.annotations.Mapper;
@ -9,7 +10,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* 短视频用户与商城会员数据处理层
*/
@Mapper
public interface UserMemberMapper extends BaseMapperPlus<Users, UsersVO> {
public interface UserMemberMapper extends BaseMapperPlus<UserMember, UserMember> {
Users getUserByMemberId(String memberId);
}

View File

@ -36,4 +36,6 @@ public interface UsersMapper extends BaseMapper<Users> {
Users selectByPrimaryKey(String userId);
void updateByPrimaryKeySelective(Users users);
int inset(Users user);
}

View File

@ -1,6 +1,8 @@
package com.wzj.soopin.content.mapper.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.content.domain.po.Vlog;
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@ -12,7 +14,7 @@ import java.util.Map;
//public interface VlogMapper extends MyMapper<Vlog> {
//}
@Repository
public interface VlogMapper {
public interface VlogMapper extends BaseMapper<Vlog> {
// public List<IndexVlogVO> updateVlogStatus(@Param("paramMap") Map<String, Object> map);
/**
* 通用动态更新方法

View File

@ -13,5 +13,7 @@ public interface MessageRepository {
// 通过实现Repository自定义条件查询
List<MessageMO> findAllByToUserIdEqualsOrderByCreateTimeDesc(String toUserId,
Pageable pageable);
void save(MessageMO messageMO);
// void deleteAllByFromUserIdAndToUserIdAndMsgType();
}

View File

@ -1,7 +1,6 @@
package com.wzj.soopin.content.service;
import com.wzj.soopin.content.domain.vo.FansVO;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import com.wzj.soopin.content.utils.PagedGridResult;
public interface FansService {
@ -23,14 +22,14 @@ public interface FansService {
/**
* 查询我关注的博主列表
*/
public TableDataInfo<FansVO> queryMyFollows(String myId,
Integer page,
Integer pageSize);
public PagedGridResult queryMyFollows(String myId,
Integer page,
Integer pageSize);
/**
* 查询我的粉丝列表
*/
public TableDataInfo<FansVO> queryMyFans(String myId,
Integer page,
Integer pageSize);
public PagedGridResult queryMyFans(String myId,
Integer page,
Integer pageSize);
}

View File

@ -1,8 +1,7 @@
package com.wzj.soopin.content.service.impl;
import com.github.pagehelper.PageHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
import com.wzj.soopin.content.domain.bo.CommentBO;
import com.wzj.soopin.content.domain.po.Comment;
@ -18,7 +17,6 @@ import com.wzj.soopin.content.service.VlogService;
import com.wzj.soopin.content.utils.PagedGridResult;
import com.wzj.soopin.content.utils.Sid;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -27,53 +25,39 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class CommentServiceImpl extends BaseInfoProperties implements CommentService {
//
@Autowired
private CommentMapper commentMapper;
//
@Autowired
private CommentMapperCustom commentMapperCustom;
//
@Autowired
private VlogService vlogService;
@Autowired
private MsgService msgService;
//
@Autowired
private Sid sid;
//
@Override
public CommentVO createComment(CommentBO commentBO) {
String commentId = sid.nextShort();
Comment comment = new Comment();
comment.setId(commentId);
comment.setVlogId(commentBO.getVlogId());
comment.setVlogerId(commentBO.getVlogerId());
comment.setCommentUserId(commentBO.getCommentUserId());
comment.setFatherCommentId(commentBO.getFatherCommentId());
comment.setContent(commentBO.getContent());
comment.setLikeCounts(0);
comment.setCreateTime(new Date());
commentMapper.insert(comment);
// redis操作放在service中评论总数的累加
redis.increment(REDIS_VLOG_COMMENT_COUNTS + ":" + commentBO.getVlogId(), 1);
// 留言后的最新评论需要返回给前端进行展示
CommentVO commentVO = new CommentVO();
BeanUtils.copyProperties(comment, commentVO);
// 系统消息评论/回复
Vlog vlog = vlogService.getVlog(commentBO.getVlogId());
Map msgContent = new HashMap();
@ -86,33 +70,26 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer
!commentBO.getFatherCommentId().equalsIgnoreCase("0") ) {
type = MessageEnum.REPLY_YOU.type;
}
msgService.createMsg(commentBO.getCommentUserId(),
commentBO.getVlogerId(),
type,
msgContent);
//
//
//
return commentVO;
}
//
@Override
public PagedGridResult queryVlogComments(String vlogId,
String userId,
Integer page,
Integer pageSize) {
@Override
public PagedGridResult queryVlogComments(String vlogId, String userId, Integer page, Integer pageSize) {
Map<String, Object> map = new HashMap<>();
map.put("vlogId", vlogId);
PageHelper.startPage(page, pageSize);
List<CommentVO> list = commentMapperCustom.getCommentList(map);
for (CommentVO cv:list) {
Page<Comment> pageParam = new Page<>(page, pageSize);
LambdaQueryWrapper<Comment> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Comment::getVlogId, vlogId);
Page<Comment> commentPage = commentMapper.selectPage(pageParam, queryWrapper);
List<Comment> commentList = commentPage.getRecords();
List<CommentVO> list = commentList.stream().map(comment -> {
CommentVO cv = new CommentVO();
BeanUtils.copyProperties(comment, cv);
String commentId = cv.getCommentId();
// 当前短视频的某个评论的点赞总数
String countsStr = redis.getHashValue(REDIS_VLOG_COMMENT_LIKED_COUNTS, commentId);
Integer counts = 0;
@ -120,34 +97,28 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer
counts = Integer.valueOf(countsStr);
}
cv.setLikeCounts(counts);
// 判断当前用户是否点赞过该评论
String doILike = redis.hget(REDIS_USER_LIKE_COMMENT, userId + ":" + commentId);
if (StringUtils.isNotBlank(doILike) && doILike.equalsIgnoreCase("1")) {
cv.setIsLike(YesOrNo.YES.type);
}
}
return cv;
}).collect(Collectors.toList());
return setterPagedGrid(list, page);
}
@Override
public void deleteComment(String commentUserId,
String commentId,
String vlogId) {
Comment pendingDelete = new Comment();
pendingDelete.setId(commentId);
pendingDelete.setCommentUserId(commentUserId);
commentMapper.delete(pendingDelete);
public void deleteComment(String commentUserId, String commentId, String vlogId) {
LambdaQueryWrapper<Comment> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Comment::getId, commentId)
.eq(Comment::getCommentUserId, commentUserId);
commentMapper.delete(queryWrapper);
// 评论总数的累减
redis.decrement(REDIS_VLOG_COMMENT_COUNTS + ":" + vlogId, 1);
}
@Override
public Comment getComment(String id) {
return commentMapper.selectByPrimaryKey(id);
return commentMapper.selectById(id);
}
}

View File

@ -1,6 +1,8 @@
package com.wzj.soopin.content.service.impl;
import com.github.pagehelper.PageHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
import com.wzj.soopin.content.domain.base.RabbitMQConfig;
import com.wzj.soopin.content.domain.mo.MessageMO;
@ -28,107 +30,70 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP;
@Service
@Slf4j
@RequiredArgsConstructor
public class FansServiceImpl extends BaseInfoProperties implements FansService {
public class FansServiceImpl extends BaseInfoProperties implements FansService {
private final FansMapper fansMapper;
private final FansMapperCustom fansMapperCustom;
//
private final MsgService msgService;
private final RabbitTemplate rabbitTemplate;
//
@Autowired
private Sid sid;
//
@Transactional
@Override
public void doFollow(String myId, String vlogerId) {
String fid = sid.nextShort();
// Fans fans = new Fans();
// fans.setId(fid);
// fans.setFanId(myId);
// fans.setVlogerId(vlogerId);
// fans.setCreatedTime(new Date());
Fans fans = new Fans();
fans.setId( fid);
fans.setFanId( myId);
fans.setVlogerId( vlogerId);
Fans fans = new Fans();
fans.setId(fid);
fans.setFanId(myId);
fans.setVlogerId(vlogerId);
// 判断对方是否关注我如果关注我那么双方都要互为朋友关系
Fans vloger = queryFansRelationship(vlogerId, myId);
System.out.println(vloger);
if (vloger != null) {
// fans.setIsFanFriendOfMine(YesOrNo.YES.type);
fans.setIsFanFriendOfMine( YesOrNo.YES.type);
fans.setIsFanFriendOfMine(YesOrNo.YES.type);
vloger.setIsFanFriendOfMine(YesOrNo.YES.type);
fansMapper.updateById(vloger);
} else {
// fans.setIsFanFriendOfMine(YesOrNo.NO.type);
fans.setIsFanFriendOfMine(YesOrNo.NO.type);
}
fansMapper.insert(fans);
// 系统消息关注
// msgService.createMsg(myId, vlogerId, MessageEnum.FOLLOW_YOU.type, null);
//优化使用mQEXCHANGE_MSG
MessageMO messageMO = new MessageMO();
messageMO.setFromUserId(myId);
messageMO.setToUserId(vlogerId);
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg."+ MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO));
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg." + MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO));
}
public Fans queryFansRelationship(String fanId, String vlogerId) {
// Example example = new Example(Fans.class);
// Example.Criteria criteria = example.createCriteria();
// criteria.andEqualTo("vlogerId", vlogerId);
// criteria.andEqualTo("fanId", fanId);
Map<String, Object> mapexample = new HashMap<>();
mapexample.put("vlogerId", vlogerId);
mapexample.put("fanId", fanId);
List list = fansMapper.selectByExample(mapexample);
Fans fan = null;
if (list != null && list.size() > 0 && !list.isEmpty()) {
fan = (Fans)list.get(0);
}
return fan;
LambdaQueryWrapper<Fans> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Fans::getVlogerId, vlogerId)
.eq(Fans::getFanId, fanId);
return fansMapper.selectOne(queryWrapper);
}
@Transactional
@Override
public void doCancel(String myId, String vlogerId) {
// 判断我们是否朋友关系如果是则需要取消双方的关系
Fans fan = queryFansRelationship(myId, vlogerId);
if (fan != null && fan.getIsFanFriendOfMine() == YesOrNo.YES.type) {
// 抹除双方的朋友关系自己的关系删除即可
Fans pendingFan = queryFansRelationship(vlogerId, myId);
pendingFan.setIsFanFriendOfMine(YesOrNo.NO.type);
System.out.println(pendingFan.getIsFanFriendOfMine());
fansMapper.updateByPrimaryKeySelective(pendingFan);
fansMapper.updateById(pendingFan);
}
// 删除自己的关注关联表记录
String fanId = fan.getId();
fansMapper.delete(fanId);
LambdaQueryWrapper<Fans> deleteWrapper = new LambdaQueryWrapper<>();
deleteWrapper.eq(Fans::getId, fan.getId());
fansMapper.delete(deleteWrapper);
}
@Override
@ -138,46 +103,22 @@ public class FansServiceImpl extends BaseInfoProperties implements FansService
}
@Override
public PagedGridResult queryMyFollows(String myId,
Integer page,
Integer pageSize) {
public PagedGridResult queryMyFollows(String myId, Integer page, Integer pageSize) {
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
PageHelper.startPage(page, pageSize);
Page<VlogerVO> pageParam = new Page<>(page, pageSize);
List<VlogerVO> list = fansMapperCustom.queryMyFollows(map);
return setterPagedGrid(list, page);
}
@Override
public PagedGridResult queryMyFans(String myId,
Integer page,
Integer pageSize) {
/**
* <判断粉丝是否是我的朋友互粉互关>
* 普通做法
* 多表关联+嵌套关联查询这样会违反多表关联的规范不可取高并发下回出现性能问题
*
* 常规做法
* 1. 避免过多的表关联查询先查询我的粉丝列表获得fansList
* 2. 判断粉丝关注我并且我也关注粉丝 -> 循环fansList获得每一个粉丝再去数据库查询我是否关注他
* 3. 如果我也关注他粉丝说明我俩互为朋友关系互关互粉则标记flag为true否则false
*
* 高端做法
* 1. 关注/取关的时候关联关系保存在redis中不要依赖数据库
* 2. 数据库查询后直接循环查询redis避免第二次循环查询数据库的尴尬局面
*/
public PagedGridResult queryMyFans(String myId, Integer page, Integer pageSize) {
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
PageHelper.startPage(page, pageSize);
Page<FansVO> pageParam = new Page<>(page, pageSize);
List<FansVO> list = fansMapperCustom.queryMyFans(map);
for (FansVO f : list) {

View File

@ -1,6 +1,8 @@
package com.wzj.soopin.content.service.impl;
import com.github.pagehelper.PageHelper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps;
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
@ -20,10 +22,7 @@ import com.wzj.soopin.content.mapper.mapper.UserMemberMapper;
import com.wzj.soopin.content.mapper.mapper.UsersMapper;
import com.wzj.soopin.content.service.FansService;
import com.wzj.soopin.content.service.UserService;
import com.wzj.soopin.content.utils.DateUtil;
import com.wzj.soopin.content.utils.DesensitizationUtil;
import com.wzj.soopin.content.utils.GsonUtil;
import com.wzj.soopin.content.utils.Sid;
import com.wzj.soopin.content.utils.*;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -79,16 +78,13 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService {
@Override
public Users queryMobileIsExist(String mobile) {
Example userExample = new Example(Users.class);
Example.Criteria criteria = userExample.createCriteria();
criteria.andEqualTo("mobile", mobile);
Users user = usersMapper.selectOneByExample(userExample);
return user;
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Users::getMobile, mobile);
return usersMapper.selectOne(queryWrapper);
}
@Override
public Users createUser(String mobile) {
// 获得全局唯一主键
String userId = sid.nextShort();
Users user = new Users();
@ -98,7 +94,6 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService {
user.setNickname("用户:" + DesensitizationUtil.commonDisplay(mobile));
user.setImoocNum("用户:" + DesensitizationUtil.commonDisplay(mobile));
user.setFace(USER_FACE1);
user.setBirthday(DateUtil.stringToDate("1999-01-01"));
user.setSex(Sex.secret.type);
user.setBgImg(USER_FACE1);
@ -108,99 +103,75 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService {
user.setDistrict("");
user.setDescription("这家伙很懒,什么都没留下~");
user.setCanImoocNumBeUpdated(YesOrNo.YES.type);
// user.setCreatedTime(new Date());
// user.setUpdatedTime(new Date());
usersMapper.insert(user);
return user;
}
@Override
public Users getUser(String userId) {
Users users = usersMapper.selectByPrimaryKey(userId);
return users;
return usersMapper.selectById(userId);
}
@Transactional
@Override
public Users updateUserInfo(UpdatedUserBO updatedUserBO) {
Users users = new Users();
BeanUtils.copyProperties(updatedUserBO, users);
usersMapper.updateByPrimaryKeySelective(users);
usersMapper.updateById(users);
return getUser(updatedUserBO.getId());
}
@Transactional
@Override
public Users updateUserInfo(UpdatedUserBO updatedUserBO, Integer type) {
if (type == UserInfoModifyType.NICKNAME.type) {
usersMapper.updateNickname(updatedUserBO);
}
if (type == UserInfoModifyType.SEX.type) {
usersMapper.updateSex(updatedUserBO);
}
if (type == UserInfoModifyType.BIRTHDAY.type) {
usersMapper.updateBirthday(updatedUserBO);
}
if (type == UserInfoModifyType.LOCATION.type) {
usersMapper.updateLocation(updatedUserBO);
}
if (type == UserInfoModifyType.DESC.type) {
usersMapper.updateDescription(updatedUserBO);
}
if (type == UserInfoModifyType.IMOOCNUM.type) {
if (updatedUserBO.getCanImoocNumBeUpdated() == YesOrNo.NO.type) {
GraceException.display(ResponseStatusEnum.USER_INFO_CANT_UPDATED_IMOOCNUM_ERROR);
}
// 校验唯一性
List<UsersVO> haveImooc = usersMapper.selectByImoocNum(updatedUserBO.getImoocNum());
if (haveImooc != null && !haveImooc.isEmpty()) {
GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_IMOOCNUM_EXIST_ERROR);
}
usersMapper.updateVnum(updatedUserBO);
LambdaUpdateWrapper<Users> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Users::getId, updatedUserBO.getId());
UserInfoModifyType modifyType = UserInfoModifyType.getTypeByValue(type);
switch (modifyType) {
case NICKNAME:
updateWrapper.set(Users::getNickname, updatedUserBO.getNickname());
break;
case SEX:
updateWrapper.set(Users::getSex, updatedUserBO.getSex());
break;
case BIRTHDAY:
updateWrapper.set(Users::getBirthday, updatedUserBO.getBirthday());
break;
case LOCATION:
updateWrapper.set(Users::getCountry, updatedUserBO.getCountry())
.set(Users::getProvince, updatedUserBO.getProvince())
.set(Users::getCity, updatedUserBO.getCity())
.set(Users::getDistrict, updatedUserBO.getDistrict());
break;
case DESC:
updateWrapper.set(Users::getDescription, updatedUserBO.getDescription());
break;
case IMOOCNUM:
if (updatedUserBO.getCanImoocNumBeUpdated() == YesOrNo.NO.type) {
GraceException.display(ResponseStatusEnum.USER_INFO_CANT_UPDATED_IMOOCNUM_ERROR);
}
// 校验唯一性
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Users::getImoocNum, updatedUserBO.getImoocNum());
if (usersMapper.selectCount(queryWrapper) > 0) {
GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_IMOOCNUM_EXIST_ERROR);
}
updateWrapper.set(Users::getImoocNum, updatedUserBO.getImoocNum());
break;
default:
break;
}
usersMapper.update(null, updateWrapper);
return getUser(updatedUserBO.getId());
// Example example = new Example(Users.class);
// Example.Criteria criteria = example.createCriteria();
// if (type == UserInfoModifyType.NICKNAME.type) {
// criteria.andEqualTo("nickname", updatedUserBO.getNickname());
// Users user = usersMapper.selectOneByExample(example);
// if (user != null) {
// GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_NICKNAME_EXIST_ERROR);
// }
// }
//
// if (type == UserInfoModifyType.IMOOCNUM.type) {
// criteria.andEqualTo("imoocNum", updatedUserBO.getImoocNum());
// Users user = usersMapper.selectOneByExample(example);
// if (user != null) {
// GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_NICKNAME_EXIST_ERROR);
// }
//
// Users tempUser = getUser(updatedUserBO.getId());
// if (tempUser.getCanImoocNumBeUpdated() == YesOrNo.NO.type) {
// GraceException.display(ResponseStatusEnum.USER_INFO_CANT_UPDATED_IMOOCNUM_ERROR);
// }
//
// updatedUserBO.setCanImoocNumBeUpdated(YesOrNo.NO.type);
// }
//
// return updateUserInfo(updatedUserBO);
}
@Transactional(rollbackFor = RuntimeException.class)
@Override
public Map<String, Object> createUserNew(String mobile) {
// 获得全局唯一主键
String userId = sid.nextShort();
// 创建短视频系统账号
Users user = new Users();
user.setId(userId);
user.setPassword(passwordEncoder.encode(mobile));
@ -218,15 +189,12 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService {
user.setDescription("这家伙很懒,什么都没留下~");
user.setBgImg("");
user.setCanImoocNumBeUpdated(YesOrNo.YES.type);
// user.setCreatedTime(new Date());
// user.setUpdatedTime(new Date());
int row = usersMapper.inset(user);
int row = usersMapper.insert(user);
if (row > 0) {
Map<String, Object> result = Maps.newHashMap();
result.put("user", user);
// 创建商城系统账号,获取商城系统token
String url = "http://localhost:8888/buyer/passport/member/registerFromTik";
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
param.add("userName", mobile);
@ -328,104 +296,25 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService {
@Override
public List<UsersVO> searchByNickname(String nickname, Integer page, Integer pageSize, String currentUserId) {
try {
PageHelper.startPage(page, pageSize);
List<UsersVO> userList = usersMapper.searchByNickname(nickname);
Page<Users> pageParam = new Page<>(page, pageSize);
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(Users::getNickname, nickname);
if(currentUserId.isEmpty()){
return userList;
}
Page<Users> usersPage = usersMapper.selectPage(pageParam, queryWrapper);
List<Users> usersList = usersPage.getRecords();
// 提取模糊查询出的用户 ID 列表
List<String> vlogerIds = userList.stream().map(UsersVO::getId).collect(Collectors.toList());
log.info("用户列表" + vlogerIds);
if (vlogerIds.isEmpty()) {
log.info("没有查询到用户 ID跳过关注关系查询");
return userList;
}
//
userList.forEach(usersVO -> {
// 当前用户是否关注博主
Boolean isFollowed = fansService.queryDoIFollowVloger(currentUserId,usersVO.getId());
// 我的粉丝总数
String myFansCountsStr = redis.get(REDIS_MY_FANS_COUNTS + ":" + usersVO.getId());
// 获赞总数
String likedVlogerCountsStr = redis.get(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + usersVO.getId());
List<UsersVO> usersVOList = usersList.stream().map(u -> {
UsersVO userVO = new UsersVO();
BeanUtils.copyProperties(u, userVO);
int fansCount = 0;
int likeCount = 0;
if (myFansCountsStr != null) {
try {
fansCount = Integer.parseInt(myFansCountsStr);
} catch (NumberFormatException e) {
// 可选记录日志或处理异常
fansCount = 0;
}
}
if (likedVlogerCountsStr != null) {
try {
likeCount = Integer.parseInt(likedVlogerCountsStr);
} catch (NumberFormatException e) {
// 可选记录日志或处理异常
likeCount = 0;
}
}
// 查询当前用户是否关注了该用户
boolean doIFollowVloger = fansService.queryDoIFollowVloger(currentUserId, u.getId());
userVO.setFollowed(doIFollowVloger);
usersVO.setMyFansCounts(fansCount);
usersVO.setTotalLikeMeCounts(likeCount);
return userVO;
}).collect(Collectors.toList());
if (isFollowed) {
String relationship = redis.get(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + usersVO.getId() + ":" + currentUserId);
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
usersVO.setFollowStatus("互相关注");
}else {
usersVO.setFollowStatus("已关注");
}
} else {
usersVO.setFollowStatus("未关注");
}
});
return userList;
//
//
//
//
// // 获取当前用户关注的
// List<java.util.Map<String, Object>> followedRelations = fansMapper.getFollowedVlogerIds(currentUserId, vlogerIds);
// log.info("获取当前用户关注的: {}", followedRelations);
// // 构建 vlogerId is_fan_friend_of_mine 的映射
// java.util.Map<String, Integer> relationMap = followedRelations.stream()
// .filter(Objects::nonNull) // 排除整个 map null 的情况
// .collect(Collectors.toMap(
// map -> (String) map.get("vloger_id"),
// map -> (Integer) map.get("is_fan_friend_of_mine")
// ));
// log.info("构造的 relationMap: {}", relationMap);
// Set<String> followedVlogerIds = relationMap.keySet();
//
// // 遍历设置每个用户的关注状态及展示状态
// userList.forEach(usersVO -> {
// boolean isFollowed = followedVlogerIds.contains(usersVO.getId());
// usersVO.setIsFollowed(isFollowed);
// if (isFollowed) {
// Integer isFanFriendOfMine = relationMap.get(usersVO.getId());
// if (isFanFriendOfMine != null && isFanFriendOfMine == 1) {
// usersVO.setFollowStatus("互相关注"); // 假设 UsersVO 有此方法设置展示状态
// } else {
// usersVO.setFollowStatus("已关注");
// }
// } else {
// usersVO.setFollowStatus("未关注");
// }
// });
//
// log.info("用户列表" + userList);
// return userList;
} catch (Exception e) {
log.error("搜索用户时发生异常", e);
throw new RuntimeException("搜索用户时发生异常", e);
}
return usersVOList;
}
}

View File

@ -1,10 +1,11 @@
package com.wzj.soopin.content.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper;
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
import com.wzj.soopin.content.domain.bo.VlogBO;
import com.wzj.soopin.content.domain.po.MyLikedVlog;
@ -21,246 +22,148 @@ import com.wzj.soopin.content.service.VlogService;
import com.wzj.soopin.content.utils.PagedGridResult;
import com.wzj.soopin.content.utils.Sid;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
@Autowired
private VlogMapper vlogMapper;
@Autowired
private VlogMapperCustom vlogMapperCustom;
@Autowired
private MyLikedVlogMapper myLikedVlogMapper;
@Autowired
private FansService fansService;
@Autowired
private MsgService msgService;
@Autowired
private Sid sid;
@Transactional
@Override
public void updateVlogStatus(String fileId,Integer status,String reason) {
// Example example = new Example(Vlog.class);
// Example.Criteria criteria = example.createCriteria();
// criteria.andEqualTo("fileId", fileId);
//
// Vlog pendingVlog = new Vlog();
// pendingVlog.setStatus(status);
// pendingVlog.setReason(reason);
// vlogMapper.updateVlogStatus(fileId, example);
// 示例更新 vlog
Map<String, Object> updateFields = new HashMap<>();
updateFields.put("status", status);
updateFields.put("reason", reason);
vlogMapper.dynamicUpdate(
"file_id", // 主键字段名
fileId, // 主键值
updateFields // 更新字段
);
public void updateVlogStatus(String fileId, Integer status, String reason) {
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Vlog::getFileId, fileId)
.set(Vlog::getStatus, status)
.set(Vlog::getReason, reason);
vlogMapper.update(null, updateWrapper);
}
@Transactional
@Override
public void updateVlogFirstImg(String fileId,String url,String fileUrl) {
// Example example = new Example(Vlog.class);
// Example.Criteria criteria = example.createCriteria();
// criteria.andEqualTo("fileId", fileId);
// Vlog pendingVlog = new Vlog();
// pendingVlog.setFirstFrameImg(url);
// pendingVlog.setUrl(fileUrl);
//
// vlogMapper.updateByExampleSelective(pendingVlog, example);
// 示例更新 vlog
Map<String, Object> updateFields = new HashMap<>();
updateFields.put("first_frame_img", url);
updateFields.put("url", fileUrl);
vlogMapper.dynamicUpdate(
"file_id", // 主键字段名
fileId, // 主键值
updateFields // 更新字段
);
public void updateVlogFirstImg(String fileId, String url, String fileUrl) {
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Vlog::getFileId, fileId)
.set(Vlog::getFirstFrameImg, url)
.set(Vlog::getUrl, fileUrl);
vlogMapper.update(null, updateWrapper);
}
@Transactional
@Override
public void createVlog(VlogBO vlogBO) {
// String vid = sid.nextShort();
//
// Vlog vlog = new Vlog();
// BeanUtils.copyProperties(vlogBO, vlog);
//
// vlog.setId(vid);
//
// vlog.setLikeCounts(0);
// vlog.setCommentsCounts(0);
// vlog.setStatus(0);
// vlog.setIsPrivate(YesOrNo.NO.type);
//
// vlog.setCreatedTime(new Date());
// vlog.setUpdatedTime(new Date());
//
// vlogMapper.insert(vlog);
String vid = sid.nextShort();
Map<String, Object> vlog = new HashMap<>();
Vlog vlog = new Vlog();
BeanUtils.copyProperties(vlogBO, vlog);
vlog.put("id", vid);
vlog.put("vloger_id", vlogBO.getVlogerId());
vlog.put("url", vlogBO.getUrl());
vlog.put("title", vlogBO.getTitle());
vlog.put("width", vlogBO.getWidth());
vlog.put("height", vlogBO.getHeight());
vlog.put("is_private", YesOrNo.NO.type);
vlog.put("created_time", new Date());
vlog.put("updated_time", new Date());
vlog.put("city_code", vlogBO.getCityCode());
vlog.put("file_id", vlogBO.getFileId());
vlog.put("first_frame_img", vlogBO.getFirstFrameImg());
vlog.setId(vid);
vlog.setLikeCounts(0);
vlog.setCommentsCounts(0);
vlog.setStatus(0);
vlog.setIsPrivate(YesOrNo.NO.type);
vlogMapper.dynamicInsert(vlog);
//多条导入
// List<Map<String, Object>> vlogList = new ArrayList<>();
//
// Map<String, Object> vlog1 = new HashMap<>();
// vlog1.put("id", sid.nextShort());
// vlog1.put("title", "视频1");
// vlogList.add(vlog1);
//
// Map<String, Object> vlog2 = new HashMap<>();
// vlog2.put("id", sid.nextShort());
// vlog2.put("title", "视频2");
// vlogList.add(vlog2);
//
// vlogMapper.dynamicBatchInsert(vlogList);
vlogMapper.insert(vlog);
}
@Override
public PagedGridResult getIndexVlogList(String userId,
String search,
String cityCode,
String status,
Integer page,
Integer pageSize) {
public PagedGridResult getIndexVlogList(String userId, String search, String cityCode, String status, Integer page, Integer pageSize) {
Page<Vlog> pageParam = new Page<>(page, pageSize);
LambdaQueryWrapper<Vlog> queryWrapper = new LambdaQueryWrapper<>();
PageHelper.startPage(page, pageSize);
Map<String, Object> map = new HashMap<>();
if (StringUtils.isNotBlank(search)) {
map.put("search", search);
queryWrapper.like(Vlog::getTitle, search);
}
if (StringUtils.isNotBlank(cityCode)) {
map.put("cityCode", cityCode);
queryWrapper.eq(Vlog::getCityCode, cityCode);
}
if (StringUtils.isNotBlank(status)) {
map.put("status", status);
queryWrapper.eq(Vlog::getStatus, status);
}
if(StringUtils.isNotBlank(userId)){
// 从redis中获取举报信息
// Handle blocked videos
if (StringUtils.isNotBlank(userId)) {
String redisKey = REDIS_VIDEO_BLOCK + ":" + userId;
Boolean hasKey = redis.keyIsExist(redisKey);
if(hasKey){
if (redis.keyIsExist(redisKey)) {
List<String> blockVdList = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
List<String> reports = redis.lrange(redisKey, 0, -1);
for (String report : reports) {
try {
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// 处理举报信息
String vlogId = (String) reportMap.get("vlogId");
blockVdList.add(vlogId);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
map.put("blockVd",blockVdList);
if (!blockVdList.isEmpty()) {
queryWrapper.notIn(Vlog::getId, blockVdList);
}
}
}
if(StringUtils.isNotBlank(userId)){
// 从redis中获取拉黑信息
// Handle blocked users
if (StringUtils.isNotBlank(userId)) {
String redisKey = REDIS_USER_BLOCK + ":" + userId;
Boolean hasKey = redis.keyIsExist(redisKey);
if(hasKey){
if (redis.keyIsExist(redisKey)) {
List<String> blockUserList = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
List<String> reports = redis.lrange(redisKey, 0, -1);
for (String report : reports) {
try {
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// 处理拉黑信息
String vlogerId = (String) reportMap.get("vlogerId");
blockUserList.add(vlogerId);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
map.put("blockUser",blockUserList);
if (!blockUserList.isEmpty()) {
queryWrapper.notIn(Vlog::getVlogerId, blockUserList);
}
}
}
List<IndexVlogVO> list = vlogMapperCustom.getIndexVlogList(map);
Page<Vlog> vlogPage = vlogMapper.selectPage(pageParam, queryWrapper);
List<Vlog> vlogList = vlogPage.getRecords();
for (IndexVlogVO v : list) {
String vlogerId = v.getVlogerId();
String vlogId = v.getVlogId();
List<IndexVlogVO> voList = vlogList.stream().map(v -> {
IndexVlogVO vo = new IndexVlogVO();
BeanUtils.copyProperties(v, vo);
if (StringUtils.isNotBlank(userId)) {
// 用户是否关注该博主
boolean doIFollowVloger = fansService.queryDoIFollowVloger(userId, vlogerId);
v.setDoIFollowVloger(doIFollowVloger);
// 判断当前用户是否点赞过视频
v.setDoILikeThisVlog(doILikeVlog(userId, vlogId));
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getVlogerId()));
vo.setDoILikeThisVlog(doILikeVlog(userId, v.getId()));
}
// 获得当前视频被点赞过的总数
v.setLikeCounts(getVlogBeLikedCounts(vlogId));
// 评论数
v.setCommentsCounts(getVlogComment(vlogId));
}
vo.setLikeCounts(getVlogBeLikedCounts(v.getId()));
vo.setCommentsCounts(getVlogComment(v.getId()));
// return list;
return setterPagedGrid(list, page);
return vo;
}).collect(Collectors.toList());
return setterPagedGrid(voList, page);
}
private IndexVlogVO setterVO(IndexVlogVO v, String userId) {
String vlogerId = v.getVlogerId();
String vlogId = v.getVlogId();
if (StringUtils.isNotBlank(userId)) {
// 用户是否关注该博主
boolean doIFollowVloger = fansService.queryDoIFollowVloger(userId, vlogerId);
v.setDoIFollowVloger(doIFollowVloger);
// 判断当前用户是否点赞过视频
v.setDoILikeThisVlog(doILikeVlog(userId, vlogId));
}
// 获得当前视频被点赞过的总数
v.setLikeCounts(getVlogBeLikedCounts(vlogId));
return v;
}
//
@Override
public Integer getVlogBeLikedCounts(String vlogId) {
String countsStr = redis.get(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId);
@ -278,351 +181,177 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
return Integer.valueOf(countsStr);
}
//
private boolean doILikeVlog(String myId, String vlogId) {
String doILike = redis.get(REDIS_USER_LIKE_VLOG + ":" + myId + ":" + vlogId);
boolean isLike = false;
if (StringUtils.isNotBlank(doILike) && doILike.equalsIgnoreCase("1")) {
isLike = true;
}
return isLike;
return StringUtils.isNotBlank(doILike) && doILike.equalsIgnoreCase("1");
}
//
@Override
public IndexVlogVO getVlogDetailById(String userId, String vlogId) {
Map<String, Object> map = new HashMap<>();
map.put("vlogId", vlogId);
List<IndexVlogVO> list = vlogMapperCustom.getVlogDetailById(map);
if (list != null && list.size() > 0 && !list.isEmpty()) {
IndexVlogVO vlogVO = list.get(0);
// return vlogVO;
return setterVO(vlogVO, userId);
Vlog vlog = vlogMapper.selectById(vlogId);
if (vlog == null) {
return null;
}
return null;
IndexVlogVO vo = new IndexVlogVO();
BeanUtils.copyProperties(vlog, vo);
if (StringUtils.isNotBlank(userId)) {
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, vlog.getVlogerId()));
vo.setDoILikeThisVlog(doILikeVlog(userId, vlogId));
}
vo.setLikeCounts(getVlogBeLikedCounts(vlogId));
vo.setCommentsCounts(getVlogComment(vlogId));
return vo;
}
@Transactional
@Override
public void changeToPrivateOrPublic(String userId,
String vlogId,
Integer yesOrNo) {
// Example example = new Example(Vlog.class);
// Example.Criteria criteria = example.createCriteria();
// criteria.andEqualTo("id", vlogId);
// criteria.andEqualTo("vlogerId", userId);
//
// Vlog pendingVlog = new Vlog();
// pendingVlog.setIsPrivate(yesOrNo);
Map<String, Object> updates = new HashMap<>();
updates.put("is_private", 2);
Map<String, Object> conditions = new HashMap<>();
conditions.put("id", vlogId);
conditions.put("vloger_id", userId);
vlogMapper.updateVlogByConditions(
updates,
conditions
);
public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) {
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Vlog::getId, vlogId)
.eq(Vlog::getVlogerId, userId)
.set(Vlog::getIsPrivate, yesOrNo);
vlogMapper.update(null, updateWrapper);
}
@Transactional
@Override
public void changeVlogStatus(String userId,
String vlogId,
Integer status) {
Map<String, Object> updates = new HashMap<>();
updates.put("status", status);
Map<String, Object> conditions = new HashMap<>();
conditions.put("id", vlogId);
conditions.put("vloger_id", userId);
vlogMapper.updateVlogByConditions(
updates,
conditions
);
public void changeVlogStatus(String userId, String vlogId, Integer status) {
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Vlog::getId, vlogId)
.eq(Vlog::getVlogerId, userId)
.set(Vlog::getStatus, status);
vlogMapper.update(null, updateWrapper);
}
@Override
public PagedGridResult queryMyVlogList(String userId,
String myId,
Integer page,
Integer pageSize,
Integer yesOrNo) {
public PagedGridResult queryMyVlogList(String userId, String myId, Integer page, Integer pageSize, Integer yesOrNo) {
Page<Vlog> pageParam = new Page<>(page, pageSize);
LambdaQueryWrapper<Vlog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Vlog::getVlogerId, userId)
.eq(Vlog::getIsPrivate, yesOrNo);
Page<Vlog> vlogPage = vlogMapper.selectPage(pageParam, queryWrapper);
List<Vlog> vlogList = vlogPage.getRecords();
PageHelper.startPage(page, pageSize);
Map<String, Object> map = new HashMap<>();
// if (StringUtils.isNotBlank(search)) {
// map.put("search", search);
// }
// if (StringUtils.isNotBlank(cityCode)) {
// map.put("cityCode", cityCode);
// }
// if (StringUtils.isNotBlank(status)) {
// map.put("status", status);
// }
List<IndexVlogVO> voList = vlogList.stream().map(v -> {
IndexVlogVO vo = new IndexVlogVO();
BeanUtils.copyProperties(v, vo);
map.put("vlogerId", userId);
if (StringUtils.isNotBlank(myId)) {
// 从redis中获取举报信息
String redisKeyRp = REDIS_VIDEO_BLOCK + ":" + myId;
Boolean hasKeyRp = redis.keyIsExist(redisKeyRp);
if(hasKeyRp){
List<String> blockVdList = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
List<String> reports = redis.lrange(redisKeyRp, 0, -1); // 查询用户的所有举报记录
for (String report : reports) {
try {
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// 处理举报信息
String vlogId = (String) reportMap.get("vlogId");
blockVdList.add(vlogId);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
map.put("blockVd",blockVdList);
if (StringUtils.isNotBlank(myId)) {
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(myId, v.getVlogerId()));
vo.setDoILikeThisVlog(doILikeVlog(myId, v.getId()));
}
}
vo.setLikeCounts(getVlogBeLikedCounts(v.getId()));
vo.setCommentsCounts(getVlogComment(v.getId()));
List<IndexVlogVO> list = vlogMapper.selectMyPublic(map);
return vo;
}).collect(Collectors.toList());
for (IndexVlogVO v : list) {
String vlogId = v.getVlogId();
// 获得当前视频被点赞过的总数
v.setLikeCounts(getVlogBeLikedCounts(vlogId));
// 评论数
v.setCommentsCounts(getVlogComment(vlogId));
}
return setterPagedGrid(list, page);
return setterPagedGrid(voList, page);
}
@Transactional
@Override
public void userLikeVlog(String userId, String vlogId) {
String rid = sid.nextShort();
MyLikedVlog likedVlog = new MyLikedVlog();
likedVlog.setId(rid);
likedVlog.setVlogId(vlogId);
likedVlog.setUserId(userId);
likedVlog.setCreatedTime(new Date());
myLikedVlogMapper.insert(likedVlog);
// System.out.println(vlogId);
//
// Vlog vlog = new Vlog();
// vlog.setId(vlogId);
// Vlog vlog1 = vlogMapper.selectOne(vlog);
// System.out.println(vlog1.toString());
//// System.out.println(vlog1.getCreatedTime());
// Vlog vlog2 = vlogMapper.selectByPrimaryKey(vlogId);
// System.out.println(vlog2.toString());
// Vlog vlog1 = vlogMapper.selectOne(new Vlog().setId(vlogId));
// Vlog vlog = vlog1
// System.out.println(vlog);
// 系统消息点赞短视频
Vlog vlog = this.getVlog(vlogId);
Map msgContent = new HashMap();
msgContent.put("vlogId", vlogId);
msgContent.put("vlogCover", vlog.getCover());
msgService.createMsg(userId,
vlog.getVlogerId(),
MessageEnum.LIKE_VLOG.type,
msgContent);
// 我喜欢的视频总数累加
redis.increment(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + userId, 1);
// 视频被喜欢的总数累加
redis.increment(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1);
// 保存用户和视频的喜欢关系
redis.set(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId, "1");
}
//
@Override
public Vlog getVlog(String id) {
// Vlog vlog = vlogMapper.selectByPrimaryKey(id);
// return vlog;
Map<String, Object> map = new HashMap<>();
map.put("vlogId", id);
List<IndexVlogVO> list = vlogMapper.getVlogDetailFromId(map);
if (list != null && list.size() > 0 && !list.isEmpty()) {
IndexVlogVO result = list.get(0);
Vlog vlogVO = new Vlog();
BeanUtils.copyProperties(result, vlogVO);
return vlogVO;
}
return null;
return vlogMapper.selectById(id);
}
@Transactional
@Override
public void flushCounts(String vlogId, Integer counts) {
//
// Vlog vlog = new Vlog();
// vlog.setId(vlogId);
// vlog.setLikeCounts(counts);
// int i = vlogMapper.updateByPrimaryKeySelective(vlog);
// 示例更新 vlog
Map<String, Object> updateFields = new HashMap<>();
updateFields.put("like_counts", counts);
vlogMapper.dynamicUpdate(
"id", // 主键字段名
vlogId, // 主键值
updateFields // 更新字段
);
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Vlog::getId, vlogId)
.set(Vlog::getLikeCounts, counts);
vlogMapper.update(null, updateWrapper);
}
//
@Transactional
@Override
public void userUnLikeVlog(String userId, String vlogId) {
LambdaQueryWrapper<MyLikedVlog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MyLikedVlog::getUserId, userId)
.eq(MyLikedVlog::getVlogId, vlogId);
myLikedVlogMapper.delete(queryWrapper);
MyLikedVlog likedVlog = new MyLikedVlog();
likedVlog.setVlogId(vlogId);
likedVlog.setUserId(userId);
myLikedVlogMapper.deleteById(likedVlog);
// 我喜欢的视频总数累减
redis.decrement(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + userId, 1);
// 视频被喜欢的总数累减
redis.decrement(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId, 1);
// 删除用户和视频的喜欢关系
redis.del(REDIS_USER_LIKE_VLOG + ":" + userId + ":" + vlogId);
}
@Override
public PagedGridResult getMyLikedVlogList(String userId,
String myId,
Integer page,
Integer pageSize) {
PageHelper.startPage(page, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("userId", userId);
String useWho;
if (StringUtils.isNotBlank(myId)) {
useWho = myId;
}else{
useWho = userId;
}
// 从redis中获取拉黑信息
String redisKey = REDIS_USER_BLOCK + ":" + useWho;
Boolean hasKey = redis.keyIsExist(redisKey);
if(hasKey){
List<String> blockUserList = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
public PagedGridResult getMyLikedVlogList(String userId, String myId, Integer page, Integer pageSize) {
Page<MyLikedVlog> pageParam = new Page<>(page, pageSize);
LambdaQueryWrapper<MyLikedVlog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MyLikedVlog::getUserId, userId);
for (String report : reports) {
try {
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// 处理拉黑信息
String vlogerId = (String) reportMap.get("vlogerId");
blockUserList.add(vlogerId);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
Page<MyLikedVlog> likedPage = myLikedVlogMapper.selectPage(pageParam, queryWrapper);
List<MyLikedVlog> likedList = likedPage.getRecords();
List<IndexVlogVO> voList = likedList.stream().map(liked -> {
Vlog vlog = vlogMapper.selectById(liked.getVlogId());
if (vlog == null) {
return null;
}
map.put("blockUser",blockUserList);
System.out.println(blockUserList);
}
// 从redis中获取举报信息
String redisKeyRp = REDIS_VIDEO_BLOCK + ":" + useWho;
Boolean hasKeyRp = redis.keyIsExist(redisKeyRp);
if(hasKeyRp){
List<String> blockVdList = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
List<String> reports = redis.lrange(redisKeyRp, 0, -1); // 查询用户的所有举报记录
for (String report : reports) {
try {
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// 处理举报信息
String vlogId = (String) reportMap.get("vlogId");
blockVdList.add(vlogId);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
map.put("blockVd",blockVdList);
}
List<IndexVlogVO> list = vlogMapperCustom.getMyLikedVlogList(map);
return setterPagedGrid(list, page);
}
@Override
public PagedGridResult getMyFollowVlogList(String myId,
Integer page,
Integer pageSize) {
PageHelper.startPage(page, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
List<IndexVlogVO> list = vlogMapperCustom.getMyFollowVlogList(map);
for (IndexVlogVO v : list) {
String vlogerId = v.getVlogerId();
String vlogId = v.getVlogId();
IndexVlogVO vo = new IndexVlogVO();
BeanUtils.copyProperties(vlog, vo);
if (StringUtils.isNotBlank(myId)) {
// 用户必定关注该博主
v.setDoIFollowVloger(true);
// 判断当前用户是否点赞过视频
v.setDoILikeThisVlog(doILikeVlog(myId, vlogId));
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(myId, vlog.getVlogerId()));
vo.setDoILikeThisVlog(doILikeVlog(myId, vlog.getId()));
}
// 获得当前视频被点赞过的总数
v.setLikeCounts(getVlogBeLikedCounts(vlogId));
}
vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId()));
vo.setCommentsCounts(getVlogComment(vlog.getId()));
return setterPagedGrid(list, page);
return vo;
}).filter(Objects::nonNull).collect(Collectors.toList());
return setterPagedGrid(voList, page);
}
//
@Override
public PagedGridResult getMyFriendVlogList(String myId,
Integer page,
Integer pageSize) {
PageHelper.startPage(page, pageSize);
public PagedGridResult getMyFollowVlogList(String myId, Integer page, Integer pageSize) {
Page<Vlog> pageParam = new Page<>(page, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
List<IndexVlogVO> list = vlogMapperCustom.getMyFriendVlogList(map);
for (IndexVlogVO v : list) {
String vlogerId = v.getVlogerId();
String vlogId = v.getVlogId();
if (StringUtils.isNotBlank(myId)) {
// 用户必定关注该博主
v.setDoIFollowVloger(true);
// 判断当前用户是否点赞过视频
v.setDoILikeThisVlog(doILikeVlog(myId, vlogId));
}
// 获得当前视频被点赞过的总数
v.setLikeCounts(getVlogBeLikedCounts(vlogId));
}
return setterPagedGrid(list, page);
List<IndexVlogVO> voList = vlogMapperCustom.getMyFollowVlogList(map);
return setterPagedGrid(voList, page);
}
// @Override
// public Vlog getVlog(String id) {
// return null;
// }
@Override
public PagedGridResult getMyFriendVlogList(String myId, Integer page, Integer pageSize) {
Page<Vlog> pageParam = new Page<>(page, pageSize);
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
List<IndexVlogVO> voList = vlogMapperCustom.getMyFriendVlogList(map);
return setterPagedGrid(voList, page);
}
}