From 88dce18bb1df145b4163704bec544b8cea01aa0c Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Feb 2025 12:41:39 +0800 Subject: [PATCH 1/8] =?UTF-8?q?REQ-3581:=20=E5=8D=87=E7=BA=A7=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inside-notices/pom.xml | 1 + start/pom.xml | 1 + wx-notices/pom.xml | 1 + 3 files changed, 3 insertions(+) diff --git a/inside-notices/pom.xml b/inside-notices/pom.xml index bcd781b0..9fdfa7d1 100644 --- a/inside-notices/pom.xml +++ b/inside-notices/pom.xml @@ -46,6 +46,7 @@ cn.axzo.trade trade-web-spring-boot-starter + 2.0.1-SNAPSHOT org.mybatis diff --git a/start/pom.xml b/start/pom.xml index 790bf418..a08b879a 100644 --- a/start/pom.xml +++ b/start/pom.xml @@ -37,6 +37,7 @@ cn.axzo.trade trade-web-spring-boot-starter + 2.0.1-SNAPSHOT cn.axzo.msgcenter diff --git a/wx-notices/pom.xml b/wx-notices/pom.xml index 03fdaaca..64a9817f 100644 --- a/wx-notices/pom.xml +++ b/wx-notices/pom.xml @@ -61,6 +61,7 @@ cn.axzo.trade trade-web-spring-boot-starter + 2.0.1-SNAPSHOT \ No newline at end of file From 7bb8ee037b52b6dc69b559418ae42ea7325aabc3 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 28 Feb 2025 14:20:12 +0800 Subject: [PATCH 2/8] =?UTF-8?q?REQ-3754:=20=E6=89=B9=E9=87=8F=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2epic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../outer/PushYouMengMessageHandler.java | 35 ++++++++-------- .../message/service/card/CardManager.java | 27 ++++++------ .../service/card/domain/CardSendModel.java | 19 ++++++--- .../service/impl/v3/ModelV3Parser.java | 27 ++++++------ .../todo/manage/event/NewTodoEvent.java | 19 ++++++--- .../todo/manage/event/TodoPushSender.java | 28 +++++++------ .../todo/manage/event/TodoPushSenderNim.java | 2 +- .../msg/center/nimpush/device/PushDevice.java | 21 ++-------- .../nimpush/device/PushDeviceService.java | 42 +++++++++++-------- .../nimpush/device/PushDeviceSnapshots.java | 33 ++++++++++----- .../response/v3/ParsedModelV3Walker.java | 12 +++--- .../response/v3/model/ParsedModelV3.java | 39 +++++++++-------- .../nimpush/device/PushDeviceServiceTest.java | 29 ------------- 13 files changed, 167 insertions(+), 166 deletions(-) delete mode 100644 start/src/test/java/cn/axzo/msg/center/nimpush/device/PushDeviceServiceTest.java diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/event/outer/PushYouMengMessageHandler.java b/inside-notices/src/main/java/cn/axzo/msg/center/event/outer/PushYouMengMessageHandler.java index 17c6f101..413a0297 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/event/outer/PushYouMengMessageHandler.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/event/outer/PushYouMengMessageHandler.java @@ -1,5 +1,21 @@ package cn.axzo.msg.center.event.outer; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; + import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.EventConsumer; import cn.axzo.framework.rocketmq.EventHandler; @@ -19,21 +35,7 @@ import cn.axzo.msg.center.nimpush.device.PushDevice; import cn.axzo.msg.center.nimpush.device.PushDeviceService; import cn.axzo.msg.center.push.PushData; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; -import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; -import java.util.stream.Collectors; @Slf4j @Component @@ -127,9 +129,8 @@ public class PushYouMengMessageHandler implements EventHandler, InitializingBean log.info("push-handler, 模板code:{},appType不合法, event: {}", card.getTemplateCode(), event); return; } - PushDevice device = pushDeviceService - .createDeviceSnapshots() - .getDevice(Long.parseLong(newMessageHistory.getReceivePersonId())); + long personId = Long.parseLong(newMessageHistory.getReceivePersonId()); + PushDevice device = pushDeviceService.getDevice(personId); if(!device.shouldPush(appType, PushChannel.YOU_MENG)) { log.info("push-handler, 模板code:{}, 友盟push不适用, event: {}", card.getTemplateCode(), event); return; diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardManager.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardManager.java index b5ff068b..d00c095c 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardManager.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardManager.java @@ -1,5 +1,18 @@ package cn.axzo.msg.center.message.service.card; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionTemplate; + import cn.axzo.framework.jackson.utility.JSON; import cn.axzo.im.center.api.feign.MessageApi; import cn.axzo.im.center.api.vo.req.SendTemplateMessageParam; @@ -42,18 +55,6 @@ import cn.axzo.msg.center.utils.BatchController; import cn.axzo.msg.center.utils.RecordCursor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; -import org.springframework.transaction.support.TransactionTemplate; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.function.Supplier; /** * @author yanglin @@ -106,7 +107,7 @@ public class CardManager { cardDao.saveBatch(sendModel.getCards()); sendLogger.reloadAndLogCards("send:enqueue"); }); - PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots(); + PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots(sendModel.receiverPersonIds()); BatchController groupExecutor = new BatchController("sendCard", request, executor); for (CardGroup group : sendModel.getCardGroups()) { groupExecutor.submit(() -> { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardSendModel.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardSendModel.java index aeaff8b0..c50c498e 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardSendModel.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardSendModel.java @@ -1,5 +1,14 @@ package cn.axzo.msg.center.message.service.card.domain; +import static java.util.stream.Collectors.toSet; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + import cn.axzo.msg.center.domain.entity.Card; import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO; import cn.axzo.msg.center.message.service.card.CardRequestContext; @@ -11,12 +20,6 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - /** * @author yanglin */ @@ -35,6 +38,10 @@ public class CardSendModel { cards.add(card); } + public Set receiverPersonIds() { + return cards.stream().map(Card::getReceiverPersonId).collect(toSet()); + } + public Collection getCardGroups() { HashMap groups = new HashMap<>(); for (Card card : cards) { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java index 790f3e36..93489699 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java @@ -1,5 +1,18 @@ package cn.axzo.msg.center.message.service.impl.v3; +import static cn.axzo.msg.center.common.utils.PlaceholderResolver.getDefaultResolver; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3; import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3; import cn.axzo.msg.center.message.domain.dto.TemplateModelV3; @@ -20,19 +33,8 @@ import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3; import cn.axzo.msg.center.service.pending.response.v3.model.PhoneInfo; import cn.axzo.trade.datasecurity.core.util.DataSecurityHelper; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.math.NumberUtils; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -import static cn.axzo.msg.center.common.utils.PlaceholderResolver.getDefaultResolver; /** * @author yanglin @@ -154,7 +156,8 @@ public class ModelV3Parser { } }); - + // 提前排序避免并发问题 + parsedModel.sortButtons(); return parsedModel; } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/NewTodoEvent.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/NewTodoEvent.java index 0d88aaa3..4a5dc9ec 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/NewTodoEvent.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/NewTodoEvent.java @@ -1,13 +1,18 @@ package cn.axzo.msg.center.message.service.todo.manage.event; -import cn.axzo.msg.center.domain.entity.Todo; -import cn.axzo.msg.center.message.domain.dto.TemplateModelV3; -import com.alibaba.fastjson.JSON; -import lombok.Getter; -import org.springframework.context.ApplicationEvent; +import static java.util.stream.Collectors.toSet; import java.util.HashMap; import java.util.List; +import java.util.Set; + +import org.springframework.context.ApplicationEvent; + +import com.alibaba.fastjson.JSON; + +import cn.axzo.msg.center.domain.entity.Todo; +import cn.axzo.msg.center.message.domain.dto.TemplateModelV3; +import lombok.Getter; /** * @author yanglin @@ -23,6 +28,10 @@ public class NewTodoEvent extends ApplicationEvent { this.todos = todos; } + public Set executorPersonIds() { + return todos.stream().map(Todo::getExecutorPersonId).collect(toSet()); + } + @Override public String toString() { HashMap fields = new HashMap<>(); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java index b2fd791d..f8eec2ce 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java @@ -1,5 +1,19 @@ package cn.axzo.msg.center.message.service.todo.manage.event; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + import cn.axzo.msg.center.dal.TodoBusinessDao; import cn.axzo.msg.center.dal.TodoBusinesses; import cn.axzo.msg.center.domain.entity.MessageEntity; @@ -23,20 +37,8 @@ import cn.axzo.msg.center.service.domain.CardUrlConfig; import cn.axzo.msg.center.service.domain.UrlConfig; import cn.axzo.msg.center.service.domain.UrlConfigWalker; import cn.axzo.msg.center.service.enums.PushTerminalEnum; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.jetbrains.annotations.NotNull; -import org.springframework.context.ApplicationListener; -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; /** * @author yanglin @@ -64,7 +66,7 @@ class TodoPushSender implements ApplicationListener { if (!pushData.determinePushable(log, event.getTemplateModel().getTemplateCode())) return; List pushTerminals = template.determinePushTerminals(); - PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots(); + PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots(event.executorPersonIds()); ArrayList pushes = new ArrayList<>(); for (Todo todo : event.getTodos()) { PushDevice pushDevice = deviceSnapshots.getDevice(todo.getExecutorPersonId()); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSenderNim.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSenderNim.java index 6beddf3a..d352e34c 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSenderNim.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSenderNim.java @@ -72,7 +72,7 @@ public class TodoPushSenderNim implements ApplicationListener { if (pushData != null && !pushData.determinePushable(log, parsedModelV3.getTemplateCode())) { return; } - PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots(); + PushDeviceSnapshots deviceSnapshots = pushDeviceService.createDeviceSnapshots(event.executorPersonIds()); for (Todo todo : event.getTodos()) { executor.submit(() -> { for (AppTypeEnum appType : appTypes) { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDevice.java b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDevice.java index 86521e5d..4841efea 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDevice.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDevice.java @@ -1,5 +1,7 @@ package cn.axzo.msg.center.nimpush.device; +import java.util.List; + import cn.axzo.epic.client.vo.response.ApkDeviceMaxCodeResp; import cn.axzo.im.center.common.enums.AppTypeEnum; import cn.axzo.msg.center.nimpush.PushChannel; @@ -7,8 +9,6 @@ import cn.axzo.msg.center.service.enums.PushTerminalEnum; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; -import java.util.List; - /** * @author yanglin */ @@ -16,9 +16,7 @@ import java.util.List; public class PushDevice { private final PushDeviceService pushDeviceService; - private final Long personId; - - private volatile List cache; + private final List devices; public boolean shouldPush(AppTypeEnum appType, PushChannel pushChannel) { @@ -30,20 +28,7 @@ public class PushDevice { public boolean shouldPush(PushTerminalEnum pushTerminal, PushChannel pushChannel) { - List devices = getDevices(); return pushDeviceService.shouldPush(pushTerminal, pushChannel, devices); } - private List getDevices() { - List cache = this.cache; - if (cache != null) - return cache; - synchronized (this) { - cache = this.cache; - if (cache == null) - cache = this.cache = pushDeviceService.getPersonDevices(personId); - } - return cache; - } - } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java index 48f88d42..d525dbd3 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java @@ -1,8 +1,22 @@ package cn.axzo.msg.center.nimpush.device; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Supplier; + +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; + import cn.axzo.epic.client.common.enums.AppTerminalTypeEnum; import cn.axzo.epic.client.feign.AppDeviceApi; -import cn.axzo.epic.client.vo.request.FetchDeviceByPersonIdAndTerminalReq; +import cn.axzo.epic.client.vo.request.BatchFetchDeviceByPersonIdAndTerminalReq; import cn.axzo.epic.client.vo.response.ApkDeviceMaxCodeResp; import cn.axzo.msg.center.common.enums.SystemTypeEnum; import cn.axzo.msg.center.common.utils.BizAssertions; @@ -10,16 +24,8 @@ import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig; import cn.axzo.msg.center.inside.notices.config.push.PushDeviceVersion; import cn.axzo.msg.center.nimpush.PushChannel; import cn.axzo.msg.center.service.enums.PushTerminalEnum; -import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.stereotype.Component; - -import java.util.Arrays; -import java.util.List; -import java.util.Set; -import java.util.function.Supplier; /** * @author yanglin @@ -32,18 +38,19 @@ public class PushDeviceService { private final AppDeviceApi appDeviceApi; private final PendingMessageBizConfig cfg; - public PushDeviceSnapshots createDeviceSnapshots() { - return new PushDeviceSnapshots(this); + public PushDevice getDevice(long personId) { + return createDeviceSnapshots(Collections.singletonList(personId)).getDevice(personId); } - List getPersonDevices(Long personId) { - FetchDeviceByPersonIdAndTerminalReq request = - new FetchDeviceByPersonIdAndTerminalReq(); - request.setPersonId(personId); + public PushDeviceSnapshots createDeviceSnapshots(Collection personIds) { + ArrayList uniquePersonIds = new ArrayList<>(new HashSet<>(personIds)); + BatchFetchDeviceByPersonIdAndTerminalReq request = new BatchFetchDeviceByPersonIdAndTerminalReq(); + request.setPersonIds(uniquePersonIds); request.setTerminals(Arrays.asList( AppTerminalTypeEnum.CMP, AppTerminalTypeEnum.CM)); - return BizAssertions.assertResponse( - appDeviceApi.fetchCodeByPersonIdAndTerminal(request)); + List devices = BizAssertions.assertResponse( + appDeviceApi.batchfetchCodeByPersonIdAndTerminal(request)); + return new PushDeviceSnapshots(this, devices); } boolean shouldPush(PushTerminalEnum pushTerminal, @@ -104,5 +111,4 @@ public class PushDeviceService { return SystemTypeEnum.IOS; return null; } - } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceSnapshots.java b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceSnapshots.java index 78884743..35ee0eb7 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceSnapshots.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceSnapshots.java @@ -1,26 +1,39 @@ + package cn.axzo.msg.center.nimpush.device; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; +import static java.util.Collections.emptyList; +import static java.util.stream.Collectors.groupingBy; +import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import cn.axzo.epic.client.vo.response.ApkDeviceMaxCodeResp; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + /** * @author yanglin */ @RequiredArgsConstructor(access = AccessLevel.PACKAGE) public class PushDeviceSnapshots { - private final Map cache = new ConcurrentHashMap<>(); - private final PushDeviceService pushDeviceService; + private final Map cache = new ConcurrentHashMap<>(); + private final PushDeviceService pushDeviceService; + private final List devices; - public PushDevice getDevice(Long personId) { - return cache.computeIfAbsent(personId, this::createDevice); - } + private Map> personId2Devices; - private PushDevice createDevice(Long personId) { - return new PushDevice(pushDeviceService, personId); - } + public PushDevice getDevice(Long personId) { + return cache.computeIfAbsent(personId, this::createDevice); + } + + private PushDevice createDevice(Long personId) { + if (personId2Devices == null) + personId2Devices = devices.stream().collect(groupingBy(ApkDeviceMaxCodeResp::getPersonId)); + List personDevices = personId2Devices.getOrDefault(personId, emptyList()); + return new PushDevice(pushDeviceService, personDevices); + } } \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3Walker.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3Walker.java index 33582ee4..2c9b7f53 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3Walker.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3Walker.java @@ -1,5 +1,9 @@ package cn.axzo.msg.center.service.pending.response.v3; +import java.util.ArrayList; + +import org.apache.commons.collections4.CollectionUtils; + import cn.axzo.msg.center.service.domain.CardUrlConfig; import cn.axzo.msg.center.service.domain.card.AppVersionConfig; import cn.axzo.msg.center.service.domain.card.StateImageConfig; @@ -12,10 +16,6 @@ import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3; -import org.apache.commons.collections4.CollectionUtils; - -import java.util.ArrayList; -import java.util.Comparator; /** * @author yanglin @@ -41,9 +41,7 @@ public class ParsedModelV3Walker { } for (ParsedGroupV3 group : new ArrayList<>(model.determineGroups())) visitGroup(visitor, group); - ArrayList buttons = new ArrayList<>(model.determineButtons()); - buttons.sort(Comparator.comparingInt(ParsedButtonV3::determinePriority)); - for (ParsedButtonV3 button : buttons) + for (ParsedButtonV3 button : new ArrayList<>(model.determineButtons())) visitButton(visitor, button); if (template != null) visitor.exitTemplate(template); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java index d0d52d90..996f9c3f 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java @@ -1,19 +1,7 @@ package cn.axzo.msg.center.service.pending.response.v3.model; -import cn.axzo.msg.center.push.PushData; -import cn.axzo.msg.center.push.PushMessage; -import cn.axzo.msg.center.service.domain.CardUrlConfig; -import cn.axzo.msg.center.service.domain.UrlConfig; -import cn.axzo.msg.center.service.enums.GroupType; -import cn.axzo.msg.center.service.pending.response.MessageButtonProvider; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Getter; -import lombok.Setter; +import static java.util.stream.Collectors.toList; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -21,7 +9,21 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; -import static java.util.stream.Collectors.toList; +import javax.annotation.Nullable; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; + +import cn.axzo.msg.center.push.PushData; +import cn.axzo.msg.center.push.PushMessage; +import cn.axzo.msg.center.service.domain.CardUrlConfig; +import cn.axzo.msg.center.service.domain.UrlConfig; +import cn.axzo.msg.center.service.enums.GroupType; +import cn.axzo.msg.center.service.pending.response.MessageButtonProvider; +import lombok.Getter; +import lombok.Setter; /** * @author yanglin @@ -94,10 +96,13 @@ public class ParsedModelV3 implements MessageButtonProvider, Pus return groups == null ? Collections.emptyList() : groups; } - public List determineButtons() { - List buttons = this.buttons == null ? Collections.emptyList() : this.buttons; + public void sortButtons() { + if (buttons == null) return; buttons.sort(Comparator.comparingInt(ParsedButtonV3::determinePriority)); - return buttons; + } + + public List determineButtons() { + return this.buttons == null ? Collections.emptyList() : this.buttons; } public void removeEmptyKVGroups() { diff --git a/start/src/test/java/cn/axzo/msg/center/nimpush/device/PushDeviceServiceTest.java b/start/src/test/java/cn/axzo/msg/center/nimpush/device/PushDeviceServiceTest.java deleted file mode 100644 index 09575da7..00000000 --- a/start/src/test/java/cn/axzo/msg/center/nimpush/device/PushDeviceServiceTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.msg.center.nimpush.device; - -import cn.axzo.epic.client.vo.response.ApkDeviceMaxCodeResp; -import cn.axzo.msg.center.MsgCenterApplication; -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.List; - -import static org.junit.jupiter.api.Assertions.*; - -/** - * @author yanglin - */ -@SpringBootTest(classes = MsgCenterApplication.class) -@RequiredArgsConstructor(onConstructor_ = @Autowired) -class PushDeviceServiceTest { - - private final PushDeviceService pushDeviceService; - - @Test - void exec() { - List devices = pushDeviceService.getPersonDevices(80792L); - System.out.println(); - } - -} \ No newline at end of file From 2d7a699ad080b06ae1bb84ab9dcba65b7a9628d7 Mon Sep 17 00:00:00 2001 From: yanglin Date: Mon, 3 Mar 2025 10:27:00 +0800 Subject: [PATCH 3/8] =?UTF-8?q?REQ-3754:=20=E9=98=B2=E5=BE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../center/service/pending/response/v3/model/ParsedModelV3.java | 1 + 1 file changed, 1 insertion(+) diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java index 996f9c3f..70b5094a 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java @@ -98,6 +98,7 @@ public class ParsedModelV3 implements MessageButtonProvider, Pus public void sortButtons() { if (buttons == null) return; + this.buttons = new ArrayList<>(buttons); buttons.sort(Comparator.comparingInt(ParsedButtonV3::determinePriority)); } From 3c05e5f5c1c8656fdf4227653d06b11b503e2704 Mon Sep 17 00:00:00 2001 From: yanglin Date: Mon, 3 Mar 2025 10:32:23 +0800 Subject: [PATCH 4/8] =?UTF-8?q?REQ-3754:=20=E9=98=B2=E5=BE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/axzo/msg/center/utils/BatchController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/utils/BatchController.java b/inside-notices/src/main/java/cn/axzo/msg/center/utils/BatchController.java index 8757492e..fe991e92 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/utils/BatchController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/utils/BatchController.java @@ -22,7 +22,7 @@ public class BatchController { public BatchController(String operation, Object request, ExecutorService executor) { - this(operation, request, executor, 4); + this(operation, request, executor, 2); } public BatchController(String operation, Object request, From 6241988df9e032193fda294895d4e9aaf09a6ad5 Mon Sep 17 00:00:00 2001 From: yanglin Date: Tue, 4 Mar 2025 15:13:40 +0800 Subject: [PATCH 5/8] =?UTF-8?q?REQ-3754:=20=E9=81=BF=E5=85=8D=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=A9=BA=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/msg/center/nimpush/device/PushDeviceService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java index d525dbd3..34269bd4 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/nimpush/device/PushDeviceService.java @@ -43,6 +43,8 @@ public class PushDeviceService { } public PushDeviceSnapshots createDeviceSnapshots(Collection personIds) { + if (CollectionUtils.isNotEmpty(personIds)) + return new PushDeviceSnapshots(this, Collections.emptyList()); ArrayList uniquePersonIds = new ArrayList<>(new HashSet<>(personIds)); BatchFetchDeviceByPersonIdAndTerminalReq request = new BatchFetchDeviceByPersonIdAndTerminalReq(); request.setPersonIds(uniquePersonIds); From 38d0002ee3c3fa358b9ff216cdce20936098a7dc Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 14 Mar 2025 15:45:39 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inside-notices/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/inside-notices/pom.xml b/inside-notices/pom.xml index 9fdfa7d1..bcd781b0 100644 --- a/inside-notices/pom.xml +++ b/inside-notices/pom.xml @@ -46,7 +46,6 @@ cn.axzo.trade trade-web-spring-boot-starter - 2.0.1-SNAPSHOT org.mybatis From f8e5a8824068dd52263795d81b9c897f2a7b33bc Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 14 Mar 2025 15:50:44 +0800 Subject: [PATCH 7/8] =?UTF-8?q?Revert=20"=E6=B5=8B=E8=AF=95=E7=BC=96?= =?UTF-8?q?=E8=AF=91"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 38d0002ee3c3fa358b9ff216cdce20936098a7dc. --- inside-notices/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/inside-notices/pom.xml b/inside-notices/pom.xml index bcd781b0..9fdfa7d1 100644 --- a/inside-notices/pom.xml +++ b/inside-notices/pom.xml @@ -46,6 +46,7 @@ cn.axzo.trade trade-web-spring-boot-starter + 2.0.1-SNAPSHOT org.mybatis From f4fb56acd419d3e553d5d2eec38db0479fcda63d Mon Sep 17 00:00:00 2001 From: yanglin Date: Tue, 18 Mar 2025 09:46:02 +0800 Subject: [PATCH 8/8] =?UTF-8?q?REQ-3872:=20=E9=80=9A=E8=BF=87post=E5=8F=91?= =?UTF-8?q?=E9=80=81=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/impl/RegulatoryGaoxinClient.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/msg-notices/msg-notices-integration/src/main/java/cn/axzo/msg/center/notices/integration/client/impl/RegulatoryGaoxinClient.java b/msg-notices/msg-notices-integration/src/main/java/cn/axzo/msg/center/notices/integration/client/impl/RegulatoryGaoxinClient.java index b186aa06..6d5209fd 100644 --- a/msg-notices/msg-notices-integration/src/main/java/cn/axzo/msg/center/notices/integration/client/impl/RegulatoryGaoxinClient.java +++ b/msg-notices/msg-notices-integration/src/main/java/cn/axzo/msg/center/notices/integration/client/impl/RegulatoryGaoxinClient.java @@ -1,20 +1,22 @@ package cn.axzo.msg.center.notices.integration.client.impl; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; + import cn.hutool.core.net.URLEncoder; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Maps; import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.annotation.Configuration; - -import java.util.Map; /** * 信息中心短信服务组件 @@ -100,7 +102,7 @@ public class RegulatoryGaoxinClient { param.put("Pwd", pwd); param.put("Mobile", phone); param.put("Content", encodeContent); - return HttpUtil.toParams(param); + return JSON.toJSONString(param); } /** @@ -111,13 +113,13 @@ public class RegulatoryGaoxinClient { private String executeSend(String param) { try { //构建url - String requestUrl = this.createUrl(param); + //String requestUrl = this.createUrl(param); - log.info("发送政务短信请求: {}", requestUrl); + log.info("发送政务短信请求, url={}, body={}", url, param); //执行请求 String result = HttpUtil.post( - requestUrl, StrUtil.EMPTY_JSON + url, param ); //打印发送结果