6
0
Fork 0
base
panliang 2023-02-25 18:14:47 +08:00
parent 2907416e8d
commit 22155ec344
4 changed files with 79 additions and 47 deletions

View File

@ -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('操作成功');
}

View File

@ -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());
}
}
}

View File

@ -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
]);
}
}
}
}

View File

@ -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();