mirror of
https://github.com/zongzibinbin/MallChat.git
synced 2026-03-14 06:03:42 +08:00
单聊群聊功能提交
This commit is contained in:
@@ -30,6 +30,13 @@ public class RoomFriendDao extends ServiceImpl<RoomFriendMapper, RoomFriend> {
|
|||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void disableRoom(String key) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.eq(RoomFriend::getRoomKey, key)
|
||||||
|
.set(RoomFriend::getStatus, NormalOrNoEnum.NOT_NORMAL.getStatus())
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
|
||||||
public List<RoomFriend> listByRoomIds(List<Long> roomIds) {
|
public List<RoomFriend> listByRoomIds(List<Long> roomIds) {
|
||||||
return lambdaQuery()
|
return lambdaQuery()
|
||||||
.in(RoomFriend::getRoomId, roomIds)
|
.in(RoomFriend::getRoomId, roomIds)
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package com.abin.mallchat.common.chat.domain.entity;
|
package com.abin.mallchat.common.chat.domain.entity;
|
||||||
|
|
||||||
|
import com.abin.mallchat.common.chat.domain.enums.HotFlagEnum;
|
||||||
|
import com.abin.mallchat.common.chat.domain.enums.RoomTypeEnum;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@@ -77,4 +80,18 @@ public class Room implements Serializable {
|
|||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
public boolean isHotRoom() {
|
||||||
|
return HotFlagEnum.of(this.hotFlag) == HotFlagEnum.YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
public boolean isRoomFriend() {
|
||||||
|
return RoomTypeEnum.of(this.type) == RoomTypeEnum.FRIEND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
public boolean isRoomGroup() {
|
||||||
|
return RoomTypeEnum.of(this.hotFlag) == RoomTypeEnum.GROUP;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ public interface RoomService {
|
|||||||
*/
|
*/
|
||||||
RoomFriend createFriendRoom(List<Long> uidList);
|
RoomFriend createFriendRoom(List<Long> uidList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 禁用一个单聊房间
|
||||||
|
*/
|
||||||
|
void disableFriendRoom(List<Long> uidList);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个群聊房间
|
* 创建一个群聊房间
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ public class RoomServiceImpl implements RoomService {
|
|||||||
return roomFriend;
|
return roomFriend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disableFriendRoom(List<Long> uidList) {
|
||||||
|
AssertUtil.isNotEmpty(uidList, "房间创建失败,好友数量不对");
|
||||||
|
AssertUtil.equal(uidList.size(), 2, "房间创建失败,好友数量不对");
|
||||||
|
String key = ChatAdapter.generateRoomKey(uidList);
|
||||||
|
roomFriendDao.disableRoom(key);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public RoomGroup createGroupRoom(Long uid) {
|
public RoomGroup createGroupRoom(Long uid) {
|
||||||
|
|||||||
@@ -5,19 +5,17 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUnit;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.lang.Pair;
|
import cn.hutool.core.lang.Pair;
|
||||||
import com.abin.mallchat.common.chat.dao.ContactDao;
|
import com.abin.mallchat.common.chat.dao.*;
|
||||||
import com.abin.mallchat.common.chat.dao.MessageDao;
|
|
||||||
import com.abin.mallchat.common.chat.dao.MessageMarkDao;
|
|
||||||
import com.abin.mallchat.common.chat.dao.RoomDao;
|
|
||||||
import com.abin.mallchat.common.chat.domain.dto.MsgReadInfoDTO;
|
import com.abin.mallchat.common.chat.domain.dto.MsgReadInfoDTO;
|
||||||
import com.abin.mallchat.common.chat.domain.entity.Contact;
|
import com.abin.mallchat.common.chat.domain.entity.*;
|
||||||
import com.abin.mallchat.common.chat.domain.entity.Message;
|
|
||||||
import com.abin.mallchat.common.chat.domain.entity.MessageMark;
|
|
||||||
import com.abin.mallchat.common.chat.domain.enums.MessageMarkActTypeEnum;
|
import com.abin.mallchat.common.chat.domain.enums.MessageMarkActTypeEnum;
|
||||||
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
import com.abin.mallchat.common.chat.domain.enums.MessageTypeEnum;
|
||||||
import com.abin.mallchat.common.chat.domain.vo.response.ChatMessageResp;
|
import com.abin.mallchat.common.chat.domain.vo.response.ChatMessageResp;
|
||||||
import com.abin.mallchat.common.chat.service.ContactService;
|
import com.abin.mallchat.common.chat.service.ContactService;
|
||||||
|
import com.abin.mallchat.common.chat.service.cache.RoomCache;
|
||||||
|
import com.abin.mallchat.common.chat.service.cache.RoomGroupCache;
|
||||||
import com.abin.mallchat.common.common.annotation.RedissonLock;
|
import com.abin.mallchat.common.common.annotation.RedissonLock;
|
||||||
|
import com.abin.mallchat.common.common.domain.enums.NormalOrNoEnum;
|
||||||
import com.abin.mallchat.common.common.domain.vo.request.CursorPageBaseReq;
|
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.domain.vo.response.CursorPageBaseResp;
|
||||||
import com.abin.mallchat.common.common.event.MessageSendEvent;
|
import com.abin.mallchat.common.common.event.MessageSendEvent;
|
||||||
@@ -28,7 +26,6 @@ import com.abin.mallchat.common.user.domain.enums.ChatActiveStatusEnum;
|
|||||||
import com.abin.mallchat.common.user.domain.enums.RoleEnum;
|
import com.abin.mallchat.common.user.domain.enums.RoleEnum;
|
||||||
import com.abin.mallchat.common.user.domain.vo.response.ws.ChatMemberResp;
|
import com.abin.mallchat.common.user.domain.vo.response.ws.ChatMemberResp;
|
||||||
import com.abin.mallchat.common.user.service.IRoleService;
|
import com.abin.mallchat.common.user.service.IRoleService;
|
||||||
import com.abin.mallchat.common.user.service.cache.ItemCache;
|
|
||||||
import com.abin.mallchat.common.user.service.cache.UserCache;
|
import com.abin.mallchat.common.user.service.cache.UserCache;
|
||||||
import com.abin.mallchat.custom.chat.domain.vo.request.*;
|
import com.abin.mallchat.custom.chat.domain.vo.request.*;
|
||||||
import com.abin.mallchat.custom.chat.domain.vo.response.ChatMemberListResp;
|
import com.abin.mallchat.custom.chat.domain.vo.response.ChatMemberListResp;
|
||||||
@@ -81,7 +78,7 @@ public class ChatServiceImpl implements ChatService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MessageMarkDao messageMarkDao;
|
private MessageMarkDao messageMarkDao;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ItemCache itemCache;
|
private RoomFriendDao roomFriendDao;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IRoleService iRoleService;
|
private IRoleService iRoleService;
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -90,6 +87,12 @@ public class ChatServiceImpl implements ChatService {
|
|||||||
private ContactService contactService;
|
private ContactService contactService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ContactDao contactDao;
|
private ContactDao contactDao;
|
||||||
|
@Autowired
|
||||||
|
private RoomCache roomCache;
|
||||||
|
@Autowired
|
||||||
|
private GroupMemberDao groupMemberDao;
|
||||||
|
@Autowired
|
||||||
|
private RoomGroupCache roomGroupCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送消息
|
* 发送消息
|
||||||
@@ -97,6 +100,7 @@ public class ChatServiceImpl implements ChatService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public Long sendMsg(ChatMessageReq request, Long uid) {
|
public Long sendMsg(ChatMessageReq request, Long uid) {
|
||||||
|
check(request, uid);
|
||||||
AbstractMsgHandler msgHandler = MsgHandlerFactory.getStrategyNoNull(request.getMsgType());//todo 这里先不扩展,后续再改
|
AbstractMsgHandler msgHandler = MsgHandlerFactory.getStrategyNoNull(request.getMsgType());//todo 这里先不扩展,后续再改
|
||||||
msgHandler.checkMsg(request, uid);
|
msgHandler.checkMsg(request, uid);
|
||||||
//同步获取消息的跳转链接标题
|
//同步获取消息的跳转链接标题
|
||||||
@@ -108,6 +112,24 @@ public class ChatServiceImpl implements ChatService {
|
|||||||
return insert.getId();
|
return insert.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void check(ChatMessageReq request, Long uid) {
|
||||||
|
Room room = roomCache.get(request.getRoomId());
|
||||||
|
if (room.isHotRoom()) {//全员群跳过校验
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (room.isRoomFriend()) {
|
||||||
|
RoomFriend roomFriend = roomFriendDao.getByRoomId(request.getRoomId());
|
||||||
|
AssertUtil.equal(NormalOrNoEnum.NORMAL.getStatus(), roomFriend.getStatus(), "您已经被对方拉黑");
|
||||||
|
AssertUtil.isTrue(uid.equals(roomFriend.getUid1()) || uid.equals(roomFriend.getUid2()), "您已经被对方拉黑");
|
||||||
|
}
|
||||||
|
if (room.isRoomGroup()) {
|
||||||
|
RoomGroup roomGroup = roomGroupCache.get(request.getRoomId());
|
||||||
|
GroupMember member = groupMemberDao.getMember(roomGroup.getId(), uid);
|
||||||
|
AssertUtil.isNotEmpty(member, "您已经被移除该群");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChatMessageResp getMsgResp(Message message, Long receiveUid) {
|
public ChatMessageResp getMsgResp(Message message, Long receiveUid) {
|
||||||
return CollUtil.getFirst(getMsgRespBatch(Collections.singletonList(message), receiveUid));
|
return CollUtil.getFirst(getMsgRespBatch(Collections.singletonList(message), receiveUid));
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ public class RoomAppServiceImpl implements RoomAppService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void delMember(Long uid, MemberDelReq request) {
|
public void delMember(Long uid, MemberDelReq request) {
|
||||||
Room room = roomCache.get(request.getRoomId());
|
Room room = roomCache.get(request.getRoomId());
|
||||||
AssertUtil.isNotEmpty(room, "房间号有误");
|
AssertUtil.isNotEmpty(room, "房间号有误");
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.abin.mallchat.custom.user.service.impl;
|
package com.abin.mallchat.custom.user.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
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.domain.entity.RoomFriend;
|
||||||
import com.abin.mallchat.common.chat.service.ContactService;
|
import com.abin.mallchat.common.chat.service.ContactService;
|
||||||
import com.abin.mallchat.common.chat.service.RoomService;
|
import com.abin.mallchat.common.chat.service.RoomService;
|
||||||
@@ -67,9 +68,10 @@ public class FriendServiceImpl implements FriendService {
|
|||||||
private ContactService contactService;
|
private ContactService contactService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChatService chatService;
|
private ChatService chatService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserDao userDao;
|
private UserDao userDao;
|
||||||
|
@Autowired
|
||||||
|
private RoomFriendDao roomFriendDao;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查
|
* 检查
|
||||||
@@ -176,6 +178,7 @@ public class FriendServiceImpl implements FriendService {
|
|||||||
* @param friendUid 朋友uid
|
* @param friendUid 朋友uid
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteFriend(Long uid, Long friendUid) {
|
public void deleteFriend(Long uid, Long friendUid) {
|
||||||
List<UserFriend> userFriends = userFriendDao.getUserFriend(uid, friendUid);
|
List<UserFriend> userFriends = userFriendDao.getUserFriend(uid, friendUid);
|
||||||
if (CollectionUtil.isEmpty(userFriends)) {
|
if (CollectionUtil.isEmpty(userFriends)) {
|
||||||
@@ -184,6 +187,8 @@ public class FriendServiceImpl implements FriendService {
|
|||||||
}
|
}
|
||||||
List<Long> friendRecordIds = userFriends.stream().map(UserFriend::getId).collect(Collectors.toList());
|
List<Long> friendRecordIds = userFriends.stream().map(UserFriend::getId).collect(Collectors.toList());
|
||||||
userFriendDao.removeByIds(friendRecordIds);
|
userFriendDao.removeByIds(friendRecordIds);
|
||||||
|
//禁用房间
|
||||||
|
roomService.disableFriendRoom(friendRecordIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user