2024-07-26 17:48:07 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Imports;
|
|
|
|
|
|
|
|
|
|
use App\Events\BatchStockUpdateEvent;
|
2024-08-30 17:06:24 +08:00
|
|
|
use App\Http\Enum\Purchase\PurchaseConfigEnum;
|
2024-08-15 11:23:29 +08:00
|
|
|
use App\Http\Enum\TargetTypeEnum;
|
2024-07-26 17:48:07 +08:00
|
|
|
use App\Jobs\SyncCostToMiaoXuan;
|
|
|
|
|
use App\Models\DailyStockRecord;
|
|
|
|
|
use App\Models\GoodsSku;
|
|
|
|
|
use App\Models\PurchaseRecords;
|
2024-08-08 15:34:54 +08:00
|
|
|
use App\Models\Suppliers;
|
|
|
|
|
use App\Models\User;
|
2024-07-27 16:51:00 +08:00
|
|
|
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-27 16:51:00 +08:00
|
|
|
use Carbon\Carbon;
|
2024-07-26 17:48:07 +08:00
|
|
|
use Exception;
|
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
|
|
|
|
|
use Maatwebsite\Excel\Concerns\ToArray;
|
|
|
|
|
use App\Utils\ArrayUtils;
|
|
|
|
|
|
|
|
|
|
class PurchaseImport implements ToArray, SkipsEmptyRows
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
public function array(array $collection)
|
|
|
|
|
{
|
2024-08-02 16:40:57 +08:00
|
|
|
if (!empty($collection)) {
|
|
|
|
|
unset($collection[0]);
|
|
|
|
|
$externalSkuIds = [];
|
2024-08-08 15:34:54 +08:00
|
|
|
$supplierNames = [];
|
|
|
|
|
$buyerNames = [];
|
2024-08-02 16:40:57 +08:00
|
|
|
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];
|
|
|
|
|
$supplierNames[] = $row[5];
|
2024-07-26 17:48:07 +08:00
|
|
|
}
|
2024-08-02 16:40:57 +08:00
|
|
|
unset($row);
|
2024-08-15 17:06:30 +08:00
|
|
|
$allUpdateIds = [];
|
2024-08-02 16:40:57 +08:00
|
|
|
$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"])
|
2024-08-02 16:40:57 +08:00
|
|
|
->toArray();
|
|
|
|
|
$hasGoodsSkus = ArrayUtils::index($hasGoodsSkus, 'external_sku_id');
|
2024-08-08 15:34:54 +08:00
|
|
|
//获取供货商
|
|
|
|
|
$supplierIdKeyByNameMap = Suppliers::query()->whereIn("supplier_name", $supplierNames)->get()
|
|
|
|
|
->pluck("id", "supplier_name")->toArray();
|
|
|
|
|
$buyerUserIdKeyByNameMap = User::query()->whereIn("name", $buyerNames)->get()
|
|
|
|
|
->pluck("id", "name")->toArray();
|
2024-08-02 16:40:57 +08:00
|
|
|
$expireDay = DeveloperConfigService::getDefaultExpireDay();
|
2024-08-08 15:34:54 +08:00
|
|
|
$today = DateTimeUtils::getToday();
|
2024-08-13 18:17:03 +08:00
|
|
|
$batch_number = GeneratorUtils::generateBatchNumber("import");
|
|
|
|
|
//excel字段排序 編碼 商品名稱 导购數量 成本价 采购人名称 供应商名称 采购日期
|
2024-08-02 16:40:57 +08:00
|
|
|
foreach ($collection as $row) {
|
|
|
|
|
if (!isset($hasGoodsSkus[$row[0]])) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//执行库存操作
|
|
|
|
|
$goodsSkuItem = $hasGoodsSkus[$row[0]];
|
|
|
|
|
//保存記錄
|
|
|
|
|
$purchaseRecords = new PurchaseRecords();
|
|
|
|
|
$purchaseRecords->external_sku_id = $row[0];
|
2024-08-13 18:17:03 +08:00
|
|
|
$purchaseRecords->batch_number = $batch_number;
|
2024-08-02 16:40:57 +08:00
|
|
|
$purchaseRecords->num = $row[2];
|
|
|
|
|
$purchaseRecords->cost = $row[3];
|
2024-08-14 17:40:14 +08:00
|
|
|
$purchaseRecords->date = $today;
|
2024-08-15 11:23:29 +08:00
|
|
|
if (!empty($row[6])) {
|
|
|
|
|
$purchaseRecords->date = DateTimeUtils::excelUploadDateToString($row[6], $today);
|
2024-08-14 17:40:14 +08:00
|
|
|
}
|
2024-09-02 17:36:43 +08:00
|
|
|
if (!empty($row[7])) {
|
|
|
|
|
$purchaseRecords->arrived_time = DateTimeUtils::excelUploadDateToString($row[7], $today,"Y-m-d H:i:s");
|
|
|
|
|
}else{
|
2024-11-18 10:26:56 +08:00
|
|
|
$purchaseRecords->arrived_time = Carbon::now()->toDateTimeString();
|
2024-09-02 17:36:43 +08:00
|
|
|
}
|
2024-08-08 15:34:54 +08:00
|
|
|
$purchaseRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0;
|
2024-08-02 16:40:57 +08:00
|
|
|
$purchaseRecords->buyer_name = $row[4] ?? '';
|
|
|
|
|
$purchaseRecords->supplier_name = $row[5] ?? '';
|
2024-08-08 15:34:54 +08:00
|
|
|
$purchaseRecords->supplier_id = $supplierIdKeyByNameMap[$row[5]] ?? 0;
|
2024-08-13 18:17:03 +08:00
|
|
|
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
|
2024-08-02 16:40:57 +08:00
|
|
|
$purchaseRecords->save();
|
2024-08-30 17:06:24 +08:00
|
|
|
if (PurchaseConfigEnum::IS_AUTO_CHECK) {
|
|
|
|
|
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ["num" => $row[2], 'cost' => $row[3]], TargetTypeEnum::PURCHASE);
|
|
|
|
|
$allUpdateIds = array_merge($allUpdateIds, $updateIds);
|
|
|
|
|
}
|
2024-08-02 16:40:57 +08:00
|
|
|
}
|
|
|
|
|
Log::info("采购导入内容:", $collection);
|
2024-08-30 17:06:24 +08:00
|
|
|
if (PurchaseConfigEnum::IS_AUTO_CHECK) {
|
|
|
|
|
// 批量更新
|
|
|
|
|
event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray()));
|
|
|
|
|
}
|
2024-07-26 17:48:07 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|