MIF_E31221259/app/Http/Controllers/Pengguna/DiagnosaController.php

90 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Pengguna;
use App\Http\Controllers\Pengguna\PenggunaController;
use Illuminate\Http\Request;
use App\Models\Diagnosa;
use App\Models\Kriteria;
use App\Models\Jurusan;
class DiagnosaController extends PenggunaController
{
public function index()
{
// Ambil semua kriteria
$kriterias = Kriteria::all();
return view('pengguna.diagnosa.index', compact('kriterias'));
}
public function analisa(Request $request)
{
if (empty($request->kondisi) || count($request->kondisi) < 2) {
$this->notification('success', 'Sehat', 'Tanpa kriteria signifikan');
return redirect()->route('pengguna.diagnosa.index');
}
$arbobot = [0, 1, 0.75, 0.5, 0.25];
$kepastian = [];
// Parse input kondisi: ["kriteriaId_level", ...]
foreach ($request->kondisi as $item) {
list($kriteriaId, $level) = explode('_', $item);
$kepastian[$kriteriaId] = (int) $level;
}
// Ambil semua jurusan dan basis pengetahuan yang relevan
$jurusans = Jurusan::with(['basisPengetahuan' => function ($q) use ($kepastian) {
$q->whereIn('kriteria_id', array_keys($kepastian));
}])->get();
$cfHasil = [];
// Hitung CF untuk tiap jurusan
foreach ($jurusans as $jurusan) {
$cfs = [];
foreach ($jurusan->basisPengetahuan as $bp) {
$level = $kepastian[$bp->kriteria_id] ?? 0;
$cfs[] = $bp->nilai * $arbobot[$level];
}
// Kombinasi CF
$cfTotal = 0;
foreach ($cfs as $idx => $cf) {
if ($idx === 0) {
$cfTotal = $cf;
} else {
$cfTotal = $cfTotal + $cf * (1 - $cfTotal);
}
}
$cfHasil[$jurusan->id] = round($cfTotal, 4);
}
// Urutkan dan simpan
arsort($cfHasil);
$topId = array_key_first($cfHasil);
Diagnosa::create([
'user_id' => session('biodata.user_id'),
'jurusan_id' => $topId,
'presentase' => $cfHasil[$topId] * 100,
'catatan' => null,
]);
// Kembali ke view hasil
return view('pengguna.diagnosa.analisa', [
'cfHasil' => $cfHasil,
'jurusans' => $jurusans,
'kepastian' => $kepastian,
'topId' => $topId,
]);
}
public function reset(Request $request)
{
$request->session()->forget('biodata');
return redirect()->route('pengguna.biodata.index');
}
}