Commit 703ea8a6 by 罗长华

完善sdk群聊消息发送接口

数据库msgType类型使用String
parent 161b1a72
...@@ -226,7 +226,7 @@ public class NormalChatAction { ...@@ -226,7 +226,7 @@ public class NormalChatAction {
imMessageOnlineSend.setWithdraw(imMessage.getWithdraw()); imMessageOnlineSend.setWithdraw(imMessage.getWithdraw());
imMessageOnlineSend.setEvent(imMessage.getEvent()); imMessageOnlineSend.setEvent(imMessage.getEvent());
imMessageOnlineSend.setSystemFlag(imMessage.getSystemFlag()); imMessageOnlineSend.setSystemFlag(imMessage.getSystemFlag());
imMessageOnlineSend.setType(data.getType()); imMessageOnlineSend.setType(data.getType() + "");
imMessageOnlineSend.setAt(imMessage.getAt()); imMessageOnlineSend.setAt(imMessage.getAt());
return imMessageOnlineSend; return imMessageOnlineSend;
} }
......
package com.wecloud.im.chatroom.action; package com.wecloud.im.chatroom.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.common.BaseRequest; import com.wecloud.dispatch.common.BaseRequest;
import com.wecloud.dispatch.extend.ActionRequest; import com.wecloud.dispatch.extend.ActionRequest;
...@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse; ...@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* @Author wenzhida * @Author wenzhida
...@@ -134,7 +136,7 @@ public class ChatRoomAction { ...@@ -134,7 +136,7 @@ public class ChatRoomAction {
imMessageOnlineSend.setWithdraw(false); imMessageOnlineSend.setWithdraw(false);
imMessageOnlineSend.setEvent(false); imMessageOnlineSend.setEvent(false);
imMessageOnlineSend.setSystemFlag(false); imMessageOnlineSend.setSystemFlag(false);
imMessageOnlineSend.setType(data.getType()); imMessageOnlineSend.setType(data.getType() + "");
imMessageOnlineSend.setAt(data.getAt()); imMessageOnlineSend.setAt(data.getAt());
return imMessageOnlineSend; return imMessageOnlineSend;
} }
......
...@@ -117,5 +117,19 @@ public class ImConversationMembersController extends BaseController { ...@@ -117,5 +117,19 @@ public class ImConversationMembersController extends BaseController {
return ApiResult.ok(imConversationMembersService.addUser(param)); return ApiResult.ok(imConversationMembersService.addUser(param));
} }
/**
*
* @Author luozh
* @Date 2022年04月29日 03:59:54
* @param
* @Return
*/
@ApiOperation(value = "消息发布")
@PostMapping("/publish")
public ApiResult<Boolean> publish() {
return null;
}
} }
...@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.GroupChatMessageParam;
import com.wecloud.im.param.GroupChatStatusMessageParam;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.PrivateChatMessageParam;
import com.wecloud.im.param.PrivateChatStatusMessageParam;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.service.ImMessageService;
...@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController { ...@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/delete") @PostMapping("/delete")
@ApiOperation(value = "删除消息", notes = "单条消息与批量消息删除共用") @ApiOperation(value = "删除消息", notes = "单条消息与批量消息删除共用")
public ApiResult<Boolean> deleteMsg(@RequestBody MsgDeleteParam param) { public ApiResult<Boolean> deleteMsg(@RequestBody MsgDeleteParam param) {
if(param == null) { if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
if (CollectionUtils.isEmpty(param.getMsgIds())) { if (CollectionUtils.isEmpty(param.getMsgIds())) {
...@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController { ...@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController {
return ApiResult.ok(readerList); return ApiResult.ok(readerList);
} }
@ApiOperation("发布群聊消息")
@PostMapping("/group/publish")
public ApiResult<Boolean> groupMessagePublish(@RequestBody @Validated GroupChatMessageParam param) {
// 参数校验
return ApiResult.ok(imMessageService.groupMessagePublish(param));
}
@ApiOperation("发布群聊状态消息")
@PostMapping("/group/status/publish")
public ApiResult<Boolean> groupStatusMessagePublish(@RequestBody @Validated GroupChatStatusMessageParam param) {
return ApiResult.ok(imMessageService.groupStatusMessagePublish(param));
}
@ApiOperation("发布单聊消息")
@PostMapping("/private/publish")
public ApiResult<Boolean> privateMessagePublish(@RequestBody @Validated PrivateChatMessageParam param) {
return ApiResult.ok(imMessageService.privateMessagePublish(param));
}
@ApiOperation("发布单聊状态消息")
@PostMapping("/private/status/publish")
public ApiResult<Boolean> privateStatusMessagePublish(@RequestBody @Validated PrivateChatStatusMessageParam param) {
return ApiResult.ok(imMessageService.privateStatusMessagePublish(param));
}
} }
package com.wecloud.im.entity; package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* 消息存储表 * 消息存储表
* *
...@@ -74,7 +76,7 @@ public class ImMessage extends BaseEntity { ...@@ -74,7 +76,7 @@ public class ImMessage extends BaseEntity {
private Long fkConversationId; private Long fkConversationId;
@ApiModelProperty("消息类型") @ApiModelProperty("消息类型")
private Integer msgType; private String msgType;
@ApiModelProperty("是否删除 1-未删除 2-已删除") @ApiModelProperty("是否删除 1-未删除 2-已删除")
private Integer isDelete; private Integer isDelete;
......
...@@ -7,9 +7,9 @@ import lombok.Data; ...@@ -7,9 +7,9 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import java.util.Map;
import javax.validation.constraints.NotNull;
/** /**
* 消息在线推送 * 消息在线推送
...@@ -29,7 +29,7 @@ public class ImMessageOnlineSend extends BaseEntity { ...@@ -29,7 +29,7 @@ public class ImMessageOnlineSend extends BaseEntity {
* @see com.wecloud.im.ws.enums.MsgTypeEnum * @see com.wecloud.im.ws.enums.MsgTypeEnum
*/ */
@ApiModelProperty("消息类型") @ApiModelProperty("消息类型")
private Integer type; private String type;
@NotNull(message = "消息id不能为空") @NotNull(message = "消息id不能为空")
@ApiModelProperty("消息id") @ApiModelProperty("消息id")
...@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity { ...@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity {
private String sender; private String sender;
@ApiModelProperty("内容") @ApiModelProperty("内容")
private Map content; private Object content;
@ApiModelProperty("0未撤回; 1已撤回") @ApiModelProperty("0未撤回; 1已撤回")
private Boolean withdraw; private Boolean withdraw;
......
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* 发送群聊消息入参
* @Author luozh
* @Date 2022年04月29日 16:00
* @Version 1.0
*/
@Data
public class GroupChatMessageParam {
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
@NotEmpty(message = "接收群id不能为空")
@ApiModelProperty("接收群id")
private String toGroupIds;
@ApiModelProperty("指定一个或多个用户")
private String toUserIds;
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
@ApiModelProperty("指定离线推送通知中的推送内容")
private String pushContent;
@ApiModelProperty("是否包含发送用户")
private Boolean includeSender;
@ApiModelProperty("是否存储此条消息")
private Boolean persisted;
@ApiModelProperty("是否为@消息")
private Boolean mentioned;
@ApiModelProperty("是否为静默消息")
private Boolean silent;
@ApiModelProperty("推送配置")
private PushExtParam pushExt;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class GroupChatStatusMessageParam {
/**
* 发送人客户端id
*/
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
/**
* 接收群id
*/
@NotEmpty(message = "接收群id不能为空")
@ApiModelProperty("接收群id")
private String toGroupIds;
/**
* 消息类型
*/
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
/**
* 消息
*/
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
/**
* 是否过滤黑名单
*/
@ApiModelProperty("是否过滤黑名单")
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
@ApiModelProperty("发送用户是否接收")
private Boolean includeSender;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@Data
public class PrivateChatMessageParam {
/**
* 发送人id
*/
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
/**
* 指定一个或多个用户
*/
@NotEmpty(message = "接收用户id不能为空")
@ApiModelProperty("接收用户id")
private String toUserIds;
/**
* 消息类型
*/
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
/**
* 消息
*/
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
/**
* 指定离线推送通知中的推送内容
*/
@ApiModelProperty("指定离线推送通知中的推送内容")
private String pushContent;
/**
* 是否包含发送用户
*/
@ApiModelProperty("是否包含发送用户")
private Boolean includeSender;
/**
* 是否过滤黑名单
*/
@ApiModelProperty("是否过滤黑名单")
private Boolean includeBlacklist;
/**
* 是否存储此条消息
*/
@ApiModelProperty("是否存储此条消息")
private Boolean persisted;
/**
* 是否为静默消息
*/
@ApiModelProperty("是否为静默消息")
private Boolean silent;
/**
* 推送拓展配置
*/
@ApiModelProperty("推送拓展配置")
private PushExtParam pushExt;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class PrivateChatStatusMessageParam {
/**
* 发送人客户端id
*/
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
/**
* 接收群id
*/
@NotEmpty(message = "接收用户id不能为空")
@ApiModelProperty("接收用户id")
private String toUserIds;
/**
* 消息类型
*/
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
/**
* 消息
*/
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
/**
* 是否过滤黑名单
*/
@ApiModelProperty("是否过滤黑名单")
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
@ApiModelProperty("发送用户是否接收")
private Boolean includeSender;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 推送拓展参数
* @Author luozh
* @Date 2022年04月29日 17:07
* @Version 1.0
*/
@Data
public class PushExtParam {
@ApiModelProperty("通知栏显示主题")
private String title;
@ApiModelProperty("按厂商设置不同推送属性。支持的推送通道值为 `MI`(小米)、`HW`(华为)、`OPPO`、`VIVO`")
private String pushChannel;
@ApiModelProperty("通知渠道的 ID")
private String channelId;
@ApiModelProperty("华为通知栏消息优先级,取值 NORMAL、LOW,默认为 NORMAL 重要消息")
private String hwPriority;
@ApiModelProperty("华为推送自定义的通知栏消息右侧大图标 URL,如果不设置,则不展示通知栏右侧图标")
private String hwImage;
@ApiModelProperty("小米推送自定义的通知栏消息右侧图标 URL")
private String miLargeIconUri;
@ApiModelProperty("vivo 推送通道类型。0 为运营消息、1 为系统消息")
private String vivoChannelType;
@ApiModelProperty("iOS 平台通知栏分组 ID")
private String iosGroupId;
@ApiModelProperty("iOS 平台")
private String iosApnsCollapseId;
}
...@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient; ...@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.GroupChatMessageParam;
import com.wecloud.im.param.GroupChatStatusMessageParam;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.PrivateChatMessageParam;
import com.wecloud.im.param.PrivateChatStatusMessageParam;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgSendToOnlineClient; import com.wecloud.im.param.add.ImMsgSendToOnlineClient;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
...@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> {
*/ */
ReaderList getReaders(GetReadersParam param); ReaderList getReaders(GetReadersParam param);
/**
* 发送群聊消息
* @param param
* @return
*/
Boolean groupMessagePublish(GroupChatMessageParam param);
/**
* 发送群聊状态消息
* @Author luozh
* @Date 2022年05月05日 02:32:58
* @param param
* @Return
*/
Boolean groupStatusMessagePublish(GroupChatStatusMessageParam param);
/**
* 发送单聊消息
* @Author luozh
* @Date 2022年05月05日 02:33:26
* @param param
* @Return
*/
Boolean privateMessagePublish(PrivateChatMessageParam param);
/**
* 发送单聊状态消息
* @Author luozh
* @Date 2022年05月05日 02:33:56
* @param param
* @Return
*/
Boolean privateStatusMessagePublish(PrivateChatStatusMessageParam param);
} }
...@@ -136,7 +136,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -136,7 +136,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
// 封装响应的实体 // 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend(); ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setCreateTime(new Date()); imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setType(MsgTypeEnum.CONVERSATION_MEMBER_NAME_MODIFY.getUriCode()); imMessageOnlineSend.setType(MsgTypeEnum.CONVERSATION_MEMBER_NAME_MODIFY.getUriCode() + "");
imMessageOnlineSend.setSender(currentClient.getClientId()); imMessageOnlineSend.setSender(currentClient.getClientId());
Map<String, Object> content = Maps.newHashMap(); Map<String, Object> content = Maps.newHashMap();
content.put("operator", currentClient.getClientId()); content.put("operator", currentClient.getClientId());
......
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
...@@ -58,28 +82,6 @@ import com.wecloud.im.ws.sender.ChannelSender; ...@@ -58,28 +82,6 @@ import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.im.ws.utils.RedisUtils; import com.wecloud.im.ws.utils.RedisUtils;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.wecloud.im.ws.enums.MsgTypeEnum.CONVERSATION_FORBID_ADD_FRIEND; import static com.wecloud.im.ws.enums.MsgTypeEnum.CONVERSATION_FORBID_ADD_FRIEND;
import static com.wecloud.im.ws.enums.MsgTypeEnum.CONVERSATION_FORBID_ADD_FRIEND_CANCEL; import static com.wecloud.im.ws.enums.MsgTypeEnum.CONVERSATION_FORBID_ADD_FRIEND_CANCEL;
...@@ -266,7 +268,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -266,7 +268,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(SnowflakeUtil.getId()); imMessage.setId(SnowflakeUtil.getId());
imMessage.setMsgType(MsgTypeEnum.CLIENT_JOIN_NEW_CONVERSATION.getUriCode()); imMessage.setMsgType(MsgTypeEnum.CLIENT_JOIN_NEW_CONVERSATION.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(imApplication.getId()); imMessage.setFkAppid(imApplication.getId());
imMessage.setSender(createClient.getId()); imMessage.setSender(createClient.getId());
...@@ -362,7 +364,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -362,7 +364,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(messageId); imMessage.setId(messageId);
imMessage.setMsgType(MsgTypeEnum.INVITE_CLIENT_JOIN_CONVERSATION.getUriCode()); imMessage.setMsgType(MsgTypeEnum.INVITE_CLIENT_JOIN_CONVERSATION.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(imApplication.getId()); imMessage.setFkAppid(imApplication.getId());
imMessage.setSender(imClientSender.getId()); imMessage.setSender(imClientSender.getId());
...@@ -453,7 +455,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -453,7 +455,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage.setContent(JsonUtils.encodeJson(content)); imMessage.setContent(JsonUtils.encodeJson(content));
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(messageId); imMessage.setId(messageId);
imMessage.setMsgType(MsgTypeEnum.REMOVE_CLIENT_CONVERSATION.getUriCode()); imMessage.setMsgType(MsgTypeEnum.REMOVE_CLIENT_CONVERSATION.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(imApplication.getId()); imMessage.setFkAppid(imApplication.getId());
imMessage.setSender(imClientSender.getId()); imMessage.setSender(imClientSender.getId());
...@@ -469,7 +471,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -469,7 +471,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
Long conversationId = imClientToConversation.getConversationId(); Long conversationId = imClientToConversation.getConversationId();
Long appId = imApplication.getId(); Long appId = imApplication.getId();
String sender = imClientSender.getClientId(); String sender = imClientSender.getClientId();
Integer msgType = imMessage.getMsgType(); String msgType = imMessage.getMsgType();
sendMsgToMembers(conversationId, membersList, appId, sender, content, imMessage); sendMsgToMembers(conversationId, membersList, appId, sender, content, imMessage);
} }
...@@ -510,7 +512,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -510,7 +512,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage.setContent(JsonUtils.encodeJson(content)); imMessage.setContent(JsonUtils.encodeJson(content));
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(SnowflakeUtil.getId()); imMessage.setId(SnowflakeUtil.getId());
imMessage.setMsgType(MsgTypeEnum.CONVERSATION_DISBAND.getUriCode()); imMessage.setMsgType(MsgTypeEnum.CONVERSATION_DISBAND.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(currentClient.getFkAppid()); imMessage.setFkAppid(currentClient.getFkAppid());
imMessage.setSender(currentClient.getId()); imMessage.setSender(currentClient.getId());
...@@ -577,7 +579,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -577,7 +579,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(messageId); imMessage.setId(messageId);
imMessage.setMsgType(MsgTypeEnum.LEAVE_CONVERSATION.getUriCode()); imMessage.setMsgType(MsgTypeEnum.LEAVE_CONVERSATION.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(currentClient.getFkAppid()); imMessage.setFkAppid(currentClient.getFkAppid());
imMessage.setSender(currentClient.getId()); imMessage.setSender(currentClient.getId());
...@@ -785,7 +787,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -785,7 +787,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessage message = new ImMessage(); ImMessage message = new ImMessage();
message.setWithdraw(Boolean.FALSE); message.setWithdraw(Boolean.FALSE);
message.setEvent(Boolean.TRUE); message.setEvent(Boolean.TRUE);
message.setMsgType(MsgTypeEnum.CONVERSATION_NAME_CHANGE.getUriCode()); message.setMsgType(MsgTypeEnum.CONVERSATION_NAME_CHANGE.getUriCode() + "");
sendMsgToMembers(param.getConversationId(), membersList, currentClient.getFkAppid(), sendMsgToMembers(param.getConversationId(), membersList, currentClient.getFkAppid(),
currentClient.getClientId(), content, message); currentClient.getClientId(), content, message);
...@@ -835,7 +837,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -835,7 +837,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessage message = new ImMessage(); ImMessage message = new ImMessage();
message.setWithdraw(Boolean.FALSE); message.setWithdraw(Boolean.FALSE);
message.setEvent(Boolean.TRUE); message.setEvent(Boolean.TRUE);
message.setMsgType(MsgTypeEnum.CONVERSATION_EXPAND_FIELD_CHANGE.getUriCode()); message.setMsgType(MsgTypeEnum.CONVERSATION_EXPAND_FIELD_CHANGE.getUriCode() + "");
sendMsgToMembers(conversationId, membersList, appId, sender, content, message); sendMsgToMembers(conversationId, membersList, appId, sender, content, message);
} else { } else {
throw new BusinessException("修改错误"); throw new BusinessException("修改错误");
...@@ -1000,177 +1002,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -1000,177 +1002,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return true; return true;
} }
private Integer getMsgType(GroupChatSettingTypeEnum type, Boolean on) {
Integer msgType = null;
switch (type) {
case FORBID_ADD_FRIEND:
if (on) {
msgType = CONVERSATION_FORBID_ADD_FRIEND.getUriCode();
} else {
msgType = CONVERSATION_FORBID_ADD_FRIEND_CANCEL.getUriCode();
}
break;
case FORBID_SEND_RED_PACKETS:
if (on) {
msgType = CONVERSATION_FORBID_SEND_RED_PACKETS.getUriCode();
} else {
msgType = CONVERSATION_FORBID_SEND_RED_PACKETS_CANCEL.getUriCode();
}
break;
case FORBID_SEND_PIC:
if (on) {
msgType = CONVERSATION_FORBID_SEND_PIC.getUriCode();
} else {
msgType = CONVERSATION_FORBID_SEND_PIC_CANCEL.getUriCode();
}
break;
case FORBID_SEND_LINK:
if (on) {
msgType = CONVERSATION_FORBID_SEND_LINK.getUriCode();
} else {
msgType = CONVERSATION_FORBID_SEND_LINK_CANCEL.getUriCode();
}
break;
default:
throw new BusinessException("设置类型错误");
}
return msgType;
}
/**
* 发送会话配置变更事件
*
* @param currentClient 当前client信息
* @param conversationId 会话id
* @param msgType 消息类型
* @Author luozh
* @Date 2022年04月27日 01:52:54
* @Return
*/
private void sendConversationSettingChangeMsg(ImClient currentClient, Long conversationId, Integer msgType) {
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkAppid, currentClient.getFkAppid())
.eq(ImConversationMembers::getFkConversationId, conversationId)
.ne(ImConversationMembers::getFkClientId, currentClient.getId())
);
if (!membersList.isEmpty()) {
// 保存事件消息
ImMessage imMessage = new ImMessage();
Map<String, Object> content = new HashMap<>();
content.put("operator", currentClient.getClientId());
imMessage.setContent(JsonUtils.encodeJson(content));
// 保存消息至消息表
imMessage.setId(SnowflakeUtil.getId());
imMessage.setMsgType(msgType);
imMessage.setCreateTime(new Date());
imMessage.setFkAppid(currentClient.getFkAppid());
imMessage.setSender(currentClient.getId());
imMessage.setWithdraw(false);
imMessage.setEvent(true);
imMessage.setSystemFlag(false);
imMessage.setSendStatus(2);
imMessage.setFkConversationId(conversationId);
imMessageService.save(imMessage);
// 发送消息至群成员
sendMsgToMembers(conversationId, membersList, currentClient.getFkAppid(), currentClient.getClientId(),
content, imMessage);
}
}
/**
* 发送会话事件消息至群成员列表
*
* @param conversationId 会话id
* @param membersList 成员列表
* @param appId appId
* @param sender 发送者
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 02:11:19
*/
private void sendMsgToMembers(Long conversationId, List<ImConversationMembers> membersList, Long appId,
String sender, Map content, ImMessage message) {
for (ImConversationMembers member : membersList) {
// 不关心事件是否发送成功
try {
// 给所有成员下发事件消息
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, appId)
.eq(ImClient::getId, member.getFkClientId()));
if (imClientReceiver == null) {
continue;
}
sendConversationEventMsg(conversationId, sender, imClientReceiver.getId(), content, message);
} catch (Exception e) {
log.info("下发群会话事件失败,事件类型 {} 接收人 {}", message.getMsgType(), JSON.toJSONString(member));
}
}
}
/**
* 发送会话事件消息至指定成员
*
* @param conversationId 会话id
* @param appId appId
* @param sender 发送者
* @param receiverClientId 接收者client id
* @param message
* @Author luozh
* @Date 2022年04月27日 03:11:00
*/
private void sendEventMsgToMember(Long conversationId, Long appId, String sender,
Long receiverClientId, Map<String, Object> content, ImMessage message) {
// 查询接收方
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, appId)
.eq(ImClient::getId, receiverClientId));
if (imClientReceiver == null) {
return;
}
sendConversationEventMsg(conversationId, sender, receiverClientId, content, message);
}
/**
* 发送会话事件消息
*
* @param conversationId 会话id
* @param sender 发送者
* @param receiverClientId 接收者client id
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 03:11:34
*/
private void sendConversationEventMsg(Long conversationId, String sender,
Long receiverClientId, Map<String, Object> content, ImMessage message) {
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setType(message.getMsgType());
imMessageOnlineSend.setSender(sender);
imMessageOnlineSend.setContent(content);
imMessageOnlineSend.setConversationId(conversationId);
imMessageOnlineSend.setWithdraw(message.getWithdraw());
imMessageOnlineSend.setEvent(message.getEvent());
// 向接收方推送
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.CONVERSATION_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, receiverClientId);
}
@Override @Override
public Boolean intoChatRoom(IntoChatRoomParam param) { public Boolean intoChatRoom(IntoChatRoomParam param) {
// 获取当前client // 获取当前client
...@@ -1206,7 +1037,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -1206,7 +1037,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(messageId); imMessage.setId(messageId);
imMessage.setMsgType(MsgTypeEnum.INVITE_CLIENT_JOIN_CONVERSATION.getUriCode()); imMessage.setMsgType(MsgTypeEnum.INVITE_CLIENT_JOIN_CONVERSATION.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(imApplication.getId()); imMessage.setFkAppid(imApplication.getId());
imMessage.setSender(imClientSender.getId()); imMessage.setSender(imClientSender.getId());
...@@ -1263,7 +1094,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -1263,7 +1094,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessage imMessage = new ImMessage(); ImMessage imMessage = new ImMessage();
// 保存消息至消息表 // 保存消息至消息表
imMessage.setId(messageId); imMessage.setId(messageId);
imMessage.setMsgType(MsgTypeEnum.LEAVE_CONVERSATION.getUriCode()); imMessage.setMsgType(MsgTypeEnum.LEAVE_CONVERSATION.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(currentClient.getFkAppid()); imMessage.setFkAppid(currentClient.getFkAppid());
imMessage.setSender(currentClient.getId()); imMessage.setSender(currentClient.getId());
...@@ -1348,4 +1179,175 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -1348,4 +1179,175 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return imConversationCreateVo; return imConversationCreateVo;
} }
private Integer getMsgType(GroupChatSettingTypeEnum type, Boolean on) {
Integer msgType = null;
switch (type) {
case FORBID_ADD_FRIEND:
if (on) {
msgType = CONVERSATION_FORBID_ADD_FRIEND.getUriCode();
} else {
msgType = CONVERSATION_FORBID_ADD_FRIEND_CANCEL.getUriCode();
}
break;
case FORBID_SEND_RED_PACKETS:
if (on) {
msgType = CONVERSATION_FORBID_SEND_RED_PACKETS.getUriCode();
} else {
msgType = CONVERSATION_FORBID_SEND_RED_PACKETS_CANCEL.getUriCode();
}
break;
case FORBID_SEND_PIC:
if (on) {
msgType = CONVERSATION_FORBID_SEND_PIC.getUriCode();
} else {
msgType = CONVERSATION_FORBID_SEND_PIC_CANCEL.getUriCode();
}
break;
case FORBID_SEND_LINK:
if (on) {
msgType = CONVERSATION_FORBID_SEND_LINK.getUriCode();
} else {
msgType = CONVERSATION_FORBID_SEND_LINK_CANCEL.getUriCode();
}
break;
default:
throw new BusinessException("设置类型错误");
}
return msgType;
}
/**
* 发送会话配置变更事件
*
* @param currentClient 当前client信息
* @param conversationId 会话id
* @param msgType 消息类型
* @Author luozh
* @Date 2022年04月27日 01:52:54
* @Return
*/
private void sendConversationSettingChangeMsg(ImClient currentClient, Long conversationId, Integer msgType) {
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkAppid, currentClient.getFkAppid())
.eq(ImConversationMembers::getFkConversationId, conversationId)
.ne(ImConversationMembers::getFkClientId, currentClient.getId())
);
if (!membersList.isEmpty()) {
// 保存事件消息
ImMessage imMessage = new ImMessage();
Map<String, Object> content = new HashMap<>();
content.put("operator", currentClient.getClientId());
imMessage.setContent(JsonUtils.encodeJson(content));
// 保存消息至消息表
imMessage.setId(SnowflakeUtil.getId());
imMessage.setMsgType(msgType.toString());
imMessage.setCreateTime(new Date());
imMessage.setFkAppid(currentClient.getFkAppid());
imMessage.setSender(currentClient.getId());
imMessage.setWithdraw(false);
imMessage.setEvent(true);
imMessage.setSystemFlag(false);
imMessage.setSendStatus(2);
imMessage.setFkConversationId(conversationId);
imMessageService.save(imMessage);
// 发送消息至群成员
sendMsgToMembers(conversationId, membersList, currentClient.getFkAppid(), currentClient.getClientId(),
content, imMessage);
}
}
/**
* 发送会话事件消息至群成员列表
*
* @param conversationId 会话id
* @param membersList 成员列表
* @param appId appId
* @param sender 发送者
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 02:11:19
*/
private void sendMsgToMembers(Long conversationId, List<ImConversationMembers> membersList, Long appId,
String sender, Map content, ImMessage message) {
for (ImConversationMembers member : membersList) {
// 不关心事件是否发送成功
try {
// 给所有成员下发事件消息
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, appId)
.eq(ImClient::getId, member.getFkClientId()));
if (imClientReceiver == null) {
continue;
}
sendConversationEventMsg(conversationId, sender, imClientReceiver.getId(), content, message);
} catch (Exception e) {
log.info("下发群会话事件失败,事件类型 {} 接收人 {}", message.getMsgType(), JSON.toJSONString(member));
}
}
}
/**
* 发送会话事件消息至指定成员
*
* @param conversationId 会话id
* @param appId appId
* @param sender 发送者
* @param receiverClientId 接收者client id
* @param message
* @Author luozh
* @Date 2022年04月27日 03:11:00
*/
private void sendEventMsgToMember(Long conversationId, Long appId, String sender,
Long receiverClientId, Map<String, Object> content, ImMessage message) {
// 查询接收方
ImClient imClientReceiver = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, appId)
.eq(ImClient::getId, receiverClientId));
if (imClientReceiver == null) {
return;
}
sendConversationEventMsg(conversationId, sender, receiverClientId, content, message);
}
/**
* 发送会话事件消息
*
* @param conversationId 会话id
* @param sender 发送者
* @param receiverClientId 接收者client id
* @param content 消息内容
* @Author luozh
* @Date 2022年04月27日 03:11:34
*/
private void sendConversationEventMsg(Long conversationId, String sender,
Long receiverClientId, Map<String, Object> content, ImMessage message) {
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setType(message.getMsgType());
imMessageOnlineSend.setSender(sender);
imMessageOnlineSend.setContent(content);
imMessageOnlineSend.setConversationId(conversationId);
imMessageOnlineSend.setWithdraw(message.getWithdraw());
imMessageOnlineSend.setEvent(message.getEvent());
// 向接收方推送
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.CONVERSATION_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, receiverClientId);
}
} }
...@@ -206,7 +206,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -206,7 +206,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
// 消息实体 // 消息实体
ImMessage imMessage = new ImMessage(); ImMessage imMessage = new ImMessage();
imMessage.setId(msgId); imMessage.setId(msgId);
imMessage.setMsgType(msgTypeEnum.getUriCode()); imMessage.setMsgType(msgTypeEnum.getUriCode() + "");
imMessage.setCreateTime(new Date()); imMessage.setCreateTime(new Date());
imMessage.setFkAppid(currentClient.getFkAppid()); imMessage.setFkAppid(currentClient.getFkAppid());
imMessage.setSender(currentClient.getId()); imMessage.setSender(currentClient.getId());
...@@ -219,7 +219,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -219,7 +219,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
// 封装响应的实体 // 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend(); ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
BeanUtils.copyProperties(imMessage, imMessageOnlineSend); BeanUtils.copyProperties(imMessage, imMessageOnlineSend);
imMessageOnlineSend.setType(msgTypeEnum.getUriCode()); imMessageOnlineSend.setType(msgTypeEnum.getUriCode() + "");
imMessageOnlineSend.setMsgId(imMessage.getId()); imMessageOnlineSend.setMsgId(imMessage.getId());
imMessageOnlineSend.setCreateTime(new Date()); imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setSender(currentClient.getClientId()); imMessageOnlineSend.setSender(currentClient.getClientId());
......
...@@ -6,10 +6,13 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException; ...@@ -6,10 +6,13 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -19,26 +22,34 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -19,26 +22,34 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.dispatch.common.BaseRequest;
import com.wecloud.im.entity.ImApiMessageOnlineSend; import com.wecloud.im.entity.ImApiMessageOnlineSend;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation; import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.mapper.ImMessageMapper; import com.wecloud.im.mapper.ImMessageMapper;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.mq.MqSender;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.GroupChatMessageParam;
import com.wecloud.im.param.GroupChatStatusMessageParam;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.PrivateChatMessageParam;
import com.wecloud.im.param.PrivateChatStatusMessageParam;
import com.wecloud.im.param.PushExtParam;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgSendToOnlineClient; import com.wecloud.im.param.add.ImMsgSendToOnlineClient;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
...@@ -48,6 +59,7 @@ import com.wecloud.im.service.ImApplicationService; ...@@ -48,6 +59,7 @@ import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.thousandchat.service.ThousandChatService; import com.wecloud.im.thousandchat.service.ThousandChatService;
import com.wecloud.im.vo.ImMessageOfflineListVo; import com.wecloud.im.vo.ImMessageOfflineListVo;
...@@ -57,12 +69,14 @@ import com.wecloud.im.vo.ReaderVo; ...@@ -57,12 +69,14 @@ import com.wecloud.im.vo.ReaderVo;
import com.wecloud.im.ws.enums.MsgTypeEnum; import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.model.request.PushVO;
import com.wecloud.im.ws.model.request.ReceiveDataVO; import com.wecloud.im.ws.model.request.ReceiveDataVO;
import com.wecloud.im.ws.model.request.ReceiveVO; import com.wecloud.im.ws.model.request.ReceiveVO;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.pushserver.client.model.constant.MqConstant; import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil;
/** /**
...@@ -87,7 +101,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -87,7 +101,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Autowired @Autowired
private ImApplicationService imApplicationService; private ImApplicationService imApplicationService;
@Autowired @Autowired
private ImConversationMembersService imConversationMembersService; private ImConversationMembersService imConversationMembersService;
...@@ -103,6 +116,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -103,6 +116,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Autowired @Autowired
private MqSender mqSender; private MqSender mqSender;
@Autowired
private ImInboxService imInboxService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> restApiImMessageSend(ImMsgSendToOnlineClient imMsgSendToOnlineClient, ImApplication imApplication) { public ApiResult<Boolean> restApiImMessageSend(ImMsgSendToOnlineClient imMsgSendToOnlineClient, ImApplication imApplication) {
...@@ -175,7 +191,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -175,7 +191,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage.setEvent(false); imMessage.setEvent(false);
imMessage.setSystemFlag(false); imMessage.setSystemFlag(false);
imMessage.setSendStatus(2); imMessage.setSendStatus(2);
imMessage.setMsgType(sysParam.getType()); imMessage.setMsgType(sysParam.getType().toString());
imMessage.setFkConversationId(sysParam.getToConversation()); imMessage.setFkConversationId(sysParam.getToConversation());
this.save(imMessage); this.save(imMessage);
return imMessage; return imMessage;
...@@ -199,7 +215,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -199,7 +215,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage.setEvent(false); imMessage.setEvent(false);
imMessage.setSystemFlag(false); imMessage.setSystemFlag(false);
imMessage.setSendStatus(2); imMessage.setSendStatus(2);
imMessage.setMsgType(data.getType()); imMessage.setMsgType(data.getType().toString());
imMessage.setAt(data.getAt()); imMessage.setAt(data.getAt());
imMessage.setFkConversationId(data.getToConversation()); imMessage.setFkConversationId(data.getToConversation());
this.save(imMessage); this.save(imMessage);
...@@ -214,7 +230,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -214,7 +230,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage messageById = this.getById(imMsgRecall.getMsgId()); ImMessage messageById = this.getById(imMsgRecall.getMsgId());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置 // 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
Boolean withdrawOther = true; boolean withdrawOther = true;
if (!withdrawOther && !messageById.getSender().equals(imClientSender.getId())) { if (!withdrawOther && !messageById.getSender().equals(imClientSender.getId())) {
throw new BusinessException("不可撤回别人发送的消息"); throw new BusinessException("不可撤回别人发送的消息");
} }
...@@ -269,7 +285,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -269,7 +285,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 封装响应的实体 // 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend(); ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
BeanUtils.copyProperties(messageById, imMessageOnlineSend); BeanUtils.copyProperties(messageById, imMessageOnlineSend);
imMessageOnlineSend.setType(MsgTypeEnum.MSG_WITHDRAW.getUriCode()); imMessageOnlineSend.setType(MsgTypeEnum.MSG_WITHDRAW.getUriCode() + "");
imMessageOnlineSend.setMsgId(messageById.getId()); imMessageOnlineSend.setMsgId(messageById.getId());
imMessageOnlineSend.setCreateTime(new Date()); imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setSender(imClientSender.getClientId()); imMessageOnlineSend.setSender(imClientSender.getClientId());
...@@ -367,7 +383,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -367,7 +383,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 封装响应的实体 // 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend(); ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
BeanUtils.copyProperties(message, imMessageOnlineSend); BeanUtils.copyProperties(message, imMessageOnlineSend);
imMessageOnlineSend.setType(MsgTypeEnum.MSG_DELETE.getUriCode()); imMessageOnlineSend.setType(MsgTypeEnum.MSG_DELETE.getUriCode() + "");
imMessageOnlineSend.setMsgId(message.getId()); imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setCreateTime(new Date()); imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setSender(imClientSender.getClientId()); imMessageOnlineSend.setSender(imClientSender.getClientId());
...@@ -538,5 +554,189 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -538,5 +554,189 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
return imMessageMapper.getLastMsgByConversationId(conversationId); return imMessageMapper.getLastMsgByConversationId(conversationId);
} }
@Override
public Boolean groupMessagePublish(GroupChatMessageParam param) {
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(),
param.getContent());
if (param.getPersisted()) {
// 持久化
this.save(message);
}
// 拼装发送消息体
ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(message, sender, appId);
// 发送消息
for (ImConversationMembers members : membersList) {
if (members.getClientId().equals(senderClientId) && !param.getIncludeSender()) {
// 是否是发送者 且includeSender不为true
continue;
}
// 入库 保存收件箱
saveImInbox(application, conversation.getId(), imMessageOnlineSend.getMsgId(),
members, SnowflakeUtil.getId());
// 在线用户直接发消息
sendMsgForOnline(members.getFkClientId(), imMessageOnlineSend);
// 异步推送系统通知消息
if (!param.getSilent()) {
// 不是静默推送
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;
}
@Override
public Boolean groupStatusMessagePublish(GroupChatStatusMessageParam param) {
return null;
}
@Override
public Boolean privateMessagePublish(PrivateChatMessageParam param) {
return null;
}
@Override
public Boolean privateStatusMessagePublish(PrivateChatStatusMessageParam param) {
return null;
}
/**
* 拼装发送消息体
* @param message
* @param imClientSender
* @param appId
* @return
*/
private ImMessageOnlineSend assembleImMessageOnlineSend(ImMessage message, ImClient imClientSender, Long appId) {
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setSender(imClientSender.getClientId());
Map<String, Object> content = JSONObject.parseObject(message.getContent(), Map.class);
//action的属性无需要返回
content.remove(BaseRequest.ACTION);
imMessageOnlineSend.setContent(content);
imMessageOnlineSend.setConversationId(message.getFkConversationId());
imMessageOnlineSend.setCreateTime(message.getCreateTime());
imMessageOnlineSend.setWithdrawTime(message.getWithdrawTime());
imMessageOnlineSend.setWithdraw(message.getWithdraw());
imMessageOnlineSend.setEvent(message.getEvent());
imMessageOnlineSend.setSystemFlag(message.getSystemFlag());
imMessageOnlineSend.setType(message.getMsgType() + "");
imMessageOnlineSend.setAt(message.getAt());
return imMessageOnlineSend;
}
/**
* 组装imMessage
* @Author luozh
* @Date 2022年05月05日 06:17:00
* @param appId 发送群聊消息入参
* @param sender 发送群聊消息入参
* @param toConversationId 发送群聊消息入参
* @param messageType 发送群聊消息入参
* @param content 发送群聊消息入参
* @Return ImMessage
*/
private ImMessage assembleImMessage(Long appId, ImClient sender, Long toConversationId, String messageType,
String content) {
long messageId = SnowflakeUtil.getId();
ImMessage imMessage = new ImMessage();
imMessage.setContent(content);
imMessage.setId(messageId);
imMessage.setCreateTime(new Date());
imMessage.setFkAppid(appId);
imMessage.setSender(sender.getId());
imMessage.setWithdraw(false);
imMessage.setEvent(false);
imMessage.setSystemFlag(false);
imMessage.setSendStatus(2);
imMessage.setMsgType(messageType);
imMessage.setAt("");
imMessage.setFkConversationId(toConversationId);
return imMessage;
}
/**
* 入库 保存收件箱
*
* @param imApplication
* @param toConversationId
* @param messageId
* @param conversationMembers
* @param imInboxId
*/
private void saveImInbox(ImApplication imApplication, Long toConversationId, long messageId, ImConversationMembers conversationMembers, long imInboxId) {
ImInbox imInbox = new ImInbox();
imInbox.setId(imInboxId);
imInbox.setCreateTime(new Date());
imInbox.setFkAppid(imApplication.getId());
imInbox.setReceiver(conversationMembers.getFkClientId());
imInbox.setFkMsgId(messageId);
imInbox.setReadMsgStatus(0);
imInbox.setReceiverMsgStatus(0);
imInbox.setFkConversationId(toConversationId);
imInboxService.save(imInbox);
}
/**
* 发送消息给在线客户
* @param receiverClientId
* @param imMessageOnlineSend
*/
private void sendMsgForOnline(Long receiverClientId, ImMessageOnlineSend imMessageOnlineSend) {
// 封装要推给接收方的消息
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.ONLINE_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, receiverClientId);
}
} }
package com.wecloud.im.thousandchat.action; package com.wecloud.im.thousandchat.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.common.BaseRequest; import com.wecloud.dispatch.common.BaseRequest;
...@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant; ...@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/** /**
* @Description 处理Cmd请求 * @Description 处理Cmd请求
...@@ -212,7 +211,7 @@ public class ThousandChatAction { ...@@ -212,7 +211,7 @@ public class ThousandChatAction {
imMessageOnlineSend.setWithdraw(imMessage.getWithdraw()); imMessageOnlineSend.setWithdraw(imMessage.getWithdraw());
imMessageOnlineSend.setEvent(imMessage.getEvent()); imMessageOnlineSend.setEvent(imMessage.getEvent());
imMessageOnlineSend.setSystemFlag(imMessage.getSystemFlag()); imMessageOnlineSend.setSystemFlag(imMessage.getSystemFlag());
imMessageOnlineSend.setType(data.getType()); imMessageOnlineSend.setType(data.getType() + "");
imMessageOnlineSend.setAt(imMessage.getAt()); imMessageOnlineSend.setAt(imMessage.getAt());
return imMessageOnlineSend; return imMessageOnlineSend;
} }
......
package com.wecloud.im.thousandchat.service; package com.wecloud.im.thousandchat.service;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation; import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
...@@ -18,22 +35,7 @@ import com.wecloud.im.ws.enums.MsgTypeEnum; ...@@ -18,22 +35,7 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 消息收件箱表 服务实现类 * 消息收件箱表 服务实现类
...@@ -191,7 +193,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper, ...@@ -191,7 +193,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper,
// 封装响应的实体 // 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend(); ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setMsgId(lastestMsg.getId()); imMessageOnlineSend.setMsgId(lastestMsg.getId());
imMessageOnlineSend.setType(msgTypeEnum.getUriCode()); imMessageOnlineSend.setType(msgTypeEnum.getUriCode() + "");
imMessageOnlineSend.setSender(curentClient.getClientId()); imMessageOnlineSend.setSender(curentClient.getClientId());
imMessageOnlineSend.setContent(contentMap); imMessageOnlineSend.setContent(contentMap);
imMessageOnlineSend.setConversationId(lastestMsg.getFkConversationId()); imMessageOnlineSend.setConversationId(lastestMsg.getFkConversationId());
......
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