From 23b28a1590fe5f0e24b72e96b961e6acd8d13609 Mon Sep 17 00:00:00 2001 From: E31232303evimr <158023512+E31232303evimr@users.noreply.github.com> Date: Tue, 3 Mar 2026 19:08:21 +0700 Subject: [PATCH] user:dashboard done --- .../User/ArtikelUserController.php | 35 +++ .../Controllers/User/DiagnosaController.php | 119 +++++++++ .../User/UserDashboardController.php | 63 +++++ app/Http/Middleware/IsUser.php | 17 ++ bootstrap/app.php | 1 + resources/views/admin/dashboard.blade.php | 4 +- .../views/admin/penyakit/index.blade.php | 4 +- .../views/admin/rule-basis/create.blade.php | 18 +- .../views/admin/rule-basis/edit.blade.php | 14 +- .../views/admin/rule-basis/index.blade.php | 10 +- resources/views/layouts/admin-app.blade.php | 40 +-- resources/views/layouts/user-app.blade.php | 228 +++++++++++++++++ resources/views/profile/edit.blade.php | 2 +- resources/views/user/dashboard.blade.php | 242 ++++++++++++++++++ resources/views/user/diagnosa/hasil.blade.php | 185 +++++++++++++ resources/views/user/diagnosa/index.blade.php | 172 +++++++++++++ .../views/user/diagnosa/riwayat.blade.php | 87 +++++++ routes/web.php | 25 +- 18 files changed, 1206 insertions(+), 60 deletions(-) create mode 100644 app/Http/Controllers/User/ArtikelUserController.php create mode 100644 app/Http/Controllers/User/DiagnosaController.php create mode 100644 app/Http/Controllers/User/UserDashboardController.php create mode 100644 app/Http/Middleware/IsUser.php create mode 100644 resources/views/layouts/user-app.blade.php create mode 100644 resources/views/user/dashboard.blade.php create mode 100644 resources/views/user/diagnosa/hasil.blade.php create mode 100644 resources/views/user/diagnosa/index.blade.php create mode 100644 resources/views/user/diagnosa/riwayat.blade.php diff --git a/app/Http/Controllers/User/ArtikelUserController.php b/app/Http/Controllers/User/ArtikelUserController.php new file mode 100644 index 0000000..a53d3aa --- /dev/null +++ b/app/Http/Controllers/User/ArtikelUserController.php @@ -0,0 +1,35 @@ +latest()->paginate(9); + return view('user.artikel.budidaya', compact('artikels')); + } + + public function detailBudidaya($slug) + { + $artikel = InformasiBudidaya::where('slug', $slug)->firstOrFail(); + return view('user.artikel.detail-budidaya', compact('artikel')); + } + + public function hamaPenyakit() + { + $hama = InformasiHamaPenyakit::published()->where('jenis', 'Hama')->latest()->get(); + $penyakit = InformasiHamaPenyakit::published()->where('jenis', 'Penyakit')->latest()->get(); + return view('user.artikel.hama-penyakit', compact('hama', 'penyakit')); + } + + public function detailHamaPenyakit($slug) + { + $artikel = InformasiHamaPenyakit::where('slug', $slug)->firstOrFail(); + return view('user.artikel.detail-hama-penyakit', compact('artikel')); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/User/DiagnosaController.php b/app/Http/Controllers/User/DiagnosaController.php new file mode 100644 index 0000000..039cee2 --- /dev/null +++ b/app/Http/Controllers/User/DiagnosaController.php @@ -0,0 +1,119 @@ +get(); + return view('user.diagnosa.index', compact('gejalas')); + } + + public function proses(Request $request) + { + $request->validate([ + 'gejala' => 'required|array|min:1', + ], [ + 'gejala.required' => 'Pilih minimal 1 gejala!', + 'gejala.min' => 'Pilih minimal 1 gejala!', + ]); + + $gejalaInput = $request->gejala; // array of id_gejala + + // Ambil semua rule yang relevan + $rules = RuleBasis::whereIn('id_gejala', $gejalaInput)->get(); + + // Hitung MB dan MD per penyakit dulu + $mbPenyakit = []; + $mdPenyakit = []; + + foreach ($rules as $rule) { + $idPenyakit = $rule->id_penyakit; + + if (!isset($mbPenyakit[$idPenyakit])) { + // Gejala pertama + $mbPenyakit[$idPenyakit] = $rule->mb; + $mdPenyakit[$idPenyakit] = $rule->md; + } else { + // Kombinasi gejala berikutnya (rumus 2 & 3) + $mbPenyakit[$idPenyakit] = $mbPenyakit[$idPenyakit] * $rule->mb; + $mdPenyakit[$idPenyakit] = $mdPenyakit[$idPenyakit] + $rule->md * (1 - $mdPenyakit[$idPenyakit]); + } + } + + // Hitung CF = MB - MD + $cfPenyakit = []; + foreach ($mbPenyakit as $idPenyakit => $mb) { + $cfPenyakit[$idPenyakit] = $mb - $mdPenyakit[$idPenyakit]; + } + + if (empty($cfPenyakit)) { + return redirect()->route('user.diagnosa.index') + ->with('error', 'Tidak ditemukan penyakit yang cocok dengan gejala yang dipilih.'); + } + + // Urutkan dari CF tertinggi + arsort($cfPenyakit); + + // Ambil data penyakit + $hasilDiagnosa = []; + foreach ($cfPenyakit as $idPenyakit => $cf) { + $penyakit = MasterPenyakit::find($idPenyakit); + if ($penyakit) { + $hasilDiagnosa[] = [ + 'id_penyakit' => $idPenyakit, + 'nama_penyakit' => $penyakit->nama_penyakit, + 'cf' => round($cf, 2), + 'persentase' => round($cf * 100, 1), + ]; + } + } + + $penyakitFinal = $hasilDiagnosa[0]['id_penyakit']; + $cfTertinggi = $hasilDiagnosa[0]['cf']; + + // Simpan ke riwayat + $riwayat = RiwayatDiagnosis::create([ + 'user_id' => auth()->id(), + 'tanggal' => now(), + 'gejala_input' => $gejalaInput, + 'hasil_diagnosa'=> $hasilDiagnosa, + 'cf_tertinggi' => $cfTertinggi, + 'penyakit_final'=> $penyakitFinal, + ]); + + return redirect()->route('user.diagnosa.hasil', $riwayat->id_diagnosis); + } + + public function hasil($id) + { + $riwayat = RiwayatDiagnosis::with('penyakit')->findOrFail($id); + + // Pastikan hanya pemilik yang bisa lihat + if ($riwayat->user_id !== auth()->id()) { + abort(403); + } + + $gejalaInput = MasterGejala::whereIn('id_gejala', $riwayat->gejala_input)->get(); + + return view('user.diagnosa.hasil', compact('riwayat', 'gejalaInput')); + } + + public function riwayat() + { + $riwayats = RiwayatDiagnosis::where('user_id', auth()->id()) + ->with('penyakit') + ->latest('tanggal') + ->paginate(10); + + return view('user.diagnosa.riwayat', compact('riwayats')); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/User/UserDashboardController.php b/app/Http/Controllers/User/UserDashboardController.php new file mode 100644 index 0000000..25f14a7 --- /dev/null +++ b/app/Http/Controllers/User/UserDashboardController.php @@ -0,0 +1,63 @@ +user(); + + // Total diagnosa user + $totalDiagnosa = RiwayatDiagnosis::where('user_id', $user->id)->count(); + + // Diagnosa bulan ini + $diagnosabulanIni = RiwayatDiagnosis::where('user_id', $user->id) + ->whereMonth('tanggal', now()->month) + ->whereYear('tanggal', now()->year) + ->count(); + + // Riwayat diagnosa terbaru + $riwayatTerbaru = RiwayatDiagnosis::where('user_id', $user->id) + ->with('penyakit') + ->latest('tanggal') + ->take(5) + ->get(); + + // Data chart per bulan (6 bulan terakhir) + $chartData = []; + for ($i = 5; $i >= 0; $i--) { + $bulan = now()->subMonths($i); + $chartData[] = [ + 'bulan' => $bulan->format('M Y'), + 'total' => RiwayatDiagnosis::where('user_id', $user->id) + ->whereMonth('tanggal', $bulan->month) + ->whereYear('tanggal', $bulan->year) + ->count(), + ]; + } + + // Statistik penyakit terbanyak didiagnosa user + $statistikPenyakit = RiwayatDiagnosis::where('user_id', $user->id) + ->whereNotNull('penyakit_final') + ->selectRaw('penyakit_final, count(*) as total') + ->groupBy('penyakit_final') + ->with('penyakit') + ->orderByDesc('total') + ->take(5) + ->get(); + + return view('user.dashboard', compact( + 'totalDiagnosa', + 'diagnosabulanIni', + 'riwayatTerbaru', + 'chartData', + 'statistikPenyakit' + )); + } +} \ No newline at end of file diff --git a/app/Http/Middleware/IsUser.php b/app/Http/Middleware/IsUser.php new file mode 100644 index 0000000..144416f --- /dev/null +++ b/app/Http/Middleware/IsUser.php @@ -0,0 +1,17 @@ +check() && auth()->user()->role === 'user') { + return $next($request); + } + abort(403, 'Akses ditolak.'); + } +} \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php index bb704ca..ecef746 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -14,6 +14,7 @@ $middleware->alias([ 'admin' => \App\Http\Middleware\IsAdmin::class, 'super_admin' => \App\Http\Middleware\IsSuperAdmin::class, + 'isUser' => \App\Http\Middleware\IsUser::class, ]); }) ->withExceptions(function (Exceptions $exceptions): void { diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 650b612..73f75bc 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -1,6 +1,6 @@ @extends('layouts.admin-app') -@section('page-title', 'đ Dashboard') +@section('page-title', 'Dashboard') @section('page-subtitle', 'Overview statistik sistem pakar') @section('content') @@ -9,7 +9,7 @@
{{ Auth::user()->nama }}
{{ now()->translatedFormat('l, d F Y') }}