REQ-1898: 调整接口返回模型

This commit is contained in:
yanglin 2024-01-14 17:29:29 +08:00
parent 4ae7ed98ef
commit 9bfca165e2
11 changed files with 135 additions and 67 deletions

View File

@ -1,8 +1,8 @@
package cn.axzo.msg.center.inside.notices.controller.msg;
import cn.axzo.msg.center.api.MessageAPIV3;
import cn.axzo.msg.center.api.request.MessageSendReqV3;
import cn.axzo.msg.center.api.response.MessageSendRespV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.api.response.v3.MessageSendRespV3;
import cn.axzo.msg.center.inside.notices.service.MessageServiceV3;
import cn.azxo.framework.common.model.CommonResponse;
import lombok.RequiredArgsConstructor;

View File

@ -1,11 +1,11 @@
package cn.axzo.msg.center.inside.notices.service;
import cn.axzo.msg.center.api.request.MessageSendReqV3;
import cn.axzo.msg.center.api.response.MessageSendRespV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.api.response.v3.MessageSendRespV3;
/**
* @author yanglin
*/
public interface MessageServiceV3 {
MessageSendRespV3 send(MessageSendReqV3 req);
}
}

View File

@ -5,9 +5,10 @@ import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.im.center.api.vo.req.MessageInfo;
import cn.axzo.im.center.api.vo.resp.MessageDispatchResp;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.msg.center.api.request.MessageSendReqV3;
import cn.axzo.msg.center.api.response.MessageSendRespV3;
import cn.axzo.msg.center.api.response.MessageSendResultV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.api.response.v3.MessageSendRespV3;
import cn.axzo.msg.center.api.response.v3.MessageSendResultV3;
import cn.axzo.msg.center.api.response.v3.TemplateSendResultV3;
import cn.axzo.msg.center.dal.MessageRecordV3Dao;
import cn.axzo.msg.center.domain.entity.BizEventMapping;
import cn.axzo.msg.center.domain.entity.MessageRecordV3;
@ -66,7 +67,7 @@ public class MessageServiceV3Impl implements MessageServiceV3 {
.queryEnableTemplateByCode(cfg.getTemplateCode())
.orElseThrow(() -> new ServiceException(String.format(
"未查询到对应的模板, templateCode=%s", cfg.getTemplateCode())));
batches.add(new TemplateMessage(req, batchNo, template));
batches.add(new TemplateMessage(req, batchNo, cfg, template));
}
List<MessageRecordV3> messages = batches.stream()
@ -75,9 +76,15 @@ public class MessageServiceV3Impl implements MessageServiceV3 {
messageRecordV3Dao.saveBatch(messages);
batches.forEach(this::batchSendByTemplate);
MessageSendRespV3 resp = new MessageSendRespV3();
for (MessageRecordV3 message : messages) {
resp.addResult(new MessageSendResultV3(
message.getReceiverPersonId(), message.getId()));
for (TemplateMessage batch : batches) {
TemplateSendResultV3 templateResult = new TemplateSendResultV3();
templateResult.setTemplateCode(batch.getTemplate().getCode());
templateResult.setBizActionCategory(batch.getConfig().getCategory());
resp.addResult(templateResult);
for (MessageRecordV3 message : batch.getMessageRecords()) {
templateResult.addResult(new MessageSendResultV3(
message.getReceiverPersonId(), message.getId()));
}
}
return resp;
}

View File

@ -4,12 +4,13 @@ import cn.axzo.framework.jackson.utility.JSON;
import cn.axzo.im.center.api.vo.req.MessageInfo;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.msg.center.api.enums.MsgStateV3Enum;
import cn.axzo.msg.center.api.request.MessageSendReqV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
import cn.axzo.msg.center.domain.entity.MessageRecordV3;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO;
import cn.axzo.msg.center.service.bizevent.request.ReachDto;
import cn.axzo.msg.center.service.dto.PersonV3DTO;
import cn.axzo.msg.center.utils.UUIDUtil;
import com.alibaba.fastjson.JSONObject;
@ -34,6 +35,8 @@ class TemplateMessage {
private final MessageSendReqV3 req;
private final String batchNo;
@Getter
private final ReachDto config;
@Getter
private final MessageTemplateDTO template;
private List<MessageRecordV3> records;

View File

@ -1,8 +1,8 @@
package cn.axzo.msg.center.api;
import cn.axzo.msg.center.api.fallback.LoggingFallbackFactory;
import cn.axzo.msg.center.api.request.MessageSendReqV3;
import cn.axzo.msg.center.api.response.MessageSendRespV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.api.response.v3.MessageSendRespV3;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;

View File

@ -1,4 +1,4 @@
package cn.axzo.msg.center.api.request;
package cn.axzo.msg.center.api.request.v3;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.msg.center.service.dto.PersonV3DTO;

View File

@ -1,47 +0,0 @@
package cn.axzo.msg.center.api.response;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author yanglin
*/
public class MessageSendRespV3 implements Serializable {
/**
* 接收者personId -> 发送结果
*/
private final Map<Long, MessageSendResultV3> receiverPersonId2Result = new HashMap<>();
public void addResult(MessageSendResultV3 result) {
receiverPersonId2Result.put(result.getReceiverPersonId(), result);
}
public Optional<MessageSendResultV3> findResultByReceiver(Long receiverPersonId) {
if (receiverPersonId == null) {
return Optional.empty();
}
return Optional.ofNullable(receiverPersonId2Result.get(receiverPersonId));
}
/**
* 返回的数量不一定和发送请求中的receivers数量一致, 发送的时候根据receiver的personId去了重
* <p>推荐使用 {@link #findResultByReceiver}, 根据接收者获取发送结果
*
* @return 所有的发送结果
*/
public Collection<MessageSendResultV3> getSendResults() {
return new ArrayList<>(receiverPersonId2Result.values());
}
@Override
public String toString() {
return JSON.toJSONString(receiverPersonId2Result);
}
}

View File

@ -0,0 +1,41 @@
package cn.axzo.msg.center.api.response.v3;
import com.alibaba.fastjson.JSON;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author yanglin
*/
@Setter
@NoArgsConstructor
public class MessageSendRespV3 implements Serializable {
/**
* 模版code -> 模版发送结果
*/
private Map<String, TemplateSendResultV3> templateCode2SendResult = new HashMap<>();
public void addResult(TemplateSendResultV3 result) {
templateCode2SendResult.put(result.getTemplateCode(), result);
}
public Optional<TemplateSendResultV3> findTemplateSendResult(String templateCode) {
return Optional.ofNullable(templateCode2SendResult.get(templateCode));
}
public Map<String, TemplateSendResultV3> getTemplateSendResult() {
return Collections.unmodifiableMap(templateCode2SendResult);
}
@Override
public String toString() {
return JSON.toJSONString(templateCode2SendResult);
}
}

View File

@ -1,15 +1,17 @@
package cn.axzo.msg.center.api.response;
package cn.axzo.msg.center.api.response.v3;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
/**
* @author yanglin
*/
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor

View File

@ -0,0 +1,61 @@
package cn.axzo.msg.center.api.response.v3;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author yanglin
*/
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class TemplateSendResultV3 implements Serializable {
/**
* 接收者personId -> 接收人发送结果
*/
private Map<Long, MessageSendResultV3> receiverPersonId2SendResult = new HashMap<>();
@Getter
private String templateCode;
/**
* NOTIFICATION: 通知, PENDING: 待办
*/
@Getter
private String bizActionCategory;
public void addResult(MessageSendResultV3 result) {
receiverPersonId2SendResult.put(result.getReceiverPersonId(), result);
}
public Optional<MessageSendResultV3> findResultByReceiver(Long receiverPersonId) {
if (receiverPersonId == null) {
return Optional.empty();
}
return Optional.ofNullable(receiverPersonId2SendResult.get(receiverPersonId));
}
/**
* 返回的数量不一定和发送请求中的receivers数量一致, 发送的时候根据receiver的personId去了重
* <p>推荐使用 {@link #findResultByReceiver}, 根据接收者获取发送结果
*
* @return 所有的发送结果
*/
public Collection<MessageSendResultV3> getMessageSendResults() {
return new ArrayList<>(receiverPersonId2SendResult.values());
}
@Override
public String toString() {
return JSON.toJSONString(receiverPersonId2SendResult);
}
}

View File

@ -1,8 +1,8 @@
package cn.axzo.msg.center.inside.notices.service;
import cn.axzo.msg.center.MsgCenterApplication;
import cn.axzo.msg.center.api.request.MessageSendReqV3;
import cn.axzo.msg.center.api.response.MessageSendRespV3;
import cn.axzo.msg.center.api.request.v3.MessageSendReqV3;
import cn.axzo.msg.center.api.response.v3.MessageSendRespV3;
import cn.axzo.msg.center.common.utils.MiscUtils;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.dto.PersonV3DTO;
@ -65,7 +65,8 @@ class MessageServiceV3Test {
.build()));
MessageSendRespV3 resp = messageServiceV3.send(req);
System.out.println(JSON.toJSONString(resp));
String json = JSON.toJSONString(resp);
System.out.println(json);
// 使用异步发送, 避免测试结束
MiscUtils.sleepQuietly(10, TimeUnit.SECONDS);