From 300a17685bdff4428bc3868d0f1d2b9cf25d4442 Mon Sep 17 00:00:00 2001 From: yanglin Date: Thu, 22 Feb 2024 11:47:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REQ-2233:=20=E8=BF=90=E8=90=A5=E9=9C=80?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/v3/im/BatchSendResult.java | 10 +++--- .../impl/v3/msg/MessageMappingProcessor.java | 6 +++- .../axzo/msg/center/api/MessageAPIV3Test.java | 35 +++++++++++++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 start/src/test/java/cn/axzo/msg/center/api/MessageAPIV3Test.java diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/im/BatchSendResult.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/im/BatchSendResult.java index f2240709..5fea9532 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/im/BatchSendResult.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/im/BatchSendResult.java @@ -4,12 +4,12 @@ import cn.axzo.im.center.api.vo.resp.MessageDispatchResp; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; -import static java.util.function.Function.identity; -import static java.util.stream.Collectors.toMap; +import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.toSet; /** @@ -18,7 +18,7 @@ import static java.util.stream.Collectors.toSet; public class BatchSendResult { private final Set requestPersonIds; - private final Map personId2SendResult; + private final Map> personId2SendResult; BatchSendResult(Set requestPersonIds) { this(requestPersonIds, Collections.emptyList()); @@ -31,10 +31,10 @@ public class BatchSendResult { this.personId2SendResult = respList.stream() // [2024.1.16]: im端在处理逐条发送和批量发送时的逻辑不一致, 批量发送时没有返回msgId -_- .filter(r -> r.getPersonId() != null) - .collect(toMap(r -> Long.valueOf(r.getPersonId()), identity())); + .collect(groupingBy(r -> Long.valueOf(r.getPersonId()))); } - public Optional findSendResult(Long personId) { + public Optional> findSendResult(Long personId) { return Optional.ofNullable(personId2SendResult.get(personId)); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java index e7bf2d0d..f7a4b4d1 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java @@ -17,11 +17,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static java.util.function.Function.identity; +import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toMap; /** @@ -87,8 +89,10 @@ public class MessageMappingProcessor implements EventMappingProcessor { continue; } String imMessageId = batchResult.findSendResult(personId) + .orElse(new ArrayList<>()) + .stream() .map(MessageDispatchResp::getMsgid) - .orElse(null); + .collect(joining(",")); // 把im端的id也存起来 messageRecordV3Dao.setSendSuccess(message.getId(), imMessageId); } diff --git a/start/src/test/java/cn/axzo/msg/center/api/MessageAPIV3Test.java b/start/src/test/java/cn/axzo/msg/center/api/MessageAPIV3Test.java new file mode 100644 index 00000000..5afa6369 --- /dev/null +++ b/start/src/test/java/cn/axzo/msg/center/api/MessageAPIV3Test.java @@ -0,0 +1,35 @@ +package cn.axzo.msg.center.api; + +import cn.axzo.msg.center.MsgCenterApplication; +import cn.axzo.msg.center.api.request.v3.MessageSendReqV3; +import cn.axzo.msg.center.service.dto.PersonV3DTO; +import lombok.RequiredArgsConstructor; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author yanglin + */ +@SpringBootTest(classes = MsgCenterApplication.class) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +class MessageAPIV3Test { + private final MessageAPIV3 messageAPIV3; + + @Test + void foo() throws Exception { + MessageSendReqV3 req = new MessageSendReqV3(); + req.setSender(new PersonV3DTO(-99L)); + req.setReceivers(Arrays.asList(new PersonV3DTO(2810L))); + req.setBizEventMappingCode("operator_news"); + req.setBizCode("operator_news"); + messageAPIV3.send(req); + + Thread.sleep(100000L); + } + +} \ No newline at end of file From cf49d8faae1ceeb0dd67c5cd5e5c6a6073f25ee6 Mon Sep 17 00:00:00 2001 From: yanglin Date: Thu, 22 Feb 2024 16:19:48 +0800 Subject: [PATCH 2/2] =?UTF-8?q?REQ-2233:=20=E8=BF=90=E8=90=A5=E9=9C=80?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/v3/msg/MessageMappingProcessor.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java index f7a4b4d1..4f356b87 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/v3/msg/MessageMappingProcessor.java @@ -14,13 +14,16 @@ import cn.axzo.msg.center.inside.notices.utils.FunctionalTransactionTemplate; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import static java.util.function.Function.identity; import static java.util.stream.Collectors.joining; @@ -92,9 +95,14 @@ public class MessageMappingProcessor implements EventMappingProcessor { .orElse(new ArrayList<>()) .stream() .map(MessageDispatchResp::getMsgid) + .filter(Objects::nonNull) .collect(joining(",")); - // 把im端的id也存起来 - messageRecordV3Dao.setSendSuccess(message.getId(), imMessageId); + if (StringUtils.isBlank(imMessageId)) { + messageRecordV3Dao.batchSetSendFailed(Collections.singletonList(message.getId()), "云信没有返回message_id"); + } else { + // 把im端的id也存起来 + messageRecordV3Dao.setSendSuccess(message.getId(), imMessageId); + } } }