From 47571492145314cc31931a8bbee528e4e3d26066 Mon Sep 17 00:00:00 2001 From: xupei Date: Tue, 31 Mar 2026 15:36:55 +0800 Subject: [PATCH] =?UTF-8?q?TASK:=E5=90=91=E5=85=A8=E4=BD=93=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../da/service/impl/AccountServiceImpl.java | 73 ++++++++++++++----- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java index 246f3e94..3a659826 100644 --- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java @@ -3672,30 +3672,63 @@ public class AccountServiceImpl extends ServiceImpl impl /* @Override public void send618PromotionEmailTemp() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("is_deleted", 0); + QueryWrapper queryWrapper = new QueryWrapper<>(); - List trialOrders = trialOrderMapper.selectList(queryWrapper); + queryWrapper.lambda() + .isNotNull(Account::getUserEmail) +// .in(Account::getUserEmail, "xupei3360@163.com", "kimwong@code-create.com.hk", "kaicpang.pang@connect.polyu.hk", "chelseayu@code-create.com.hk") + .apply("LENGTH(TRIM(user_email)) > 0"); -// List accountList = accountMapper.selectList(queryWrapper); - System.out.println(trialOrders); - int total = trialOrders.size(); - log.info("试用用户总量:{}", total); - int current = 1; - for (TrialOrder trialOrder : trialOrders) { - log.info("邮件发送进度 {}/{}", current, total); - try { - if (!StringUtil.isNullOrEmpty(trialOrder.getCountry()) && trialOrder.getCountry().equals("China")) { - SendEmailUtil.send618PromotionEmailTemp(trialOrder.getEmail(), "CHINESE_SIMPLIFIED"); - } else { - // 英文 - SendEmailUtil.send618PromotionEmailTemp(trialOrder.getEmail(), "ENGLISH"); - } - }catch (Exception e) { - log.info(e.getMessage()); + List accounts = baseMapper.selectList(queryWrapper); + + // 按邮箱去重,保留每个邮箱的第一条记录 + Map emailToAccountMap = new LinkedHashMap<>(); + for (Account account : accounts) { + String email = account.getUserEmail(); + if (!StringUtil.isNullOrEmpty(email)) { + email = email.trim().toLowerCase(); + // 保留第一次出现的记录 + emailToAccountMap.putIfAbsent(email, account); } - current ++; } + + List uniqueEmails = new ArrayList<>(emailToAccountMap.keySet()); + int total = uniqueEmails.size(); + log.info("AiDA用户去重后邮件发送总量:{}", total); + + // 控制发送速率:每发送20封后等待1秒,控制QPS在20以内 + int batchSize = 20; + long sleepMillis = 1000; + int successCount = 0; + int failCount = 0; + + for (int i = 0; i < uniqueEmails.size(); i++) { + String email = uniqueEmails.get(i); + log.info("邮件发送进度 {}/{}", i + 1, total); + + try { + // 统一发送英文版本 +// log.info("邮件地址 {}", email); + SendEmailUtil.send618PromotionEmailTemp(email, "ENGLISH"); + successCount++; + } catch (Exception e) { + failCount++; + log.error("邮件发送失败,收件人:{},错误信息:{}", email, e.getMessage()); + } + + // 控制发送速率,每发送 batchSize 封后等待 + if ((i + 1) % batchSize == 0 && (i + 1) < uniqueEmails.size()) { + try { + Thread.sleep(sleepMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.warn("邮件发送被中断"); + break; + } + } + } + + log.info("邮件发送完成,成功:{},失败:{}", successCount, failCount); }*/ @Override