149 lines
4.3 KiB
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);
|
|
}
|
|
|
|
|
|
|
|
}
|