|
@@ -70,8 +70,16 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
|
|
|
|
|
|
|
|
/** 预约状态:待确认 */
|
|
/** 预约状态:待确认 */
|
|
|
private static final int STATUS_PENDING = 0;
|
|
private static final int STATUS_PENDING = 0;
|
|
|
|
|
+ /** 预约状态:已确认(待使用) */
|
|
|
|
|
+ private static final int STATUS_CONFIRMED = 1;
|
|
|
/** 预约状态:已取消(不参与约满统计与展示) */
|
|
/** 预约状态:已取消(不参与约满统计与展示) */
|
|
|
private static final int STATUS_CANCELLED = 3;
|
|
private static final int STATUS_CANCELLED = 3;
|
|
|
|
|
+ /** 预约状态:未到店超时 */
|
|
|
|
|
+ private static final int STATUS_NO_SHOW_TIMEOUT = 4;
|
|
|
|
|
+ /** 订单状态:待使用 */
|
|
|
|
|
+ private static final int ORDER_STATUS_TO_USE = 1;
|
|
|
|
|
+ /** 订单状态:已过期 */
|
|
|
|
|
+ private static final int ORDER_STATUS_EXPIRED = 3;
|
|
|
/** 查找首个未约满日期时,最多往后检查的天数 */
|
|
/** 查找首个未约满日期时,最多往后检查的天数 */
|
|
|
private static final int MAX_DAYS_TO_CHECK = 366;
|
|
private static final int MAX_DAYS_TO_CHECK = 366;
|
|
|
/** 全天预订时使用的结束分钟数(24*60,即到次日0点) */
|
|
/** 全天预订时使用的结束分钟数(24*60,即到次日0点) */
|
|
@@ -109,6 +117,11 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
|
|
|
if (order.getOrderCostType() != null && order.getOrderCostType() == 1 && order.getOrderSn() != null) {
|
|
if (order.getOrderCostType() != null && order.getOrderCostType() == 1 && order.getOrderSn() != null) {
|
|
|
reservationOrderPaymentTimeoutService.setReservationOrderPaymentTimeout(order.getOrderSn(), 15 * 60);
|
|
reservationOrderPaymentTimeoutService.setReservationOrderPaymentTimeout(order.getOrderSn(), 15 * 60);
|
|
|
}
|
|
}
|
|
|
|
|
+ // 免费预订:对应预约状态设为已确认(1),与订单「待使用」一致
|
|
|
|
|
+ if (order.getOrderCostType() != null && order.getOrderCostType() == 0) {
|
|
|
|
|
+ entity.setStatus(STATUS_CONFIRMED);
|
|
|
|
|
+ this.updateById(entity);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
return order.getId();
|
|
return order.getId();
|
|
|
}
|
|
}
|
|
@@ -191,6 +204,11 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
|
|
|
if (order.getOrderCostType() != null && order.getOrderCostType() == 1 && order.getOrderSn() != null) {
|
|
if (order.getOrderCostType() != null && order.getOrderCostType() == 1 && order.getOrderSn() != null) {
|
|
|
reservationOrderPaymentTimeoutService.setReservationOrderPaymentTimeout(order.getOrderSn(), 15 * 60);
|
|
reservationOrderPaymentTimeoutService.setReservationOrderPaymentTimeout(order.getOrderSn(), 15 * 60);
|
|
|
}
|
|
}
|
|
|
|
|
+ if (order.getOrderCostType() != null && order.getOrderCostType() == 0) {
|
|
|
|
|
+ this.update(new LambdaUpdateWrapper<UserReservation>()
|
|
|
|
|
+ .eq(UserReservation::getId, existing.getId())
|
|
|
|
|
+ .set(UserReservation::getStatus, STATUS_CONFIRMED));
|
|
|
|
|
+ }
|
|
|
} else if (order.getOrderStatus() != null && order.getOrderStatus() == 0) {
|
|
} else if (order.getOrderStatus() != null && order.getOrderStatus() == 0) {
|
|
|
fillOrderFromStoreSettings(order, updatedReservation);
|
|
fillOrderFromStoreSettings(order, updatedReservation);
|
|
|
userReservationOrderService.updateById(order);
|
|
userReservationOrderService.updateById(order);
|
|
@@ -209,16 +227,15 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
|
|
|
if (one == null) {
|
|
if (one == null) {
|
|
|
throw new RuntimeException("预约不存在");
|
|
throw new RuntimeException("预约不存在");
|
|
|
}
|
|
}
|
|
|
- // 假删除:将 delete_flag 置为 1(与 add 对应的三张表)
|
|
|
|
|
|
|
+ // 订单状态置为已取消(4)
|
|
|
userReservationOrderService.update(
|
|
userReservationOrderService.update(
|
|
|
new LambdaUpdateWrapper<UserReservationOrder>()
|
|
new LambdaUpdateWrapper<UserReservationOrder>()
|
|
|
.eq(UserReservationOrder::getId, one.getId())
|
|
.eq(UserReservationOrder::getId, one.getId())
|
|
|
.set(UserReservationOrder::getOrderStatus, 4));
|
|
.set(UserReservationOrder::getOrderStatus, 4));
|
|
|
-// userReservationTableMapper.update(null,
|
|
|
|
|
-// new LambdaUpdateWrapper<UserReservationTable>()
|
|
|
|
|
-// .eq(UserReservationTable::getReservationId, one.getReservationId())
|
|
|
|
|
-// .set(UserReservationTable::getDeleteFlag, 1));
|
|
|
|
|
- return this.removeById(id);
|
|
|
|
|
|
|
+ // 预约不再逻辑删除,仅将 status 置为已取消(3)
|
|
|
|
|
+ return this.update(new LambdaUpdateWrapper<UserReservation>()
|
|
|
|
|
+ .eq(UserReservation::getId, one.getReservationId())
|
|
|
|
|
+ .set(UserReservation::getStatus, STATUS_CANCELLED));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -962,6 +979,29 @@ public class UserReservationServiceImpl extends ServiceImpl<UserReservationMappe
|
|
|
return vo;
|
|
return vo;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int markReservationTimeoutByEndTime() {
|
|
|
|
|
+ // 关联查询:订单待使用 + 预约结束时间已过,在库内一次筛出需更新的 reservation_id
|
|
|
|
|
+ List<Integer> toUpdateReservationIds = baseMapper.listReservationIdsForTimeoutMark();
|
|
|
|
|
+ if (toUpdateReservationIds == null || toUpdateReservationIds.isEmpty()) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ // 1. 更新 user_reservation.status = 未到店超时(4)
|
|
|
|
|
+ this.update(new LambdaUpdateWrapper<UserReservation>()
|
|
|
|
|
+ .in(UserReservation::getId, toUpdateReservationIds)
|
|
|
|
|
+ .set(UserReservation::getStatus, STATUS_NO_SHOW_TIMEOUT)
|
|
|
|
|
+ .set(UserReservation::getUpdatedTime, now));
|
|
|
|
|
+ // 2. 更新 user_reservation_order.order_status = 已过期(3)
|
|
|
|
|
+ userReservationOrderService.update(new LambdaUpdateWrapper<UserReservationOrder>()
|
|
|
|
|
+ .in(UserReservationOrder::getReservationId, toUpdateReservationIds)
|
|
|
|
|
+ .eq(UserReservationOrder::getOrderStatus, ORDER_STATUS_TO_USE)
|
|
|
|
|
+ .set(UserReservationOrder::getOrderStatus, ORDER_STATUS_EXPIRED)
|
|
|
|
|
+ .set(UserReservationOrder::getUpdatedTime, now));
|
|
|
|
|
+ log.info("预订未到店超时定时任务:更新 reservationIds={} 条为未到店超时/订单已过期", toUpdateReservationIds.size());
|
|
|
|
|
+ return toUpdateReservationIds.size();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/** 将页面 VO 字段复制到详情 VO,供前端订单详情页与 page 接口一致展示 */
|
|
/** 将页面 VO 字段复制到详情 VO,供前端订单详情页与 page 接口一致展示 */
|
|
|
private void copyPageVoToDetailVo(ReservationOrderPageVo page, ReservationOrderDetailVo detail) {
|
|
private void copyPageVoToDetailVo(ReservationOrderPageVo page, ReservationOrderDetailVo detail) {
|
|
|
detail.setOrderId(page.getOrderId());
|
|
detail.setOrderId(page.getOrderId());
|