erp/app/Listeners/UpdateBusinessGoodsStock.php

80 lines
2.3 KiB
PHP
Raw Normal View History

2022-08-08 10:43:59 +08:00
<?php
namespace App\Listeners;
2022-08-22 19:55:21 +08:00
use App\Models\BusinessGoodsSku;
use App\Models\Log;
2022-08-08 10:43:59 +08:00
use App\Models\Shop;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use App\Events\BusinessOrdersUpdate;
use App\Jobs\BusinessGoodsSkuIncrQuantity;
2022-08-30 23:11:48 +08:00
use Illuminate\Support\Facades\Log as LogFile;
2022-08-08 10:43:59 +08:00
2022-08-10 16:39:25 +08:00
class UpdateBusinessGoodsStock implements ShouldQueue
2022-08-08 10:43:59 +08:00
{
use InteractsWithQueue;
2022-08-08 10:43:59 +08:00
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
2022-08-08 10:43:59 +08:00
{
//
2022-08-08 10:43:59 +08:00
}
/**
* Handle the event.
*
* @param BusinessOrdersUpdate $event
2023-11-18 14:35:19 +08:00
* @return false|void
2022-08-08 10:43:59 +08:00
*/
public function handle(BusinessOrdersUpdate $event)
2022-08-08 10:43:59 +08:00
{
if (empty($event->goodsSku)) {
$log = new Log();
$log->module = 'goods';
$log->action = 'PATCH';
$log->target_type = 'goods_sku';
2022-08-17 20:50:03 +08:00
$log->target_id = $event->goodsSku->id ?? 0;
$log->target_field = 'stock';
2022-08-24 10:35:44 +08:00
$log->user_id = 999;
2023-11-18 14:35:19 +08:00
$log->message = '未找到' . json_encode($event->businessGoodSku, 256);
$log->save();
2022-08-16 21:02:31 +08:00
2023-04-18 11:22:16 +08:00
return false;
}
2023-11-18 14:35:19 +08:00
2022-10-25 10:47:36 +08:00
$builder = Shop::query()->whereNotIn('status', [Shop::$STATUS_UNAUTHORIZED, Shop::$STATUS_STOP]);
2022-09-15 17:55:17 +08:00
// 非订单影响库存变更,只更新本店铺下商品
2023-11-18 14:35:19 +08:00
if (!isset($event->businessGoodSku['business_order_id'])) {
$builder->where('id', $event->businessGoodSku['shop_id']);
2022-09-15 17:55:17 +08:00
}
$shops = $builder->get(['id', 'plat_id']);
2023-11-18 14:35:19 +08:00
if (empty($shops)) {
2022-08-30 23:11:48 +08:00
LogFile::info('可操作店铺为空');
2023-04-18 11:22:16 +08:00
return false;
}
foreach ($shops as $shop) {
if ($shop['plat_id'] == "快团团") {
$num = $event->goodsSku->sale_stock;
} else {
$num = $event->goodsSku->stock;
}
2023-11-21 16:27:14 +08:00
$businessGoodsSkus = BusinessGoodsSku::query()
->where('shop_id', $shop->id)
->where('is_sync', 1)
->where('external_sku_id', $event->businessGoodSku['external_sku_id'])
->get();
2022-08-22 19:55:21 +08:00
foreach ($businessGoodsSkus as $businessGoodsSku) {
2022-08-29 15:26:00 +08:00
BusinessGoodsSkuIncrQuantity::dispatch($shop, $businessGoodsSku->toArray(), $num, false);
2024-03-23 14:58:41 +08:00
usleep(140);
2022-08-22 19:55:21 +08:00
}
2022-08-10 16:39:25 +08:00
}
2022-08-08 10:43:59 +08:00
}
}