Merge branch 'feat/nongxin-notifications' into 'master'
fix: 订餐提醒日期fix See merge request !16
Showing
1 changed file
with
38 additions
and
8 deletions
| ... | @@ -12,6 +12,10 @@ import org.springframework.beans.factory.annotation.Qualifier; | ... | @@ -12,6 +12,10 @@ import org.springframework.beans.factory.annotation.Qualifier; |
| 12 | import org.springframework.scheduling.annotation.Scheduled; | 12 | import org.springframework.scheduling.annotation.Scheduled; |
| 13 | import org.springframework.stereotype.Component; | 13 | import org.springframework.stereotype.Component; |
| 14 | 14 | ||
| 15 | +import java.time.DayOfWeek; | ||
| 16 | +import java.time.LocalDate; | ||
| 17 | +import java.time.ZoneId; | ||
| 18 | +import java.time.format.DateTimeFormatter; | ||
| 15 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
| 16 | import java.util.Collections; | 20 | import java.util.Collections; |
| 17 | import java.util.List; | 21 | import java.util.List; |
| ... | @@ -76,7 +80,7 @@ public class OrderReminderTask { | ... | @@ -76,7 +80,7 @@ public class OrderReminderTask { |
| 76 | /** | 80 | /** |
| 77 | * 每周一 9:00 执行订餐提醒推送 | 81 | * 每周一 9:00 执行订餐提醒推送 |
| 78 | */ | 82 | */ |
| 79 | - @Scheduled(cron = "${task.orderReminder.cron:0 0 9 * * MON}") | 83 | + @Scheduled(cron = "${task.orderReminder.cron:0 0 9 * * MON}", zone = "Asia/Shanghai") |
| 80 | public void executeTask() { | 84 | public void executeTask() { |
| 81 | log.info("OrderReminderTask started"); | 85 | log.info("OrderReminderTask started"); |
| 82 | 86 | ||
| ... | @@ -178,7 +182,9 @@ public class OrderReminderTask { | ... | @@ -178,7 +182,9 @@ public class OrderReminderTask { |
| 178 | 182 | ||
| 179 | /** | 183 | /** |
| 180 | * 从配送规则配置中获取订餐时间配置 | 184 | * 从配送规则配置中获取订餐时间配置 |
| 181 | - * 返回订餐时间,格式:yyyy年MM月dd日 HH:mm~HH:mm | 185 | + * 根据配送规则中的星期开关(monday~sunday)计算本周对应的具体日期, |
| 186 | + * 第一个启用的星期作为开始日期,最后一个启用的星期作为结束日期。 | ||
| 187 | + * 返回订餐时间,格式:yyyy年MM月dd日 HH:mm~yyyy年MM月dd日 HH:mm | ||
| 182 | */ | 188 | */ |
| 183 | private OrderTimeConfig getOrderTimeConfigFromRule() { | 189 | private OrderTimeConfig getOrderTimeConfigFromRule() { |
| 184 | try { | 190 | try { |
| ... | @@ -197,18 +203,42 @@ public class OrderReminderTask { | ... | @@ -197,18 +203,42 @@ public class OrderReminderTask { |
| 197 | return null; | 203 | return null; |
| 198 | } | 204 | } |
| 199 | 205 | ||
| 206 | + // 根据配置中的星期开关,收集所有启用的星期 | ||
| 207 | + final List<DayOfWeek> enabledDays = new ArrayList<>(); | ||
| 208 | + if (cfg.getMonday()) enabledDays.add(DayOfWeek.MONDAY); | ||
| 209 | + if (cfg.getTuesday()) enabledDays.add(DayOfWeek.TUESDAY); | ||
| 210 | + if (cfg.getWednesday()) enabledDays.add(DayOfWeek.WEDNESDAY); | ||
| 211 | + if (cfg.getThursday()) enabledDays.add(DayOfWeek.THURSDAY); | ||
| 212 | + if (cfg.getFriday()) enabledDays.add(DayOfWeek.FRIDAY); | ||
| 213 | + if (cfg.getSaturday()) enabledDays.add(DayOfWeek.SATURDAY); | ||
| 214 | + if (cfg.getSunday()) enabledDays.add(DayOfWeek.SUNDAY); | ||
| 215 | + | ||
| 216 | + if (enabledDays.isEmpty()) { | ||
| 217 | + log.warn("Delivery rule has no enabled days"); | ||
| 218 | + return null; | ||
| 219 | + } | ||
| 220 | + | ||
| 200 | // 格式化时间(去掉秒) | 221 | // 格式化时间(去掉秒) |
| 201 | String startTime = formatTime(startTimeStr); | 222 | String startTime = formatTime(startTimeStr); |
| 202 | String endTime = formatTime(endTimeStr); | 223 | String endTime = formatTime(endTimeStr); |
| 203 | 224 | ||
| 204 | - // 获取当前日期,格式化为 yyyy年MM月dd日 HH:mm | 225 | + // 根据脚本执行日期计算本周对应星期的具体日期 |
| 205 | - java.time.LocalDate today = java.time.LocalDate.now(); | 226 | + final ZoneId zone = ZoneId.of("Asia/Shanghai"); |
| 206 | - java.time.format.DateTimeFormatter dateFormatter = java.time.format.DateTimeFormatter.ofPattern("yyyy年MM月dd日"); | 227 | + final LocalDate today = LocalDate.now(zone); |
| 207 | - String dateStr = today.format(dateFormatter); | 228 | + final DayOfWeek firstEnabledDay = Collections.min(enabledDays); |
| 229 | + final DayOfWeek lastEnabledDay = Collections.max(enabledDays); | ||
| 208 | 230 | ||
| 209 | - // 返回订餐时间,格式:yyyy年MM月dd日 HH:mm~yyyy年MM月dd日 HH:mm | 231 | + // 计算本周对应星期的日期(以本周一为基准) |
| 210 | - String orderTime = dateStr + " " + startTime + "~" + dateStr + " " + endTime; | 232 | + final LocalDate mondayOfThisWeek = today.with(DayOfWeek.MONDAY); |
| 233 | + final LocalDate startDate = mondayOfThisWeek.plusDays(firstEnabledDay.getValue() - 1L); | ||
| 234 | + final LocalDate endDate = mondayOfThisWeek.plusDays(lastEnabledDay.getValue() - 1L); | ||
| 235 | + | ||
| 236 | + final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); | ||
| 237 | + String startDateStr = startDate.format(dateFormatter); | ||
| 238 | + String endDateStr = endDate.format(dateFormatter); | ||
| 211 | 239 | ||
| 240 | + // 返回订餐时间,格式:yyyy年MM月dd日 HH:mm~yyyy年MM月dd日 HH:mm | ||
| 241 | + String orderTime = startDateStr + " " + startTime + "~" + endDateStr + " " + endTime; | ||
| 212 | return new OrderTimeConfig(orderTime); | 242 | return new OrderTimeConfig(orderTime); |
| 213 | 243 | ||
| 214 | } catch (Exception e) { | 244 | } catch (Exception e) { | ... | ... |
-
Please register or login to post a comment