erp/app/Listeners/UpdateBusinessGoodsStock.php

64 lines
2.0 KiB
PHP
Raw Normal View History

2022-08-08 10:43:59 +08:00
<?php
namespace App\Listeners;
use App\Models\GoodsSku;
use App\Models\Log;
2022-08-08 10:43:59 +08:00
use App\Models\Shop;
use App\Services\Business\BusinessFactory;
2022-08-08 10:43:59 +08:00
use Illuminate\Auth\Events\Registered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use App\Models\BusinessOrderItem;
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
{
protected $num;
protected $businessOrderItem;
2022-08-08 10:43:59 +08:00
/**
* Create the event listener.
*
* @return void
*/
public function __construct(BusinessOrderItem $item, $num)
2022-08-08 10:43:59 +08:00
{
$this->businessOrderItem = $item;
$this->num = $num;
2022-08-08 10:43:59 +08:00
}
/**
* Handle the event.
*
2022-08-10 16:39:25 +08:00
* @param Registered $event
2022-08-08 10:43:59 +08:00
* @return void
*/
public function handle(Registered $event)
{
$shops = Shop::query()->where('id', '<>', $this->businessOrderItem->shop_id)->where('status', 1)->get(['id', 'plat_id']);
[$goodsCode, $skuCode] = explode('_', $this->businessOrderItem->external_sku_id);
$goodsSku = GoodsSku::query()->where('sku_code', $skuCode)
->with(['goods' => function ($query) use ($goodsCode) {
$query->where('goods_code', $goodsCode);
}])
->first();
if ($goodsSku) {
$goodsSku->stock += $this->num;
$goodsSku->save();
foreach ($shops as $shop) {
BusinessFactory::init()->make($shop['plat_id'])->setShopId($shop['id'])->incrQuantity($this->businessOrderItem, $this->num, true, $goodsSku);
}
} else {
$log = new Log();
$log->module = 'goods';
$log->action = 'PATCH';
$log->target_type = 'goods_sku';
$log->target_id = $goodsSku->id;
$log->target_field = 'stock';
$log->user_id = $this->businessOrderItem->shop_id;
$log->message = ($this->businessOrderItem->external_sku_id ?: '商品') . '未找到';
$log->save();
2022-08-10 16:39:25 +08:00
}
2022-08-08 10:43:59 +08:00
}
}