penanggulangan

This commit is contained in:
tomihartanto123 2026-06-23 15:07:18 +07:00
parent f3161b4e66
commit 1ffa7425bf
6 changed files with 270 additions and 75 deletions

View File

@ -191,6 +191,8 @@ public function getHistoryData(Request $request)
'nama' => $history->penyakit->nama,
'deskripsi' => $history->penyakit->deskripsi,
'solusi' => $history->penyakit->solusi,
'bahan' => $history->penyakit->bahan,
'alat' => $history->penyakit->alat,
] : null
];
});

View File

@ -7,7 +7,7 @@
class Penyakit extends Model
{
protected $table = 'penyakit';
protected $fillable = ['kode', 'nama', 'tipe', 'deskripsi', 'solusi', 'image_url'];
protected $fillable = ['kode', 'nama', 'tipe', 'deskripsi', 'solusi', 'image_url','bahan','alat'];
protected $casts = ['solusi' => 'json'];
/**

View File

@ -64,6 +64,8 @@ public function diagnose(array $selectedGejalaIds, array $cfUserMap = []): array
'confidence_level' => $cfPercentage, // Alias untuk di-save ke database
'status' => $this->getConfidenceStatus($cfDetails['cf_value']),
'solusi' => $penyakit->solusi,
'bahan' => $penyakit->bahan,
'alat' => $penyakit->alat,
// Reasoning & Logic
'forward_chaining_matched' => true,
'decision_tree_paths' => array_values($relatedPaths),

View File

@ -18,6 +18,8 @@ public function up(): void
$table->string('tipe'); // Jamur, Bakteri, Hama Binatang, Hama Serangga
$table->text('deskripsi');
$table->json('solusi')->nullable(); // Array of solutions
$table->json('bahan')->nullable(); // Array of solutions
$table->json('alat')->nullable(); // Array of solutions
$table->string('image_url')->nullable();
$table->timestamps();
});

View File

@ -24,6 +24,27 @@ public function run(): void
'Jaga kelembaban ruangan di bawah 90%',
'Tingkatkan ventilasi dan pencahayaan',
'Desinfeksi alat-alat pertanian dengan larutan klorin 5%',
'Melakukan sterilisasi alat dan bahan baglog.',
'Mengisolasi baglog yang terinfeksi.',
'Mengaplikasikan fungisida sesuai dosis anjuran.',
'Menjaga kelembaban kumbung di bawah 90%.',
]),
'bahan' => json_encode([
'Karbendazim 50 WP',
'Benomil 50 WP',
'Mankozeb 80 WP',
]),
'alat' => json_encode([
'Drum sterilisasi atau autoklaf',
'Kompor',
'Sprayer tangan',
'Ember',
'Gelas ukur',
'Higrometer',
'Masker',
'Sarung tangan'
]),
],
[
@ -37,6 +58,17 @@ public function run(): void
'Tingkatkan kebersihan lingkungan produksi',
'Sterilisasi media dengan autoclave maksimal',
'Hindari pencam dengan baglog lain',
]),'bahan' => json_encode([
'Karbendazim 50 WP',
'Benomil 50 WP'
]),
'alat' => json_encode([
'Drum sterilisasi',
'Sprayer',
'Higrometer',
'Termometer',
'Masker',
'Sarung tangan'
]),
],
[
@ -50,6 +82,18 @@ public function run(): void
'Tingkatkan sirkulasi udara',
'Bersihkan ruangan dari sisa-sisa media lama',
'Gunakan kapur tohor untuk desinfeksi',
]),'bahan' => json_encode([
'Mankozeb 80 WP',
'Benomil 50 WP',
'Propineb 70 WP'
]),
'alat' => json_encode([
'Sprayer',
'Alat sterilisasi',
'Higrometer',
'Kipas ventilasi',
'Masker',
'Sarung tangan'
]),
],
[
@ -63,6 +107,18 @@ public function run(): void
'Kurangi kelembaban hingga 80%',
'Gunakan fungisida sistemik',
'Jaga kebersihan ekstrim di area produksi',
]),'bahan' => json_encode([
'Karbendazim 50 WP',
'Klorotalonil 75 WP',
'Mankozeb 80 WP'
]),
'alat' => json_encode([
'Sprayer',
'Termometer',
'Higrometer',
'Alat sterilisasi',
'Masker',
'Sarung tangan'
]),
],
[
@ -76,6 +132,18 @@ public function run(): void
'Tingkatkan ventilasi dan kurangi kelembaban',
'Semprot dengan antibiotik (streptomisin 500 ppm)',
'Sterilisasi alat panen dengan desinfektan',
]),'bahan' => json_encode([
'Kasugamisin 2%',
'Streptomisin Sulfat',
'Oksitetrasiklin'
]),
'alat' => json_encode([
'Sprayer',
'Gunting panen',
'Alkohol 70%',
'Desinfektan',
'Masker',
'Sarung tangan'
]),
],
[
@ -89,6 +157,17 @@ public function run(): void
'Jaga media agar tidak terlalu lembab',
'Gunakan fungisida contact',
'Lakukan sanitasi umum',
]),'bahan' => json_encode([
'Benomil 50 WP',
'Karbendazim 50 WP'
]),
'alat' => json_encode([
'Drum sterilisasi',
'Sprayer',
'Termometer',
'Higrometer',
'Masker',
'Sarung tangan'
]),
],
[
@ -102,6 +181,16 @@ public function run(): void
'Inokulasi dengan bibit berkualitas tinggi',
'Jaga kebersihan media',
'Gunakan fungisida preventif',
]),'bahan' => json_encode([
'Benomil 50 WP'
]),
'alat' => json_encode([
'Drum sterilisasi',
'Alat inokulasi',
'Termometer',
'Higrometer',
'Masker',
'Sarung tangan'
]),
],
[
@ -115,6 +204,16 @@ public function run(): void
'Jangan tinggalkan pakan di sekitar areal budidaya',
'Lakukan pembersihan ruangan secara teratur',
'Gunakan kucing atau predator tikus lainnya',
]),'bahan' => json_encode([
'Brodifakum 0,005%',
'Bromadiolon 0,005%'
]),
'alat' => json_encode([
'Perangkap tikus',
'Kawat kasa',
'Sapu',
'Sekop',
'Peralatan kebersihan'
]),
],
[
@ -128,6 +227,17 @@ public function run(): void
'Jaga kebersihan dan segera buang sisa panen',
'Gunakan pembakar untuk menarik dan membunuh lalat',
'Pantau ruangan secara berkala',
]),'bahan' => json_encode([
'Pyrethrin (Pyrethrum)',
'Deltametrin 25 EC'
]),
'alat' => json_encode([
'Sprayer tangan',
'Yellow trap',
'Lampu perangkap',
'Kasa anti serangga',
'Masker',
'Sarung tangan'
]),
],
[
@ -141,6 +251,17 @@ public function run(): void
'Jaga kelembaban pada level optimal 80-85%',
'Isolasi baglog yang terserang',
'Lakukan rotasi area budidaya',
]),'bahan' => json_encode([
'Abamektin 18 EC',
'Propargit 57 EC'
]),
'alat' => json_encode([
'Sprayer tangan',
'Yellow trap',
'Higrometer',
'Termometer',
'Masker',
'Sarung tangan'
]),
],
];

View File

@ -22,7 +22,7 @@
</div>
<div class="mx-auto max-w-4xl">
@if(isset($is_error) && $is_error && count($results) == 0)
@if (isset($is_error) && $is_error && count($results) == 0)
<!-- Error: No Matching Diseases (Red) -->
<div class="mb-10 overflow-hidden rounded-3xl border-l-4 border-red-500 bg-red-50 p-8 shadow-lg">
<div class="flex items-start">
@ -48,87 +48,155 @@
}
}
@endphp
@if($bestResult)
<div
class="mb-10 overflow-hidden rounded-3xl border border-green-100 bg-white shadow-2xl transition duration-300 hover:shadow-green-100">
<!-- Header Penyakit -->
<div
class="bg-green-600 flex items-center justify-between px-8 py-6 text-white">
<div>
<span
class="text-sm font-medium uppercase tracking-wider text-white decoration-white opacity-80">[{{ $bestResult['penyakit']->kode }}]
Kemungkinan Penyakit/Hama:</span>
<h2 class="mt-1 text-3xl font-extrabold text-white">{{ $bestResult['penyakit']->nama }}</h2>
</div>
<div class="text-right">
<span class="text-sm font-medium leading-tight text-white opacity-80">Tingkat
Keyakinan:</span>
<div class="text-4xl font-black leading-tight text-white">{{ min($bestResult['cf_percentage'], 93) }}%</div>
</div>
</div>
<div class="p-8">
<!-- Status Confidence -->
<div
class="mb-8 flex items-center rounded-2xl border border-green-200 bg-green-50 p-4 shadow-sm">
<div class="mr-4 flex h-12 w-12 items-center justify-center rounded-full bg-green-100">
<span class="text-2xl text-green-600">🛡️</span>
</div>
@if ($bestResult)
<div
class="mb-10 overflow-hidden rounded-3xl border border-green-100 bg-white shadow-2xl transition duration-300 hover:shadow-green-100">
<!-- Header Penyakit -->
<div class="bg-green-600 flex items-center justify-between px-8 py-6 text-white">
<div>
<span class="text-sm font-medium leading-tight text-gray-500">Status Diagnosis:</span>
<div class="text-xl font-bold leading-tight text-green-800">Sangat Yakin <span
class="ml-2 rounded bg-green-200 px-2 py-1 text-xs text-green-800">{{ $bestResult['status'] }}</span>
<span
class="text-sm font-medium uppercase tracking-wider text-white decoration-white opacity-80">[{{ $bestResult['penyakit']->kode }}]
Kemungkinan Penyakit/Hama:</span>
<h2 class="mt-1 text-3xl font-extrabold text-white">{{ $bestResult['penyakit']->nama }}
</h2>
</div>
<div class="text-right">
<span class="text-sm font-medium leading-tight text-white opacity-80">Tingkat
Keyakinan:</span>
<div class="text-4xl font-black leading-tight text-white">
{{ min($bestResult['cf_percentage'], 93) }}%</div>
</div>
</div>
<div class="p-8">
<!-- Status Confidence -->
<div
class="mb-8 flex items-center rounded-2xl border border-green-200 bg-green-50 p-4 shadow-sm">
<div class="mr-4 flex h-12 w-12 items-center justify-center rounded-full bg-green-100">
<span class="text-2xl text-green-600">🛡️</span>
</div>
<div>
<span class="text-sm font-medium leading-tight text-gray-500">Status
Diagnosis:</span>
<div class="text-xl font-bold leading-tight text-green-800">Sangat Yakin <span
class="ml-2 rounded bg-green-200 px-2 py-1 text-xs text-green-800">{{ $bestResult['status'] }}</span>
</div>
</div>
</div>
</div>
<!-- Detail Penyakit -->
<div class="grid gap-8 md:grid-cols-2">
<div>
<h3
class="mb-3 flex items-center border-b border-green-100 pb-2 text-lg font-bold text-gray-800">
<span class="mr-2">📝</span> Deskripsi
</h3>
<p class="text-justify leading-relaxed text-gray-600">
{{ $bestResult['penyakit']->deskripsi }}
</p>
</div>
<div>
<h3
class="mb-3 flex items-center border-b border-green-100 pb-2 text-lg font-bold text-gray-800">
<span class="mr-2">💡</span> Solusi & Penanganan
</h3>
<ul class="space-y-3">
@php
$solusiData = $bestResult['solusi'];
if (is_string($solusiData)) {
// Coba decode jika string JSON
$decoded = json_decode($solusiData, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
$solusiData = $decoded;
<!-- Detail Penyakit -->
<div class="grid gap-8 md:grid-cols-2">
<div>
<h3
class="mb-3 flex items-center border-b border-green-100 pb-2 text-lg font-bold text-gray-800">
<span class="mr-2">📝</span> Deskripsi
</h3>
<p class="text-justify leading-relaxed text-gray-600">
{{ $bestResult['penyakit']->deskripsi }}
</p>
</div>
<div>
<h3
class="mb-3 flex items-center border-b border-green-100 pb-2 text-lg font-bold text-gray-800">
<span class="mr-2">💡</span> Solusi & Penanganan
</h3>
<ul class="space-y-3">
@php
$solusiData = $bestResult['solusi'];
if (is_string($solusiData)) {
// Coba decode jika string JSON
$decoded = json_decode($solusiData, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
$solusiData = $decoded;
}
}
}
@endphp
@endphp
@if (is_array($solusiData))
@foreach ($solusiData as $solusi)
@if (is_array($solusiData))
@foreach ($solusiData as $solusi)
<li class="flex items-center">
<span class="px-2 text-green-500"></span>
<span class="leading-tight text-gray-600">{{ $solusi }}</span>
</li>
@endforeach
@else
<li class="flex items-center">
<span class="px-2 text-green-500"></span>
<span class="leading-tight text-gray-600">{{ $solusi }}</span>
<span class="leading-tight text-gray-600">{{ $solusiData }}</span>
</li>
@endforeach
@else
<li class="flex items-center">
<span class="px-2 text-green-500"></span>
<span class="leading-tight text-gray-600">{{ $solusiData }}</span>
</li>
@endif
</ul>
@endif
</ul>
</div>
</div>
<div class="grid gap-8 md:grid-cols-2 mt-5">
<div>
<h3
class="mb-3 flex items-center border-b border-green-100 pb-2 text-lg font-bold text-gray-800">
<span class="mr-2">🧴</span> Bahan yang Dibutuhkan
</h3>
<ul class="space-y-3">
@php
$bahanData = $bestResult['bahan'];
if (is_string($bahanData)) {
// Coba decode jika string JSON
$decoded = json_decode($bahanData, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
$bahanData = $decoded;
}
}
@endphp
@if (is_array($bahanData))
@foreach ($bahanData as $bahan)
<li class="flex items-center">
<span class="px-2 text-green-500">🧪</span>
<span
class="leading-tight text-gray-600">{{ $bahan }}</span>
</li>
@endforeach
@else
<li class="flex items-center">
<span class="px-2 text-green-500">🧪</span>
<span class="leading-tight text-gray-600">{{ $bahanData }}</span>
</li>
@endif
</ul>
</div>
<div>
<h3
class="mb-3 flex items-center border-b border-green-100 pb-2 text-lg font-bold text-gray-800">
<span class="mr-2">🛠️</span> Alat yang Dibutuhkan
</h3>
<ul class="space-y-3">
@php
$alatData = $bestResult['alat'];
if (is_string($alatData)) {
// Coba decode jika string JSON
$decoded = json_decode($alatData, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
$alatData = $decoded;
}
}
@endphp
@if (is_array($alatData))
@foreach ($alatData as $alat)
<li class="flex items-center">
<span class="px-2 text-green-500">🔧</span>
<span
class="leading-tight text-gray-600">{{ $alat }}</span>
</li>
@endforeach
@else
<li class="flex items-center">
<span class="px-2 text-green-500">🔧</span>
<span class="leading-tight text-gray-600">{{ $alatData }}</span>
</li>
@endif
</ul>
</div>
</div>
</div>
</div>
</div>
@endif
@endif
@ -139,9 +207,9 @@ class="w-full transform rounded-2xl bg-green-600 px-10 py-4 text-center font-bol
🔄 Diagnosis Ulang
</a>
<!-- <a href="/"
class="w-full transform rounded-2xl border-2 border-green-600 bg-white px-10 py-4 text-center font-bold text-green-600 shadow-lg transition hover:-translate-y-1 hover:bg-green-50 md:w-auto">
🏠 Kembali ke Beranda
</a> -->
class="w-full transform rounded-2xl border-2 border-green-600 bg-white px-10 py-4 text-center font-bold text-green-600 shadow-lg transition hover:-translate-y-1 hover:bg-green-50 md:w-auto">
🏠 Kembali ke Beranda
</a> -->
</div>
</div>
</div>