Переглянути джерело

Merge branch 'sit' into sit-OrderFood

lutong 1 місяць тому
батько
коміт
19934a0826

+ 7 - 0
alien-store/src/main/java/shop/alien/store/service/ReservationNoticeAsyncService.java

@@ -22,4 +22,11 @@ public interface ReservationNoticeAsyncService {
      * @param newTableNumber 修改后桌位,如 A02
      */
     void sendUpdateReminderToStore(Integer reservationId, String oldDateTime, String oldTableNumber, String newDateTime, String newTableNumber);
+
+    /**
+     * 异步根据预约ID查询预约/店铺/桌号并给商家发送订单过期提醒(LifeNotice)
+     *
+     * @param reservationId 预约ID
+     */
+    void sendExpiredReminderToStore(Integer reservationId);
 }

+ 59 - 0
alien-store/src/main/java/shop/alien/store/service/impl/ReservationNoticeAsyncServiceImpl.java

@@ -144,4 +144,63 @@ public class ReservationNoticeAsyncServiceImpl implements ReservationNoticeAsync
             log.error("发送订单修改提醒通知异常,reservationId={}", reservationId, e);
         }
     }
+
+    @Async("taskExecutor")
+    @Override
+    public void sendExpiredReminderToStore(Integer reservationId) {
+        if (reservationId == null) {
+            return;
+        }
+        try {
+            UserReservation reservation = userReservationMapper.selectById(reservationId);
+            if (reservation == null) {
+                return;
+            }
+            StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>()
+                    .eq(StoreUser::getStoreId, reservation.getStoreId())
+                    .eq(StoreUser::getDeleteFlag, 0)
+                    .last("LIMIT 1"));
+            if (storeUser == null || storeUser.getPhone() == null || storeUser.getPhone().trim().isEmpty()) {
+                return;
+            }
+            String storePhone = storeUser.getPhone().trim();
+            String dateTime = reservation.getStartTime() != null && !reservation.getStartTime().trim().isEmpty()
+                    ? reservation.getStartTime().trim() : "未知时间";
+            List<UserReservationTable> reservationTables = userReservationTableMapper.selectList(
+                    new LambdaQueryWrapper<UserReservationTable>()
+                            .eq(UserReservationTable::getReservationId, reservationId)
+                            .eq(UserReservationTable::getDeleteFlag, 0)
+                            .orderByAsc(UserReservationTable::getSort));
+            String tableNumber = "未知桌号";
+            if (reservationTables != null && !reservationTables.isEmpty()) {
+                List<String> tableNumbers = reservationTables.stream()
+                        .map(rt -> {
+                            StoreBookingTable table = storeBookingTableService.getById(rt.getTableId());
+                            return table != null && table.getTableNumber() != null ? table.getTableNumber() : null;
+                        })
+                        .filter(tn -> tn != null && !tn.trim().isEmpty())
+                        .collect(Collectors.toList());
+                if (!tableNumbers.isEmpty()) {
+                    tableNumber = String.join(",", tableNumbers);
+                }
+            }
+            String message = "用户预订了" + dateTime + "的" + tableNumber + "的桌位,已超过预订时间";
+
+            JSONObject contextJson = new JSONObject();
+            contextJson.put("message", message);
+            contextJson.put("reservationId", reservationId);
+            LifeNotice lifeNotice = new LifeNotice();
+            lifeNotice.setSenderId("system");
+            lifeNotice.setReceiverId("store_" + storePhone);
+            lifeNotice.setBusinessId(reservationId);
+            lifeNotice.setTitle("订单过期提醒");
+            lifeNotice.setContext(contextJson.toJSONString());
+            lifeNotice.setNoticeType(2);
+            lifeNotice.setIsRead(0);
+            lifeNoticeMapper.insert(lifeNotice);
+            log.info("订单过期已通知商家,reservationId={}, receiverId=store_{}", reservationId, storePhone);
+        } catch (Exception e) {
+            log.error("发送订单过期提醒通知异常,reservationId={}", reservationId, e);
+        }
+    }
 }

+ 4 - 0
alien-store/src/main/java/shop/alien/store/service/impl/UserReservationServiceImpl.java

@@ -1155,6 +1155,10 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
                 .eq(UserReservationOrder::getOrderStatus, ORDER_STATUS_TO_USE)
                 .set(UserReservationOrder::getOrderStatus, ORDER_STATUS_EXPIRED)
                 .set(UserReservationOrder::getUpdatedTime, now));
+        // 3. 异步给商家发送订单过期提醒
+        for (Integer reservationId : toUpdateReservationIds) {
+            reservationNoticeAsyncService.sendExpiredReminderToStore(reservationId);
+        }
         log.info("预订未到店超时定时任务:更新 reservationIds={} 条为未到店超时/订单已过期", toUpdateReservationIds.size());
         return toUpdateReservationIds.size();
     }