diff --git a/application/p/logic/MealOrder.php b/application/p/logic/MealOrder.php index 836beb684..7c1d9ee88 100644 --- a/application/p/logic/MealOrder.php +++ b/application/p/logic/MealOrder.php @@ -4095,7 +4095,7 @@ class MealOrder extends BaseService throwError('请传入订单ID'); } $order = $this->model->where(['id' => $orderId, 'is_delete' => 0]) - ->field(['id', 'order_no', 'restaurant_id', 'equipment_code', 'pay_time', 'bind_time', 'user_mobile', 'user_name', 'total_price', 'pay_price', 'discount_amount', 'management_fee', 'remark', 'package_fee', 'restaurant_method', 'locker_code', 'locker_address', 'locker_status', 'pay_type', 'print_status']) + ->field(['id', 'order_no', 'restaurant_id', 'equipment_code', 'pay_time', 'bind_time', 'source', 'meal_date', 'take_time_start', 'take_time_end', 'user_mobile', 'user_name', 'total_price', 'pay_price', 'discount_amount', 'management_fee', 'remark', 'package_fee', 'restaurant_method', 'locker_code', 'locker_address', 'locker_status', 'pay_type', 'print_status']) ->find(); if (empty($order)) { throwError('订单不存在'); @@ -4311,7 +4311,7 @@ class MealOrder extends BaseService $orderNo = (string)($order['order_no'] ?? ''); $takeMethod = $this->formatRestaurantMethod((int)($order['restaurant_method'] ?? 0)); $payType = $this->formatPayType((int)($order['pay_type'] ?? 0)); - $bindTime = $this->formatReceiptTime((string)($order['bind_time'] ?? '')); + $pickupTime = $this->formatReceiptPickupTime($order); $payTime = $this->formatReceiptTime((string)($order['pay_time'] ?? '')); $packageFee = helper::number2((string)($order['package_fee'] ?? '0')); $discountAmount = helper::number2((string)($order['discount_amount'] ?? '0')); @@ -4346,7 +4346,13 @@ class MealOrder extends BaseService $lines[] = '
'; $lines[] = '' . $this->formatTwoColumns('支付方式:', $payType) . '
'; if ($equipmentType !== self::ORDER_MACHINE_EQUIPMENT_TYPE) { - $lines[] = '' . $this->formatTwoColumns('取餐时间:', $bindTime) . '
'; + if ($this->getPrintableWidth('取餐时间:' . $pickupTime) < 32) { + $lines[] = '' . $this->formatTwoColumns('取餐时间:', $pickupTime) . '
'; + } else { + foreach ($this->splitByWidth('取餐时间: ' . $pickupTime, 32) as $fieldLine) { + $lines[] = '' . $fieldLine . '
'; + } + } } $lines[] = '' . $this->formatTwoColumns('订餐时间:', $payTime) . '
'; $lines[] = '' . $this->formatTwoColumns('订单编号:', $orderNo) . '
'; @@ -4596,6 +4602,24 @@ class MealOrder extends BaseService return '-'; } + private function formatReceiptPickupTime(array $order): string + { + // 非线上订餐保留原取餐时间口径;预约单使用订单保存的日期和时段。 + if ((int)($order['source'] ?? 0) !== OrderSourceEnum::ORDERFOOD) { + return $this->formatReceiptTime((string)($order['bind_time'] ?? '')); + } + $mealDate = trim((string)($order['meal_date'] ?? '')); + if (!preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $mealDate, $parts) + || !checkdate((int)$parts[2], (int)$parts[3], (int)$parts[1]) + || $mealDate === '2000-01-01') { + return '-'; + } + $start = trim((string)($order['take_time_start'] ?? '')); + $end = trim((string)($order['take_time_end'] ?? '')); + // 与后台详情一致:时段两端齐备才展示,禁止回退成下单当天。 + return $start !== '' && $end !== '' ? $mealDate . ' ' . $start . ' - ' . $end : $mealDate; + } + private function formatReceiptTime(string $time): string { if ($time === '' || $time === '2000-01-01 00:00:00') {