diff --git a/app/Admin/Actions/Store/ShowOrderPrint.php b/app/Admin/Actions/Store/ShowOrderPrint.php index 44ed1dfa..1022ff23 100644 --- a/app/Admin/Actions/Store/ShowOrderPrint.php +++ b/app/Admin/Actions/Store/ShowOrderPrint.php @@ -4,6 +4,9 @@ namespace App\Admin\Actions\Store; use Dcat\Admin\Show\AbstractTool; use App\Models\Store\Desk; +use App\Services\OrderService; +use App\Models\Order; +use App\Exceptions\BizException; class ShowOrderPrint extends AbstractTool { @@ -13,8 +16,14 @@ class ShowOrderPrint extends AbstractTool public function handle() { - $id = $this->getKey(); + $order = Order::findOrFail($this->getKey()); + try { + (new OrderService())->print($order); + } catch (BizException $e) { + return $this->response()->error($e->getMessage()); + } + return $this->response()->success('操作成功'); } diff --git a/app/Listeners/OrderPrint.php b/app/Listeners/OrderPrint.php index 00d09d7a..65609f89 100644 --- a/app/Listeners/OrderPrint.php +++ b/app/Listeners/OrderPrint.php @@ -4,9 +4,8 @@ namespace App\Listeners; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; -use App\Models\Order; -use App\Models\Store\{Desk, DeviceRecord}; -use App\Services\PrintService; +use App\Exceptions\BizException; +use App\Services\OrderService; /** * 打印订单小票 @@ -18,46 +17,10 @@ class OrderPrint $order = $event->order; // 门店订单, 桌号信息 if ($order->store_id && $order->source_type == Desk::class) { - $store = $order->store; - $desk = $order->source; - - // 门店设备 - $devices = $store->devices()->where('status', 1)->get(); - $templateId = data_get($store->extra, 'order_desk_print_template'); - if ($devices->count() > 0 && $templateId) { - $service = PrintService::make(); - $products = []; - foreach($order->products as $item) { - array_push($products, [ - 'name' => $item->name, - 'price' => round($item->sell_price / 100, 2, PHP_ROUND_HALF_DOWN), - 'amount' => $item->quantity, - 'money' => round($item->total_amount / 100, 2, PHP_ROUND_HALF_DOWN), - ]); - } - $data = [ - 'name' => $store->title, - 'sn' => $order->sn, - 'time' => $order->created_at->format('Y-m-d H:i:s'), - 'desk' => $desk->name, - 'products' => $products, - 'total' => round($order->total_amount, 2, PHP_ROUND_HALF_DOWN), - 'remarks' => $order->note ?: '', - ]; - foreach($devices as $item) { - $result = $service->template($item->device_no, $templateId, $data); - $status = data_get($result, 'code') == 0 ? DeviceRecord::STATUS_SUCCESS : DeviceRecord::STATUS_FAIL; - // 添加打印的日志记录 - $item->records()->create([ - 'data' => $data, - 'device_id' => $item->id, - 'result' => $result, - 'resource_id' => $order->id, - 'resource_type' => $order->getMorphClass(), - 'status' => $status, - 'store_id' => $store->id - ]); - } + try { + (new OrderService())->print($order); + } catch (BizException $e) { + logger('订单打印失败: ' . $e->getMessage()); } } } diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 5b0bfa9c..bf1f3f31 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -21,7 +21,7 @@ use App\Models\ProductSku; use App\Models\ShippingAddress; use App\Models\SocialiteUser; use App\Models\{User, OrderPre, Tag}; -use App\Models\Store\{Store, Desk}; +use App\Models\Store\{Store, Desk, DeviceRecord}; use App\Models\UserCoupon; use App\Services\Payment\WxpayService; use Illuminate\Database\Eloquent\Builder; @@ -1358,4 +1358,63 @@ class OrderService 'status' => Order::STATUS_CANCELLED, ]); } + + /** + * 打印订单小票 + * + * @param Order $order 订单 + * @throws BizException + */ + public function print(Order $order) + { + if (!$order->store_id || $order->source_type !== Desk::class) { + throw new BizException('不是门店订单'); + } + $store = $order->store; + if (!$store) { + throw new BizException('未找到门店'); + } + $desk = $order->source; + if (!$desk) { + throw new BizException('未找到桌号'); + } + $devices = $store->devices()->where('status', 1)->get(); + + $templateId = data_get($store->extra, 'order_desk_print_template'); + if ($devices->count() > 0 && $templateId) { + $service = PrintService::make(); + $products = []; + foreach($order->products as $item) { + array_push($products, [ + 'name' => $item->name, + 'price' => round($item->sell_price / 100, 2, PHP_ROUND_HALF_DOWN), + 'amount' => $item->quantity, + 'money' => round($item->total_amount / 100, 2, PHP_ROUND_HALF_DOWN), + ]); + } + $data = [ + 'name' => $store->title, + 'sn' => $order->sn, + 'time' => $order->created_at->format('Y-m-d H:i:s'), + 'desk' => $desk->name, + 'products' => $products, + 'total' => round($order->total_amount, 2, PHP_ROUND_HALF_DOWN), + 'remarks' => $order->note ?: '', + ]; + foreach($devices as $item) { + $result = $service->template($item->device_no, $templateId, $data); + $status = data_get($result, 'code') == 0 ? DeviceRecord::STATUS_SUCCESS : DeviceRecord::STATUS_FAIL; + // 添加打印的日志记录 + $item->records()->create([ + 'data' => $data, + 'device_id' => $item->id, + 'result' => $result, + 'resource_id' => $order->id, + 'resource_type' => $order->getMorphClass(), + 'status' => $status, + 'store_id' => $store->id + ]); + } + } + } } diff --git a/app/Services/PrintService.php b/app/Services/PrintService.php index 1d18edca..1459d572 100644 --- a/app/Services/PrintService.php +++ b/app/Services/PrintService.php @@ -15,8 +15,8 @@ class PrintService function __construct() { - $this->memberCode = config('postcom.memberCode'); - $this->apiKey = config('postcom.apiKey'); + $this->memberCode = config('postcom.member_code'); + $this->apiKey = config('postcom.api_key'); } /** @@ -40,6 +40,7 @@ class PrintService $params['templetID'] = $templetID; $params['tData'] = json_encode($data); + logger('postcom', $params); $response = Http::asForm()->post($url, $params); if ($response->successful()) { $result = $response->json();