erp/app/Imports/GoodsSkuLocationImport.php

58 lines
1.8 KiB
PHP

<?php
namespace App\Imports;
use App\Models\Goods;
use App\Models\GoodsSkuLocation;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\WithStartRow;
class GoodsSkuLocationImport implements ToArray, SkipsEmptyRows, WithStartRow
{
public function startRow(): int
{
return 2;
}
public function array(array $array)
{
$goodsCode = $deleteLocation = [];
foreach ($array as &$row) {
$row = array_map(function ($value) {
return trim($value);
}, $row);
$goodsCode[] = $row[2];
$deleteLocation[] = $row[5];
}
GoodsSkuLocation::query()->whereIn('location', $deleteLocation)->delete();
unset($row);
$goods = Goods::query()
->whereIn('goods_code', $goodsCode)
->get(['id', 'goods_code', 'title']);
$goodsSkus = [];
foreach ($goods as $goodsItem) {
foreach ($goodsItem->skus as $sku){
$goodsSkus[$goodsItem['goods_code']][$sku->sku_code] = [
'goods_id' => $goodsItem->id,
'goods_sku_id' => $sku->id,
'external_sku_id' => $goodsItem['goods_code'] . '_' . $sku->sku_code,
'goods_name' => $goodsItem['title'] . '_' . $sku->title,
];
}
}
$data = [];
foreach ($array as $row) {
if (isset($goodsSkus[$row[2]][$row[4]])) {
$data[] = array_merge($goodsSkus[$row[2]][$row[4]], [
'date' => date('Y-m-d'),
'today_init_num' => $row[1],
'location' => $row[5],
]);
}
}
$model = new GoodsSkuLocation();
$model->batchInsert($data);
}
}