58 lines
1.9 KiB
PHP
58 lines
1.9 KiB
PHP
|
|
<?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));
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|