MIF_E31210565/app/Http/Controllers/AdminDiagnosaController.php

149 lines
4.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Models\Diagnosa;
use App\Models\Gejala;
use App\Models\Pasien;
use App\Models\Penyakit;
use App\Models\Role;
use Illuminate\Http\Request;
class AdminDiagnosaController extends Controller
{
//
public function index()
{
$data = [
'title' => 'Diagnosa Penyakit',
'content' => 'admin/diagnosa/index'
];
return view('admin.layouts.wrapper', $data);
}
public function createPasien(Request $request)
{
$data = [
'name' => $request->name,
'umur' => $request->umur,
'Alamat' => $request->alamat,
];
$pasien = Pasien::create($data);
session()->put('pasien_id', $pasien->id);
return redirect('/admin/diagnosa/pilih-gejala');
}
public function pilihGejala()
{
$pasien_id = session()->get('pasien_id');
if (!$pasien_id) {
return redirect('/admin/diagnosa')->withErrors(['Pilih pasien terlebih dahulu']);
}
$data = [
'title' => 'Diagnosa Penyakit',
'pasien' => Pasien::find($pasien_id),
'gejala' => Gejala::get(),
'gejelaTerpilih' => Diagnosa::with('gejala')
->wherePasienId($pasien_id)
->groupBy('gejala_id')
->select('gejala_id', DB::raw('MAX(id) as id'))
->get(),
'content' => 'admin/diagnosa/pilihgejala'
];
return view('admin.layouts.wrapper', $data);
}
public function pilih()
{
$gejala_id = request('gejala_id');
$cf_user = request('nilai');
$role = Role::whereGejalaId($gejala_id)->get();
foreach ($role as $r) {
$data = [
'pasien_id' => session()->get('pasien_id'),
'penyakit_id' => $r->penyakit_id,
'gejala_id' => $gejala_id,
'nilai_cf' => $cf_user,
'cf_hasil' => $cf_user * $r->bobot_cf // Perbaikan: Memperhitungkan bobot Certainty Factor
];
Diagnosa::create($data);
}
return redirect('/admin/diagnosa/pilih-gejala');
}
public function hapusGejalaTerpilih()
{
$gejala_id = request('gejala_id');
$pasien_id = session()->get('pasien_id');
$diagnosa = Diagnosa::whereGejalaId($gejala_id)->wherePasienId($pasien_id)->get();
foreach ($diagnosa as $item) {
$d = Diagnosa::find($item->id);
$d->delete();
}
return redirect('/admin/diagnosa/pilih-gejala');
}
public function prosesDiagnosa()
{
$pasien_id = session()->get('pasien_id');
$hasil = 0;
$penyakit_id = '';
$penyakit = Penyakit::get();
foreach ($penyakit as $p) {
$diagnosa = Diagnosa::wherePenyakitId($p->id)->wherePasienId($pasien_id)->get();
$diagnosa_hasil = $this->hitung_cf($diagnosa);
if ($diagnosa_hasil > $hasil) {
$hasil = $diagnosa_hasil;
$penyakit_id = $p->id;
}
}
$pasien = Pasien::find($pasien_id);
$pasien->akumulasi_cf = $hasil;
$pasien->save();
$pasien->persentase = round($hasil * 100);
$pasien->penyakit_id = $penyakit_id;
$pasien->save();
return redirect('/admin/diagnosa/keputusan/' . $pasien_id);
}
function hitung_cf($data)
{
$cf_old = null;
foreach ($data as $value) {
if ($cf_old === null) {
$cf_old = $value->cf_hasil;
} else {
$cf_new = $value->cf_hasil;
$cf_old = $cf_old + ($cf_new * (1 - $cf_old));
}
}
return round($cf_old, 8);
}
public function keputusan($pasien_id)
{
//
if ($pasien_id == null) {
$pasien_id = session()->get('pasien_id');
}
$data = [
'title' => 'Hasil Diagnosa',
'pasien' => Pasien::with('penyakit')->find($pasien_id),
'gejala' => Diagnosa::with('gejala')->wherePasienId($pasien_id)->get(),
'content' => 'admin/diagnosa/keputusan'
];
return view('admin.layouts.wrapper', $data);
}
}