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') {