orderBy('nama')->get(); $gejalaBatang = Gejala::where('bagian', 'batang')->orderBy('nama')->get(); $gejalaLain = Gejala::where('bagian', 'seluruh')->orWhereNull('bagian')->orderBy('nama')->get(); $gejalaBuah = Gejala::where('bagian', 'buah')->orderBy('nama')->get(); return view('user.index', compact('gejalaDaun', 'gejalaBatang', 'gejalaLain', 'gejalaBuah')); } public function store(Request $request) { $request->validate([ 'gejala' => ['required', 'array', 'min:1'], 'gejala.*' => ['exists:tbl_gejala,id'], 'cf_user' => ['required', 'array'], 'cf_user.*' => ['required', 'numeric', 'min:0.1', 'max:1'], ]); $gejalaIds = array_map('intval', $request->gejala); $cfUserInput = []; foreach ($request->cf_user as $k => $v) { $cfUserInput[(int)$k] = (float)$v; } $rules = Rule::whereIn('id_gejala', $gejalaIds)->with('penyakit')->get(); // CF combine per penyakit $cfPerPenyakit = []; foreach ($rules as $rule) { $idPenyakit = $rule->id_penyakit; $idGejala = $rule->id_gejala; $cfUser = $cfUserInput[(int)$idGejala] ?? 0.5; $cfPakar = $rule->nilai_cf; // CF gejala = CF user × CF pakar $cfGejala = $cfUser * $cfPakar; if (!isset($cfPerPenyakit[$idPenyakit])) { $cfPerPenyakit[$idPenyakit] = 0; } // CF combine = CF old + CF gejala × (1 - CF old) $cfOld = $cfPerPenyakit[$idPenyakit]; $cfPerPenyakit[$idPenyakit] = $cfOld + $cfGejala * (1 - $cfOld); } // Buat record konsultasi $konsultasi = Konsultasi::create([ 'user_id' => auth()->id(), 'kode_konsultasi' => 'KST-' . strtoupper(Str::random(8)), 'tanggal' => now(), 'status' => count($cfPerPenyakit) > 0 ? 'selesai' : 'tidak_terdeteksi', ]); // Simpan gejala $attachData = []; foreach ($gejalaIds as $idGejala) { $attachData[$idGejala] = [ 'cf_user' => $cfUserInput[(int)$idGejala] ?? 0.5 ]; } $konsultasi->gejala()->attach($attachData); // Simpan hasil diagnosa arsort($cfPerPenyakit); $ranking = 1; foreach ($cfPerPenyakit as $idPenyakit => $cf) { if ($cf <= 0) continue; HasilDiagnosa::create([ 'id_konsultasi' => $konsultasi->id, 'id_penyakit' => $idPenyakit, 'nilai_cf_akhir' => round($cf, 4), 'persentase' => round($cf * 100, 2), 'ranking' => $ranking++, ]); } return redirect()->route('konsultasi.show', $konsultasi->id) ->with('success', 'Diagnosa berhasil! Berikut hasil analisis tanamanmu.'); } public function show($id) { $konsultasi = Konsultasi::with([ 'hasilDiagnosa.penyakit', 'hasilUtama.penyakit', 'gejala', ])->where('user_id', auth()->id()) ->findOrFail($id); return view('user.show', compact('konsultasi')); } }