140 lines
4.7 KiB
PHP
140 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\DataPengguna;
|
|
use App\Models\Indikator;
|
|
use App\Models\RiwayatKonsultasi;
|
|
use App\Services\CBRService;
|
|
use Barryvdh\DomPDF\Facade\Pdf;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class HomeController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
return view('check.cek-penyakit');
|
|
}
|
|
|
|
public function home()
|
|
{
|
|
return view('home.home'); // Pastikan file view ada di resources/views/home/home.blade.php
|
|
}
|
|
|
|
public function temukan($id)
|
|
{
|
|
$riwayat = RiwayatKonsultasi::find($id);
|
|
|
|
$indikatorIds = json_decode($riwayat->id_indikator, true);
|
|
$penggunaIds = json_decode($riwayat->id_data_pengguna, true);
|
|
|
|
$indikator = Indikator::whereIn('id', $indikatorIds)->get();
|
|
$pengguna = DataPengguna::whereIn('id', $penggunaIds)->get();
|
|
|
|
return view('check.hasil', [
|
|
'id' => $id,
|
|
'indikators' => $indikator,
|
|
'pengguna' => $pengguna,
|
|
]);
|
|
}
|
|
|
|
public function cetakPDF($id)
|
|
{
|
|
$riwayat = RiwayatKonsultasi::find($id);
|
|
|
|
$indikatorIds = json_decode($riwayat->id_indikator, true);
|
|
$penggunaIds = json_decode($riwayat->id_data_pengguna, true);
|
|
|
|
$indikators = Indikator::whereIn('id', $indikatorIds)->get();
|
|
$pengguna = DataPengguna::whereIn('id', $penggunaIds)->get();
|
|
|
|
$pdf = Pdf::loadView('check.cetak', compact('pengguna', 'indikators'));
|
|
return $pdf->stream('Hasil_Diagnosa.pdf');
|
|
}
|
|
|
|
public function temukanPenyakit(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'indikator' => 'required|min:2',
|
|
'indikator.*' => 'exists:indikators,kode',
|
|
'nama' => 'required|string|max:255',
|
|
'email' => 'required|string|max:255',
|
|
'nama_kucing' => 'required|string|max:20',
|
|
'usia_kucing' => 'required|numeric|min:1',
|
|
], [
|
|
'indikator.required' => 'Pilih minimal dua indikator.',
|
|
'indikator.min' => 'Minimal dua indikator harus dipilih.',
|
|
'nama.required' => 'Nama wajib diisi.',
|
|
'email.required' => 'Email wajib diisi.',
|
|
'nama_kucing.required' => 'Nama kucing wajib diisi.',
|
|
'usia_kucing.required' => 'Usia kucing wajib diisi.',
|
|
]);
|
|
|
|
$indicators = $request->indikator;
|
|
|
|
$predictions = CBRService::calculatePrediction($indicators);
|
|
|
|
$ids_data_pengguna = [];
|
|
|
|
DB::beginTransaction();
|
|
|
|
try {
|
|
foreach ($predictions as $prediction) {
|
|
$model = new DataPengguna();
|
|
$model->nama = $request->nama;
|
|
$model->email = $request->email;
|
|
$model->nama_kucing = $request->nama_kucing;
|
|
$model->usia_kucing = $request->usia_kucing;
|
|
$model->kode_indikator = implode(',', $request->indikator);
|
|
$model->kode_penyakit = $prediction['penyakit']->kode;
|
|
$model->nilai_cf = $prediction['confidence_score'];
|
|
$model->save();
|
|
$ids_data_pengguna[] = $model->id;
|
|
}
|
|
|
|
$riwayat = RiwayatKonsultasi::create([
|
|
'id_data_pengguna' => json_encode($ids_data_pengguna),
|
|
'id_indikator' => json_encode($indicators),
|
|
]);
|
|
|
|
DB::commit();
|
|
} catch (\Exception $e) {
|
|
DB::rollback();
|
|
return response()->json(['error' => $e->getMessage()], 500);
|
|
}
|
|
|
|
return redirect(route('hasil.penyakit', [$riwayat->id]));
|
|
}
|
|
|
|
public function statistikPenyakit()
|
|
{
|
|
// Mengelompokkan data penyakit berdasarkan kode_penyakit dan menghitung jumlahnya
|
|
$statistik = DataPengguna::select('kode_penyakit', DB::raw('count(*) as jumlah'))
|
|
->groupBy('kode_penyakit')
|
|
->get();
|
|
|
|
return view('admin.dashboard', compact('statistik'));
|
|
}
|
|
|
|
public function diagnosaUlang($id)
|
|
{
|
|
// Cari riwayat dan data pengguna terkait
|
|
$riwayat = RiwayatKonsultasi::findOrFail($id);
|
|
$dataPengguna = DataPengguna::whereIn('id', json_decode($riwayat->id_data_pengguna, true))->first();
|
|
|
|
// Simpan data ke session untuk otomatis isi form
|
|
session([
|
|
'riwayat_id' => $riwayat->id,
|
|
'nama' => $dataPengguna->nama,
|
|
'email' => $dataPengguna->email,
|
|
'nama_kucing' => $dataPengguna->nama_kucing,
|
|
'usia_kucing' => $dataPengguna->usia_kucing,
|
|
'indikator_terpilih' => json_decode($riwayat->id_indikator, true),
|
|
]);
|
|
|
|
// Arahkan ke halaman cek-penyakit
|
|
return redirect()->route('cek-penyakit');
|
|
}
|
|
} |