- Menambahkan `SlikController.php` dengan method CRUD dan import data SLIK, termasuk logging detail & error handling - Menambahkan `SlikImport.php` dengan Laravel Excel (ToCollection, WithChunkReading, WithBatchInserts, dll.) - Optimasi memory dengan chunk processing (50 baris/chunk) dan batch insert (50 record/batch) - Penanganan timeout menggunakan `set_time_limit` & memory limit configurable via config - Implementasi queue processing untuk file besar (>5MB) dengan progress tracking - Validasi file upload & data baris, skip header dari baris ke-5, serta rollback jika error - Garbage collection otomatis setiap 25 baris, unset variabel tidak terpakai, dan logging usage memory - Error handling komprehensif dengan try-catch, rollback transaksi, hapus file temp, dan logging stack trace - Semua parameter (batch size, chunk size, memory limit, timeout, GC, queue threshold) configurable via config - Diuji pada file besar (>50MB), memory stabil, timeout handling berfungsi, rollback aman, dan progress tracking valid - Catatan: pastikan queue worker berjalan, monitor log progress, sesuaikan config server, dan backup DB sebelum import
89 lines
4.3 KiB
PHP
89 lines
4.3 KiB
PHP
<?php
|
|
|
|
use Illuminate\Database\Migrations\Migration;
|
|
use Illuminate\Database\Schema\Blueprint;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
return new class extends Migration {
|
|
/**
|
|
* Run the migrations.
|
|
*
|
|
* Migration untuk membuat tabel sliks dengan semua field yang diperlukan
|
|
* berdasarkan header Excel yang diberikan untuk import data SLIK
|
|
*/
|
|
public function up(): void
|
|
{
|
|
Schema::create('sliks', function (Blueprint $table) {
|
|
$table->id();
|
|
|
|
// Field utama berdasarkan header Excel
|
|
$table->string('sandi_bank')->nullable(); // Sandi Bank
|
|
$table->string('tahun')->nullable(); // Tahun
|
|
$table->string('bulan')->nullable(); // Bulan
|
|
$table->string('flag_detail')->nullable(); // Flag Detail
|
|
$table->string('kode_register_agunan')->nullable(); // Kode Register Agunan
|
|
$table->string('no_rekening')->nullable(); // No Rekening
|
|
$table->string('cif')->nullable(); // CIF
|
|
$table->string('kolektibilitas')->nullable(); // Kolektibilitas
|
|
$table->string('fasilitas')->nullable(); // Fasilitas
|
|
$table->string('jenis_segmen_fasilitas')->nullable(); // Jenis Segmen Fasilitas
|
|
$table->string('status_agunan')->nullable(); // Status Agunan
|
|
$table->string('jenis_agunan')->nullable(); // Jenis Agunan
|
|
$table->string('peringkat_agunan')->nullable(); // Peringkat Agunan
|
|
$table->string('lembaga_pemeringkat')->nullable(); // Lembaga Pemeringkat
|
|
$table->string('jenis_pengikatan')->nullable(); // Jenis Pengikatan
|
|
$table->string('tanggal_pengikatan')->nullable(); // Tanggal Pengikatan
|
|
$table->string('nama_pemilik_agunan')->nullable(); // Nama Pemilik Agunan
|
|
$table->string('bukti_kepemilikan')->nullable(); // Bukti Kepemilikan
|
|
$table->text('alamat_agunan')->nullable(); // Alamat Agunan
|
|
$table->string('lokasi_agunan')->nullable(); // Lokasi Agunan
|
|
$table->string('nilai_agunan')->nullable(); // Nilai Agunan
|
|
$table->string('nilai_agunan_menurut_ljk')->nullable(); // Nilai Agunan Menurut LJK
|
|
$table->string('tanggal_penilaian_ljk')->nullable(); // Tanggal Penilaian LJK
|
|
$table->string('nilai_agunan_penilai_independen')->nullable(); // Nilai Agunan Penilai Independen
|
|
$table->string('nama_penilai_independen')->nullable(); // Nama Penilai Independen
|
|
$table->string('tanggal_penilaian_penilai_independen')->nullable(); // Tanggal Penilaian Penilai Independen
|
|
$table->string('jumlah_hari_tunggakan')->nullable(); // Jumlah Hari Tunggakan
|
|
$table->string('status_paripasu')->nullable(); // Status Paripasu
|
|
$table->string('prosentase_paripasu')->nullable(); // Prosentase Paripasu
|
|
$table->string('status_kredit_join')->nullable(); // Status Kredit Join
|
|
$table->string('diasuransikan')->nullable(); // Diasuransikan
|
|
$table->text('keterangan')->nullable(); // Keterangan
|
|
$table->string('kantor_cabang')->nullable(); // Kantor Cabang
|
|
$table->string('operasi_data')->nullable(); // Operasi Data
|
|
$table->string('kode_cabang')->nullable(); // Kode Cabang
|
|
$table->string('nama_debitur')->nullable(); // Nama Debitur
|
|
$table->string('nama_cabang')->nullable(); // Nama Cabang
|
|
$table->string('flag')->nullable(); // Flag
|
|
|
|
// Standard Laravel fields
|
|
$table->timestamps();
|
|
$table->string('created_by')->nullable();
|
|
$table->string('updated_by')->nullable();
|
|
$table->string('deleted_by')->nullable();
|
|
$table->softDeletes();
|
|
|
|
// Indexes untuk performa query
|
|
$table->index(['sandi_bank']);
|
|
$table->index(['tahun']);
|
|
$table->index(['bulan']);
|
|
$table->index(['no_rekening']);
|
|
$table->index(['cif']);
|
|
$table->index(['kode_register_agunan']);
|
|
$table->index(['nama_debitur']);
|
|
$table->index(['kode_cabang']);
|
|
$table->index(['created_at']);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reverse the migrations.
|
|
*
|
|
* Menghapus tabel sliks jika migration di-rollback
|
|
*/
|
|
public function down(): void
|
|
{
|
|
Schema::dropIfExists('sliks');
|
|
}
|
|
};
|