mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-11-30 22:20:45 +00:00
feat: #10000 修改
This commit is contained in:
parent
a2867b0ea8
commit
65e0146ad6
@ -5,12 +5,15 @@ namespace App\Http\Controllers\Goods;
|
|||||||
use App\Events\StockUpdateEvent;
|
use App\Events\StockUpdateEvent;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Resources\GoodsSkuResource;
|
use App\Http\Resources\GoodsSkuResource;
|
||||||
|
use App\Imports\CombinationGoodsImport;
|
||||||
use App\Models\CombinationGood;
|
use App\Models\CombinationGood;
|
||||||
use App\Models\Goods;
|
use App\Models\Goods;
|
||||||
use App\Models\GoodsSku;
|
use App\Models\GoodsSku;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Validation\ValidationException;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
|
||||||
class GoodsCombinationController extends Controller
|
class GoodsCombinationController extends Controller
|
||||||
{
|
{
|
||||||
@ -158,4 +161,24 @@ class GoodsCombinationController extends Controller
|
|||||||
|
|
||||||
return GoodsSkuResource::collection($skus);
|
return GoodsSkuResource::collection($skus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function import(Request $request)
|
||||||
|
{
|
||||||
|
if (!$request->hasFile('combinationGoods')) {
|
||||||
|
$this->res = [
|
||||||
|
'httpCode' => 404,
|
||||||
|
'errorCode' => 404404,
|
||||||
|
'errorMessage' => 'not found file',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$import = new CombinationGoodsImport();
|
||||||
|
$path = $request->file('combinationGoods');
|
||||||
|
Excel::import($import, $path);
|
||||||
|
} catch (ValidationException $exception) {
|
||||||
|
$this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages());
|
||||||
|
}
|
||||||
|
|
||||||
|
return response($this->res, $this->res['httpCode']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
86
app/Imports/CombinationGoodsImport.php
Normal file
86
app/Imports/CombinationGoodsImport.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Events\StockUpdateEvent;
|
||||||
|
use App\Models\CombinationGood;
|
||||||
|
use App\Models\GoodsSku;
|
||||||
|
use App\Models\GoodsSkuLocation;
|
||||||
|
use App\Utils\ArrayUtils;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToArray;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithStartRow;
|
||||||
|
|
||||||
|
class CombinationGoodsImport implements ToArray, SkipsEmptyRows, WithStartRow
|
||||||
|
{
|
||||||
|
public function startRow(): int
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function array(array $array)
|
||||||
|
{
|
||||||
|
$main = [];
|
||||||
|
foreach ($array as &$row) {
|
||||||
|
$row = array_map(function ($value) {
|
||||||
|
return trim($value);
|
||||||
|
}, $row);
|
||||||
|
if (empty($row[0]) || empty($row[1])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 组合商品
|
||||||
|
if (empty($row[2]) && empty($row[3])) {
|
||||||
|
$main[$row[1]] = [
|
||||||
|
'title' => $row[0],
|
||||||
|
'external_sku_id' => $row[1],
|
||||||
|
'item' => []
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
$main[$row[1]]['item'][] = [
|
||||||
|
'item_code' => $row[2],
|
||||||
|
'item_num' => $row[3],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($main as $info) {
|
||||||
|
if (empty($info['item'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DB::beginTransaction();
|
||||||
|
try {
|
||||||
|
$itemCodes = array_column($info['item'], 'item_code');
|
||||||
|
$skus = GoodsSku::query()
|
||||||
|
->whereIn('external_sku_id', $itemCodes)
|
||||||
|
->get(['id', 'external_sku_id', 'stock'])
|
||||||
|
->toArray();
|
||||||
|
$skus = ArrayUtils::index($skus, 'external_sku_id');
|
||||||
|
$stock = 0;
|
||||||
|
foreach ($info['item'] as $item) {
|
||||||
|
$num = (int)($skus[$item['item_code']]['stock'] / $item['item_num']);
|
||||||
|
if (0 === $stock) {
|
||||||
|
$stock = $num;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($num < $stock) {
|
||||||
|
$stock = $num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sku = GoodsSku::query()->firstOrCreate(
|
||||||
|
['external_sku_id' => $info['external_sku_id'], 'is_combination' => 1],
|
||||||
|
['title' => $info['title'], 'goods_id' => 0, 'sku_code' => $info['external_sku_id'], 'stock' => $stock]
|
||||||
|
);
|
||||||
|
CombinationGood::query()
|
||||||
|
->where('goods_sku_id', $sku->id)
|
||||||
|
->delete();
|
||||||
|
foreach ($info['item'] as $item) {
|
||||||
|
CombinationGood::query()->create(['goods_sku_id' => $sku->id, 'item_id' => $skus[$item['item_code']]['id'], 'item_num' => $item['item_num']]);
|
||||||
|
}
|
||||||
|
DB::commit();
|
||||||
|
event(new StockUpdateEvent($sku));
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
DB::rollBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -87,6 +87,8 @@ Route::post('business', [ShopsController::class, 'business'])->name('shop.put.bu
|
|||||||
Route::post('inventory/goods_skus', [GoodsSkusController::class, 'inventoryImport'])->name('goods_sku.inventory');
|
Route::post('inventory/goods_skus', [GoodsSkusController::class, 'inventoryImport'])->name('goods_sku.inventory');
|
||||||
// 商品货架导入
|
// 商品货架导入
|
||||||
Route::post('goods_sku_location', [GoodsSkuLocationController::class, 'import'])->name('goods_sku_location.import');
|
Route::post('goods_sku_location', [GoodsSkuLocationController::class, 'import'])->name('goods_sku_location.import');
|
||||||
|
// 组合商品导入
|
||||||
|
Route::post('combination/goods', [GoodsCombinationController::class, 'import'])->name('goods_combination.import');
|
||||||
// 今日价格导入
|
// 今日价格导入
|
||||||
Route::post('today/price', [BusinessGoodsSkusController::class, 'todayPriceImport'])->name('plat.today_price.import');
|
Route::post('today/price', [BusinessGoodsSkusController::class, 'todayPriceImport'])->name('plat.today_price.import');
|
||||||
// 文件上传
|
// 文件上传
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user