diff --git a/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java b/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java index 5c6f870..481712d 100644 --- a/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java @@ -86,10 +86,14 @@ public class SmsBirthdayServiceImpl extends ServiceImpl impl } // 逐个发送个性化短信 - for (Specialist specialist : specialists) { + int totalSpecialists = specialists.size(); + log.info("开始向{}位专家发送主题日短信[{}]", totalSpecialists, smsTask.getSubjectName()); + + for (int i = 0; i < specialists.size(); i++) { + Specialist specialist = specialists.get(i); + // 替换模板中的占位符 + String content = template.replace("{姓名}", specialist.getName()) + .replace("{主题}", smsTask.getSubjectName()); try { - // 替换模板中的占位符 - String content = template.replace("{姓名}", specialist.getName()) - .replace("{主题}", smsTask.getSubjectName()); + log.info("正在发送第{}/{}位专家{}的主题日短信", i + 1, totalSpecialists, specialist.getName()); // 创建短信日志记录 SmsLog smsLog = new SmsLog(); @@ -167,6 +172,18 @@ public class SmsTaskServiceImpl extends ServiceImpl impl // 保存短信日志记录 smsLogMapper.insert(smsLog); + // 如果不是最后一位专家,等待3秒再发送下一条 + if (i < specialists.size() - 1) { + try { + log.info("等待3秒后发送下一条短信..."); + Thread.sleep(3000); // 3秒间隔 + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + log.warn("短信发送间隔被中断"); + break; + } + } + } catch (Exception e) { log.error("向专家{}发送主题日短信[{}]时发生异常: {}", specialist.getName(), smsTask.getSubjectName(), e.getMessage(), e); @@ -175,9 +192,7 @@ public class SmsTaskServiceImpl extends ServiceImpl impl SmsLog failedSmsLog = new SmsLog(); failedSmsLog.setName(specialist.getName()) .setPhone(specialist.getPhone()) - .setContent(template.replace("{姓名}", specialist.getName()) - .replace("{称呼}", specialist.getAddress() != null ? specialist.getAddress() : "") - .replace("{主题}", smsTask.getSubjectName())) + .setContent(content) .setRemark("主题日短信-" + smsTask.getSubjectName() + "-发送异常: " + e.getMessage()) .setSendTm(new java.util.Date()); smsLogMapper.insert(failedSmsLog); @@ -187,6 +202,8 @@ public class SmsTaskServiceImpl extends ServiceImpl impl } } + log.info("主题日短信任务[{}]发送完成", smsTask.getSubjectName()); + // 标记任务今日已发送 AtomicBoolean sentFlag = taskSmsSentToday.computeIfAbsent(smsTask.getId(), k -> new AtomicBoolean(false)); sentFlag.set(true);