diff --git a/src/main/java/com/whdc/mapper/SmsSpecialistMapper.java b/src/main/java/com/whdc/mapper/SmsSpecialistMapper.java index 1eea13f..c0abf73 100644 --- a/src/main/java/com/whdc/mapper/SmsSpecialistMapper.java +++ b/src/main/java/com/whdc/mapper/SmsSpecialistMapper.java @@ -13,4 +13,7 @@ import org.apache.ibatis.annotations.Update; public interface SmsSpecialistMapper extends BaseMapper { @Update("update specialist set flag_birthday_sent_today = 0") void resetFlagBirthdaySentToday(); + + @Update("update specialist set flag_holiday_sent_today = 0") + void resetFlagHolidaySentToday(); } \ No newline at end of file diff --git a/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java b/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java index 4df0041..7a3bc90 100644 --- a/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java @@ -18,7 +18,11 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.HashSet; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -255,19 +259,4 @@ public class SmsBirthdayServiceImpl extends ServiceImpl taskSmsSentToday = new ConcurrentHashMap<>(); + // 记录任务发送状态 - 使用原子变量保证线程安全 + private final AtomicBoolean sending = new AtomicBoolean(false); @Override public List listActiveTasks() { @@ -97,12 +98,6 @@ public class SmsHolidayServiceImpl extends ServiceImpl new AtomicBoolean(false)); - if (sentFlag.get()) { - continue; // 今日已发送,跳过 - } - // 检查执行时间 String executionTime = task.getExecutionTmStr(); if (executionTime == null || executionTime.trim().isEmpty()) { @@ -141,8 +136,8 @@ public class SmsHolidayServiceImpl extends ServiceImpl specialists = getValidSpecialists(); + // 获取所有有效专家(节日短信专用) + List specialists = getValidSpecialistsForHoliday(); if (specialists.isEmpty()) { log.info("没有有效专家,跳过主题日短信发送"); return; @@ -158,8 +153,14 @@ public class SmsHolidayServiceImpl extends ServiceImpl distinct = new HashSet<>(); for (int i = 0; i < specialists.size(); i++) { SmsSpecialist specialist = specialists.get(i); + if (distinct.contains(specialist.getPhone())) { + continue; + } + // 替换模板中的占位符 String content = template.replace("{姓名}", specialist.getName()) .replace("{主题}", smsTask.getSubjectName()); @@ -177,6 +178,12 @@ public class SmsHolidayServiceImpl extends ServiceImpl phoneList = Collections.singletonList(specialist.getPhone()); String sendResult = smsHelper.send(phoneList, content); + + // 更新专家的flagHolidaySentToday + specialist.setFlagHolidaySentToday(1); + specialistMapper.updateById(specialist); + distinct.add(specialist.getPhone()); + log.info("向专家{}发送主题日短信[{}]结果: {}", specialist.getName(), smsTask.getSubjectName(), sendResult); // 根据发送结果设置备注 @@ -186,6 +193,9 @@ public class SmsHolidayServiceImpl extends ServiceImpl new AtomicBoolean(false)); - sentFlag.set(true); - log.info("主题日短信任务[{}]发送完成", smsTask.getSubjectName()); } @Override @@ -246,12 +251,32 @@ public class SmsHolidayServiceImpl extends ServiceImpl getValidSpecialists() { + private void carbonCopy(String content) { + List phoneList = new ArrayList<>(); + phoneList.add("18154318312"); //唐威 + phoneList.add("13247155309"); //陈锋 + phoneList.add("15671545233"); //李 + smsHelper.send(phoneList, content); + } + + /** + * 每天0点重置所有专家的flagHolidaySentToday为0 + */ + @Scheduled(cron = "0 0 0 * * ?") + public void resetFlagHolidaySentToday() { + specialistMapper.resetFlagHolidaySentToday(); + } + + /** + * 获取所有有效专家(节日短信专用) + */ + private List getValidSpecialistsForHoliday() { try { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SmsSpecialist::getStatus, 1); // 1:有效 + queryWrapper.eq(SmsSpecialist::getFlagHolidaySentToday, 0); // 未发送节日短信 queryWrapper.isNotNull(SmsSpecialist::getPhone); // 手机号不为空 List specialists = specialistMapper.selectList(queryWrapper); @@ -269,6 +294,12 @@ public class SmsHolidayServiceImpl extends ServiceImpl todayTasks = listTodayTasks(); @@ -280,27 +311,15 @@ public class SmsHolidayServiceImpl extends ServiceImpl