REQ-3201: 查询消息详情
This commit is contained in:
parent
70aea293f5
commit
b285cd694c
@ -5,6 +5,7 @@ import cn.axzo.im.center.api.vo.req.AsyncSendMessageParam;
|
||||
import cn.axzo.im.center.api.vo.req.CustomMessageInfo;
|
||||
import cn.axzo.im.center.api.vo.req.FetchUpdatableMessageRequest;
|
||||
import cn.axzo.im.center.api.vo.req.GetBizMessageIdsRequest;
|
||||
import cn.axzo.im.center.api.vo.req.GetMessageDetailRequest;
|
||||
import cn.axzo.im.center.api.vo.req.MessageInfo;
|
||||
import cn.axzo.im.center.api.vo.req.SendMessageParam;
|
||||
import cn.axzo.im.center.api.vo.req.SendTemplateMessageParam;
|
||||
@ -12,6 +13,7 @@ import cn.axzo.im.center.api.vo.req.UpdatableMessageAckRequest;
|
||||
import cn.axzo.im.center.api.vo.req.UpdateMessageRequest;
|
||||
import cn.axzo.im.center.api.vo.resp.FetchUpdatableMessageResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.GetBizMessageIdsResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.GetMessageDetailResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageCustomResp;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageDispatchResp;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageTaskResp;
|
||||
@ -77,6 +79,10 @@ public interface MessageApi {
|
||||
ApiResult<FetchUpdatableMessageResponse> fetchUpdatableMessage(
|
||||
@RequestBody @Validated FetchUpdatableMessageRequest request);
|
||||
|
||||
@PostMapping("/api/im/template-message/updatable/getMessageDetails")
|
||||
ApiResult<GetMessageDetailResponse> getMessageDetails(
|
||||
@RequestBody @Validated GetMessageDetailRequest request);
|
||||
|
||||
@PostMapping("/api/im/template-message/updatable/getBizMessageIds")
|
||||
ApiResult<GetBizMessageIdsResponse> getBizMessageIds(
|
||||
@RequestBody @Validated GetBizMessageIdsRequest request);
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
package cn.axzo.im.center.api.vo.req;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class GetMessageDetailRequest {
|
||||
|
||||
/**
|
||||
* 业务消息ID列表,每次最大数量100
|
||||
*/
|
||||
@NotEmpty(message = "消息ID不能为空")
|
||||
private Set<String> bizMessageIds;
|
||||
|
||||
}
|
||||
@ -18,7 +18,7 @@ public class FetchUpdatableMessageResponse {
|
||||
/**
|
||||
* 消息列表, 返回的列表为空时表示没有更多满足条件的消息.
|
||||
*/
|
||||
private List<MessageInfo> messages = new ArrayList<>();
|
||||
private List<UpdatableMessageInfo> messages = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 当前批次最大的更新时间
|
||||
@ -30,18 +30,18 @@ public class FetchUpdatableMessageResponse {
|
||||
*/
|
||||
private Long minCursorId;
|
||||
|
||||
public void addMessage(MessageInfo message) {
|
||||
public void addMessage(UpdatableMessageInfo message) {
|
||||
messages.add(message);
|
||||
}
|
||||
|
||||
public void setQueryProgress() {
|
||||
if (messages == null) return;
|
||||
minCursorId = messages.stream()
|
||||
.mapToLong(MessageInfo::getId)
|
||||
.mapToLong(UpdatableMessageInfo::getId)
|
||||
.min()
|
||||
.orElse(FetchUpdatableMessageRequest.DEFAULT_MIN_CURSOR_ID);
|
||||
maxUpdateTime = messages.stream()
|
||||
.mapToLong(MessageInfo::getUpdateTime)
|
||||
.mapToLong(UpdatableMessageInfo::getUpdateTime)
|
||||
.max()
|
||||
.orElse(FetchUpdatableMessageRequest.DEFAULT_MAX_UPDATE_TIME);
|
||||
}
|
||||
@ -51,29 +51,4 @@ public class FetchUpdatableMessageResponse {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
public static class MessageInfo {
|
||||
/**
|
||||
* 消息体
|
||||
*/
|
||||
private String msgBody;
|
||||
/**
|
||||
* 消息ID
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Long updateTime;
|
||||
/**
|
||||
* 业务消息ID. 用于ack
|
||||
*/
|
||||
private String bizMessageId;
|
||||
/**
|
||||
* 数据版本. 用于ack
|
||||
*/
|
||||
private Long dataVersion;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.axzo.im.center.api.vo.resp;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class GetMessageDetailResponse {
|
||||
|
||||
/**
|
||||
* 消息列表
|
||||
*/
|
||||
private List<UpdatableMessageInfo> messages = new ArrayList<>();
|
||||
|
||||
public void addMessage(UpdatableMessageInfo message) {
|
||||
messages.add(message);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package cn.axzo.im.center.api.vo.resp;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class UpdatableMessageInfo {
|
||||
/**
|
||||
* 消息体
|
||||
*/
|
||||
private String msgBody;
|
||||
/**
|
||||
* 消息ID
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Long updateTime;
|
||||
/**
|
||||
* 业务消息ID. 用于ack
|
||||
*/
|
||||
private String bizMessageId;
|
||||
/**
|
||||
* 数据版本. 用于ack
|
||||
*/
|
||||
private Long dataVersion;
|
||||
}
|
||||
@ -12,6 +12,7 @@ import cn.axzo.im.center.api.vo.req.AsyncSendMessageParam;
|
||||
import cn.axzo.im.center.api.vo.req.CustomMessageInfo;
|
||||
import cn.axzo.im.center.api.vo.req.FetchUpdatableMessageRequest;
|
||||
import cn.axzo.im.center.api.vo.req.GetBizMessageIdsRequest;
|
||||
import cn.axzo.im.center.api.vo.req.GetMessageDetailRequest;
|
||||
import cn.axzo.im.center.api.vo.req.MessageInfo;
|
||||
import cn.axzo.im.center.api.vo.req.SendMessageParam;
|
||||
import cn.axzo.im.center.api.vo.req.SendTemplateMessageParam;
|
||||
@ -19,6 +20,7 @@ import cn.axzo.im.center.api.vo.req.UpdatableMessageAckRequest;
|
||||
import cn.axzo.im.center.api.vo.req.UpdateMessageRequest;
|
||||
import cn.axzo.im.center.api.vo.resp.FetchUpdatableMessageResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.GetBizMessageIdsResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.GetMessageDetailResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageCustomResp;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageDispatchResp;
|
||||
import cn.axzo.im.center.api.vo.resp.MessageTaskResp;
|
||||
@ -249,6 +251,13 @@ public class MessageController implements MessageApi {
|
||||
return ApiResult.ok(resp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<GetMessageDetailResponse> getMessageDetails(GetMessageDetailRequest request) {
|
||||
log.info("getMessageDetail, request={}", request);
|
||||
GetMessageDetailResponse resp = updatableMessageQueryService.getMessageDetails(request);
|
||||
return ApiResult.ok(resp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<GetBizMessageIdsResponse> getBizMessageIds(GetBizMessageIdsRequest request) {
|
||||
log.info("getBizMessageIds, request={}", request);
|
||||
|
||||
@ -2,10 +2,14 @@ package cn.axzo.im.updatable;
|
||||
|
||||
import cn.axzo.im.center.api.vo.req.FetchUpdatableMessageRequest;
|
||||
import cn.axzo.im.center.api.vo.req.GetBizMessageIdsRequest;
|
||||
import cn.axzo.im.center.api.vo.req.GetMessageDetailRequest;
|
||||
import cn.axzo.im.center.api.vo.resp.FetchUpdatableMessageResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.GetBizMessageIdsResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.GetMessageDetailResponse;
|
||||
import cn.axzo.im.center.api.vo.resp.UpdatableMessageInfo;
|
||||
import cn.axzo.im.dao.repository.UpdatableMessageDao;
|
||||
import cn.axzo.im.entity.UpdatableMessage;
|
||||
import cn.axzo.im.utils.BizAssertions;
|
||||
import cn.axzo.im.utils.ImProperties;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -22,6 +26,17 @@ public class UpdatableMessageQueryService {
|
||||
private final UpdatableMessageDao updatableMessageDao;
|
||||
private final ImProperties props;
|
||||
|
||||
public GetMessageDetailResponse getMessageDetails(GetMessageDetailRequest request) {
|
||||
BizAssertions.assertTrue(request.getBizMessageIds().size() <= 100, "消息ID数量不能超过100");
|
||||
List<UpdatableMessage> messages = updatableMessageDao.lambdaQuery()
|
||||
.in(UpdatableMessage::getBizMessageId, request.getBizMessageIds())
|
||||
.list();
|
||||
GetMessageDetailResponse response = new GetMessageDetailResponse();
|
||||
for (UpdatableMessage message : messages)
|
||||
response.addMessage(toMessageInfo(message));
|
||||
return response;
|
||||
}
|
||||
|
||||
public FetchUpdatableMessageResponse fetchUpdatableMessage(FetchUpdatableMessageRequest request) {
|
||||
int maxSize = props.getUpdatable().getFetchMaxSize();
|
||||
List<UpdatableMessage> messages = updatableMessageDao.lambdaQuery()
|
||||
@ -32,19 +47,22 @@ public class UpdatableMessageQueryService {
|
||||
.last("LIMIT " + maxSize)
|
||||
.list();
|
||||
FetchUpdatableMessageResponse response = new FetchUpdatableMessageResponse();
|
||||
for (UpdatableMessage message : messages) {
|
||||
FetchUpdatableMessageResponse.MessageInfo imMessage = new FetchUpdatableMessageResponse.MessageInfo();
|
||||
imMessage.setMsgBody(message.getBizBody().toJSONString());
|
||||
imMessage.setBizMessageId(message.getBizMessageId());
|
||||
imMessage.setId(message.getId());
|
||||
imMessage.setUpdateTime(message.getUpdateAt().getTime());
|
||||
imMessage.setDataVersion(message.getDataVersion());
|
||||
response.addMessage(imMessage);
|
||||
}
|
||||
for (UpdatableMessage message : messages)
|
||||
response.addMessage(toMessageInfo(message));
|
||||
response.setQueryProgress();
|
||||
return response;
|
||||
}
|
||||
|
||||
private static UpdatableMessageInfo toMessageInfo(UpdatableMessage message) {
|
||||
UpdatableMessageInfo imMessage = new UpdatableMessageInfo();
|
||||
imMessage.setMsgBody(message.getBizBody().toJSONString());
|
||||
imMessage.setBizMessageId(message.getBizMessageId());
|
||||
imMessage.setId(message.getId());
|
||||
imMessage.setUpdateTime(message.getUpdateAt().getTime());
|
||||
imMessage.setDataVersion(message.getDataVersion());
|
||||
return imMessage;
|
||||
}
|
||||
|
||||
public GetBizMessageIdsResponse getBizMessageIds(GetBizMessageIdsRequest request) {
|
||||
List<UpdatableMessage> messages = updatableMessageDao.getByNimMessageIds(request.getNimMessageIds());
|
||||
GetBizMessageIdsResponse response = new GetBizMessageIdsResponse();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user