预约订单槽点列表 优化
This commit is contained in:
parent
955fe3a3ff
commit
6b7cc54b01
@ -1128,64 +1128,61 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
|
||||
Date openTime = DateUtil.parse(dateStr + " " + openingHours + ":00", "yyyy-MM-dd HH:mm:ss");
|
||||
Date closeTime = DateUtil.parse(dateStr + " " + closeHours + ":00", "yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
// 如果结束时间早于开始时间,说明跨天了,需要调整到第二天
|
||||
if (closeTime.before(openTime)) {
|
||||
closeTime = DateUtil.offsetDay(closeTime, 1);
|
||||
}
|
||||
|
||||
// 验证营业时间有效性
|
||||
if (openTime.after(closeTime)) {
|
||||
logger.warn("[生成时间槽] 营业时间无效,openTime: {}, closeTime: {}", openTime, closeTime);
|
||||
return items;
|
||||
}
|
||||
|
||||
// 对于今天,需要特殊处理:从当前时间+5分钟开始生成时间槽
|
||||
// 时间槽间隔(分钟)
|
||||
int slotInterval = 30;
|
||||
|
||||
// 对于今天,需要特殊处理:第二个时间槽从当前时间+50分钟开始
|
||||
Date startTime = openTime;
|
||||
if (isToday) {
|
||||
// 当前时间+5分钟作为第二个时间槽的开始时间
|
||||
Date nowPlusFive = DateUtil.offsetMinute(new Date(), 5);
|
||||
// 如果当前时间+5分钟在营业时间范围内,则从该时间开始
|
||||
if (nowPlusFive.after(openTime) && nowPlusFive.before(closeTime)) {
|
||||
startTime = nowPlusFive;
|
||||
// 当前时间+50分钟作为第二个时间槽的开始时间
|
||||
Date nowPlusFifty = DateUtil.offsetMinute(new Date(), 50);
|
||||
|
||||
// 如果当前时间+50分钟在营业时间范围内,则从该时间开始
|
||||
if (nowPlusFifty.after(openTime) && nowPlusFifty.before(closeTime)) {
|
||||
startTime = nowPlusFifty;
|
||||
}
|
||||
// 如果当前时间+5分钟已经超过营业结束时间,则不生成后续时间槽
|
||||
else if (nowPlusFive.after(closeTime)) {
|
||||
logger.debug("[生成时间槽] 当前时间+5分钟已超过营业结束时间,不生成后续时间槽");
|
||||
// 如果当前时间+50分钟已经超过营业结束时间,则不生成后续时间槽
|
||||
else if (nowPlusFifty.after(closeTime)) {
|
||||
logger.debug("[生成时间槽] 当前时间+50分钟已超过营业结束时间,不生成后续时间槽");
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
||||
// 生成30分钟间隔的时间段
|
||||
// 生成时间槽
|
||||
Date currentTimeSlot = startTime;
|
||||
int slotCount = 0;
|
||||
final int MAX_SLOTS = 48; // 最多生成48个时间段,防止异常循环
|
||||
|
||||
while (currentTimeSlot.before(closeTime) && slotCount < MAX_SLOTS) {
|
||||
Date endTimeSlot = DateUtil.offsetMinute(currentTimeSlot, 30);
|
||||
Date endTimeSlot = DateUtil.offsetMinute(currentTimeSlot, slotInterval);
|
||||
|
||||
// 如果结束时间超过了营业结束时间,则使用营业结束时间
|
||||
if (endTimeSlot.after(closeTime)) {
|
||||
endTimeSlot = closeTime;
|
||||
}
|
||||
|
||||
// 创建时间段项(跳过"立即送出"项,因为已经添加过了)
|
||||
if (!(isToday && slotCount == 0 && items.size() > 0 && "立即送出".equals(items.get(0).getTime_title()))) {
|
||||
BookingArgDTO.BookingArgItem timeItem = new BookingArgDTO.BookingArgItem();
|
||||
String beginTimeStr = DateUtil.format(currentTimeSlot, "HH:mm");
|
||||
String endTimeStr = DateUtil.format(endTimeSlot, "HH:mm");
|
||||
// 创建时间段项
|
||||
BookingArgDTO.BookingArgItem timeItem = new BookingArgDTO.BookingArgItem();
|
||||
String beginTimeStr = DateUtil.format(currentTimeSlot, "HH:mm");
|
||||
String endTimeStr = DateUtil.format(endTimeSlot, "HH:mm");
|
||||
|
||||
timeItem.setTime_title(beginTimeStr + "-" + endTimeStr);
|
||||
timeItem.setTime_title(beginTimeStr + "-" + endTimeStr);
|
||||
|
||||
// 修正时间戳计算
|
||||
long bookingAt = currentTimeSlot.getTime() / 1000;
|
||||
timeItem.setBooking_at(bookingAt);
|
||||
// 时间戳计算(秒)
|
||||
long bookingAt = currentTimeSlot.getTime() / 1000;
|
||||
timeItem.setBooking_at(bookingAt);
|
||||
|
||||
timeItem.setBooking_state(2);
|
||||
timeItem.setBooking_begin_time(DateUtil.format(currentTimeSlot, "yyyy-MM-dd HH:mm:ss"));
|
||||
timeItem.setBooking_end_time(DateUtil.format(DateUtil.offsetMinute(currentTimeSlot, 40), "yyyy-MM-dd HH:mm:ss"));
|
||||
timeItem.setBooking_state(2);
|
||||
timeItem.setBooking_begin_time(DateUtil.format(currentTimeSlot, "yyyy-MM-dd HH:mm:ss"));
|
||||
timeItem.setBooking_end_time(DateUtil.format(endTimeSlot, "yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
items.add(timeItem);
|
||||
}
|
||||
items.add(timeItem);
|
||||
|
||||
// 移动到下一个时间段
|
||||
currentTimeSlot = endTimeSlot;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user