middleware('auth'); parent::__construct(); } public function index(Request $request) { if ($request->ajax()) { $data = Diagnosa::with("data_penyakit")->latest(); return DataTables::of($data) ->addIndexColumn() ->addColumn('gejala', function ($data) { $gejala = ""; $value_gejala = json_decode($data->code_gejala); foreach ($value_gejala as $item) { $model = Gejala::where("code", $item)->first(); if ($model) { $gejala .= $model->code . '-' . $model->name . '
'; } else { $gejala .= $item . '
'; } } return $gejala; }) ->addColumn('cf_user', function ($data) { $cf_user = ""; $value_cfuser = json_decode($data->value_cf_user); foreach ($value_cfuser as $item) { $text = ""; if ($item == 1) { $text = "Sangat Yakin"; } elseif ($item == 0.8) { $text = "Yakin"; } else if ($item == 0.6) { $text = "Cukup Yakin"; } elseif ($item == 0.4) { $text = "Sedikit Yakin"; } elseif ($item == 0.2) { $text = "Tidak Tahu"; } elseif ($item == 0) { $text = "Tidak"; } $cf_user .= $text . " ($item)" . '
'; } return $cf_user; }) ->addColumn('result', function ($data) { return $data->result . " %"; }) ->addColumn('cf_pakar', function ($data) { $cf_pakar = ""; $value_cfpakar = json_decode($data->value_cf_pakar); foreach ($value_cfpakar as $item) { $cf_pakar .= $item . '
'; } return $cf_pakar; }) ->addColumn('image', function ($data) { if ($data->data_penyakit->image) { $url = $data->data_penyakit->image; return ''; } return ''; }) ->addColumn('action', function ($data) { return ''; }) ->rawColumns(['action', 'gejala', 'cf_user', 'cf_pakar', 'result', 'image']) ->make(true); } return view('diagnosa.index'); } public function add() { $gejala = Gejala::all(); $nilaiKeyakinanCF = NilaiKeyakinanCF::orderBy("nilai", "desc")->get(); return view('diagnosa.create', compact('gejala', 'nilaiKeyakinanCF')); } public function proses(Request $request) { $gejalaDipilih = $request->input('gejala'); // Gejala yang dipilih user $cfUserValues = $request->input('cf_user'); // Nilai CF User (0 - 1) if (empty($gejalaDipilih)) { return redirect()->route('diagnosa.index')->with('error', 'Silakan pilih minimal satu gejala.'); } $cfPakarSaved = []; $gejalaSaved = []; $cfPakar = []; $cfHE = []; // Mengambil nilai CF dari pakar berdasarkan gejala yang dipilih foreach ($gejalaDipilih as $key => $idGejala) { $gejala = Gejala::find($idGejala); if (!$gejala) continue; $gejalaSaved[] = $gejala->code; $cfPakar[$idGejala] = $gejala->value_cf_pakar; $cfPakarSaved[] = $gejala->value_cf_pakar; $cfHE[$idGejala] = $cfPakar[$idGejala] * $cfUserValues[$key]; } // Menghitung CF Combine $cfCombine = array_shift($cfHE); foreach ($cfHE as $cf) { $cfCombine = ($cfCombine + $cf) * (1 - $cfCombine); } $persen = $cfCombine * 100; // Menentukan penyakit berdasarkan gejala $penyakit = $this->deteksiPenyakit($gejalaDipilih); // Simpan hasil ke database $diagnosa = Diagnosa::create([ 'code_gejala' => json_encode($gejalaSaved), 'value_cf_user' => json_encode($cfUserValues), 'value_cf_pakar' => json_encode($cfPakarSaved), 'result' => round($persen), 'id_penyakit' => $penyakit->id ?? 'null', 'penyakit' => $penyakit->name ?? 'Tidak Diketahui', 'solution' => $penyakit->solution ?? 'Tidak ada solusi' ]); return redirect()->route('diagnosa.index')->with('success', 'Diagnosa berhasil dilakukan!'); } private function deteksiPenyakit($gejalaDipilih) { $rules = Rule::whereIn('id_gejala', $gejalaDipilih)->get(); $penyakitTeridentifikasi = []; foreach ($rules as $rule) { $penyakitTeridentifikasi[$rule->id_penyakit] = ($penyakitTeridentifikasi[$rule->id_penyakit] ?? 0) + 1; } arsort($penyakitTeridentifikasi); // Urutkan penyakit berdasarkan gejala terbanyak $idPenyakitTerbesar = key($penyakitTeridentifikasi); return Penyakit::find($idPenyakitTerbesar); } public function delete(Request $request) { $id = $request->id; $data = Diagnosa::findOrFail($id); try { $data->delete(); return response()->json(['status' => 'success', 'message' => 'Berhasil Menghapus Data']); } catch (\Illuminate\Database\QueryException $ex) { if ($ex->getCode() === '23000') return response()->json(['status' => 'error', 'message' => 'Gagal Menghapus Data: Terdapat Ketergantungan Data.']); } catch (\Throwable $e) { return response()->json(['status' => 'error', 'message' => 'Terjadi Kesalahan: ' . $e->getMessage()]); } } }