京东打印

This commit is contained in:
杨建炊 2024-12-28 11:13:17 +08:00
parent 2019a88fb9
commit 0cd78ff136
8 changed files with 90 additions and 9 deletions

View File

@ -10,6 +10,9 @@ class BusinessOrderFilter extends Filters
{ {
protected function ids($value) protected function ids($value)
{ {
if(is_string($value)){
$value = explode(",", $value);
}
return $this->builder->whereIn('id', $value); return $this->builder->whereIn('id', $value);
} }

View File

@ -16,6 +16,7 @@ use Carbon\Carbon;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Resources\BusinessOrderResource; use App\Http\Resources\BusinessOrderResource;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
class BusinessOrderController extends Controller class BusinessOrderController extends Controller
@ -28,12 +29,20 @@ class BusinessOrderController extends Controller
$builder = BusinessOrder::query() $builder = BusinessOrder::query()
->with([ ->with([
'shop:id,name', '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) ->whereIn('shop_id', $shopIds)
->filter(); ->filter();
$externalSkuIds = $request->get('external_sku_ids'); $externalSkuIds = $request->get('external_sku_ids');
$externalSkuId = $request->get('external_sku_id');
if (!empty($externalSkuId)) {
$externalSkuIds = $externalSkuId;
}
if ($externalSkuIds) { if ($externalSkuIds) {
if (is_string($externalSkuIds)) {
$externalSkuIds = explode(",", $externalSkuIds);
}
$ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id'); $ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id');
$builder->whereIn('id', $ids); $builder->whereIn('id', $ids);
} }
@ -170,6 +179,7 @@ class BusinessOrderController extends Controller
public function print(Request $request) public function print(Request $request)
{ {
$shopIds = Shop::query() $shopIds = Shop::query()
->where('plat_id', Shop::$PLAT_KTT) ->where('plat_id', Shop::$PLAT_KTT)
->pluck('id'); ->pluck('id');
@ -178,11 +188,15 @@ class BusinessOrderController extends Controller
->whereIn('shop_id', $shopIds) ->whereIn('shop_id', $shopIds)
->filter(); ->filter();
$externalSkuIds = $request->get('external_sku_ids'); $externalSkuIds = $request->get('external_sku_ids');
if ($externalSkuIds) { if ($externalSkuIds) {
$ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id'); $ids = BusinessOrderItem::query()->whereIn('external_sku_id', $externalSkuIds)->pluck('business_order_id');
$builder->whereIn('id', $ids); $builder->whereIn('id', $ids);
} }
if ($ids = $request->input('ids')) { if ($ids = $request->input('ids')) {
if (is_string($ids)) {
$ids = explode(",", $ids);
}
$builder->whereIn('id', $ids); $builder->whereIn('id', $ids);
} }
$businessOrders = $builder->get(); $businessOrders = $builder->get();
@ -250,9 +264,9 @@ class BusinessOrderController extends Controller
$orderIds = explode(',', $orderIds); $orderIds = explode(',', $orderIds);
BusinessOrder::query() BusinessOrder::query()
->whereIn('id', $orderIds) ->whereIn('id', $orderIds)
->increment('print_status'); ->update(['print_status' => 1]);
Waybill::query() Waybill::query()
->where('order', $orderIds) ->where('order_id', $orderIds)
->update(['status' => Waybill::$STATUS_PRINT_SUCCESS]); ->update(['status' => Waybill::$STATUS_PRINT_SUCCESS]);
return response(['message' => 'success']); return response(['message' => 'success']);
} }

View File

@ -0,0 +1,38 @@
<?php
namespace App\Http\Controllers\Business;
use App\Exports\BusinessOrderExport;
use App\Exports\OrderBlankExport;
use App\Http\Controllers\Controller;
use App\Models\BusinessOrder;
use App\Models\BusinessOrderItem;
use App\Models\GoodsSku;
use App\Models\Shop;
use App\Models\Waybill;
use App\Services\WayBill\JingDong\JingDongService;
use App\Services\WayBill\JingDong\WayBillService;
use App\Utils\DateTimeUtils;
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 WaybillController extends Controller
{
public function queryTrace(Request $request)
{
$params = $request->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);
}
}

View File

@ -3,6 +3,7 @@
namespace App\Listeners; namespace App\Listeners;
use App\Events\CreateLogisticEvent; use App\Events\CreateLogisticEvent;
use App\Models\BusinessOrder;
use App\Models\Shop; use App\Models\Shop;
use App\Services\Business\BusinessFactory; use App\Services\Business\BusinessFactory;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
@ -32,8 +33,8 @@ class CreateLogisticListener implements ShouldQueue
*/ */
public function handle(CreateLogisticEvent $event) 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 = BusinessFactory::init()->make($shop['plat_id'])->setShop($shop);
$client->createLogistic($event->orderSn, $event->waybillNo); //$client->createLogistic($event->orderSn, $event->waybillNo);
} }
} }

View File

@ -23,6 +23,8 @@ class BusinessOrder extends Model
'print_status', 'print_status',
'ids', 'ids',
'pno', 'pno',
'order_sn',
'id',
]; ];
protected $fillable = [ protected $fillable = [
@ -72,4 +74,9 @@ class BusinessOrder extends Model
{ {
return $this->belongsTo(Shop::class, 'shop_id', 'id'); return $this->belongsTo(Shop::class, 'shop_id', 'id');
} }
public function waybill()
{
return $this->belongsTo(Waybill::class, 'id', 'order_id');
}
} }

View File

@ -86,7 +86,7 @@ class JingDongService
$response = json_decode($response->getBody(), true); $response = json_decode($response->getBody(), true);
Log::info("京东返回请求response", [$response]); Log::info("京东返回请求response", [$response]);
if (!isset($response['code']) || ($response['code'] != 0 && $response['code'] != 1 && $response['code'] != 1000)) { 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; return $response;
} }
@ -226,5 +226,19 @@ class JingDongService
return $response['data']; 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'];
}
} }

View File

@ -44,7 +44,7 @@ class WayBillService
$waybill->waybill_code = $resp['waybillNo']; $waybill->waybill_code = $resp['waybillNo'];
$waybill->save(); $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'], 'note' => $order['business_note'] ? $order['business_note'] . ',' . $order['buyer_memo'] : $order['buyer_memo'],
'items' => [] 'items' => []
]; ];
$note = "";
foreach ($order['items'] as $item) { foreach ($order['items'] as $item) {
$count = $item['goods_number'] - $item['already_cancel_number']; $count = $item['goods_number'] - $item['already_cancel_number'];
$info['items'][] = [ $info['items'][] = [
@ -248,8 +249,10 @@ class WayBillService
'count' => $count, 'count' => $count,
'external_sku_id' => $item['external_sku_id'], 'external_sku_id' => $item['external_sku_id'],
]; ];
$note .= $item['goods_name'] . " " . $count . "件,";
} }
$note .= "[备注:" . $info['note'] . "]";
$info['note'] = $note;
$this->orders[$order['shop_id']][] = $info; $this->orders[$order['shop_id']][] = $info;
} }

View File

@ -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('shop/ship', [ShipController::class, 'index'])->name('shop_ship.index');
Route::get('print/orders', [BusinessOrderController::class, 'print'])->name('order.print'); Route::get('print/orders', [BusinessOrderController::class, 'print'])->name('order.print');
Route::put('print/success', [BusinessOrderController::class, 'printSuccess'])->name('order.printSuccess'); 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::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'); Route::post('shop/ship/senders', [ShipController::class, 'saveSenders'])->name('shop_ship.senders.save');