Commit 85156e3e by 罗长华

优化代码,完成群聊事件发送接口

parent 1f19ec16
...@@ -40,9 +40,6 @@ public class GroupChatMessageParam { ...@@ -40,9 +40,6 @@ public class GroupChatMessageParam {
@ApiModelProperty("是否包含发送用户") @ApiModelProperty("是否包含发送用户")
private Boolean includeSender; private Boolean includeSender;
@ApiModelProperty("是否存储此条消息")
private Boolean persisted;
@ApiModelProperty("是否为@消息") @ApiModelProperty("是否为@消息")
private Boolean mentioned; private Boolean mentioned;
......
...@@ -15,6 +15,7 @@ import java.util.Date; ...@@ -15,6 +15,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -579,16 +580,19 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -579,16 +580,19 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
new QueryWrapper<ImConversationMembers>().lambda() new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, conversation.getId())); .eq(ImConversationMembers::getFkConversationId, conversation.getId()));
if (param.getToUserIds() != null && !param.getToUserIds().isEmpty()) {
// 定向发送
membersList =
membersList.stream().filter(members -> param.getToUserIds().contains(members.getClientId())).collect(Collectors.toList());
}
// 组装消息 // 组装消息
ImMessage message = assembleImMessage(appId, sender, conversation.getId(), param.getMessageType(), ImMessage message = assembleImMessage(appId, sender, conversation.getId(), param.getMessageType(), false, param.getContent());
param.getContent());
if (param.getPersisted()) {
// 持久化 // 持久化
this.save(message); this.save(message);
}
// 拼装发送消息体 // 拼装发送消息体
ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(message, sender, appId); ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(message, sender, appId);
// 发送消息 // 发送消息
for (ImConversationMembers members : membersList) { for (ImConversationMembers members : membersList) {
if (members.getClientId().equals(senderClientId) && !param.getIncludeSender()) { if (members.getClientId().equals(senderClientId) && !param.getIncludeSender()) {
...@@ -602,32 +606,59 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -602,32 +606,59 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 在线用户直接发消息 // 在线用户直接发消息
sendMsgForOnline(members.getFkClientId(), imMessageOnlineSend); sendMsgForOnline(members.getFkClientId(), imMessageOnlineSend);
// 异步推送系统通知消息 // 离线消息推送
if (!param.getSilent()) { pushMsgToOfflineMembers(application, members, param.getPushContent(), param.getPushExt());
// 不是静默推送
PushVO pushVO = new PushVO();
pushVO.setData(JsonUtils.beanCopyDeep(param.getPushContent(), HashMap.class));
if (param.getPushExt() != null) {
PushExtParam pushExt = param.getPushExt();
pushVO.setTitle(pushExt.getTitle());
}
ImClient receiver = new ImClient();
receiver.setId(members.getFkClientId());
receiver.setClientId(members.getClientId());
PushDTO pushDTO = mqSender.buildPushDto(pushVO, receiver, application);
if (pushDTO != null) {
mqSender.orderSend(MqConstant.Topic.IM_ORDER_MSG_TOPIC, MqConstant.Tag.IM_ORDER_MSG_TAG, pushDTO);
}
} }
}
}); });
return true; return true;
} }
@Override @Override
public Boolean groupStatusMessagePublish(GroupChatStatusMessageParam param) { public Boolean groupStatusMessagePublish(GroupChatStatusMessageParam param) {
return null; Long appId = SecurityUtils.getCurrentAppId();
ImApplication application = imApplicationService.getCacheById(appId);
// 获取发件人信息
String senderClientId = param.getFromUserId();
ImClient sender = imClientService.getCacheImClient(appId, senderClientId);
if (sender == null) {
throw new BusinessException("id为 " + senderClientId + " 的发件人不存在");
}
// 获取群聊信息
String conversationIdsStr = param.getToGroupIds();
List<String> conversationIdList = Arrays.asList(conversationIdsStr.split(","));
List<ImConversation> conversationList = imConversationService.listByIds(conversationIdList);
// 校验群聊信息
if (conversationList.size() <= 0) {
throw new BusinessException("群聊ids为 " + conversationIdsStr + " 的群聊列表不存在");
}
conversationList.forEach(conversation -> {
// 获取群成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, conversation.getId()));
// 组装消息
ImMessage message = assembleImMessage(appId, sender, conversation.getId(), param.getMessageType(), true,
param.getContent());
// 持久化
this.save(message);
// 拼装发送消息体
ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(message, sender, appId);
// 发送消息
for (ImConversationMembers members : membersList) {
if (members.getClientId().equals(senderClientId) && !param.getIncludeSender()) {
// 是否是发送者 且includeSender不为true
continue;
}
// 在线用户直接发消息
sendMsgForOnline(members.getFkClientId(), imMessageOnlineSend);
}
});
return true;
} }
@Override @Override
...@@ -679,7 +710,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -679,7 +710,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
* @Return ImMessage * @Return ImMessage
*/ */
private ImMessage assembleImMessage(Long appId, ImClient sender, Long toConversationId, String messageType, private ImMessage assembleImMessage(Long appId, ImClient sender, Long toConversationId, String messageType,
String content) { Boolean event, String content) {
long messageId = SnowflakeUtil.getId(); long messageId = SnowflakeUtil.getId();
ImMessage imMessage = new ImMessage(); ImMessage imMessage = new ImMessage();
...@@ -690,7 +721,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -690,7 +721,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage.setFkAppid(appId); imMessage.setFkAppid(appId);
imMessage.setSender(sender.getId()); imMessage.setSender(sender.getId());
imMessage.setWithdraw(false); imMessage.setWithdraw(false);
imMessage.setEvent(false); imMessage.setEvent(event);
imMessage.setSystemFlag(false); imMessage.setSystemFlag(false);
imMessage.setSendStatus(2); imMessage.setSendStatus(2);
imMessage.setMsgType(Integer.valueOf(messageType)); imMessage.setMsgType(Integer.valueOf(messageType));
...@@ -738,5 +769,32 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -738,5 +769,32 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
channelSender.sendMsg(responseModel, receiverClientId); channelSender.sendMsg(responseModel, receiverClientId);
} }
/**
* 推送消息至离线成员
* @Author luozh
* @Date 2022年05月06日 05:23:58
* @param application
* @param members
* @param pushContent
* @param pushExt
* @Return
*/
private void pushMsgToOfflineMembers(ImApplication application, ImConversationMembers members,
String pushContent, PushExtParam pushExt) {
// 不是静默推送
PushVO pushVO = new PushVO();
pushVO.setData(JSONObject.parseObject(pushContent, HashMap.class));
if (pushExt != null) {
pushVO.setTitle(pushExt.getTitle());
}
ImClient receiver = new ImClient();
receiver.setId(members.getFkClientId());
receiver.setClientId(members.getClientId());
PushDTO pushDTO = mqSender.buildPushDto(pushVO, receiver, application);
if (pushDTO != null) {
mqSender.orderSend(MqConstant.Topic.IM_ORDER_MSG_TOPIC, MqConstant.Tag.IM_ORDER_MSG_TAG, pushDTO);
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment