diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/UsersVO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/UsersVO.java index dafb3d942..683da357d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/UsersVO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/UsersVO.java @@ -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; // 关注状态 } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java index 454f105b0..7dbf58e78 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/UserInfoModifyType.java @@ -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; + } } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UserMemberMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UserMemberMapper.java index 5be9cb482..966da5139 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UserMemberMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UserMemberMapper.java @@ -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 { +public interface UserMemberMapper extends BaseMapperPlus { Users getUserByMemberId(String memberId); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java index 830fa0ca0..7c69a0e8a 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/UsersMapper.java @@ -36,4 +36,6 @@ public interface UsersMapper extends BaseMapper { Users selectByPrimaryKey(String userId); void updateByPrimaryKeySelective(Users users); + + int inset(Users user); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java index 7998d65e9..2e5e91ef2 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/mapper/VlogMapper.java @@ -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 { //} @Repository -public interface VlogMapper { +public interface VlogMapper extends BaseMapper { // public List updateVlogStatus(@Param("paramMap") Map map); /** * 通用动态更新方法 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java index 0f83c35f7..e43dc3c9e 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/repository/MessageRepository.java @@ -13,5 +13,7 @@ public interface MessageRepository { // 通过实现Repository,自定义条件查询 List findAllByToUserIdEqualsOrderByCreateTimeDesc(String toUserId, Pageable pageable); + + void save(MessageMO messageMO); // void deleteAllByFromUserIdAndToUserIdAndMsgType(); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java index ebd965733..0901278d5 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/FansService.java @@ -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 queryMyFollows(String myId, - Integer page, - Integer pageSize); + public PagedGridResult queryMyFollows(String myId, + Integer page, + Integer pageSize); /** * 查询我的粉丝列表 */ - public TableDataInfo queryMyFans(String myId, - Integer page, - Integer pageSize); + public PagedGridResult queryMyFans(String myId, + Integer page, + Integer pageSize); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java index b84999163..3dc5f87c2 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java @@ -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 map = new HashMap<>(); map.put("vlogId", vlogId); - - PageHelper.startPage(page, pageSize); - - List list = commentMapperCustom.getCommentList(map); - - for (CommentVO cv:list) { + Page pageParam = new Page<>(page, pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Comment::getVlogId, vlogId); + Page commentPage = commentMapper.selectPage(pageParam, queryWrapper); + List commentList = commentPage.getRecords(); + List 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 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); } } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java index 1eddad537..24d4d8cd1 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/FansServiceImpl.java @@ -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 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 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 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 map = new HashMap<>(); map.put("myId", myId); - PageHelper.startPage(page, pageSize); - + Page pageParam = new Page<>(page, pageSize); List 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 map = new HashMap<>(); map.put("myId", myId); - PageHelper.startPage(page, pageSize); - + Page pageParam = new Page<>(page, pageSize); List list = fansMapperCustom.queryMyFans(map); for (FansVO f : list) { diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java index a89f96eda..e896888cd 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/UserServiceImpl.java @@ -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 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 haveImooc = usersMapper.selectByImoocNum(updatedUserBO.getImoocNum()); - if (haveImooc != null && !haveImooc.isEmpty()) { - GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_IMOOCNUM_EXIST_ERROR); - } - usersMapper.updateVnum(updatedUserBO); + LambdaUpdateWrapper 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 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 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 result = Maps.newHashMap(); result.put("user", user); - // 创建商城系统账号,获取商城系统token String url = "http://localhost:8888/buyer/passport/member/registerFromTik"; MultiValueMap param = new LinkedMultiValueMap<>(); param.add("userName", mobile); @@ -328,104 +296,25 @@ public class UserServiceImpl extends BaseInfoProperties implements UserService { @Override public List searchByNickname(String nickname, Integer page, Integer pageSize, String currentUserId) { - try { - PageHelper.startPage(page, pageSize); - List userList = usersMapper.searchByNickname(nickname); + Page pageParam = new Page<>(page, pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(Users::getNickname, nickname); - if(currentUserId.isEmpty()){ - return userList; - } + Page usersPage = usersMapper.selectPage(pageParam, queryWrapper); + List usersList = usersPage.getRecords(); - // 提取模糊查询出的用户 ID 列表 - List 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 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> followedRelations = fansMapper.getFollowedVlogerIds(currentUserId, vlogerIds); -// log.info("获取当前用户关注的: {}", followedRelations); -// // 构建 vlogerId 到 is_fan_friend_of_mine 的映射 -// java.util.Map 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 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; } } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index 71597778d..0a081db91 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -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 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 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 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 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 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> vlogList = new ArrayList<>(); -// -// Map vlog1 = new HashMap<>(); -// vlog1.put("id", sid.nextShort()); -// vlog1.put("title", "视频1"); -// vlogList.add(vlog1); -// -// Map 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 pageParam = new Page<>(page, pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - PageHelper.startPage(page, pageSize); - - Map 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 blockVdList = new ArrayList<>(); ObjectMapper objectMapper = new ObjectMapper(); - List reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录 + List reports = redis.lrange(redisKey, 0, -1); for (String report : reports) { try { Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); - // 处理举报信息 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 blockUserList = new ArrayList<>(); ObjectMapper objectMapper = new ObjectMapper(); - List reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录 + List reports = redis.lrange(redisKey, 0, -1); for (String report : reports) { try { Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); - // 处理拉黑信息 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 list = vlogMapperCustom.getIndexVlogList(map); + Page vlogPage = vlogMapper.selectPage(pageParam, queryWrapper); + List vlogList = vlogPage.getRecords(); - for (IndexVlogVO v : list) { - String vlogerId = v.getVlogerId(); - String vlogId = v.getVlogId(); + List 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 map = new HashMap<>(); - map.put("vlogId", vlogId); - - List 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 updates = new HashMap<>(); - updates.put("is_private", 2); - Map 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 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 updates = new HashMap<>(); - updates.put("status", status); - Map 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 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 pageParam = new Page<>(page, pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Vlog::getVlogerId, userId) + .eq(Vlog::getIsPrivate, yesOrNo); + Page vlogPage = vlogMapper.selectPage(pageParam, queryWrapper); + List vlogList = vlogPage.getRecords(); - PageHelper.startPage(page, pageSize); - Map 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 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 blockVdList = new ArrayList<>(); - ObjectMapper objectMapper = new ObjectMapper(); - List reports = redis.lrange(redisKeyRp, 0, -1); // 查询用户的所有举报记录 - - for (String report : reports) { - try { - Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); - // 处理举报信息 - 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 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 map = new HashMap<>(); - map.put("vlogId", id); - - List 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 updateFields = new HashMap<>(); - updateFields.put("like_counts", counts); - - vlogMapper.dynamicUpdate( - "id", // 主键字段名 - vlogId, // 主键值 - updateFields // 更新字段 - ); - + LambdaUpdateWrapper 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 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 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 blockUserList = new ArrayList<>(); - ObjectMapper objectMapper = new ObjectMapper(); - List reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录 + public PagedGridResult getMyLikedVlogList(String userId, String myId, Integer page, Integer pageSize) { + Page pageParam = new Page<>(page, pageSize); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MyLikedVlog::getUserId, userId); - for (String report : reports) { - try { - Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); - // 处理拉黑信息 - String vlogerId = (String) reportMap.get("vlogerId"); - blockUserList.add(vlogerId); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } + Page likedPage = myLikedVlogMapper.selectPage(pageParam, queryWrapper); + List likedList = likedPage.getRecords(); + + List 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 blockVdList = new ArrayList<>(); - ObjectMapper objectMapper = new ObjectMapper(); - List reports = redis.lrange(redisKeyRp, 0, -1); // 查询用户的所有举报记录 - - for (String report : reports) { - try { - Map reportMap = objectMapper.readValue(report, new TypeReference>() {}); - // 处理举报信息 - String vlogId = (String) reportMap.get("vlogId"); - blockVdList.add(vlogId); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } - map.put("blockVd",blockVdList); - } - - - List list = vlogMapperCustom.getMyLikedVlogList(map); - - return setterPagedGrid(list, page); - } - - @Override - public PagedGridResult getMyFollowVlogList(String myId, - Integer page, - Integer pageSize) { - PageHelper.startPage(page, pageSize); - - Map map = new HashMap<>(); - map.put("myId", myId); - - List 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 pageParam = new Page<>(page, pageSize); Map map = new HashMap<>(); map.put("myId", myId); - - List 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 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 pageParam = new Page<>(page, pageSize); + Map map = new HashMap<>(); + map.put("myId", myId); + List voList = vlogMapperCustom.getMyFriendVlogList(map); + + return setterPagedGrid(voList, page); + } }