diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java index c0394224..fcc78a7e 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java @@ -7,6 +7,7 @@ import cn.axzo.msg.center.api.mq.PresetButtonPressedMessage; import cn.axzo.msg.center.api.request.AddMnsChannelRequest; import cn.axzo.msg.center.api.request.MnsSendCodeV2Req; import cn.axzo.msg.center.api.request.SendMessageRequestDto; +import cn.axzo.msg.center.api.request.UpdateMnsChannelTemplateContentRequest; import cn.axzo.msg.center.api.request.UpdateMnsTemplateContentRequest; import cn.axzo.msg.center.api.request.v3.MessageSendReqV3; import cn.axzo.msg.center.api.request.v3.SearchMessageReqV3; @@ -15,7 +16,9 @@ import cn.axzo.msg.center.api.request.v3.SearchTodoLogReq; import cn.axzo.msg.center.api.request.v3.SetImSendPriorityRequest; import cn.axzo.msg.center.api.request.v3.UpdateMnsChannelTemplateRequest; import cn.axzo.msg.center.api.request.v4.MessageSendRequestV4; +import cn.axzo.msg.center.dal.MNSChannelMessageTemplateDao; import cn.axzo.msg.center.dal.MNSMessageTemplateDao; +import cn.axzo.msg.center.domain.entity.MNSChannelMessageTemplate; import cn.axzo.msg.center.domain.entity.MNSMessageTemplate; import cn.axzo.msg.center.im.service.IMService; import cn.axzo.msg.center.inside.notices.service.impl.TingyunService; @@ -81,6 +84,7 @@ public class PrivateMessageController { private final MNSNoticesApi mnsNoticesApi; private final MessageChannelRouter messageChannelRouter; private final MNSMessageTemplateDao mnsMessageTemplateDao; + private final MNSChannelMessageTemplateDao mnsChannelMessageTemplateDao; private final TingyunService tingyunService; private final MqProducer mqProducer; private final CardManager cardManager; @@ -219,6 +223,15 @@ public class PrivateMessageController { .update(); } + @PostMapping("/updateMnsTemplateChannelContent") + @EnableResponseAdvice(enable = false) + public Object updateMnsTemplateChannelContent(@RequestBody @Valid UpdateMnsChannelTemplateContentRequest request) { + return mnsChannelMessageTemplateDao.lambdaUpdate() + .eq(MNSChannelMessageTemplate::getTemplateNo, request.getTemplateCode()) + .set(MNSChannelMessageTemplate::getTemplateContent, request.getTemplateContent()) + .update(); + } + @PostMapping("/listMnsApps") @EnableResponseAdvice(enable = false) public Object listMnsApps() { 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 2a4da9fc..b5ff068b 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 @@ -81,7 +81,9 @@ public class CardManager { public CardSendResponse send(CardSendRequest request) { // 校验参数 BizAssertions.assertNotNull(request.getSender(), "发送人不能为空"); - BizAssertions.assertNotEmpty(request.getReceivers(), "接收人不能为空"); + BizAssertions.assertFalse( + request.getReceivers().isEmpty() + && request.getImReceiveAccounts().isEmpty(), "接收人不能为空"); RequestInfo requestInfo = new RequestInfo(); requestInfo.setTemplateCode(request.getTemplateCode()); requestInfo.setBizCode(request.getBizCode()); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardSupport.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardSupport.java index a69a9423..84d1c212 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardSupport.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/CardSupport.java @@ -98,39 +98,52 @@ public class CardSupport { GeneralMessagePushVO cardContent = cardParser.parseCardContent( sendModel.getCardTemplate(), sendModel.getRequest()); sendModel.setCardContent(cardContent); - for (PeerPerson person : sendModel.getRequest().getReceivers()) { + Supplier cardFactory = () -> { + Card card = new Card(); + sendModel.addCard(card); + card.setBatchNo(sendModel.getRequestContext().getBatchNo()); + card.setAppCode(sendModel.getRequest().getAppCode()); + card.setImTaskId(0L); + card.setBizMessageId(""); + card.setIdentityCode(UUIDUtil.uuidString()); + card.setBizCode(sendModel.getRequest().determineBizCode()); + card.setSubBizCode(sendModel.getRequest().determineSubBizCode()); + card.setTemplateCode(sendModel.getRequest().getTemplateCode()); + card.setBizState(sendModel.getRequest().getStateInfo().getBizState()); + card.setCardState(sendModel.getRequest().getStateInfo().getCardState()); + card.setTitle(sendModel.getTemplate().getTitle()); + card.setContent(sendModel.getTemplate().getContent()); + card.setCardContent(cardContent); + card.setBizParam(sendModel.getRequest().getBizParam()); + card.setRouterParam(sendModel.getRequest().getRouterParam()); + card.setSenderAppType(AppTypeEnum.SYSTEM); + card.setIsSenderRobot(YesOrNo.YES); + card.setSenderPersonId(sendModel.getRequest().getSender().getPersonIdOrDefault()); + card.setSenderOuId(sendModel.getRequest().getSender().getOuIdOrDefault()); + card.setSenderWorkspaceId(sendModel.getRequest().getSender().getWorkspaceIdOrDefault()); + card.setSubtitle(sendModel.getRequest().getSubtitle()); + card.setButtonStates(Collections.emptyList()); + card.setUpdatable(sendModel.getCardTemplate().isUpdatable() ? YesOrNo.YES : YesOrNo.NO); + return card; + }; + for (PeerPerson person : sendModel.getRequest().receiversOrEmpty()) { for (AppTypeEnum appType : sendModel.getCardTemplate().ensureAppTypesPresent()) { - Card card = new Card(); - sendModel.addCard(card); - card.setBatchNo(sendModel.getRequestContext().getBatchNo()); - card.setAppCode(sendModel.getRequest().getAppCode()); - card.setImTaskId(0L); - card.setBizMessageId(""); - card.setIdentityCode(UUIDUtil.uuidString()); - card.setBizCode(sendModel.getRequest().determineBizCode()); - card.setSubBizCode(sendModel.getRequest().determineSubBizCode()); - card.setTemplateCode(sendModel.getRequest().getTemplateCode()); - card.setBizState(sendModel.getRequest().getStateInfo().getBizState()); - card.setCardState(sendModel.getRequest().getStateInfo().getCardState()); - card.setTitle(sendModel.getTemplate().getTitle()); - card.setContent(sendModel.getTemplate().getContent()); - card.setCardContent(cardContent); - card.setBizParam(sendModel.getRequest().getBizParam()); - card.setRouterParam(sendModel.getRequest().getRouterParam()); - card.setSenderAppType(AppTypeEnum.SYSTEM); - card.setIsSenderRobot(YesOrNo.YES); + Card card = cardFactory.get(); card.setReceiverAppType(appType); - card.setSenderPersonId(sendModel.getRequest().getSender().getPersonIdOrDefault()); - card.setSenderOuId(sendModel.getRequest().getSender().getOuIdOrDefault()); - card.setSenderWorkspaceId(sendModel.getRequest().getSender().getWorkspaceIdOrDefault()); card.setReceiverPersonId(person.getPersonIdOrDefault()); card.setReceiverOuId(person.getOuIdOrDefault()); card.setReceiverWorkspaceId(person.getWorkspaceIdOrDefault()); - card.setSubtitle(sendModel.getRequest().getSubtitle()); - card.setButtonStates(Collections.emptyList()); - card.setUpdatable(sendModel.getCardTemplate().isUpdatable() ? YesOrNo.YES : YesOrNo.NO); + card.setImReceiveAccount(""); } } + for (String imAccount : sendModel.getRequest().imReceiveAccountsOrEmpty()) { + Card card = cardFactory.get(); + card.setReceiverAppType(AppTypeEnum.NONE); + card.setReceiverPersonId(-1L); + card.setReceiverOuId(-1L); + card.setReceiverWorkspaceId(-1L); + card.setImReceiveAccount(imAccount); + } } SendTemplateMessageParam buildImSendRequest(CardSendModel sendModel, @@ -168,6 +181,7 @@ public class CardSupport { .append(subBizCode) .build()); imRequest.setReceivePersons(group.buildReceiverAccounts()); + imRequest.setImReceiveAccounts(group.collectImReceiveAccounts()); imRequest.setExt(extBuilder.get()); imRequest.setUpdatable(sendModel.getCardTemplate().isUpdatable()); if (pushData.determinePushable(log, template.getCode())) { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardGroup.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardGroup.java index 8a4b27ec..1819cbcd 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardGroup.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/domain/CardGroup.java @@ -10,12 +10,15 @@ import cn.axzo.msg.center.nimpush.device.PushDeviceSnapshots; import com.alibaba.fastjson.JSON; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toSet; /** * @author yanglin @@ -31,15 +34,18 @@ public class CardGroup { cards.add(card); } - public List buildReceiverAccounts() { - return getCards().stream().map(card -> { - PersonAccountAttribute account = new PersonAccountAttribute(); - account.setPersonId(card.getReceiverPersonId() + ""); - account.setOuId(card.getReceiverOuId()); - account.setWorkspaceId(card.getReceiverWorkspaceId()); - account.setAppType(groupKey.getAppType()); - return account; - }).collect(toList()); + public Set buildReceiverAccounts() { + return getCards().stream() + .filter(card -> card.getReceiverAppType() != AppTypeEnum.NONE) + .map(card -> { + PersonAccountAttribute account = new PersonAccountAttribute(); + account.setPersonId(card.getReceiverPersonId() + ""); + account.setOuId(card.getReceiverOuId()); + account.setWorkspaceId(card.getReceiverWorkspaceId()); + account.setAppType(groupKey.getAppType()); + return account; + }) + .collect(toSet()); } public List buildNimPushExcludes(PushDeviceSnapshots deviceSnapshots) { @@ -58,6 +64,13 @@ public class CardGroup { .collect(toList()); } + public Set collectImReceiveAccounts() { + return getCards().stream() + .map(Card::getImReceiveAccount) + .filter(StringUtils::isNotBlank) + .collect(toSet()); + } + @Override public String toString() { return JSON.toJSONString(this); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/log/CardLoggers.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/log/CardLoggers.java index 73b38b71..1ab3c7dc 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/log/CardLoggers.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/card/log/CardLoggers.java @@ -60,6 +60,7 @@ public class CardLoggers { log.setReceiverOuId(card.getReceiverOuId()); log.setReceiverWorkspaceId(card.getReceiverWorkspaceId()); log.setReceiverAppType(card.getReceiverAppType()); + log.setImReceiveAccount(card.getImReceiveAccount()); log.setBizState(card.getBizState()); log.setCardState(card.getCardState()); log.setIdentityCode(card.getIdentityCode()); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java index b8646d17..5bee61f0 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java @@ -151,7 +151,7 @@ public class TodoRangeQueryService { */ private AnalysisPage pageQueryBusiness( PendingMessagePageRequest request, List templateCodes) { - Date startingAt = DateFormatUtil.toDate(LocalDateTime.now().minusDays(90)); + Date startingAt = DateFormatUtil.toDate(LocalDateTime.now().minusDays(270)); LambdaQueryWrapper query = businessQuery(request.getTitle(), true) .in(CollectionUtils.isNotEmpty(request.getTemplateCodes()), TodoBusiness::getTemplateCode, request.getTemplateCodes()) .eq(TodoBusiness::getPromoterPersonId, request.getPersonId()) @@ -224,8 +224,12 @@ public class TodoRangeQueryService { PendingMessagePageRequest request, Supplier> pageQuery) { AnalysisInfo analysis = request.getA(); Object analyzeItem = analysisHelper.getAnalyzeBusiness(analysis); - if (analyzeItem == null) - analyzeItem = analysisHelper.getAnalyzeTodo(request, analysis); + if (analyzeItem == null) { + Todo todo = analysisHelper.getAnalyzeTodo(request, analysis); + analyzeItem = todo; + if (todo != null && analysis.isTodoBusiness()) + analyzeItem = todoBusinessDao.getBusinesses(todo).findBusiness(todo).orElse(null); + } if (analyzeItem != null || analysis.isCollectSql()) CollectSQLInterceptor.enableCollectSQL(new CollectSqlConfig(true)); try { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/mybatis/rowcountwarn/ProxyStatement.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/mybatis/rowcountwarn/ProxyStatement.java index 6f96ba29..f8a25c99 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/mybatis/rowcountwarn/ProxyStatement.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/mybatis/rowcountwarn/ProxyStatement.java @@ -157,4 +157,9 @@ public class ProxyStatement extends StatementWrapper { public Statement unwrap() { return rawStatement; } + + @Override + public String toString() { + return rawStatement.toString(); + } } \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsChannelTemplateContentRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsChannelTemplateContentRequest.java new file mode 100644 index 00000000..30c10e6a --- /dev/null +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsChannelTemplateContentRequest.java @@ -0,0 +1,21 @@ +package cn.axzo.msg.center.api.request; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * @author yanglin + */ +@Setter +@Getter +public class UpdateMnsChannelTemplateContentRequest { + + @NotBlank(message = "渠道模板编号不能为空") + private String templateCode; + + @NotBlank(message = "模板内容不能为空") + private String templateContent; + +} diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsTemplateContentRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsTemplateContentRequest.java index a6559137..5978f804 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsTemplateContentRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateMnsTemplateContentRequest.java @@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank; @Getter public class UpdateMnsTemplateContentRequest { - @NotBlank(message = "模板编号不能为空") + @NotBlank(message = "内部模板编号不能为空") private String innerTemplateCode; @NotBlank(message = "模板内容不能为空") diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/AnalysisInfo.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/AnalysisInfo.java index 1db08155..8d3f9590 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/AnalysisInfo.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/AnalysisInfo.java @@ -13,5 +13,6 @@ public class AnalysisInfo { private Long businessId; private String bizCode; private boolean collectSql; + private boolean todoBusiness; } \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CardSendRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CardSendRequest.java index a026bc59..cea2171c 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CardSendRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CardSendRequest.java @@ -13,7 +13,6 @@ import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.Collections; import java.util.HashSet; @@ -70,9 +69,13 @@ public class CardSendRequest implements CardContent { /** * 接收人 */ - @NotEmpty(message = "接收人不能为空") private Set receivers = new HashSet<>(); + /** + * 消息接收IM账号或群id + */ + private Set imReceiveAccounts; + /** * 业务参数 */ @@ -93,6 +96,14 @@ public class CardSendRequest implements CardContent { */ private boolean returnCards = false; + public Set receiversOrEmpty() { + return receivers == null ? Collections.emptySet() : receivers; + } + + public Set imReceiveAccountsOrEmpty() { + return imReceiveAccounts == null ? Collections.emptySet() : imReceiveAccounts; + } + @Override @JsonIgnore @JSONField(serialize = false, defaultValue = "false") public CardStateInfo getStateInfo() { return CardStateInfo.create(CardState.CREATED, CardBizState.PENDING); diff --git a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/CardDao.java b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/CardDao.java index 44f11714..205b9eb4 100644 --- a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/CardDao.java +++ b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/CardDao.java @@ -57,8 +57,12 @@ public class CardDao extends ServiceImpl { List updatableResults = imResponse.getUpdatableMessageSendResults(); if (updatableResults == null) updatableResults = Collections.emptyList(); - Map account2BizMessageId = updatableResults.stream() - .collect(toMap(UpdatableMessageSendResult::getAccount, UpdatableMessageSendResult::getBizMessageId)); + Map person2BizMessageId = updatableResults.stream() + .filter(result -> result.getPerson() != null) + .collect(toMap(UpdatableMessageSendResult::getPerson, UpdatableMessageSendResult::getBizMessageId)); + Map imAccount2BizMessageId = updatableResults.stream() + .filter(result -> result.getImAccount() != null) + .collect(toMap(UpdatableMessageSendResult::getImAccount, UpdatableMessageSendResult::getBizMessageId)); for (Card card : cards) { PersonAccountAttribute key = new PersonAccountAttribute(); key.setPersonId(card.getReceiverPersonId() + ""); @@ -70,7 +74,9 @@ public class CardDao extends ServiceImpl { update.setId(card.getId()); update.setImTaskId(imResponse.getId()); update.setCardState(CardState.SEND_SUCCESS); - String bizMessageId = account2BizMessageId.get(key); + String bizMessageId = person2BizMessageId.get(key); + if (bizMessageId == null) + bizMessageId = imAccount2BizMessageId.get(card.getImReceiveAccount()); if (bizMessageId != null) update.setBizMessageId(bizMessageId); updates.add(update); diff --git a/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/Card.java b/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/Card.java index 721ccb27..5ec10f74 100644 --- a/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/Card.java +++ b/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/Card.java @@ -152,6 +152,11 @@ public class Card extends BaseEntityExt implements CardContent { */ private Long receiverWorkspaceId; + /** + * 接收账号 + */ + private String imReceiveAccount; + /** * 按钮状态 */ diff --git a/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/CardLog.java b/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/CardLog.java index c883967c..92ab04e2 100644 --- a/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/CardLog.java +++ b/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/entity/CardLog.java @@ -61,6 +61,11 @@ public class CardLog extends BaseEntityExt { */ private AppTypeEnum receiverAppType; + /** + * 接收账号 + */ + private String imReceiveAccount; + /** * 异常 */