erp/app/Imports/LossImport.php

92 lines
3.5 KiB
PHP
Raw Normal View History

2024-07-26 17:48:07 +08:00
<?php
namespace App\Imports;
use App\Events\BatchStockUpdateEvent;
use App\Jobs\SyncCostToMiaoXuan;
use App\Models\DailyStockRecord;
use App\Models\GoodsSku;
use App\Models\LossRecords;
use App\Models\PurchaseRecords;
2024-08-08 15:34:54 +08:00
use App\Models\User;
use App\Services\DeveloperConfig\DeveloperConfigService;
use App\Services\GoodSku\GoodSkuService;
2024-07-26 17:48:07 +08:00
use App\Utils\DateTimeUtils;
2024-08-13 18:17:03 +08:00
use App\Utils\GeneratorUtils;
2024-07-26 17:48:07 +08:00
use Exception;
2024-10-29 16:33:30 +08:00
use Illuminate\Support\Facades\DB;
2024-07-26 17:48:07 +08:00
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToArray;
use App\Utils\ArrayUtils;
class LossImport implements ToArray, SkipsEmptyRows
{
/**
* @throws Exception
*/
public function array(array $collection)
{
2024-08-08 15:34:54 +08:00
if (!empty($collection)) {
unset($collection[0]);
$externalSkuIds = [];
2024-08-08 15:34:54 +08:00
$buyerNames = [];
foreach ($collection as &$row) {
$row = array_map(static function ($v) {
return trim($v);
}, $row);
$externalSkuIds[] = $row[0];
2024-08-08 15:34:54 +08:00
$buyerNames[] = $row[4];
2024-07-26 17:48:07 +08:00
}
unset($row);
$allUpdateIds = [];
$hasGoodsSkus = GoodsSku::query()
->whereIn('external_sku_id', $externalSkuIds)
2024-08-13 18:17:03 +08:00
->get(['id', 'status', 'external_sku_id', 'stock', "sale_stock", "cost", "is_combination"])
->toArray();
$hasGoodsSkus = ArrayUtils::index($hasGoodsSkus, 'external_sku_id');
2024-08-08 15:34:54 +08:00
$buyerUserIdKeyByNameMap = User::query()->whereIn("name", $buyerNames)->get()
->pluck("id", "name")->toArray();
$today = DateTimeUtils::getToday();
2024-08-13 18:17:03 +08:00
$batchNumber = GeneratorUtils::generateBatchNumber("import");
//excel字段排序 編碼 商品名稱 报损數量 成本价 采购人名称 报损现象 报损原因 报损日期
foreach ($collection as $row) {
if (!isset($hasGoodsSkus[$row[0]])) {
continue;
}
2024-10-29 16:33:30 +08:00
DB::beginTransaction();
try {
//执行库存操作
$goodsSkuItem = $hasGoodsSkus[$row[0]];
//保存記錄
$lossRecords = new LossRecords();
$lossRecords->batch_number = $batchNumber;
$lossRecords->external_sku_id = $row[0];
$lossRecords->num = $row[2];
$lossRecords->cost = $row[3];
$lossRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0;
$lossRecords->buyer_name = $row[4] ?? '';
$lossRecords->phenomenon = $row[5] ?? '';
$lossRecords->reason = $row[6] ?? '';
$lossRecords->date = $today;
if (!empty($row[7])) {
$lossRecords->date = DateTimeUtils::excelUploadDateToString($row[7], $today);
}
$lossRecords->save();
2024-07-26 17:48:07 +08:00
2024-10-29 16:33:30 +08:00
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ["num" => 0 - $row[2], 'cost' => $row[3]]);
DB::commit();
$allUpdateIds = array_merge($allUpdateIds, $updateIds);
} catch (\Exception $exception) {
DB::rollBack();
}
}
Log::info("报损导入内容:", $collection);
// 批量更新
event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray()));
2024-07-26 17:48:07 +08:00
}
2024-07-26 17:48:07 +08:00
}
}