鲜花2.0-采购流程变更

This commit is contained in:
杨建炊 2024-08-30 17:06:24 +08:00
parent ea65bcee66
commit a43d8b0c81
6 changed files with 91 additions and 19 deletions

View File

@ -5,6 +5,8 @@ namespace App\Http\Controllers\Supplier;
use App\Events\BatchStockUpdateEvent; use App\Events\BatchStockUpdateEvent;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Enum\ExcelKeyEnum; use App\Http\Enum\ExcelKeyEnum;
use App\Http\Enum\Purchase\PurchaseConfigEnum;
use App\Http\Enum\Purchase\PurchaseStatusEnum;
use App\Http\Enum\TargetTypeEnum; use App\Http\Enum\TargetTypeEnum;
use App\Http\Resources\GoodsSkuResource; use App\Http\Resources\GoodsSkuResource;
use App\Http\Resources\RolesResource; use App\Http\Resources\RolesResource;
@ -29,6 +31,8 @@ use Maatwebsite\Excel\Facades\Excel;
class PurchaseRecordController extends Controller class PurchaseRecordController extends Controller
{ {
public $isAutoCheck = 0;
public function __construct(Request $request) public function __construct(Request $request)
{ {
$this->log = new LogModel([ $this->log = new LogModel([
@ -95,12 +99,13 @@ class PurchaseRecordController extends Controller
$purchaseRecords->expire_time = Carbon::parse($allParams['expire_time'])->toDateTimeString(); $purchaseRecords->expire_time = Carbon::parse($allParams['expire_time'])->toDateTimeString();
} else { } else {
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString(); $purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
} }
$purchaseRecords->save(); $purchaseRecords->save();
if (PurchaseConfigEnum::IS_AUTO_CHECK) {
$allParams['user_id'] = $request->user()->id; $allParams['user_id'] = $request->user()->id;
$updateIds = GoodSkuService::computeSkuStock($goodsSku->toArray(), $allParams, TargetTypeEnum::PURCHASE); $updateIds = GoodSkuService::computeSkuStock($goodsSku->toArray(), $allParams, TargetTypeEnum::PURCHASE);
event(new BatchStockUpdateEvent($updateIds)); event(new BatchStockUpdateEvent($updateIds));
}
} else { } else {
$this->res = [ $this->res = [
'httpCode' => 400, 'httpCode' => 400,
@ -140,6 +145,9 @@ class PurchaseRecordController extends Controller
if (!empty($allParams['expire_time'])) { if (!empty($allParams['expire_time'])) {
$purchaseRecords->expire_time = Carbon::parse($allParams['expire_time'])->toDateTimeString(); $purchaseRecords->expire_time = Carbon::parse($allParams['expire_time'])->toDateTimeString();
} }
if (!empty($allParams['arrived_time'])) {
$purchaseRecords->arrived_time = Carbon::parse($allParams['arrived_time'])->toDateTimeString();
}
$purchaseRecords->save(); $purchaseRecords->save();
@ -175,10 +183,10 @@ class PurchaseRecordController extends Controller
$purchaseOrders = $request->input('purchaseOrders') ?? []; $purchaseOrders = $request->input('purchaseOrders') ?? [];
$externalSkuIds = collect($purchaseOrders)->pluck("external_sku_id")->toArray(); $externalSkuIds = collect($purchaseOrders)->pluck("external_sku_id")->toArray();
$goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get(); $goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get();
if ($goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->isNotEmpty()) { if (collect($externalSkuIds)->diff($goodsSku->pluck("external_sku_id"))->isNotEmpty()) {
$content = implode(',', $goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->toArray()); $content = implode(',', collect($externalSkuIds)->diff($goodsSku->pluck("external_sku_id"))->toArray());
$content .= "以上sku编码数据库中不存在"; $content .= "以上sku编码数据库中不存在";
return response($content, $this->res['httpCode']); return response($content, 400);
} }
$goodsSkuMap = $goodsSku->pluck(null, 'external_sku_id')->toArray(); $goodsSkuMap = $goodsSku->pluck(null, 'external_sku_id')->toArray();
$allUpdateIds = []; $allUpdateIds = [];
@ -199,15 +207,21 @@ class PurchaseRecordController extends Controller
$purchaseRecords->buyer_name = $v['buyer_name'] ?? ''; $purchaseRecords->buyer_name = $v['buyer_name'] ?? '';
$purchaseRecords->supplier_name = $v['supplier_name'] ?? ''; $purchaseRecords->supplier_name = $v['supplier_name'] ?? '';
$purchaseRecords->supplier_id = $v['supplier_id'] ?? 0; $purchaseRecords->supplier_id = $v['supplier_id'] ?? 0;
$purchaseRecords->arrived_time = $v['arrived_time'] ?? Carbon::now()->toDateTimeString();
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString(); $purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
$purchaseRecords->save(); $purchaseRecords->save();
if (PurchaseConfigEnum::IS_AUTO_CHECK) {
$v['user_id'] = $request->user()->id; $v['user_id'] = $request->user()->id;
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, $v, TargetTypeEnum::PURCHASE); $updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, $v, TargetTypeEnum::PURCHASE);
$allUpdateIds = array_merge($allUpdateIds, $updateIds); $allUpdateIds = array_merge($allUpdateIds, $updateIds);
} }
}
if (PurchaseConfigEnum::IS_AUTO_CHECK) {
//如果是組合商品会触发重算逻辑 //如果是組合商品会触发重算逻辑
event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray())); event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray()));
}
return response($this->res, $this->res['httpCode']); return response($this->res, $this->res['httpCode']);
} }
@ -237,5 +251,35 @@ class PurchaseRecordController extends Controller
return response($this->res, $this->res['httpCode']); return response($this->res, $this->res['httpCode']);
} }
/**
* 报损单后台批量存储
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
*/
public function purchaseBatchCheck(Request $request)
{
$params = $request->validate([
'purchaseOrders' => 'required|array',
'purchaseOrders.*.id' => 'required|integer',
'purchaseOrders.*.status' => 'required|in:1,2']);
$allUpdateIds = [];
foreach ($params['purchaseOrders'] as $v) {
$purchaseRecords = PurchaseRecords::query()->with("goodsSku")->where("id", $v['id'])->first();
if (empty($purchaseRecords)) {
continue;
}
$purchaseRecords->status = $v['status'];
$purchaseRecords->save();
if (PurchaseStatusEnum::CHECK_SUCCESS == $v['status']) {
$updateIds = GoodSkuService::computeSkuStock($v['goodsSku'], $v, TargetTypeEnum::PURCHASE);
$allUpdateIds = array_merge($allUpdateIds, $updateIds);
}
}
if(!empty($allUpdateIds)){
event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray()));
}
return response($this->res, $this->res['httpCode']);
}
} }

