mirror of
https://github.com/zongzibinbin/MallChat.git
synced 2026-03-13 21:53:41 +08:00
实现好友删除和联系人列表
This commit is contained in:
@@ -9,7 +9,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.abin.mallchat.common.user.domain.enums.ApplyReadStatusEnum.READ;
|
||||
import static com.abin.mallchat.common.user.domain.enums.ApplyReadStatusEnum.UNREAD;
|
||||
import static com.abin.mallchat.common.user.domain.enums.ApplyStatusEnum.AGREE;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -36,7 +40,7 @@ public class UserApplyDao extends ServiceImpl<UserApplyMapper, UserApply> {
|
||||
.count();
|
||||
}
|
||||
|
||||
public IPage<UserApply> FriendApplyPage(Long uid, Page page) {
|
||||
public IPage<UserApply> friendApplyPage(Long uid, Page page) {
|
||||
return lambdaQuery()
|
||||
.eq(UserApply::getTargetId, uid)
|
||||
.eq(UserApply::getType, ApplyTypeEnum.ADD_FRIEND.getCode())
|
||||
|
||||
@@ -53,4 +53,13 @@ public class UserDao extends ServiceImpl<UserMapper, User> {
|
||||
.list();
|
||||
|
||||
}
|
||||
|
||||
public List<User> getUserList(List<Long> uids) {
|
||||
return lambdaQuery()
|
||||
.in(User::getId, uids)
|
||||
.orderByDesc(User::getId)
|
||||
.select(User::getId, User::getActiveStatus, User::getLastOptTime)
|
||||
.list();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
package com.abin.mallchat.common.user.dao;
|
||||
|
||||
import com.abin.mallchat.common.common.domain.vo.request.CursorPageBaseReq;
|
||||
import com.abin.mallchat.common.common.domain.vo.response.CursorPageBaseResp;
|
||||
import com.abin.mallchat.common.common.utils.CursorUtils;
|
||||
import com.abin.mallchat.common.user.domain.entity.UserFriend;
|
||||
import com.abin.mallchat.common.user.mapper.UserFriendMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 用户联系人表 服务实现类
|
||||
@@ -27,4 +32,21 @@ public class UserFriendDao extends ServiceImpl<UserFriendMapper, UserFriend> {
|
||||
.eq(UserFriend::getFriendUid, targetUid)
|
||||
.one();
|
||||
}
|
||||
|
||||
public CursorPageBaseResp<UserFriend> getFriendPage(Long uid, CursorPageBaseReq cursorPageBaseReq) {
|
||||
return CursorUtils.getCursorPageByMysql(this, cursorPageBaseReq,
|
||||
wrapper -> wrapper.eq(UserFriend::getUid, uid), UserFriend::getId);
|
||||
}
|
||||
|
||||
public List<UserFriend> getUserFriend(Long uid, Long friendUid) {
|
||||
return lambdaQuery()
|
||||
.eq(UserFriend::getUid, uid)
|
||||
.eq(UserFriend::getFriendUid, friendUid)
|
||||
.or()
|
||||
.eq(UserFriend::getFriendUid, uid)
|
||||
.eq(UserFriend::getUid, friendUid)
|
||||
.select(UserFriend::getId)
|
||||
.list();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.abin.mallchat.custom.chat.service.adapter;
|
||||
|
||||
import cn.hutool.core.lang.Pair;
|
||||
import com.abin.mallchat.common.user.domain.entity.User;
|
||||
import com.abin.mallchat.common.user.domain.entity.UserFriend;
|
||||
import com.abin.mallchat.common.user.domain.enums.ChatActiveStatusEnum;
|
||||
import com.abin.mallchat.common.user.service.cache.UserCache;
|
||||
import com.abin.mallchat.custom.chat.domain.vo.response.ChatMemberResp;
|
||||
@@ -10,6 +12,8 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -32,4 +36,18 @@ public class MemberAdapter {
|
||||
return resp;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static List<ChatMemberResp> buildMember(List<UserFriend> list, List<User> userList) {
|
||||
Map<Long, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user));
|
||||
return list.stream().map(userFriend -> {
|
||||
ChatMemberResp resp = new ChatMemberResp();
|
||||
resp.setUid(userFriend.getFriendUid());
|
||||
User user = userMap.get(userFriend.getFriendUid());
|
||||
if (Objects.nonNull(user)) {
|
||||
resp.setActiveStatus(user.getActiveStatus());
|
||||
resp.setLastOptTime(user.getLastOptTime());
|
||||
}
|
||||
return resp;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,8 +66,8 @@ public class FriendController {
|
||||
@DeleteMapping()
|
||||
@ApiOperation("删除好友")
|
||||
public ApiResult<Void> delete(@Valid @RequestBody FriendDeleteReq request) {
|
||||
//todo
|
||||
Long uid = RequestHolder.get().getUid();
|
||||
friendService.deleteFriend(uid, request.getTargetUid());
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
@@ -94,10 +94,9 @@ public class FriendController {
|
||||
|
||||
@PutMapping("/page")
|
||||
@ApiOperation("联系人列表")
|
||||
public ApiResult<CursorPageBaseResp<ChatMemberResp>> applyApprove(@Valid CursorPageBaseReq request) {
|
||||
//todo
|
||||
public ApiResult<CursorPageBaseResp<ChatMemberResp>> friendList(@Valid CursorPageBaseReq request) {
|
||||
Long uid = RequestHolder.get().getUid();
|
||||
return ApiResult.success();
|
||||
return ApiResult.success(friendService.friendList(uid, request));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package com.abin.mallchat.custom.user.service;
|
||||
|
||||
import com.abin.mallchat.common.common.domain.vo.request.CursorPageBaseReq;
|
||||
import com.abin.mallchat.common.common.domain.vo.request.PageBaseReq;
|
||||
import com.abin.mallchat.common.common.domain.vo.response.CursorPageBaseResp;
|
||||
import com.abin.mallchat.common.common.domain.vo.response.PageBaseResp;
|
||||
import com.abin.mallchat.custom.chat.domain.vo.response.ChatMemberResp;
|
||||
import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendApplyReq;
|
||||
import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendApproveReq;
|
||||
import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendCheckReq;
|
||||
@@ -57,4 +60,14 @@ public interface FriendService {
|
||||
* @param request 请求
|
||||
*/
|
||||
void applyApprove(Long uid, FriendApproveReq request);
|
||||
|
||||
/**
|
||||
* 删除好友
|
||||
*
|
||||
* @param uid uid
|
||||
* @param friendUid 朋友uid
|
||||
*/
|
||||
void deleteFriend(Long uid, Long friendUid);
|
||||
|
||||
CursorPageBaseResp<ChatMemberResp> friendList(Long uid, CursorPageBaseReq request);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
package com.abin.mallchat.custom.user.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.abin.mallchat.common.chat.dao.RoomFriendDao;
|
||||
import com.abin.mallchat.common.chat.domain.entity.RoomFriend;
|
||||
import com.abin.mallchat.common.chat.service.ContactService;
|
||||
import com.abin.mallchat.common.chat.service.RoomService;
|
||||
import com.abin.mallchat.common.common.annotation.RedissonLock;
|
||||
import com.abin.mallchat.common.common.domain.vo.request.CursorPageBaseReq;
|
||||
import com.abin.mallchat.common.common.domain.vo.request.PageBaseReq;
|
||||
import com.abin.mallchat.common.common.domain.vo.response.CursorPageBaseResp;
|
||||
import com.abin.mallchat.common.common.domain.vo.response.PageBaseResp;
|
||||
import com.abin.mallchat.common.common.event.UserApplyEvent;
|
||||
import com.abin.mallchat.common.common.utils.AssertUtil;
|
||||
import com.abin.mallchat.common.user.dao.UserApplyDao;
|
||||
import com.abin.mallchat.common.user.dao.UserDao;
|
||||
import com.abin.mallchat.common.user.dao.UserFriendDao;
|
||||
import com.abin.mallchat.common.user.domain.entity.User;
|
||||
import com.abin.mallchat.common.user.domain.entity.UserApply;
|
||||
import com.abin.mallchat.common.user.domain.entity.UserFriend;
|
||||
import com.abin.mallchat.custom.chat.domain.vo.response.ChatMemberResp;
|
||||
import com.abin.mallchat.custom.chat.service.ChatService;
|
||||
import com.abin.mallchat.custom.chat.service.adapter.MemberAdapter;
|
||||
import com.abin.mallchat.custom.chat.service.adapter.MessageAdapter;
|
||||
import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendApplyReq;
|
||||
import com.abin.mallchat.custom.user.domain.vo.request.friend.FriendApproveReq;
|
||||
@@ -23,7 +28,6 @@ import com.abin.mallchat.custom.user.domain.vo.response.friend.FriendApplyResp;
|
||||
import com.abin.mallchat.custom.user.domain.vo.response.friend.FriendCheckResp;
|
||||
import com.abin.mallchat.custom.user.domain.vo.response.friend.FriendUnreadResp;
|
||||
import com.abin.mallchat.custom.user.service.FriendService;
|
||||
import com.abin.mallchat.custom.user.service.WebSocketService;
|
||||
import com.abin.mallchat.custom.user.service.adapter.FriendAdapter;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.google.common.collect.Lists;
|
||||
@@ -50,9 +54,6 @@ import static com.abin.mallchat.common.user.domain.enums.ApplyStatusEnum.AGREE;
|
||||
@Service
|
||||
public class FriendServiceImpl implements FriendService {
|
||||
|
||||
@Autowired
|
||||
private WebSocketService webSocketService;
|
||||
|
||||
@Autowired
|
||||
private UserFriendDao userFriendDao;
|
||||
@Autowired
|
||||
@@ -60,14 +61,15 @@ public class FriendServiceImpl implements FriendService {
|
||||
@Autowired
|
||||
private ApplicationEventPublisher applicationEventPublisher;
|
||||
@Autowired
|
||||
private RoomFriendDao roomFriendDao;
|
||||
@Autowired
|
||||
private RoomService roomService;
|
||||
@Autowired
|
||||
private ContactService contactService;
|
||||
@Autowired
|
||||
private ChatService chatService;
|
||||
|
||||
@Autowired
|
||||
private UserDao userDao;
|
||||
|
||||
/**
|
||||
* 检查
|
||||
* 检查是否是自己好友
|
||||
@@ -121,12 +123,14 @@ public class FriendServiceImpl implements FriendService {
|
||||
*/
|
||||
@Override
|
||||
public PageBaseResp<FriendApplyResp> pageApplyFriend(Long uid, PageBaseReq request) {
|
||||
IPage<UserApply> userApplyIPage = userApplyDao.FriendApplyPage(uid, request.plusPage());
|
||||
IPage<UserApply> userApplyIPage = userApplyDao.friendApplyPage(uid, request.plusPage());
|
||||
if (CollectionUtil.isEmpty(userApplyIPage.getRecords())) {
|
||||
return PageBaseResp.empty();
|
||||
}
|
||||
//将这些申请列表设为已读
|
||||
List<Long> applyIds = userApplyIPage.getRecords().stream().map(UserApply::getId).collect(Collectors.toList());
|
||||
List<Long> applyIds = userApplyIPage.getRecords()
|
||||
.stream().map(UserApply::getId)
|
||||
.collect(Collectors.toList());
|
||||
userApplyDao.readApples(uid, applyIds);
|
||||
//返回消息
|
||||
return PageBaseResp.init(userApplyIPage, FriendAdapter.buildFriendApplyList(userApplyIPage.getRecords()));
|
||||
@@ -164,6 +168,33 @@ public class FriendServiceImpl implements FriendService {
|
||||
chatService.sendMsg(MessageAdapter.buildAgreeMsg(roomFriend.getRoomId()), uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除好友
|
||||
*
|
||||
* @param uid uid
|
||||
* @param friendUid 朋友uid
|
||||
*/
|
||||
@Override
|
||||
public void deleteFriend(Long uid, Long friendUid) {
|
||||
List<UserFriend> userFriends = userFriendDao.getUserFriend(uid, friendUid);
|
||||
if (CollectionUtil.isEmpty(userFriends)) {
|
||||
log.info("没有好友关系:{},{}", uid, friendUid);
|
||||
return;
|
||||
}
|
||||
List<Long> friendRecordIds = userFriends.stream().map(UserFriend::getId).collect(Collectors.toList());
|
||||
userFriendDao.removeByIds(friendRecordIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CursorPageBaseResp<ChatMemberResp> friendList(Long uid, CursorPageBaseReq request) {
|
||||
CursorPageBaseResp<UserFriend> friendPage = userFriendDao.getFriendPage(uid, request);
|
||||
List<Long> friendUids = friendPage.getList()
|
||||
.stream().map(UserFriend::getFriendUid)
|
||||
.collect(Collectors.toList());
|
||||
List<User> userList = userDao.getUserList(friendUids);
|
||||
return CursorPageBaseResp.init(friendPage, MemberAdapter.buildMember(friendPage.getList(), userList));
|
||||
}
|
||||
|
||||
private void createFriend(Long uid, Long targetUid) {
|
||||
UserFriend userFriend1 = new UserFriend();
|
||||
userFriend1.setUid(uid);
|
||||
@@ -171,6 +202,7 @@ public class FriendServiceImpl implements FriendService {
|
||||
UserFriend userFriend2 = new UserFriend();
|
||||
userFriend2.setUid(targetUid);
|
||||
userFriend2.setFriendUid(uid);
|
||||
userFriendDao.saveBatch(Lists.newArrayList(userFriend1, userFriend2))
|
||||
userFriendDao.saveBatch(Lists.newArrayList(userFriend1, userFriend2));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user