From 0cd78ff136971557b736a8536a83571c97d782b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=BB=BA=E7=82=8A?= <924182103@qq.com> Date: Sat, 28 Dec 2024 11:13:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Filters/BusinessOrderFilter.php | 3 ++ .../Business/BusinessOrderController.php | 20 ++++++++-- .../Business/WaybillController.php | 38 +++++++++++++++++++ app/Listeners/CreateLogisticListener.php | 7 ++-- app/Models/BusinessOrder.php | 7 ++++ .../WayBill/JingDong/JingDongService.php | 16 +++++++- .../WayBill/JingDong/WayBillService.php | 7 +++- routes/api.php | 1 + 8 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 app/Http/Controllers/Business/WaybillController.php diff --git a/app/Filters/BusinessOrderFilter.php b/app/Filters/BusinessOrderFilter.php index d76a7bb..3789e8f 100644 --- a/app/Filters/BusinessOrderFilter.php +++ b/app/Filters/BusinessOrderFilter.php @@ -10,6 +10,9 @@ class BusinessOrderFilter extends Filters { protected function ids($value) { + if(is_string($value)){ + $value = explode(",", $value); + } return $this->builder->whereIn('id', $value); } diff --git a/app/Http/Controllers/Business/BusinessOrderController.php b/app/Http/Controllers/Business/BusinessOrderController.php index 9bb56cc..4653c5d 100644 --- a/app/Http/Controllers/Business/BusinessOrderController.php +++ b/app/Http/Controllers/Business/BusinessOrderController.php @@ -16,6 +16,7 @@ use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Resources\BusinessOrderResource; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; use Maatwebsite\Excel\Facades\Excel; class BusinessOrderController extends Controller @@ -28,12 +29,20 @@ class BusinessOrderController extends Controller $builder = BusinessOrder::query() ->with([ 'shop:id,name', - 'items:id,business_order_id,goods_name,goods_number,external_sku_id' + 'items:id,business_order_id,goods_name,goods_number,external_sku_id', + "waybill" ]) ->whereIn('shop_id', $shopIds) ->filter(); $externalSkuIds = $request->get('external_sku_ids'); + $externalSkuId = $request->get('external_sku_id'); + if (!empty($externalSkuId)) { + $externalSkuIds = $externalSkuId; + } if ($externalSkuIds) { + if (is_string($externalSkuIds)) { + $externalSkuIds = explode(",", $externalSkuIds); + } $ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id'); $builder->whereIn('id', $ids); } @@ -170,6 +179,7 @@ class BusinessOrderController extends Controller public function print(Request $request) { + $shopIds = Shop::query() ->where('plat_id', Shop::$PLAT_KTT) ->pluck('id'); @@ -178,11 +188,15 @@ class BusinessOrderController extends Controller ->whereIn('shop_id', $shopIds) ->filter(); $externalSkuIds = $request->get('external_sku_ids'); + if ($externalSkuIds) { $ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id'); $builder->whereIn('id', $ids); } if ($ids = $request->input('ids')) { + if (is_string($ids)) { + $ids = explode(",", $ids); + } $builder->whereIn('id', $ids); } $businessOrders = $builder->get(); @@ -250,9 +264,9 @@ class BusinessOrderController extends Controller $orderIds = explode(',', $orderIds); BusinessOrder::query() ->whereIn('id', $orderIds) - ->increment('print_status'); + ->update(['print_status' => 1]); Waybill::query() - ->where('order', $orderIds) + ->where('order_id', $orderIds) ->update(['status' => Waybill::$STATUS_PRINT_SUCCESS]); return response(['message' => 'success']); } diff --git a/app/Http/Controllers/Business/WaybillController.php b/app/Http/Controllers/Business/WaybillController.php new file mode 100644 index 0000000..0dd4ad1 --- /dev/null +++ b/app/Http/Controllers/Business/WaybillController.php @@ -0,0 +1,38 @@ +validate([ + 'order_id' => 'required', + ], [ + 'order_id.required' => '订单id', + ]); + $waybill = Waybill::query()->where("order_id", $params['order_id'])->firstOrFail(); + $jingDongService = new JingDongService(); + return $jingDongService->queryTrace($waybill); + } + + +} diff --git a/app/Listeners/CreateLogisticListener.php b/app/Listeners/CreateLogisticListener.php index bb83023..7c07758 100644 --- a/app/Listeners/CreateLogisticListener.php +++ b/app/Listeners/CreateLogisticListener.php @@ -3,6 +3,7 @@ namespace App\Listeners; use App\Events\CreateLogisticEvent; +use App\Models\BusinessOrder; use App\Models\Shop; use App\Services\Business\BusinessFactory; use Illuminate\Contracts\Queue\ShouldQueue; @@ -27,13 +28,13 @@ class CreateLogisticListener implements ShouldQueue /** * Handle the event. * - * @param CreateLogisticEvent $event + * @param CreateLogisticEvent $event * @return void */ public function handle(CreateLogisticEvent $event) { - $shop = Shop::query()->findOrFail($event->shopId); + $shop = Shop::query()->findOrFail($event->shopId);; $client = BusinessFactory::init()->make($shop['plat_id'])->setShop($shop); - $client->createLogistic($event->orderSn, $event->waybillNo); + //$client->createLogistic($event->orderSn, $event->waybillNo); } } diff --git a/app/Models/BusinessOrder.php b/app/Models/BusinessOrder.php index 166c9a1..1e954e8 100644 --- a/app/Models/BusinessOrder.php +++ b/app/Models/BusinessOrder.php @@ -23,6 +23,8 @@ class BusinessOrder extends Model 'print_status', 'ids', 'pno', + 'order_sn', + 'id', ]; protected $fillable = [ @@ -72,4 +74,9 @@ class BusinessOrder extends Model { return $this->belongsTo(Shop::class, 'shop_id', 'id'); } + + public function waybill() + { + return $this->belongsTo(Waybill::class, 'id', 'order_id'); + } } diff --git a/app/Services/WayBill/JingDong/JingDongService.php b/app/Services/WayBill/JingDong/JingDongService.php index 44b35ea..ab53300 100644 --- a/app/Services/WayBill/JingDong/JingDongService.php +++ b/app/Services/WayBill/JingDong/JingDongService.php @@ -86,7 +86,7 @@ class JingDongService $response = json_decode($response->getBody(), true); Log::info("京东返回请求response", [$response]); if (!isset($response['code']) || ($response['code'] != 0 && $response['code'] != 1 && $response['code'] != 1000)) { - throw new \Exception($response['msg'] ?? "code异常"); + throw new \Exception($response['message'] ?? "code异常"); } return $response; } @@ -226,5 +226,19 @@ class JingDongService return $response['data']; } + public function queryTrace(Waybill $pickup) + { + $path = "/freshmedicinedelivery/delivery/query/waybill/gis/v1"; + $pickupData = $pickup->toArray(); + $body = [ + "waybillNo" => $pickupData['waybill_code'] ?? '', + "customerCode" => $this->customerCode, + ]; + $response = $this->request($body, $path); + + return $response['data']; + } + + } diff --git a/app/Services/WayBill/JingDong/WayBillService.php b/app/Services/WayBill/JingDong/WayBillService.php index c4e5ecb..88d1559 100644 --- a/app/Services/WayBill/JingDong/WayBillService.php +++ b/app/Services/WayBill/JingDong/WayBillService.php @@ -44,7 +44,7 @@ class WayBillService $waybill->waybill_code = $resp['waybillNo']; $waybill->save(); //物流发货 - event(new CreateLogisticEvent($order->shop_id, $waybill->order_sn, $waybill->waybill_code)); + event(new CreateLogisticEvent($waybill->shop_id, $waybill->order_sn, $waybill->waybill_code)); } } //返回面单待打印数据 @@ -239,6 +239,7 @@ class WayBillService 'note' => $order['business_note'] ? $order['business_note'] . ',' . $order['buyer_memo'] : $order['buyer_memo'], 'items' => [] ]; + $note = ""; foreach ($order['items'] as $item) { $count = $item['goods_number'] - $item['already_cancel_number']; $info['items'][] = [ @@ -248,8 +249,10 @@ class WayBillService 'count' => $count, 'external_sku_id' => $item['external_sku_id'], ]; - + $note .= $item['goods_name'] . " " . $count . "件,"; } + $note .= "[备注:" . $info['note'] . "]"; + $info['note'] = $note; $this->orders[$order['shop_id']][] = $info; } diff --git a/routes/api.php b/routes/api.php index c6a325b..84eb2e8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -72,6 +72,7 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () { Route::get('shop/ship', [ShipController::class, 'index'])->name('shop_ship.index'); Route::get('print/orders', [BusinessOrderController::class, 'print'])->name('order.print'); Route::put('print/success', [BusinessOrderController::class, 'printSuccess'])->name('order.printSuccess'); + Route::get('waybill/queryTrace', [\App\Http\Controllers\Business\WaybillController::class, 'queryTrace']); // 发货信息 Route::get('shop/ship/senders', [ShipController::class, 'getSenders'])->name('shop_ship.senders.get'); Route::post('shop/ship/senders', [ShipController::class, 'saveSenders'])->name('shop_ship.senders.save');