| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
- namespace App\Imports;
- use App\Commodity;
- use App\CommodityBarcode;
- use App\OracleBasSKU;
- use App\Owner;
- use App\Services\InventoryCompareService;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\Cache;
- use Maatwebsite\Excel\Concerns\ToCollection;
- use Maatwebsite\Excel\Concerns\WithHeadingRow;
- use Maatwebsite\Excel\Concerns\WithMultipleSheets;
- use Maatwebsite\Excel\Imports\HeadingRowFormatter;
- HeadingRowFormatter::default('none');
- class InventoryCompareImport implements ToCollection, WithHeadingRow, WithMultipleSheets
- {
- protected $owner_id=null;
- public function __construct($owner_id)
- {
- $this->owner_id=$owner_id;
- app()->singleton('inventoryCompareService',InventoryCompareService::class);
- }
- public function Collection(Collection $collection)
- {
- $array = $collection->toArray();
- $skuName=(function()use($array){
- if($array[0]['物料编号']??false) return '物料编号';
- if($array[0]['SKU']??false) return 'SKU';
- if($array[0]['产品编码']??false) return '产品编码';
- })();
- $amountName=(function()use($array){
- if($array[0]['物料库存量']??false) return '物料库存量';
- if($array[0]['库存量']??false) return '库存量';
- if($array[0]['数量']??false) return '数量';
- })();
- $customLocationName=(function()use($array){
- if($array[0]['仓库']??false) return '仓库';
- if($array[0]['属性仓']??false) return '属性仓';
- })();
- $sku=$array[0][$skuName];
- $amount=$array[0][$amountName];
- $customLocation=$array[0][$customLocationName];
- $endIS = false;
- $skuAndWarehouseArr=[];
- foreach ($collection as $row){
- $skuAndWarehouse=$row[$skuName].$row[$customLocationName];
- array_push($skuAndWarehouseArr,$skuAndWarehouse);
- }
- $uniqueArr=array_unique($skuAndWarehouseArr);
- if (!isset($sku) || !isset($amount) || !isset($customLocation)) {
- Cache::put('error', '请检查您第一行标题是否存在产品编号,数量,属性仓');
- }elseif(count($uniqueArr)!=count($skuAndWarehouseArr)){
- Cache::put('error', '产品编号+属性仓不能同时重复!');
- } else {
- $endIS = true;
- }
- $exception = [];
- $sum = 2;
- if ($endIS) {
- foreach ($collection as $row) {
- if (!$row[$skuName]) {
- array_push($exception, ['第' . $sum . '行产品编号为空!']);
- $sum++;
- continue;
- } else if (!$row[$amountName]) {
- array_push($exception, ['第' . $sum . '行数量为空!']);
- $sum++;
- continue;
- } else if (!$row[$customLocationName]) {
- array_push($exception, ['第' . $sum . '行属性仓为空!']);
- $sum++;
- continue;
- }
- $commodityInWMS=Commodity::where('owner_id',$this->owner_id)->where('sku',$row[$skuName])->first();
- if(!$commodityInWMS) {
- $owner=Owner::find($this->owner_id);
- $commodityInWMS = OracleBasSKU::query()->where('sku', "$row[$skuName]")->where('customerid', "$owner->code")->first();
- $commodity=Commodity::query()->firstOrCreate(['owner_id'=>$this->owner_id,'sku'=>$row[$skuName],'name'=>$commodityInWMS['descr_c'],'length'=>$commodityInWMS['skulength'],'width'=>$commodityInWMS['skuwidth'],'height'=>$commodityInWMS['skuhigh'],'volumn'=>$commodityInWMS['skulength']*$commodityInWMS['skuwidth']*$commodityInWMS['skuhigh']]);
- $commodity->newBarcode($commodityInWMS['alternate_sku1']);
- }
- if (!$commodityInWMS){
- array_push($exception, ['该货主下不存在产品编号:'.$row[$skuName]]);
- $sum++;
- continue;
- }
- /** @var InventoryCompareService $service */
- $service = app('inventoryCompareService');
- $inventoryCompare= $service->createInventoryCompare($row[$skuName],$row[$customLocationName],$row[$amountName],$this->owner_id);
- if(!$inventoryCompare){
- $inventoryCompare=$service->createInventoryCompare_underImport($row[$skuName],$row[$customLocationName],$row[$amountName],$this->owner_id);
- }
- if ($inventoryCompare){
- array_push($exception, ['产品编号为:' . $row[$skuName] . '库存对比创建成功!']);
- }else{
- array_push($exception, ['产品编号为:' . $row[$skuName] . '库存对比创建失败!']);
- }
- $sum++;
- }
- }
- Cache::put('exception', $exception, 86400);
- }
- /**
- * 该方法是实现上传文件只选中 第一个表
- * ExcelImprot 默认是有多少个分表就执行多少次的分表
- * @return OrderIssueImport[]|array
- */
- public function sheets(): array
- {
- return [0 => new InventoryCompareImport($this->owner_id)];
- }
- }
|