erp/app/Listeners/StockUpdateListener.php

75 lines
2.8 KiB
PHP
Raw Normal View History

2022-08-16 21:02:31 +08:00
<?php
namespace App\Listeners;
use App\Events\StockUpdateEvent;
use App\Jobs\BusinessGoodsSkuIncrQuantity;
use App\Models\BusinessGoodsSku;
use App\Models\Shop;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
2022-11-04 15:01:55 +08:00
use App\Services\Business\BusinessFactory;
2022-08-16 21:02:31 +08:00
class StockUpdateListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param StockUpdateEvent $event
* @return void
*/
public function handle(StockUpdateEvent $event)
{
2022-10-25 10:47:36 +08:00
$shops = Shop::query()->whereNotIn('status', [Shop::$STATUS_UNAUTHORIZED, Shop::$STATUS_STOP])->get(['id', 'plat_id']);
2022-08-16 21:02:31 +08:00
if (empty($shops)) {
return;
}
foreach ($shops as $shop) {
2022-11-03 17:09:48 +08:00
if (isset($event->goodsSku)) {
2022-08-16 21:02:31 +08:00
$num = $event->goodsSku->stock;
2022-11-04 15:01:55 +08:00
$businessGoodsSkus = BusinessGoodsSku::query()
2022-11-04 17:10:08 +08:00
->select(['goods_id', 'sku_id', 'external_sku_id'])
2022-11-04 15:01:55 +08:00
->where('shop_id', $shop->id)
->where('is_sync', 1)
->where('external_sku_id', $event->goodsSku->goods['goods_code'] . '_' . $event->goodsSku->sku_code)
->get();
2022-11-04 16:45:22 +08:00
if ($event->isBatch) {
BusinessFactory::init()->make($shop['plat_id'])->setShopWithId($shop['id'])->batchIncrQuantity($businessGoodsSkus->toArray(), $num, false);
} else {
foreach ($businessGoodsSkus as $businessGoodsSku) {
BusinessGoodsSkuIncrQuantity::dispatch($shop, $businessGoodsSku->toArray(), $num, false);
}
}
2022-08-16 21:02:31 +08:00
}
if (isset($event->goodsSkus)) {
foreach ($event->goodsSkus as $goodsSku) {
$num = $goodsSku->stock;
2022-11-04 15:01:55 +08:00
$businessGoodsSkus = BusinessGoodsSku::query()
2022-11-04 17:10:08 +08:00
->select(['goods_id', 'sku_id', 'external_sku_id'])
2022-11-04 15:01:55 +08:00
->where('shop_id', $shop->id)
->where('is_sync', 1)
->where('external_sku_id', $goodsSku->goods['goods_code'] . '_' . $goodsSku->sku_code)
->get();
2022-11-04 16:45:22 +08:00
if ($event->isBatch) {
BusinessFactory::init()->make($shop['plat_id'])->setShopWithId($shop['id'])->batchIncrQuantity($businessGoodsSkus->toArray(), $num, false);
} else {
foreach ($businessGoodsSkus as $businessGoodsSku) {
BusinessGoodsSkuIncrQuantity::dispatch($shop, $businessGoodsSku->toArray(), $num, false);
}
}
2022-08-16 21:02:31 +08:00
}
}
}
}
}