'Diagnosa', ]; $gejala = Gejala::all(); return view('user::index', compact('data', 'gejala')); } public function profile() { $data = [ 'subtitle' => 'Akun anda', ]; return view('user::setting', compact('data')); } public function riwayat(Request $request) { if ($request->ajax()) { $data = Riwayat::where('id_user', user()->id)->get(); // Convert the Eloquent Collection to a regular PHP array $data->each(function ($item, $key) { $item->rowIndex = $key + 1; }); return Datatables::of($data) ->addIndexColumn() ->addColumn('title-post', function($row){ $text = '
' . $row->gejala . '
'; return $text; }) ->addColumn('jenis_gejala', function($row){ return $row->gejala; }) ->addColumn('tingkat', function($row){ return "{$row->persen}%"; }) ->addColumn('link_youtube', function($row){ $checkSolusi = Penyakit::where('nama_penyakit', $row->penyakit)->first(); if($checkSolusi === NULL) { return '-'; } else { return $checkSolusi->youtube; } }) ->addColumn('penjelasan', function($row){ return $row->solusi->penjelasan; }) ->addColumn('waktu_diagnosa', function($row){ return Carbon::parse($row->waktu)->format('j F Y H:i:s'); }) ->rawColumns(['title-post', 'jenis_gejala', 'tingkat', 'link_youtube', 'waktu_diagnosa', 'penjelasan']) ->make(true); } $data = [ 'subtitle' => 'Riwayat Diagnosa' ]; return view('user::riwayat.index', compact('data')); } public function update(Request $request) { $id = user()->id; $validator = Validator::make($request->all(), [ 'name' => 'required', 'email' => 'required', ]); if ($validator->fails()) { return redirect()->back()->with('error', $validator->errors()->first())->withInput(); } $input = $request->all(); $findUser = User::find($id); if($findUser) { // update data $findUser->name = $input['name']; $findUser->email = $input['email']; if(!empty($input['password'])) { $findUser->password = bcrypt($input['password']); } // save data $findUser->save(); return redirect()->back()->with('success', 'Successfully update data'); } else { return redirect()->back()->with('error', 'Unexpected error'); } } public function diagnosa(Request $request) { $gejalaInput = $request->input('gejala'); if (empty($gejalaInput)) { return redirect()->back()->with('error', 'Gagal! Anda belum memilih gejala yang dialami!.'); } // Inisialisasi variabel untuk menyimpan hasil inferensi $result = array(); // Inisialisasi variabel untuk menyimpan jumlah gejala pada setiap penyakit $gejalaCount = array(); foreach ($gejalaInput as $kodeGejala) { // Ambil aturan berdasarkan kode gejala $aturan = Rule::where('kode_gejala', 'LIKE', '%' . $kodeGejala . '%')->get(); foreach ($aturan as $rule) { $kodePenyakit = $rule['kode_penyakit']; // Tambahkan jumlah gejala pada penyakit jika belum ada if (!isset($gejalaCount[$kodePenyakit])) { $gejalaCount[$kodePenyakit] = 1; } else { $gejalaCount[$kodePenyakit] += 1; } // Cek apakah penyakit sudah ada dalam hasil inferensi if (isset($result[$kodePenyakit])) { $result[$kodePenyakit]['count'] += 1; } else { // Ambil data penyakit dari database $penyakitData = Penyakit::where('kode_penyakit', $kodePenyakit)->first(); // Tambahkan penyakit ke hasil inferensi $result[$kodePenyakit] = array( 'kode_penyakit' => $penyakitData['kode_penyakit'], 'nama_penyakit' => $penyakitData['nama_penyakit'], 'penanganan' => $penyakitData['penanganan'], 'count' => 1 ); } } } $match_count = 0; $disease_count = 0; // Hitung persentase kemunculan penyakit foreach ($result as &$penyakit) { $kodePenyakit = $penyakit['kode_penyakit']; $totalGejalaCocok = $gejalaCount[$kodePenyakit]; $getTotalGejala = Rule::where('kode_penyakit', $kodePenyakit)->select('kode_gejala')->first(); $codeGejala = $getTotalGejala->kode_gejala; $totalGejalaPenyakit = count(explode(" ", $kodeGejala)) > 0 ? count(explode(" ", $kodeGejala)) : 0; $match_count++; $disease_count = $totalGejalaPenyakit; } $persentase = ($match_count / $disease_count) * 100; // Urutkan hasil berdasarkan count secara descending, kemudian berdasarkan nama_penyakit usort($result, function ($a, $b) { if ($b['count'] === $a['count']) { return strcmp($a['nama_penyakit'], $b['nama_penyakit']); } return $b['count'] - $a['count']; }); if (count($result) > 1) { $persentase = 100; } date_default_timezone_set('Asia/Jakarta'); $riwayatJawabanData = array( 'waktu' => date('Y-m-d H:i:s'), 'jawaban' => implode(' ', $gejalaInput), 'persen' => $persentase, 'id_user' => user()->id, 'penyakit' => reset($result)['nama_penyakit'] // Tambahkan nama penyakit ); // Periksa apakah data jawaban sudah ada sebelumnya $isDuplicate = Riwayat::where('jawaban', $riwayatJawabanData['jawaban'])->where('id_user', $riwayatJawabanData['id_user'])->where('waktu', $riwayatJawabanData['waktu'])->count() > 0; if (!$isDuplicate) { Riwayat::create($riwayatJawabanData); } // Ambil nama gejala yang sudah dipilih $namaGejala = array(); foreach ($gejalaInput as $kodeGejala) { // Ambil data gejala dari database $gejalaData = Gejala::where('kode_gejala', $kodeGejala)->first(); $namaGejala[] = $gejalaData['gejala']; } $totalGejalaPenyakit = array(); foreach ($result as &$penyakit) { $kodePenyakit = $penyakit['kode_penyakit']; $getTotalGejala = Rule::where('kode_penyakit', $kodePenyakit)->select('kode_gejala')->first(); $codeGejala = $getTotalGejala->kode_gejala; $totalGejalaPenyakit[$kodePenyakit] = count(explode(" ", $kodeGejala)) > 0 ? count(explode(" ", $kodeGejala)) : 0; } $data = [ 'subtitle' => 'Hasil Diagnosa', ]; $results = $result; $gejala = $gejalaInput; $nama = $namaGejala; $total_gejala_penyakit = $totalGejalaPenyakit; return view('user::diagnosa', compact('data', 'total_gejala_penyakit', 'results', 'gejala', 'nama', 'persentase')); } }