REQ-3281: 发送卡片消息

This commit is contained in:
yanglin 2024-12-12 10:38:43 +08:00
parent 743739df35
commit 013cf25adb
3 changed files with 51 additions and 6 deletions

View File

@ -3,6 +3,7 @@ package cn.axzo.msg.center.message.service.todo.manage.event;
import cn.axzo.msg.center.dal.TodoBusinessDao;
import cn.axzo.msg.center.dal.TodoBusinesses;
import cn.axzo.msg.center.domain.entity.MessageEntity;
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
import cn.axzo.msg.center.domain.entity.Todo;
import cn.axzo.msg.center.domain.entity.TodoBusiness;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
@ -14,6 +15,7 @@ import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
import cn.axzo.msg.center.message.service.youmeng.YoumengPush;
import cn.axzo.msg.center.message.service.youmeng.YoumengTemplateClient;
import cn.axzo.msg.center.nimpush.PushChannel;
import cn.axzo.msg.center.nimpush.PushPriorityController;
import cn.axzo.msg.center.nimpush.device.PushDevice;
import cn.axzo.msg.center.nimpush.device.PushDeviceService;
import cn.axzo.msg.center.nimpush.device.PushDeviceSnapshots;
@ -53,11 +55,16 @@ class TodoPushSender implements ApplicationListener<NewTodoEvent> {
@Override
public void onApplicationEvent(@NotNull NewTodoEvent event) {
log.info("Prepare sending todo push. event={}", event);
PushData pushData = event.getTemplateModel().getTemplate().parsePushData();
MessageTemplateV3 template = event.getTemplateModel().getTemplate();
if (!PushPriorityController.create(template).isPushViaTodo()) {
log.info("Template is not pushable via todo. template={}", template);
return;
}
PushData pushData = template.parsePushData();
if (!pushData.determinePushable(log, event.getTemplateModel().getTemplateCode()))
return;
List<PushTerminalEnum> pushTerminals = event
.getTemplateModel().getTemplate().determinePushTerminals();
List<PushTerminalEnum> pushTerminals = template.determinePushTerminals();
PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots();
ArrayList<YoumengPush> pushes = new ArrayList<>();
for (Todo todo : event.getTodos()) {
@ -79,7 +86,7 @@ class TodoPushSender implements ApplicationListener<NewTodoEvent> {
pushes.add(push);
}
if (CollectionUtils.isNotEmpty(pushes))
youmengTemplateClient.asyncSend(event.getTemplateModel().getTemplate().getId(), pushes);
youmengTemplateClient.asyncSend(template.getId(), pushes);
}
private List<AppLink> determineNavigations(TemplateModelV3 templateModel, Todo todo) {

View File

@ -8,6 +8,7 @@ import cn.axzo.im.center.api.vo.resp.MessageCustomResp;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.msg.center.common.utils.BizAssertions;
import cn.axzo.msg.center.domain.entity.MessageEntity;
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
import cn.axzo.msg.center.domain.entity.Todo;
import cn.axzo.msg.center.inside.notices.service.impl.v3.msg.TerminalAppMapping;
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
@ -16,6 +17,7 @@ import cn.axzo.msg.center.nimpush.NimPushService;
import cn.axzo.msg.center.nimpush.PushChannel;
import cn.axzo.msg.center.nimpush.PushExecutorConfig;
import cn.axzo.msg.center.nimpush.PushPeer;
import cn.axzo.msg.center.nimpush.PushPriorityController;
import cn.axzo.msg.center.nimpush.device.PushDevice;
import cn.axzo.msg.center.nimpush.device.PushDeviceService;
import cn.axzo.msg.center.nimpush.device.PushDeviceSnapshots;
@ -53,8 +55,12 @@ public class TodoPushSenderNim implements ApplicationListener<NewTodoEvent> {
@Override
public void onApplicationEvent(NewTodoEvent event) {
List<PushTerminalEnum> pushTerminals = event
.getTemplateModel().getTemplate().determinePushTerminals();
MessageTemplateV3 template = event.getTemplateModel().getTemplate();
if (!PushPriorityController.create(template).isPushViaTodo()) {
log.info("Template is not pushable via todo. template={}", template);
return;
}
List<PushTerminalEnum> pushTerminals = template.determinePushTerminals();
List<AppTypeEnum> appTypes = terminalAppMapping.toImTypes(pushTerminals);
if (CollectionUtils.isEmpty(appTypes)) return;
ParsedModelV3 parsedModelV3 = parseModelForTodoPush(

View File

@ -0,0 +1,32 @@
package cn.axzo.msg.center.nimpush;
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
import cn.axzo.msg.center.service.enums.MessageChannel;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import java.util.List;
/**
* @author yanglin
*/
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class PushPriorityController {
private final MessageTemplateV3 template;
public static PushPriorityController create(MessageTemplateV3 template) {
return new PushPriorityController(template);
}
public boolean isPushViaTodo() {
List<MessageChannel> channels = template.determineChannels();
return channels.size() == 1 && channels.contains(MessageChannel.TODO);
}
public boolean isPushViaIm() {
List<MessageChannel> channels = template.determineChannels();
return channels.contains(MessageChannel.IM);
}
}