View File

@ -0,0 +1,11 @@
<?php
namespace App\Http\Enum\Purchase;
class PurchaseConfigEnum
{
const IS_AUTO_CHECK = 0;
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Http\Enum\Purchase;
class PurchaseStatusEnum
{
const WAIT_CHECK = 0;
const CHECK_SUCCESS = 1;
const CHECK_FAILED = 2;
}

View File

@ -3,6 +3,7 @@
namespace App\Imports; namespace App\Imports;
use App\Events\BatchStockUpdateEvent; use App\Events\BatchStockUpdateEvent;
use App\Http\Enum\Purchase\PurchaseConfigEnum;
use App\Http\Enum\TargetTypeEnum; use App\Http\Enum\TargetTypeEnum;
use App\Jobs\SyncCostToMiaoXuan; use App\Jobs\SyncCostToMiaoXuan;
use App\Models\DailyStockRecord; use App\Models\DailyStockRecord;
@ -79,14 +80,16 @@ class PurchaseImport implements ToArray, SkipsEmptyRows
$purchaseRecords->supplier_id = $supplierIdKeyByNameMap[$row[5]] ?? 0; $purchaseRecords->supplier_id = $supplierIdKeyByNameMap[$row[5]] ?? 0;
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString(); $purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
$purchaseRecords->save(); $purchaseRecords->save();
if (PurchaseConfigEnum::IS_AUTO_CHECK) {
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ["num" => $row[2], 'cost' => $row[3]], TargetTypeEnum::PURCHASE); $updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ["num" => $row[2], 'cost' => $row[3]], TargetTypeEnum::PURCHASE);
$allUpdateIds = array_merge($allUpdateIds, $updateIds); $allUpdateIds = array_merge($allUpdateIds, $updateIds);
} }
}
Log::info("采购导入内容:", $collection); Log::info("采购导入内容:", $collection);
Log::info("allUpdateIds:", $allUpdateIds); if (PurchaseConfigEnum::IS_AUTO_CHECK) {
// 批量更新 // 批量更新
event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray())); event(new BatchStockUpdateEvent(collect($allUpdateIds)->unique()->toArray()));
} }
} }
} }
}

View File

@ -33,6 +33,7 @@ class SaleDataService
return static::skuSaleStatisticsByHistory($request); return static::skuSaleStatisticsByHistory($request);
} }
} }
/** /**
* sku维度 今日实时统计 * sku维度 今日实时统计
*/ */
@ -130,7 +131,7 @@ class SaleDataService
return $v; return $v;
})->pluck(null, "external_sku_id")->toArray(); })->pluck(null, "external_sku_id")->toArray();
Log::info("combineGoodsSkus", $combineGoodsSkus); Log::info("combineGoodsSkus", $combineGoodsSkus);
$orderItems->getCollection()· use ($combineGoodsSkus) { $orderItems->getCollection()->map(function ($v) use ($combineGoodsSkus) {
if (!empty($combineGoodsSkus[$v['external_sku_id']])) { if (!empty($combineGoodsSkus[$v['external_sku_id']])) {
foreach ($combineGoodsSkus[$v['external_sku_id']] as $key => $val) { foreach ($combineGoodsSkus[$v['external_sku_id']] as $key => $val) {
$v->$key = $val; $v->$key = $val;

View File

@ -102,6 +102,8 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () {
Route::post('purchase_record/purchase_batch_store', [PurchaseRecordController::class, 'purchaseBatchStore'])->name('purchase_record.purchase_batch_store'); Route::post('purchase_record/purchase_batch_store', [PurchaseRecordController::class, 'purchaseBatchStore'])->name('purchase_record.purchase_batch_store');
Route::post('daily_stock_record/inventory_batch_store', [DailyStockRecordController::class, 'inventoryBatchStore'])->name('daily_stock_record.inventory_batch_store'); Route::post('daily_stock_record/inventory_batch_store', [DailyStockRecordController::class, 'inventoryBatchStore'])->name('daily_stock_record.inventory_batch_store');
Route::post('purchase_record/purchase_batch_check', [PurchaseRecordController::class, 'purchaseBatchCheck'])->name('purchase_record.purchase_batch_check');
Route::get('user/user_roles', [UsersController::class, 'userRoles'])->name('users.user_roles'); Route::get('user/user_roles', [UsersController::class, 'userRoles'])->name('users.user_roles');
}); });