You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.5 KiB
63 lines
1.5 KiB
<?php
|
|
|
|
namespace App\Imports;
|
|
|
|
use App\Models\ProductSpec;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Maatwebsite\Excel\Concerns\ToCollection;
|
|
|
|
class ProductSpecImport implements ToCollection
|
|
{
|
|
private int $product_id;
|
|
private array $keys;
|
|
|
|
public function __construct(int $product_id)
|
|
{
|
|
$this->product_id = $product_id;
|
|
}
|
|
|
|
public function collection(Collection $collection)
|
|
{
|
|
if ($collection->isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
//校验数组count()是否正确
|
|
if (count($collection[0]) < 6) {
|
|
throw new \Exception('Excel产品规格格式不正确');
|
|
}
|
|
|
|
$this->keys = array_flip($collection[0]->toArray());
|
|
|
|
//去除第一行的标题
|
|
unset($collection[0]);
|
|
|
|
$this->createData($collection);
|
|
}
|
|
|
|
private function createData($rows)
|
|
{
|
|
$keys = $this->keys;
|
|
DB::beginTransaction();
|
|
foreach ($rows as $row) {
|
|
# Excel日期是从1900-01-01起的天数,PHP日期是1970-01-01起,所以要减去25569天数得到正确日期
|
|
$row[$keys['日期']] = date('Y-m-d', strtotime('+ ' . ($row[$keys['日期']] - 25569) . 'day', 0));
|
|
|
|
ProductSpec::updateOrCreate([
|
|
'product_id' => $this->product_id,
|
|
'name' => $row[$keys['规格名称']],
|
|
'date' => $row[$keys['日期']],
|
|
], [
|
|
'product_id' => $this->product_id,
|
|
'name' => $row[$keys['规格名称']],
|
|
'date' => $row[$keys['日期']],
|
|
'stock' => $row[$keys['库存']],
|
|
'original_price' => $row[$keys['市场价']],
|
|
'price' => $row[$keys['销售价']],
|
|
'cost_price' => $row[$keys['成本价']],
|
|
]);
|
|
}
|
|
DB::commit();
|
|
}
|
|
}
|