2022-08-08 10:43:59 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Listeners;
|
|
|
|
|
|
2022-08-22 19:55:21 +08:00
|
|
|
use App\Models\BusinessGoodsSku;
|
2022-08-11 02:13:19 +08:00
|
|
|
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;
|
2022-08-11 11:18:21 +08:00
|
|
|
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
|
|
|
{
|
2022-08-11 11:18:21 +08:00
|
|
|
use InteractsWithQueue;
|
2022-08-08 10:43:59 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create the event listener.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
2022-08-11 11:18:21 +08:00
|
|
|
public function __construct()
|
2022-08-08 10:43:59 +08:00
|
|
|
{
|
2022-08-11 11:18:21 +08:00
|
|
|
//
|
2022-08-08 10:43:59 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Handle the event.
|
|
|
|
|
*
|
2022-08-11 11:18:21 +08:00
|
|
|
* @param BusinessOrdersUpdate $event
|
2023-11-18 14:35:19 +08:00
|
|
|
* @return false|void
|
2022-08-08 10:43:59 +08:00
|
|
|
*/
|
2022-08-11 11:18:21 +08:00
|
|
|
public function handle(BusinessOrdersUpdate $event)
|
2022-08-08 10:43:59 +08:00
|
|
|
{
|
2022-08-11 11:18:21 +08:00
|
|
|
if (empty($event->goodsSku)) {
|
2022-08-11 02:13:19 +08:00
|
|
|
$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;
|
2022-08-11 02:13:19 +08:00
|
|
|
$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);
|
2022-08-11 02:13:19 +08:00
|
|
|
$log->save();
|
2022-08-16 21:02:31 +08:00
|
|
|
|
2023-04-18 11:22:16 +08:00
|
|
|
return false;
|
2022-08-11 11:18:21 +08:00
|
|
|
}
|
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
|
|
|
|
2022-08-11 11:18:21 +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;
|
2022-08-11 11:18:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($shops as $shop) {
|
2022-08-29 16:36:42 +08:00
|
|
|
$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 13:46:52 +08:00
|
|
|
usleep(100);
|
2022-08-22 19:55:21 +08:00
|
|
|
}
|
2022-08-10 16:39:25 +08:00
|
|
|
}
|
2022-08-08 10:43:59 +08:00
|
|
|
}
|
|
|
|
|
}
|