88 lines
2.9 KiB
PHP
88 lines
2.9 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Database\Seeders;
|
||
|
|
|
||
|
|
use App\Models\Items\Item;
|
||
|
|
use App\Models\Tenants\Stock;
|
||
|
|
use Illuminate\Database\Seeder;
|
||
|
|
use Illuminate\Support\Facades\DB;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 재고 초기화 시더
|
||
|
|
*
|
||
|
|
* - 모든 자재 품목(RM, SM, CS)에 대해 Stock 레코드 생성/업데이트
|
||
|
|
* - 안전재고: 10개
|
||
|
|
* - 실제 재고: 0~100 랜덤
|
||
|
|
*/
|
||
|
|
class StockInitSeeder extends Seeder
|
||
|
|
{
|
||
|
|
public function run(): void
|
||
|
|
{
|
||
|
|
$tenantId = 287; // 실제 사용 테넌트
|
||
|
|
|
||
|
|
// 재고 관리 대상 품목 조회 (RM, SM, CS, PT, SF) - FG(완제품) 제외
|
||
|
|
$items = Item::where('tenant_id', $tenantId)
|
||
|
|
->whereIn('item_type', ['RM', 'SM', 'CS', 'PT', 'SF'])
|
||
|
|
->get();
|
||
|
|
|
||
|
|
$this->command->info("총 {$items->count()}개 품목에 대해 Stock 생성/업데이트 시작...");
|
||
|
|
|
||
|
|
$created = 0;
|
||
|
|
$updated = 0;
|
||
|
|
|
||
|
|
DB::transaction(function () use ($items, $tenantId, &$created, &$updated) {
|
||
|
|
foreach ($items as $item) {
|
||
|
|
$stockQty = rand(0, 100);
|
||
|
|
$safetyStock = 10;
|
||
|
|
|
||
|
|
// 재고 상태 계산
|
||
|
|
$status = 'normal';
|
||
|
|
if ($stockQty <= 0) {
|
||
|
|
$status = 'out';
|
||
|
|
} elseif ($stockQty < $safetyStock) {
|
||
|
|
$status = 'low';
|
||
|
|
}
|
||
|
|
|
||
|
|
$stock = Stock::where('tenant_id', $tenantId)
|
||
|
|
->where('item_id', $item->id)
|
||
|
|
->first();
|
||
|
|
|
||
|
|
if ($stock) {
|
||
|
|
// 기존 Stock 업데이트
|
||
|
|
$stock->update([
|
||
|
|
'stock_qty' => $stockQty,
|
||
|
|
'safety_stock' => $safetyStock,
|
||
|
|
'available_qty' => $stockQty,
|
||
|
|
'status' => $status,
|
||
|
|
'updated_by' => 1,
|
||
|
|
]);
|
||
|
|
$updated++;
|
||
|
|
} else {
|
||
|
|
// 새 Stock 생성
|
||
|
|
Stock::create([
|
||
|
|
'tenant_id' => $tenantId,
|
||
|
|
'item_id' => $item->id,
|
||
|
|
'item_code' => $item->code,
|
||
|
|
'item_name' => $item->name,
|
||
|
|
'item_type' => $item->item_type,
|
||
|
|
'specification' => $item->specification ?? null,
|
||
|
|
'unit' => $item->unit ?? 'EA',
|
||
|
|
'stock_qty' => $stockQty,
|
||
|
|
'safety_stock' => $safetyStock,
|
||
|
|
'reserved_qty' => 0,
|
||
|
|
'available_qty' => $stockQty,
|
||
|
|
'lot_count' => 0,
|
||
|
|
'location' => null,
|
||
|
|
'status' => $status,
|
||
|
|
'created_by' => 1,
|
||
|
|
'updated_by' => 1,
|
||
|
|
]);
|
||
|
|
$created++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
$this->command->info("완료! 생성: {$created}개, 업데이트: {$updated}개");
|
||
|
|
}
|
||
|
|
}
|