实现好友删除和联系人列表

This commit is contained in:
limeng
2023-07-23 12:36:19 +08:00
parent 21e9c91287
commit 7cb64f039b
7 changed files with 112 additions and 15 deletions

View File

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

View File

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

View File

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

View File

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