erp/app/Imports/NewSetImport.php

67 lines
2.1 KiB
PHP
Raw Normal View History

2023-06-01 20:09:59 +08:00
<?php
namespace App\Imports;
2023-11-21 16:27:14 +08:00
use App\Events\BatchStockUpdateEvent;
2023-10-30 14:40:12 +08:00
use App\Jobs\SyncCostToMiaoXuan;
2023-06-01 20:09:59 +08:00
use App\Models\DailyStockRecord;
use App\Models\GoodsSku;
use App\Utils\DateTimeUtils;
use Exception;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToArray;
use App\Utils\ArrayUtils;
class NewSetImport implements ToArray, SkipsEmptyRows
{
/**
* @throws Exception
*/
public function array(array $collection)
{
unset($collection[0]);
$externalSkuId = [];
foreach ($collection as &$row) {
$row = array_map(static function ($v) {
return trim($v);
}, $row);
$externalSkuId[] = $row[0];
}
unset($row);
$day = DateTimeUtils::getToday();
$updateIds = [];
$hasGoodsSkus = GoodsSku::query()
->whereIn('external_sku_id', $externalSkuId)
->get(['id', 'status', 'external_sku_id', 'stock'])
->toArray();
$hasGoodsSkus = ArrayUtils::index($hasGoodsSkus, 'external_sku_id');
foreach ($collection as $row) {
if (!isset($hasGoodsSkus[$row[0]])) {
continue;
}
$goodsSku = $hasGoodsSkus[$row[0]];
if ('下架' === $goodsSku['status']) {
GoodsSku::query()->where('id', $goodsSku['id'])->update([
'stock' => $row[2] + $goodsSku['stock'],
'status' => 1,
]);
} else {
GoodsSku::query()->where('id', $goodsSku['id'])->update([
'stock' => $row[2] + $goodsSku['stock'],
]);
}
2023-10-30 14:40:12 +08:00
SyncCostToMiaoXuan::dispatch($row[0], $row[3]);
2023-06-01 20:09:59 +08:00
$updateIds[] = $goodsSku['id'];
// 今日到货
2023-11-21 16:27:14 +08:00
$record = DailyStockRecord::query()
->where('sku_id', $goodsSku['id'])
->where('day', $day)->first(['id', 'arrived_today_num']);
2023-06-01 20:09:59 +08:00
$record->arrived_today_num += $row[2];
$record->save();
}
sleep(2);
2023-11-18 14:35:19 +08:00
// 批量更新
2023-11-21 16:27:14 +08:00
event(new BatchStockUpdateEvent($updateIds));
2023-06-01 20:09:59 +08:00
}
}