erp/app/Services/GoodSku/GoodSkuService.php

58 lines
1.9 KiB
PHP
Raw Normal View History

2024-07-26 17:48:07 +08:00
<?php
namespace App\Services\GoodSku;
use App\Events\BatchStockUpdateEvent;
use App\Events\CreateLogisticEvent;
use App\Models\BusinessOrderItem;
use App\Models\DailyStockRecord;
use App\Models\GoodsSku;
use App\Models\Log as LogModel;
use App\Models\ShopShip;
use App\Models\Waybill;
use App\Services\Business\KuaiTuanTuan\FaceSheet;
use App\Utils\ArrayUtils;
use App\Utils\DateTimeUtils;
use Illuminate\Support\Facades\DB;
class GoodSkuService
{
public function inventory(array $requestSkus)
{
$requestSkusMap = collect($requestSkus)->pluck(null, 'external_sku_id')->toArray();
$externalSkuIds = collect($requestSkus)->pluck('external_sku_id')->toArray();
$skus = GoodsSku::query()
->whereIn('external_sku_id', $externalSkuIds)
->get(['id', 'external_sku_id'])
->toArray();
$today = DateTimeUtils::getToday();
$dateTime = date('Y-m-d H:i:s');
$updateIds = [];
foreach ($skus as $sku) {
if (!in_array($sku['external_sku_id'], $externalSkuIds)) {
continue;
}
// 更新
$record = DailyStockRecord::query()->where('sku_id', $sku['id'])->where('day', $today)->firstOrCreate([
'sku_id' => $sku['id'],
'day' => $today,
]);
$record->inventory = $requestSkusMap[$sku['external_sku_id']]['inventory'];
$record->inventory_time = $dateTime;
$record->save();
//查询sku当前未发货的数量 目前数据看着有问题暂不操作
//库存修改
GoodsSku::query()->where('id', $sku['id'])->lockForUpdate()->update([
'stock' => $requestSkusMap[$sku['external_sku_id']]['inventory']
]);
$updateIds[] = $sku['id'];
}
// 批量更新
event(new BatchStockUpdateEvent($updateIds));
}
}