diff --git a/accompany-base/accompany-common/src/main/java/com/accompany/common/constant/Attach.java b/accompany-base/accompany-common/src/main/java/com/accompany/common/constant/Attach.java index b115016c9..86d4990f0 100644 --- a/accompany-base/accompany-common/src/main/java/com/accompany/common/constant/Attach.java +++ b/accompany-base/accompany-common/src/main/java/com/accompany/common/constant/Attach.java @@ -15,9 +15,20 @@ public class Attach { private String message; private Object data; + //用于携带给客户端,用于区分同一组first和second的消息,是单房间消息,还是轮询全服房间遍历发送的单房间消息 + //已使用公聊房机制,解决轮询全服房间发送消息的云信im限频问题 + private Integer allRoomMsg; + public Attach(int first, int second, Object data) { this.first = first; this.second = second; this.data = data; } + + public Attach(int first, int second, Object data, int allRoomMsg) { + this.first = first; + this.second = second; + this.data = data; + this.allRoomMsg = allRoomMsg; + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/SendSysMsgService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/SendSysMsgService.java index d390bf3c8..1b7d3a98d 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/SendSysMsgService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/SendSysMsgService.java @@ -18,10 +18,12 @@ import com.accompany.common.utils.ReplaceAppDomainUtils; import com.accompany.common.utils.UUIDUtil; import com.accompany.core.base.SpringContextHolder; import com.accompany.core.enumeration.I18nAlertEnum; +import com.accompany.core.model.PartitionInfo; import com.accompany.core.model.Room; import com.accompany.core.model.Users; import com.accompany.core.mybatismapper.RoomMapperExpand; import com.accompany.core.service.base.BaseService; +import com.accompany.core.service.partition.PartitionInfoService; import com.accompany.core.util.I18NMessageSourceUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -61,6 +63,8 @@ public class SendSysMsgService extends BaseService { @Autowired private RoomMapperExpand roomMapperExpand; + @Autowired + private PartitionInfoService partitionInfoService; /** * 发送系统通知,捕获异常不抛出。 @@ -546,13 +550,33 @@ public class SendSysMsgService extends BaseService { }); } - public void sendMessageToPartition(Integer partitionId, int first, int second, Object data) { + public void sendSingleRoomMessage(long roomId, String fromAccId, BaseChatRoomMsg msg) { + try { + String msgId = UUIDUtil.get(); + this.erBanNetEaseService.sendChatRoomMsg(roomId, msgId, fromAccId, + msg.getMsgType(), msg.getAttach(), msg.getExt()); + } catch (Exception e) { + log.error("发送房间消息失败[roomId : {}, fromAccId : {}, message : {}]", + roomId, fromAccId, msg, e); + } + } + + public void sendMessageToPartition(int partitionId, int first, int second, Object data) { Attach attach = new Attach(first, second, data); sendMessageToPartition(partitionId, attach); } - public void sendMessageToPartition(Integer partitionId, Attach attach) { + public void sendMessageToPartition(int partitionId, Attach attach) { + attach.setAllRoomMsg(Constant.Yes1No0.YES); BaseChatRoomMsg msg = BaseChatRoomMsg.buildBaseChatRoomMsg(attach); + + PartitionInfo partitionInfo = partitionInfoService.getById(partitionId); + if (partitionInfo == null){ + return; + } + + sendSingleRoomMessage(partitionInfo.getPublicChatRoomId(), SystemConfig.secretaryUid, attach); + sendMessageToPartition(partitionId, msg); } @@ -562,7 +586,16 @@ public class SendSysMsgService extends BaseService { } public void sendMessageToPartition(Room curRoom, Attach attach) { + attach.setAllRoomMsg(Constant.Yes1No0.YES); BaseChatRoomMsg msg = BaseChatRoomMsg.buildBaseChatRoomMsg(attach); + + PartitionInfo partitionInfo = partitionInfoService.getById(curRoom.getPartitionId()); + if (partitionInfo == null){ + return; + } + + sendSingleRoomMessage(partitionInfo.getPublicChatRoomId(), SystemConfig.secretaryUid, attach); + sendMessageToPartition(curRoom, msg); } @@ -608,6 +641,15 @@ public class SendSysMsgService extends BaseService { } public void sendFloatingMessageForRoom(FloatingMessageTemplate message) { + int partitionId = message.getPartitionId(); + + PartitionInfo partitionInfo = partitionInfoService.getById(partitionId); + if (partitionInfo == null){ + return; + } + + sendFloatingMessageForRoom(partitionInfo.getPublicChatRoomId(), Long.parseLong(SystemConfig.secretaryUid), message); + List validRooms = this.roomMapperExpand.listValidRoomsByPartitionId(null, message.getPartitionId()); if (CollectionUtils.isEmpty(validRooms)){ return;