MIF_E31210039/app/Http/Controllers/KonsultasiController.php

281 lines
9.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Gejala;
use App\Models\Penyakit;
use App\Models\Hasil;
use App\Models\Diagnosa;
use App\Models\Aturan;
use Illuminate\Support\Facades\DB;
class KonsultasiController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$dataGejala = Gejala::all();
$penyakits = Penyakit::all();
return view('konsultasi.diagnosa', compact('dataGejala', 'penyakits'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
dd($request->all());
}
/**
* Display the specified resource.
*/
public function showdata($id_hasil)
{
$dataDiagnosa = Hasil::find($id_hasil)->toArray();
$dataTampilan = [
'navLink' => 'diagnosa',
'dataDiagnosa' => $dataDiagnosa,
'hasilDiagnosa' => json_decode($dataDiagnosa['hasil_diagnosa'])
];
return view('konsultasi.hasilDiagnosa', $dataTampilan);
}
public function cetakHasil($id_hasil)
{
$dataDiagnosa = Hasil::find($id_hasil)->toArray();
$dataTampilan = [
'navLink' => 'diagnosa',
'dataDiagnosa' => $dataDiagnosa,
'hasilDiagnosa' => json_decode($dataDiagnosa['hasil_diagnosa'])
];
return view('konsultasi.cetak-diagnosa', $dataTampilan);
}
public function hitungKonsultasi(Request $request)
{
$validateReq = $request->validate([
'nama' => 'required',
'alamat' => 'required',
// 'jenis_sapi' => 'required'
]);
$arrHasilUser = $request->input('resultGejala');
if ($arrHasilUser == null) {
return back()->withInput()->with('error', 'Anda belum memilih gejala');
} else {
if (count($arrHasilUser) < 2) {
return back()->withInput()->with('error', 'Minimal gejala yang dipilih adalah 2 gejala');
} else {
foreach ($arrHasilUser as $key => $value) {
$dataPenyakit[$key] = Aturan::where('kode_gejala', $value)
->select('kode_penyakit')
->get()
->toArray();
foreach ($dataPenyakit[$key] as $a => $b) {
$resultData[$key]['daftar_penyakit'][$a] = $b['kode_penyakit'];
}
$dataNilaiDensitas[$key] = Gejala::where('kode_gejala', $value)
->select('nilai_densitas', 'gejala')
->get()
->toArray();
$dataGejala[$key] = $dataNilaiDensitas[$key][0]['gejala'];
$resultData[$key]['belief'] = $dataNilaiDensitas[$key][0]['nilai_densitas'];
$resultData[$key]['plausibility'] = 1 - $dataNilaiDensitas[$key][0]['nilai_densitas'];
}
$variabelTampilan = $this->mulaiPerhitungan($resultData);
foreach ($dataGejala as $key => $value) {
$variabelTampilan['Gejala_Penyakit'][$key]['kode_gejala'] = $arrHasilUser[$key];
$variabelTampilan['Gejala_Penyakit'][$key]['nama_gejala'] = $value;
}
// Penyimpanan Step Pertama
$diagnosa = new Diagnosa();
$diagnosa->nama = $validateReq['nama'];
$diagnosa->alamat = $validateReq['alamat'];
$diagnosa->save();
$idDiagnosa = $diagnosa->id_diagnosa;
// Penyimpanan Step Kedua
$hasil = new Hasil();
$hasil->nama = $validateReq['nama'];
$hasil->alamat = $validateReq['alamat'];
// $hasil->jenis_sapi = $validateReq['jenis_sapi'];
$hasil->hasil_diagnosa = json_encode($variabelTampilan);
$hasil->solusi = $variabelTampilan['Solusi_Penyakit']['solusi'];
$hasil->save();
$idHasil = $hasil->id_hasil;
return redirect()->to('diagnosa/' . $idHasil);
}
}
}
public function mulaiPerhitungan($dataAcuan)
{
$x = 0;
for ($i = 0; $i < count($dataAcuan); $i++) {
$hasilKonversi[$i]['data'][0]['array'] = $dataAcuan[$i]['daftar_penyakit'];
$hasilKonversi[$i]['data'][0]['value'] = $dataAcuan[$i]['belief'];
$hasilKonversi[$i]['data'][1]['array'] = [];
$hasilKonversi[$i]['data'][1]['value'] = $dataAcuan[$i]['plausibility'];
$x++;
}
$result = $this->startingPoint(count($hasilKonversi) - 2, $hasilKonversi);
$arrResult = [];
foreach ($result['data'] as $key => $value) {
$arrResult[$key] = $value['value'];
}
$indexMaxValue = array_search(max($arrResult), $arrResult);
$nilaiBelief = round($result['data'][$indexMaxValue]['value'], 2);
$persentase = (round($result['data'][$indexMaxValue]['value'], 2) * 100) . " %";
$kodePenyakit = $result['data'][$indexMaxValue]['array'][0];
$dataPenyakit = Penyakit::where('kode_penyakit', $kodePenyakit)
->select('nama_penyakit')
->get()
->toArray()[0];
$dataSolusi = Penyakit::where('kode_penyakit', $kodePenyakit)
->select('solusi')
->get()
->toArray()[0];
$jsonData = [
'Nama_Penyakit' => $dataPenyakit,
'Nilai_Belief_Penyakit' => $nilaiBelief,
'Persentase_Penyakit' => $persentase,
'Solusi_Penyakit' => $dataSolusi,
];
return $jsonData;
}
public function startingPoint(int $jumlah, array $myData, $data = [], int $indeks = 0)
{
if (count($data) == 0) {
$hasilAkhir = $this->kalkulatorPerhitungan($myData[$indeks], $myData[$indeks + 1]);
} else {
$hasilAkhir = $this->kalkulatorPerhitungan($data, $myData[$indeks + 1]);
}
if ($indeks < $jumlah) {
return $this->startingPoint($jumlah, $myData, $hasilAkhir, $indeks + 1);
} else {
return $hasilAkhir;
}
}
public function kalkulatorPerhitungan($array1, $array2)
{
$hasilAkhir['data'] = [];
$hasilSementara = [];
$z = 0;
for ($x = 0; $x < count($array1['data']); $x++) {
for ($y = 0; $y < count($array2['data']); $y++) {
if (count($array1['data'][$x]['array']) != 0 && count($array2['data'][$y]['array']) != 0) {
$hasilSementara[$z]['array'] = json_encode(array_values(array_intersect($array1['data'][$x]['array'], $array2['data'][$y]['array'])));
if (count(json_decode($hasilSementara[$z]['array'])) == 0) {
$hasilSementara[$z]['status'] = "Himpunan Kosong";
}
} else {
$hasilSementara[$z]['array'] = json_encode(array_merge($array1['data'][$x]['array'], $array2['data'][$y]['array']));
}
$hasilSementara[$z]['value'] = $array1['data'][$x]['value'] * $array2['data'][$y]['value'];
$z++;
}
}
$pushArray = [];
foreach ($hasilSementara as $hasil) {
array_push($pushArray, $hasil['array']);
}
$pushArrayCat = [];
foreach (array_count_values($pushArray) as $key => $value) {
array_push($pushArrayCat, $key);
}
$tetapan = 0;
foreach ($hasilSementara as $datahasil) {
if (isset($datahasil['status']) && $datahasil['status'] == "Himpunan Kosong") {
$tetapan += $datahasil['value'];
}
}
$tetapan = 1 - $tetapan;
$finalResult = [];
for ($y = 0; $y < count($pushArrayCat); $y++) {
$decode[$y] = json_decode($pushArrayCat[$y]);
$finalResult[$y]['array'] = $decode[$y];
$finalResult[$y]['value'] = 0;
for ($x = 0; $x < count($hasilSementara); $x++) {
$array[$x] = json_decode($hasilSementara[$x]['array']);
if ($decode[$y] == $array[$x]) {
if (!isset($hasilSementara[$x]['status'])) {
$finalResult[$y]['value'] += $hasilSementara[$x]['value'];
}
}
}
$finalResult[$y]['value'] = $finalResult[$y]['value'] / $tetapan;
}
for ($i = 0; $i < count($finalResult); $i++) {
$hasilAkhir['data'][$i] = $finalResult[$i];
}
return $hasilAkhir;
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}