|
@@ -372,6 +372,7 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
if (!ok) {
|
|
if (!ok) {
|
|
|
return Result.error("操作失败");
|
|
return Result.error("操作失败");
|
|
|
}
|
|
}
|
|
|
|
|
+ //如果是重发,判断时间如果小于当前时间,直接发送
|
|
|
return Result.ok();
|
|
return Result.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -633,29 +634,22 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
- public Result<Object> getManagementDetail(Long marketingCampaignId) {
|
|
|
|
|
- if (ObjectUtils.isEmpty(marketingCampaignId)) {
|
|
|
|
|
- return Result.error("marketingCampaignId不能为空");
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * enrichment 私有方法:把 MarketEmailsEntity 列表填充 customerName / campaignName / stageName / customerContact。
|
|
|
|
|
+ * 供 getManagementDetail 与 getManagementPage 共用。
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<MarketEmailsManagementVO> enrichManagementList(List<MarketEmailsEntity> entityList, Long marketingCampaignId) {
|
|
|
|
|
+ if (CollectionUtils.isEmpty(entityList)) {
|
|
|
|
|
+ return new ArrayList<>();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 营销活动名(用于拼接在卡片标题位置或返回顶部)
|
|
|
|
|
|
|
+ // 营销活动名
|
|
|
String campaignName = null;
|
|
String campaignName = null;
|
|
|
MarketingCampaignEntity campaign = marketingCampaignService.getById(marketingCampaignId);
|
|
MarketingCampaignEntity campaign = marketingCampaignService.getById(marketingCampaignId);
|
|
|
if (campaign != null) {
|
|
if (campaign != null) {
|
|
|
campaignName = campaign.getName();
|
|
campaignName = campaign.getName();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 查该营销活动下所有未软删的邮件
|
|
|
|
|
- LambdaQueryWrapper<MarketEmailsEntity> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- wrapper.eq(MarketEmailsEntity::getMarketingCampaignId, marketingCampaignId);
|
|
|
|
|
- wrapper.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
- wrapper.orderByAsc(MarketEmailsEntity::getExpectSendTime);
|
|
|
|
|
- List<MarketEmailsEntity> entityList = this.list(wrapper);
|
|
|
|
|
- if (CollectionUtils.isEmpty(entityList)) {
|
|
|
|
|
- return Result.ok(new ArrayList<MarketEmailsManagementVO>());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
// 批量收 ID,减少 N+1
|
|
// 批量收 ID,减少 N+1
|
|
|
Set<Long> customerIdSet = new HashSet<>();
|
|
Set<Long> customerIdSet = new HashSet<>();
|
|
|
Set<Long> sopDetailIdSet = new HashSet<>();
|
|
Set<Long> sopDetailIdSet = new HashSet<>();
|
|
@@ -670,10 +664,9 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
.collect(Collectors.toMap(CustomerEntity::getId, c -> c, (a, c) -> a));
|
|
.collect(Collectors.toMap(CustomerEntity::getId, c -> c, (a, c) -> a));
|
|
|
Map<Long, MarketingCampaignSopDetailEntity> sopDetailMap = sopDetailIdSet.isEmpty()
|
|
Map<Long, MarketingCampaignSopDetailEntity> sopDetailMap = sopDetailIdSet.isEmpty()
|
|
|
? Collections.emptyMap()
|
|
? Collections.emptyMap()
|
|
|
- : marketingCampaignSopDetailEntityService.listByIds(new java.util.ArrayList<>(sopDetailIdSet)).stream()
|
|
|
|
|
|
|
+ : marketingCampaignSopDetailEntityService.listByIds(new ArrayList<>(sopDetailIdSet)).stream()
|
|
|
.collect(Collectors.toMap(MarketingCampaignSopDetailEntity::getId, s -> s, (a, c) -> a));
|
|
.collect(Collectors.toMap(MarketingCampaignSopDetailEntity::getId, s -> s, (a, c) -> a));
|
|
|
|
|
|
|
|
- // 组装 VO
|
|
|
|
|
List<MarketEmailsManagementVO> voList = new ArrayList<>(entityList.size());
|
|
List<MarketEmailsManagementVO> voList = new ArrayList<>(entityList.size());
|
|
|
for (MarketEmailsEntity entity : entityList) {
|
|
for (MarketEmailsEntity entity : entityList) {
|
|
|
MarketEmailsManagementVO vo = new MarketEmailsManagementVO();
|
|
MarketEmailsManagementVO vo = new MarketEmailsManagementVO();
|
|
@@ -697,7 +690,67 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
|
|
|
|
|
voList.add(vo);
|
|
voList.add(vo);
|
|
|
}
|
|
}
|
|
|
- return Result.ok(voList);
|
|
|
|
|
|
|
+ return voList;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result<Object> getManagementDetail(Long marketingCampaignId) {
|
|
|
|
|
+ if (ObjectUtils.isEmpty(marketingCampaignId)) {
|
|
|
|
|
+ return Result.error("marketingCampaignId不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查该营销活动下所有未软删的邮件
|
|
|
|
|
+ LambdaQueryWrapper<MarketEmailsEntity> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ wrapper.eq(MarketEmailsEntity::getMarketingCampaignId, marketingCampaignId);
|
|
|
|
|
+ wrapper.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
+ wrapper.orderByAsc(MarketEmailsEntity::getExpectSendTime);
|
|
|
|
|
+ List<MarketEmailsEntity> entityList = this.list(wrapper);
|
|
|
|
|
+ return Result.ok(enrichManagementList(entityList, marketingCampaignId));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result<Object> getManagementStats(Long marketingCampaignId) {
|
|
|
|
|
+ if (ObjectUtils.isEmpty(marketingCampaignId)) {
|
|
|
|
|
+ return Result.error("marketingCampaignId不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ MarketEmailsStatsVO vo = new MarketEmailsStatsVO();
|
|
|
|
|
+ LambdaQueryWrapper<MarketEmailsEntity> base = new LambdaQueryWrapper<>();
|
|
|
|
|
+ base.eq(MarketEmailsEntity::getMarketingCampaignId, marketingCampaignId);
|
|
|
|
|
+ base.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
+ vo.setCancelledCount(this.count(base.clone().eq(MarketEmailsEntity::getStatus, -3)));
|
|
|
|
|
+ vo.setPendingInsertCount(this.count(base.clone().eq(MarketEmailsEntity::getStatus, -2)));
|
|
|
|
|
+ vo.setPendingSendCount(this.count(base.clone().eq(MarketEmailsEntity::getStatus, -1)));
|
|
|
|
|
+ vo.setSentCount(this.count(base.clone().eq(MarketEmailsEntity::getStatus, 1)));
|
|
|
|
|
+ return Result.result(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result<Object> getManagementPage(MarketEmailsDTO dto) {
|
|
|
|
|
+ if (dto == null || ObjectUtils.isEmpty(dto.getMarketingCampaignId())) {
|
|
|
|
|
+ return Result.error("marketingCampaignId不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (dto.getStatus() == null) {
|
|
|
|
|
+ return Result.error("status不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ LambdaQueryWrapper<MarketEmailsEntity> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ wrapper.eq(MarketEmailsEntity::getMarketingCampaignId, dto.getMarketingCampaignId());
|
|
|
|
|
+ wrapper.eq(MarketEmailsEntity::getStatus, dto.getStatus());
|
|
|
|
|
+ wrapper.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
+ wrapper.orderByAsc(MarketEmailsEntity::getExpectSendTime);
|
|
|
|
|
+
|
|
|
|
|
+ Page<MarketEmailsEntity> page = new Page<>(dto.getPageIndex(), dto.getPageSize());
|
|
|
|
|
+ IPage<MarketEmailsEntity> entityPage = this.page(page, wrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // enrichment 仅作用于当前页 records
|
|
|
|
|
+ List<MarketEmailsManagementVO> voRecords = enrichManagementList(entityPage.getRecords(), dto.getMarketingCampaignId());
|
|
|
|
|
+
|
|
|
|
|
+ Page<MarketEmailsManagementVO> voPage = new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal());
|
|
|
|
|
+ voPage.setRecords(voRecords);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ return Result.result(voPage);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -817,7 +870,7 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
|
|
|
|
|
Map sendMap = new HashMap();
|
|
Map sendMap = new HashMap();
|
|
|
sendMap.put("country", country);
|
|
sendMap.put("country", country);
|
|
|
- sendMap.put("beginDate", marketingCampaignEntity.getBeginData().toString());
|
|
|
|
|
|
|
+ sendMap.put("beginDate", marketingCampaignEntity.getBeginData() != null ? marketingCampaignEntity.getBeginData().toString() : "");
|
|
|
sendMap.put("steps", sopDetailEntityString);
|
|
sendMap.put("steps", sopDetailEntityString);
|
|
|
|
|
|
|
|
ChatDTO chatDTO = new ChatDTO();
|
|
ChatDTO chatDTO = new ChatDTO();
|
|
@@ -897,6 +950,15 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void send() {
|
|
public void send() {
|
|
|
|
|
+ //获取需要发送的营销活动
|
|
|
|
|
+ LambdaQueryWrapper<MarketingCampaignEntity> marketingCampaignQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ marketingCampaignQueryWrapper.eq(MarketingCampaignEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
+ marketingCampaignQueryWrapper.eq(MarketingCampaignEntity::getStatus, 1);
|
|
|
|
|
+ List<MarketingCampaignEntity> marketingCampaignList = marketingCampaignService.list(marketingCampaignQueryWrapper);
|
|
|
|
|
+ if (CollectionUtils.isEmpty(marketingCampaignList)){
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ List<Long> marketingCampaignIdList = marketingCampaignList.stream().map(MarketingCampaignEntity::getId).collect(Collectors.toList());
|
|
|
LambdaQueryWrapper<MarketEmailsEntity> queryWrapper = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<MarketEmailsEntity> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
|
|
|
// queryWrapper.eq(MarketEmailsEntity::getExpectSendTime, new Date());
|
|
// queryWrapper.eq(MarketEmailsEntity::getExpectSendTime, new Date());
|
|
@@ -908,6 +970,9 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
|
|
|
|
|
queryWrapper.eq(MarketEmailsEntity::getStatus, -1);
|
|
queryWrapper.eq(MarketEmailsEntity::getStatus, -1);
|
|
|
queryWrapper.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
queryWrapper.eq(MarketEmailsEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
|
|
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getHasProtect,0);
|
|
|
|
|
+ queryWrapper.eq(MarketEmailsEntity::getHasSuspend,0);
|
|
|
|
|
+ queryWrapper.in(MarketEmailsEntity::getMarketingCampaignId, marketingCampaignIdList);
|
|
|
List<MarketEmailsEntity> marketEmailList = this.list(queryWrapper);
|
|
List<MarketEmailsEntity> marketEmailList = this.list(queryWrapper);
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(marketEmailList)){
|
|
if (CollectionUtils.isEmpty(marketEmailList)){
|
|
@@ -922,14 +987,15 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
|
|
|
dto.setRecipientls(recipientls);
|
|
dto.setRecipientls(recipientls);
|
|
|
dto.setSubject(marketEmail.getSubject());
|
|
dto.setSubject(marketEmail.getSubject());
|
|
|
dto.setContent(marketEmail.getContent());
|
|
dto.setContent(marketEmail.getContent());
|
|
|
- dto.setDelaySendTime(marketEmail.getExpectSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
|
|
|
|
+ dto.setIsTrack(1);
|
|
|
|
|
+// dto.setDelaySendTime(marketEmail.getExpectSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
Result result = mktMailRemoteClient.send(dto);
|
|
Result result = mktMailRemoteClient.send(dto);
|
|
|
if (result.isSuccess()) {
|
|
if (result.isSuccess()) {
|
|
|
// 远程返回 result 是 LinkedHashMap(Jackson 默认反序列化),按 Map 取字段
|
|
// 远程返回 result 是 LinkedHashMap(Jackson 默认反序列化),按 Map 取字段
|
|
|
Map<String, Object> sentMail = (Map<String, Object>) result.getResult();
|
|
Map<String, Object> sentMail = (Map<String, Object>) result.getResult();
|
|
|
//将邮件id写入MarketEmailsEntity
|
|
//将邮件id写入MarketEmailsEntity
|
|
|
marketEmail.setEmailId(((Number) sentMail.get("id")).longValue());
|
|
marketEmail.setEmailId(((Number) sentMail.get("id")).longValue());
|
|
|
- marketEmail.setStatus(1);
|
|
|
|
|
|
|
+ marketEmail.setStatus((Integer) sentMail.get("status"));
|
|
|
log.info("id为:{}", sentMail.get("id"));
|
|
log.info("id为:{}", sentMail.get("id"));
|
|
|
log.info("status为:{}", sentMail.get("status"));
|
|
log.info("status为:{}", sentMail.get("status"));
|
|
|
log.info("邮件发送成功,邮件ID:{}", marketEmail.getId());
|
|
log.info("邮件发送成功,邮件ID:{}", marketEmail.getId());
|