WindChat/windchat-business/src/main/java/com/windchat/im/business/impl/notice/GroupNotice.java

162 lines
5.9 KiB
Java
Raw Normal View History

2019-07-29 23:42:16 +08:00
/**
2020-10-21 23:35:02 +08:00
* Copyright 2018-2028 WindChat Group
2019-07-29 23:42:16 +08:00
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
2019-11-27 23:33:33 +08:00
package com.windchat.im.business.impl.notice;
2019-07-29 23:42:16 +08:00
import java.util.List;
2019-11-27 23:33:33 +08:00
import com.windchat.im.business.constant.NoticeText;
import com.windchat.im.business.dao.UserProfileDao;
2019-07-29 23:42:16 +08:00
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2019-11-27 23:36:54 +08:00
import com.windchat.common.command.Command;
import com.windchat.common.constant.RequestAction;
2019-07-29 23:42:16 +08:00
import com.akaxin.proto.core.CoreProto;
import com.akaxin.proto.site.ImCtsMessageProto;
2019-11-27 23:36:54 +08:00
import com.windchat.im.business.constant.NoticeText;
import com.windchat.im.business.dao.UserProfileDao;
import com.windchat.im.message.api.IMessageService;
import com.windchat.im.message.service.ImMessageService;
2019-07-31 23:12:30 +08:00
import com.windchat.im.storage.bean.SimpleUserBean;
2019-07-29 23:42:16 +08:00
import com.google.protobuf.ByteString;
/**
* <pre>
* 主要发送群主相关的消息通知
* 1.新用户加入了群聊消息提醒
* 2.消息通知以及系统通知
* </pre>
*
* @author Sam{@link an.guoyue254@gmail.com}
* @since 2018-01-02 10:23:00
*/
public class GroupNotice {
private static final Logger logger = LoggerFactory.getLogger(GroupNotice.class);
private IMessageService imService = new ImMessageService();
/**
* 新用户加入了群聊 <br>
* eg群聊天界面中<张三 加入了群聊天>
*/
public void addGroupMemberNotice(String siteUserId, String groupId, List<String> userIdList) {
logger.info("add group member notice siteUserId={} groupId={} userList={}", siteUserId, groupId, userIdList);
if (StringUtils.isEmpty(groupId) || userIdList == null || userIdList.size() == 0) {
return;
}
StringBuilder noticeText = new StringBuilder();
try {
if (StringUtils.isNotEmpty(siteUserId)) {
// 移除群主,群创建者
userIdList.remove(siteUserId);
// 查询群主信息
SimpleUserBean bean = UserProfileDao.getInstance().getSimpleProfileById(siteUserId);
if (bean != null && StringUtils.isNotEmpty(bean.getUserName())) {
noticeText.append(bean.getUserName());
noticeText.append(" 邀请了 ");
}
}
int num = 0;
for (String userId : userIdList) {
if (StringUtils.isEmpty(siteUserId)) {
siteUserId = userId;
}
SimpleUserBean memberBean = UserProfileDao.getInstance().getSimpleProfileById(userId);
if (memberBean != null && StringUtils.isNotEmpty(memberBean.getUserName())) {
noticeText.append(memberBean.getUserName());
if (num++ < (userIdList.size() - 1)) {
noticeText.append(",");
}
}
}
noticeText.append(NoticeText.USER_ADD_GROUP);
this.groupMsgNotice(siteUserId, groupId, noticeText.toString());
} catch (Exception e) {
logger.error("new group member notice error. notice=" + noticeText.toString(), e);
}
}
// 新用户登陆站点,添加至默认群组中的消息通知
public void addDefaultGroupMemberNotice(String groupId, String siteUserId) {
SimpleUserBean userBean = UserProfileDao.getInstance().getSimpleProfileById(siteUserId, true);
if (userBean == null || StringUtils.isEmpty(userBean.getUserName())) {
logger.error("add defaultgroup member error, user={}", userBean);
return;
}
StringBuilder noticeText = new StringBuilder();
noticeText.append(userBean.getUserName());
noticeText.append(NoticeText.USER_ADD_GROUP);
this.groupMsgNotice(siteUserId, groupId, noticeText.toString());
}
// 扫描二维码加群,需要发送 XXX 通过群组二维码加入群聊
public void addGroupMemberByTokenNotice(String groupId, String siteUserId) {
SimpleUserBean userBean = UserProfileDao.getInstance().getSimpleProfileById(siteUserId, true);
if (userBean == null || StringUtils.isEmpty(userBean.getUserName())) {
logger.error("add group member by token notice error, user={}", userBean);
return;
}
StringBuilder noticeText = new StringBuilder();
noticeText.append(userBean.getUserName());
noticeText.append(NoticeText.USER_ADD_GROUP_QR_CODE);
this.groupMsgNotice(siteUserId, groupId, noticeText.toString());
}
/**
* 往群组中发送通知消息<eg:王小王加入了群聊天>
*
* @param groupId
* 发送通知的群
* @param siteUserId
* 备用字段兼容官方号推送通知消息发送方ID
*
*/
private void groupMsgNotice(String siteUserId, String siteGroupId, String noticeText) {
CoreProto.GroupMsgNotice groupMsgNotice = CoreProto.GroupMsgNotice.newBuilder()
.setMsgId(buildGroupMsgId(siteUserId)).setSiteUserId(siteUserId).setSiteGroupId(siteGroupId)
.setText(ByteString.copyFromUtf8(noticeText)).setTime(System.currentTimeMillis()).build();
ImCtsMessageProto.ImCtsMessageRequest request = ImCtsMessageProto.ImCtsMessageRequest.newBuilder()
.setType(CoreProto.MsgType.GROUP_NOTICE).setGroupMsgNotice(groupMsgNotice).build();
Command command = new Command();
command.setAction(RequestAction.IM_CTS_MESSAGE.getName());
command.setSiteUserId(siteUserId);
command.setSiteGroupId(siteGroupId);
command.setParams(request.toByteArray());
logger.debug("group msg notice command={}", command.toString());
imService.execute(command);
}
private String buildGroupMsgId(String siteUserid) {
StringBuilder sb = new StringBuilder("GROUP-");
if (StringUtils.isNotEmpty(siteUserid)) {
int len = siteUserid.length();
sb.append(siteUserid.substring(0, len >= 8 ? 8 : len));
sb.append("-");
}
sb.append(System.currentTimeMillis());
return sb.toString();
}
}