|
|
@@ -198,6 +198,7 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
v.setRecipient(k);
|
|
|
v.setClickCount(0L);
|
|
|
v.setId(e.getId());
|
|
|
+ v.setOpenCount(e.getOpenCount());
|
|
|
return v;
|
|
|
});
|
|
|
vo.setClickCount(vo.getClickCount() + 1);
|
|
|
@@ -216,6 +217,7 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
if (e.getHasSuspend() != null && e.getHasSuspend() == 1) {
|
|
|
vo.setHasSuspend(1);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
// 按首次打开时间倒序
|
|
|
@@ -1010,6 +1012,77 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void sendAgain() {
|
|
|
+ //查询全部开启了自动化的营销活动
|
|
|
+ LambdaQueryWrapper<MarketingCampaignEntity> marketingCampaignQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ marketingCampaignQueryWrapper.eq(MarketingCampaignEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
+ marketingCampaignQueryWrapper.eq(MarketingCampaignEntity::getStatus, 1);
|
|
|
+ marketingCampaignQueryWrapper.eq(MarketingCampaignEntity::getFollowUpRulesNotOpened, 1);
|
|
|
+ List<MarketingCampaignEntity> marketingCampaignList = marketingCampaignService.list(marketingCampaignQueryWrapper);
|
|
|
+ if (CollectionUtils.isEmpty(marketingCampaignList)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (MarketingCampaignEntity marketingCampaignEntity : marketingCampaignList) {
|
|
|
+ //查询自动化设置的未跟进天数
|
|
|
+ Integer followUpDays = marketingCampaignEntity.getFollowUpRulesNotOpenedDays();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ //获取当前时间的前 followUpDays 天
|
|
|
+ LocalDateTime followUpDate = now.minusDays(followUpDays);
|
|
|
+
|
|
|
+ LambdaQueryWrapper<MarketEmailsEntity> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ LocalDateTime start = followUpDate.withSecond(0).withNano(0);
|
|
|
+ LocalDateTime end = followUpDate.withSecond(59).withNano(999_999_999);
|
|
|
+ queryWrapper.between(MarketEmailsEntity::getExpectSendTime, start, end);
|
|
|
+
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getStatus, 1);
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getHasReader,0);
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getHasProtect,0);
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getHasSuspend,0);
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getMarketingCampaignId, marketingCampaignEntity.getId());
|
|
|
+ List<MarketEmailsEntity> marketEmailList = this.list(queryWrapper);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(marketEmailList)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ log.info("queryWrapper: {}", queryWrapper);
|
|
|
+ log.info("marketEmailList: {}", marketEmailList);
|
|
|
+ for (MarketEmailsEntity marketEmail : marketEmailList){
|
|
|
+ MktSendMailRemoteDTO dto = new MktSendMailRemoteDTO();
|
|
|
+ List<String> recipientls = new ArrayList<>();
|
|
|
+ recipientls.add(marketEmail.getRecipient());
|
|
|
+ dto.setRecipientls(recipientls);
|
|
|
+ dto.setSubject(marketEmail.getSubject());
|
|
|
+ dto.setContent(marketEmail.getContent());
|
|
|
+ dto.setIsTrack(1);
|
|
|
+ // dto.setDelaySendTime(marketEmail.getExpectSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
+ Result result = mktMailRemoteClient.send(dto);
|
|
|
+ if (result.isSuccess()) {
|
|
|
+ // 远程返回 result 是 LinkedHashMap(Jackson 默认反序列化),按 Map 取字段
|
|
|
+ Map<String, Object> sentMail = (Map<String, Object>) result.getResult();
|
|
|
+ //将邮件id写入MarketEmailsEntity
|
|
|
+ marketEmail.setEmailId(((Number) sentMail.get("id")).longValue());
|
|
|
+ marketEmail.setStatus((Integer) sentMail.get("status"));
|
|
|
+ log.info("id为:{}", sentMail.get("id"));
|
|
|
+ log.info("status为:{}", sentMail.get("status"));
|
|
|
+ log.info("邮件发送成功,邮件ID:{}", marketEmail.getId());
|
|
|
+ } else {
|
|
|
+ log.error("邮件发送失败,邮件ID:{},错误信息:{}", marketEmail.getId(), result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 123
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(marketEmailList)){
|
|
|
+ this.updateBatchById(marketEmailList);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 调用 AI workflow 并解析调度阶段,带重试。
|
|
|
* 入参 chatDTO 经 workflowsService.AiWorkflows 返回 Result<Object>,
|