penanggulangan
This commit is contained in:
parent
f3161b4e66
commit
1ffa7425bf
|
|
@ -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
|
||||
];
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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'];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
]),
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue