diff --git a/sql/tables.sms.sql b/sql/tables.sms.sql index c352b57..5f5d4cf 100644 --- a/sql/tables.sms.sql +++ b/sql/tables.sms.sql @@ -9,7 +9,9 @@ CREATE TABLE SPECIALIST ( ADDRESS VARCHAR(20) COMMENT '区域', PHONE VARCHAR(20) UNIQUE COMMENT '电话号码', STATUS INT DEFAULT 1 COMMENT '生效状态 1:有效 0:无效', - CREATE_TM DATETIME DEFAULT CURRENT_TIME COMMENT '创建日期' + CREATE_TM DATETIME DEFAULT CURRENT_TIME COMMENT '创建日期', + FLAG_BIRTHDAY_SENT_TODAY INT DEFAULT 0 + FLAG_HOLIDAY_SENT_TODAY INT DEFAULT 0 ); diff --git a/src/main/java/com/whdc/mapper/SpecialistMapper.java b/src/main/java/com/whdc/mapper/SpecialistMapper.java index 0f5046f..0bea9f1 100644 --- a/src/main/java/com/whdc/mapper/SpecialistMapper.java +++ b/src/main/java/com/whdc/mapper/SpecialistMapper.java @@ -2,6 +2,7 @@ package com.whdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.whdc.model.entity.Specialist; +import org.apache.ibatis.annotations.Update; /** * 专家通讯录Mapper接口 @@ -10,4 +11,6 @@ import com.whdc.model.entity.Specialist; * @since 2025-09-23 */ public interface SpecialistMapper extends BaseMapper { + @Update("update specialist set flag_birthday_sent_today = 0") + void resetFlagBirthdaySentToday(); } \ No newline at end of file diff --git a/src/main/java/com/whdc/model/entity/Specialist.java b/src/main/java/com/whdc/model/entity/Specialist.java index ee5049e..2a1fcc8 100644 --- a/src/main/java/com/whdc/model/entity/Specialist.java +++ b/src/main/java/com/whdc/model/entity/Specialist.java @@ -83,4 +83,12 @@ public class Specialist implements Serializable { @ApiModelProperty(value = "创建日期") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTm; + + //标记今天已经发送过生日短信的flag + @TableField("FLAG_BIRTHDAY_SENT_TODAY") + private Integer flagBirthdaySentToday; + + //标记今天已经发送过节日短信的flag + @TableField("FLAG_HOLIDAY_SENT_TODAY") + private Integer flagHolidaySentToday; } diff --git a/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java b/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java index 481712d..121782a 100644 --- a/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/SmsBirthdayServiceImpl.java @@ -18,8 +18,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -42,7 +41,7 @@ public class SmsBirthdayServiceImpl extends ServiceImpl listBirthdayToday() { @@ -54,8 +53,9 @@ public class SmsBirthdayServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper - .apply("DATE_FORMAT(BIRTHDAY, '%m-%d') = {0}", monthDay) - .eq(Specialist::getStatus, 1); // 1:有效 + .apply("DATE_FORMAT(BIRTHDAY, '%m-%d') = {0}", monthDay) + .eq(Specialist::getFlagBirthdaySentToday, 0) + .eq(Specialist::getStatus, 1); // 1:有效 List specialists = specialistMapper.selectList(queryWrapper); return specialists != null ? specialists : Collections.emptyList(); @@ -89,8 +89,14 @@ public class SmsBirthdayServiceImpl extends ServiceImpl distinct = new HashSet<>(); for (int i = 0; i < specialists.size(); i++) { Specialist specialist = specialists.get(i); + if (distinct.contains(specialist.getPhone())) { + continue; + } + String content = template.replace("{姓名}", specialist.getName()); try { log.info("正在发送第{}/{}位专家{}的生日短信", i + 1, totalSpecialists, specialist.getName()); @@ -98,14 +104,18 @@ public class SmsBirthdayServiceImpl extends ServiceImpl phoneList = Collections.singletonList(specialist.getPhone()); String sendResult = smsHelper.send(phoneList, content); + // 更新专家的flagBirthdaySentToday + specialist.setFlagBirthdaySentToday(1); + specialistMapper.updateById(specialist); + distinct.add(specialist.getPhone()); log.info("向专家{}发送生日短信结果: {}", specialist.getName(), sendResult); // 根据发送结果设置备注 @@ -114,7 +124,8 @@ public class SmsBirthdayServiceImpl extends ServiceImpl phoneList = new ArrayList<>(); + phoneList.add("18154318312"); //唐威 + phoneList.add("13247155309"); //陈锋 + phoneList.add("15671545233"); //李 + smsHelper.send(phoneList, content); + } + + /** + * 每天0点重置所有专家的flagBirthdaySentToday为0 + */ + @Scheduled(cron = "0 0 0 * * ?") + public void resetFlagBirthdaySentToday() { + specialistMapper.resetFlagBirthdaySentToday(); + } /** * 定时检查并发送生日短信 * 每分钟执行一次 @@ -158,12 +187,6 @@ public class SmsBirthdayServiceImpl extends ServiceImpl