Compare commits

...

134 Commits

Author SHA1 Message Date
adesyawal
8b65c492cf Merge branch 'prod/base' 2026-02-02 13:54:19 +07:00
adesyawal
a0cc1cd482 Merge branch 'ade/bug-fixing/hapus-logbook' into prod/base 2026-02-02 13:53:56 +07:00
adesyawal
1a6f7fcd16 Bug Fixing Not Update Capaian When Data Not Present 2026-02-02 13:51:09 +07:00
adesyawal
77eb8f3672 Merge branch 'prod/base' 2026-01-18 09:50:01 +07:00
adesyawal
b7139f2851 Merge remote-tracking branch 'origin/ade/monitoring-absensi/bug-fixing-absen-tunggal' into prod/base 2026-01-18 09:49:38 +07:00
adesyawal
90d511e928 Bug FIxing Absen Tunggal 2026-01-18 09:44:56 +07:00
adesyawal
8c617702eb Merge branch 'prod/base' 2026-01-08 10:00:16 +07:00
adesyawal
0c753e9c22 Merge branch 'ade/bug-remun/perbaikan-recursive-fixed-pay' into prod/base 2026-01-08 09:59:58 +07:00
adesyawal
1317e877f0 Perbaikan Big Data Recursive Fixed Pay 2026-01-08 09:57:07 +07:00
adesyawal
248bc1cad7 Merge branch 'prod/base' 2026-01-06 13:25:05 +07:00
adesyawal
db25c0aef9 Merge branch 'ade/monitoring-absen/shift-pm3' into prod/base 2026-01-06 13:24:46 +07:00
adesyawal
12d298949d Bug Fixing Shift PM 3 2026-01-06 13:23:20 +07:00
adesyawal
82b84d2fb9 Merge branch 'prod/base' 2026-01-06 09:36:57 +07:00
adesyawal
eb7b2f91ad Merge branch 'ade/monitor-absen/shift-pm2' into prod/base 2026-01-06 09:36:40 +07:00
adesyawal
8482eab951 Bug Fixing Monitor Absen 2026-01-06 09:34:57 +07:00
adesyawal
e816f1f2e4 Merge branch 'prod/base' 2026-01-06 08:32:09 +07:00
adesyawal
406ed896a9 Merge branch 'ade/monitor-absen/shift-pm' into prod/base 2026-01-06 08:31:47 +07:00
adesyawal
67a45253b1 Bug Fixing Absen Shift PM 2026-01-06 08:29:09 +07:00
adesyawal
9197ad56ce Merge branch 'prod/base' 2025-12-31 13:43:46 +07:00
adesyawal
79f93d8f1e Merge branch 'ade/monitoring/check-health4' into prod/base 2025-12-31 13:43:23 +07:00
adesyawal
d06be39030 Change Response Cek health 2025-12-31 13:41:42 +07:00
adesyawal
ae1e575d73 Merge branch 'prod/base' 2025-12-31 11:47:32 +07:00
adesyawal
4d528f86bc Merge branch 'ade/monitoring/check-health3' into prod/base 2025-12-31 11:47:18 +07:00
adesyawal
42548e0cca Import Library LocalDateTime and Formatter 2025-12-31 11:45:48 +07:00
adesyawal
a9a123cbf3 Merge branch 'prod/base' 2025-12-31 11:40:05 +07:00
adesyawal
a705fc4c3b Merge branch 'ade/monitoring/check-health2' into prod/base 2025-12-31 11:39:43 +07:00
adesyawal
f2a247792d Route Check health 2025-12-31 11:35:03 +07:00
adesyawal
d1455fc1cf Merge branch 'prod/base' 2025-12-29 10:01:09 +07:00
adesyawal
69df61e369 Merge branch 'ade/sdm-absensi/realisasi-absensi' into prod/base 2025-12-29 10:00:48 +07:00
adesyawal
24326b38a2 Modifikasi Monitoring Absensi 2025-12-29 09:48:30 +07:00
adesyawal
838739b0e1 Merge branch 'prod/base' 2025-12-02 13:09:30 +07:00
adesyawal
4d73c1cbbe Merge branch 'ade/logbook-tarif/penyesuainruangan70persen' into prod/base 2025-12-02 13:09:07 +07:00
adesyawal
eb76e0e8a9 Penyesuaian Ruangan dengan jasa 70% 2025-12-02 12:52:56 +07:00
adesyawal
e6d47716ea Merge branch 'prod/base' 2025-11-28 15:28:17 +07:00
adesyawal
74ca1b4cfa Merge branch 'ade/logbook-tarif/ekslusi-dentalicious' into prod/base 2025-11-28 15:27:20 +07:00
adesyawal
725c350450 ade/logbook-tarif/ekslusi-dentalicious 2025-11-28 15:21:08 +07:00
adesyawal
f5fd2a5831 Merge branch 'prod/base' 2025-11-06 15:04:47 +07:00
adesyawal
f152385e55 Merge branch 'ade/bug-fixing/master-shift-on-cuti' into prod/base 2025-11-06 15:04:09 +07:00
adesyawal
f10373891e Merge branch 'prod/base' 2025-10-27 14:33:09 +07:00
adesyawal
fbec23b80f Merge branch 'ade/bug-fixing/level-unitkerja-direktur' into prod/base 2025-10-27 14:32:31 +07:00
adesyawal
d8de068b74 Merge branch 'prod/base' 2025-10-22 08:33:45 +07:00
adesyawal
8e21f0b7cf Merge branch 'ade/mastershift-holidayservice-monitoringabsensi' into prod/base 2025-10-22 08:33:05 +07:00
adesyawal
f9d2af743f Merge branch 'prod/base' 2025-10-03 22:07:14 +07:00
adesyawal
749fb0fb53 Merge branch 'ade/logbook/rekap-logbook-tarif' into prod/base 2025-10-03 22:06:35 +07:00
adesyawal
cf0e09ae01 Merge branch 'prod/base' 2025-09-30 19:43:38 +07:00
adesyawal
e3dc3c5807 Merge branch 'ade/bug-fixing/cuti-pegawai-baru' into prod/base 2025-09-30 19:43:19 +07:00
adesyawal
143bfa458e Merge branch 'prod/base' 2025-09-30 10:53:00 +07:00
adesyawal
8b3a574ce1 Merge branch 'ade/bug-fixing/intervensi-cuti' into prod/base 2025-09-30 10:52:19 +07:00
adesyawal
9948599436 Merge branch 'prod/base' 2025-09-16 15:01:00 +07:00
adesyawal
e6107dae92 Merge branch 'dev-ade/sdm/intervensi-cuti' into prod/base 2025-09-16 15:00:09 +07:00
adesyawal
d554375789 Merge branch 'prod/base' 2025-08-13 07:54:55 +07:00
adesyawal
ef9ed72c64 Merge branch 'ade/bug-fixing/hak-akses-diskon-total' into prod/base 2025-08-13 07:53:29 +07:00
adesyawal
b8ed331571 Merge branch 'prod/base' 2025-06-18 08:54:13 +07:00
adesyawal
623f945859 Merge branch 'dev/billing/diskonpegawai' into prod/base 2025-06-18 08:53:36 +07:00
adesyawal
ef48f2649c Merge branch 'dev/base' 2025-06-08 15:46:28 +07:00
adesyawal
26e4dbb777 Merge branch 'sdm/remunerasi/bug-fixing-pelayan-findPelayananBedah' into prod/base 2025-06-08 15:45:53 +07:00
adesyawal
36eb745812 Merge branch 'dev/sdm/remunerasi' into prod/base 2025-06-07 04:10:21 +07:00
adesyawal
6b2df06b20 Merge branch 'dev/remunerasi/bugfixingakumulasipersen' into prod/base 2025-05-19 13:48:33 +07:00
adesyawal
2481546942 Merge branch 'dev/remunerasi/vinchia' into prod/base 2025-04-09 11:25:14 +07:00
adesyawal
12f5c633f2 Merge branch 'dev/pegawai/ws-example-ade-v2' into prod/base 2025-03-21 12:46:50 +07:00
Salman Manoe
2d83b9a91c Merge branch 'dev/reporting/kehadiran-bpk' into prod/base 2025-03-19 11:00:37 +07:00
Salman Manoe
31d07e10ce Merge branch 'dev/remun/persalinan-total-tarif' into prod/base 2025-03-19 11:00:31 +07:00
Salman Manoe
243a90e2c7 Merge branch 'dev/remun/persalinan-total-tarif' into prod/base 2025-03-18 16:29:47 +07:00
Salman Manoe
c44d5799f3 Merge branch 'dev/kepegawaian/monitoring-presensi' into prod/base 2025-03-17 13:58:07 +07:00
Salman Manoe
960b9af314 Merge branch 'dev/remun/logbook-paruh-waktu' into prod/base 2025-03-14 13:40:14 +07:00
Salman Manoe
43d105de37 Merge branch 'dev/remun/logbook-paruh-waktu' into prod/base 2025-03-12 11:23:07 +07:00
Salman Manoe
e6002e44e8 Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-03-11 13:51:37 +07:00
Salman Manoe
bda56b5f44 Merge branch 'dev/remun/fixed-pay-anestesi' into prod/base 2025-03-06 08:47:24 +07:00
Salman Manoe
b1206442bb Merge branch 'dev/technical-debt/lombok-domain' into prod/base 2025-03-04 11:23:47 +07:00
Salman Manoe
71391fb198 Merge branch 'dev/kepegawaian/no-penugasan-klinis' into prod/base 2025-03-04 09:27:52 +07:00
Salman Manoe
78699b5eee Merge branch 'dev/kepegawaian/kategori-pppk' into prod/base 2025-03-04 07:19:38 +07:00
Salman Manoe
34ed82a346 Merge branch 'dev/kepegawaian/nim-ppds' into prod/base 2025-03-04 07:19:32 +07:00
Salman Manoe
69f37af283 Merge branch 'dev/technical-debt/lombok-domain' into prod/base 2025-03-04 07:19:27 +07:00
Salman Manoe
5bbefc913d Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-27 13:23:35 +07:00
Salman Manoe
991b15464e Merge branch 'dev/kepegawaian/golongan-pppk' into prod/base 2025-02-26 15:04:26 +07:00
Salman Manoe
3fb671e4f9 Merge branch 'dev/technical-debt/lombok-domain' into prod/base 2025-02-26 10:32:07 +07:00
Salman Manoe
9c3f7924bc Merge branch 'dev/kepegawaian/golongan-pppk' into prod/base 2025-02-26 10:31:51 +07:00
Salman Manoe
a1490efe43 Merge branch 'dev/kepegawaian/golongan-pppk' into prod/base 2025-02-22 14:19:40 +07:00
Salman Manoe
b50c271d21 Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-17 14:21:42 +07:00
Salman Manoe
39796f393a Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-14 16:31:43 +07:00
Salman Manoe
389147e756 Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-14 14:41:12 +07:00
Salman Manoe
3582e22fed Merge branch 'dev/master/data-fix' into prod/base 2025-02-13 13:45:44 +07:00
Salman Manoe
852325485b Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-13 13:45:22 +07:00
Salman Manoe
e2ac3cb803 Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-05 14:16:45 +07:00
Salman Manoe
1a21be43ab Merge branch 'dev/pegawai/dokter-mitra' into prod/base 2025-02-03 11:59:47 +07:00
Salman Manoe
9a6ff8d2b8 Merge remote-tracking branch 'origin/dev/pegawai/dokter-mitra' into prod/base 2025-02-03 09:50:32 +07:00
Salman Manoe
a4b51b2ecb Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-02-03 09:49:47 +07:00
Salman Manoe
543b41dffa Merge branch 'dev/pegawai/presensi' into prod/base 2025-02-03 09:49:37 +07:00
Salman Manoe
6dba53aee0 Merge branch 'dev/pegawai/cuti' into prod/base 2025-02-03 09:49:30 +07:00
Salman Manoe
a4aa2ad173 Merge branch 'dev/pegawai/peserta-didik' into prod/base 2025-02-03 09:49:18 +07:00
Salman Manoe
d83566d8d5 Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-01-17 17:12:53 +07:00
Salman Manoe
6cd22af4b6 Merge branch 'dev/pegawai/presensi' into prod/base 2025-01-03 14:13:12 +07:00
Salman Manoe
33bcd7b313 Merge branch 'dev/pegawai/presensi' into prod/base 2025-01-03 10:28:01 +07:00
Salman Manoe
3947da84fc Merge branch 'dev/remun/logbook-tarif' into prod/base 2025-01-02 11:12:21 +07:00
Salman Manoe
aa0f1ad5ae Merge branch 'dev/remun/logbook-tarif' into prod/base 2024-12-31 22:44:52 +07:00
Salman Manoe
b239c18f9e Merge branch 'dev/remun/logbook-tarif' into prod/base 2024-12-31 11:33:15 +07:00
Salman Manoe
07ced4ffc7 Merge branch 'dev/remun/logbook-tarif' into prod/base 2024-12-19 08:11:31 +07:00
Salman Manoe
7f6474fb8a Merge branch 'dev/verif-remun/log' into prod/base 2024-12-02 14:21:23 +07:00
Salman Manoe
280cf73993 Merge branch 'dev/remun/exclude-dokter-luar' into prod/base 2024-12-02 14:21:16 +07:00
Salman Manoe
f03a842dd2 Merge branch 'dev/pegawai/jadwal-kerja' into prod/base 2024-11-20 14:49:48 +07:00
Salman Manoe
482731fafa Merge branch 'dev/paket/validasi-voucher' into prod/base 2024-11-18 13:34:49 +07:00
Salman Manoe
eb71199dd7 Merge branch 'dev/pegawai/presensi/compreface' into prod/base 2024-11-11 18:42:04 +07:00
Salman Manoe
5969617896 Merge branch 'dev/remun/kinerja/hapus' into prod/base 2024-11-11 11:39:04 +07:00
Salman Manoe
cb6b91f1ed Merge branch 'dev/report/konsultasi-kosong' into prod/base 2024-11-01 10:52:06 +07:00
Salman Manoe
c3688c9422 Merge branch 'dev/pelayanan/operasi-elektif' into prod/base 2024-10-30 14:39:46 +07:00
Salman Manoe
2c22512271 Merge branch 'dev/remun/kontrak' into prod/base 2024-10-30 10:18:52 +07:00
Salman Manoe
06aaa550d2 Merge branch 'dev/logbook/terapis' into prod/base 2024-10-30 10:18:46 +07:00
Salman Manoe
ad368f7946 Merge branch 'dev/remun/logbook/rekap' into prod/base 2024-10-21 09:00:05 +07:00
Salman Manoe
8df79fac35 Merge branch 'dev/logbook/diskon' into prod/base 2024-10-07 14:43:12 +07:00
Salman Manoe
e2f9e92ecb Merge branch 'dev/integrasi/superapp' into prod/base 2024-09-02 10:27:15 +07:00
Salman Manoe
9d054afeb5 Merge branch 'dev/auth/ketua-komite' into prod/base 2024-08-23 14:44:06 +07:00
Salman Manoe
a4dde9dd13 Merge branch 'dev/auth/ketua-komite' into prod/base 2024-08-22 14:40:35 +07:00
Salman Manoe
f092607ec4 Merge branch 'dev/security/login' into prod/base 2024-08-22 10:56:01 +07:00
Salman Manoe
8c1f6a1825 Merge branch 'dev/etl/pasien' into prod/base 2024-08-20 10:09:17 +07:00
Salman Manoe
d24bbfb260 Merge branch 'dev/etl/pasien' into prod/base 2024-08-07 15:03:59 +07:00
Salman Manoe
79fe30ff4b Update web.xml
Perubahan parameter konfigurasi database
2024-08-07 10:33:23 +07:00
Salman Manoe
a4db6562b9 Merge branch 'dev/etl/pasien' into prod/base 2024-08-07 10:05:44 +07:00
Salman Manoe
7750dc974e Merge branch 'dev/remun/logbook' into prod/base 2024-08-05 10:44:16 +07:00
Salman Manoe
ac5e379b28 Merge branch 'dev/remun/logbook' into prod/base 2024-08-01 14:07:17 +07:00
Salman Manoe
dd485a8a5a Merge branch 'dev/remun/logbook-dokter' into prod/base 2024-07-16 08:21:18 +07:00
Salman Manoe
bdd2db96cc Merge branch 'dev/integrasi/superapp' into prod/base 2024-07-03 13:21:01 +07:00
Salman Manoe
bda8841f7f Merge branch 'dev/integrasi/superapp' into prod/base 2024-07-03 11:38:54 +07:00
Salman Manoe
d231af1cd1 Merge branch 'dev/remun/logbook-tarif' into prod/base 2024-06-27 12:23:14 +07:00
Salman Manoe
27abc1bc75 Merge branch 'dev/remun/logbook-tarif' into prod/base 2024-06-25 08:44:25 +07:00
Salman Manoe
d185736401 Merge branch 'dev/remun/android-logbook' into prod/base 2024-06-07 13:58:12 +07:00
Salman Manoe
172c1a0539 Merge branch 'dev/remun/logbook-dg-jam-kerja' into prod/base 2024-05-31 16:11:46 +07:00
Salman Manoe
82e77209e6 Merge branch 'dev/remun/rekap-logbook' into prod/base 2024-05-31 08:57:35 +07:00
Salman Manoe
ec685312cf Merge branch 'dev/remun/logbook-nonjkn-dg-jam' into prod/base 2024-05-28 09:05:29 +07:00
Salman Manoe
96abf3cdab Merge branch 'dev/remun/logbook-nonjkn-dg-jam' into prod/base 2024-05-27 13:46:37 +07:00
Salman Manoe
4178405fd4 Merge branch 'dev/kepegawaian/cetak-cuti' into prod/base 2024-05-14 13:24:38 +07:00
Salman Manoe
aace5f33b0 Merge branch 'dev/remun/amarilys' into prod/base 2024-05-13 14:32:17 +07:00
Salman Manoe
fc2d017850 Merge branch 'dev/remun/detail-logbook' into prod/base 2024-04-24 12:54:36 +07:00
Salman Manoe
321e87b6f9 Merge branch 'dev/remun/konkin-magang' into prod/base 2024-04-23 16:34:12 +07:00
Salman Manoe
d4f3cc414d Merge branch 'dev/remun/paket/nonjkn' into prod/base 2024-04-23 10:37:55 +07:00
10 changed files with 660 additions and 71 deletions

View File

@ -15,7 +15,7 @@
</context-param>
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>localhost</param-value>
<param-value>bridging</param-value>
</context-param>
<listener>

View File

@ -70,6 +70,8 @@ public final class Master {
public static final Integer PELAYANAN_MEDIS_JAM_KERJA = 466;
public static final Integer PELAYANAN_NAKES = 678;
public static final Integer PELAYANAN_PERAWAT = 712;
public static final double BOBOT_HARI_KERJA = 5;
public static final double BOBOT_JAM_KERJA = 5;
}
public static final class IndikatorKinerjaDetail {
@ -355,7 +357,8 @@ public final class Master {
public static final class Ruangan {
public static final Integer CATHLAB = 703;
public static final Integer[] GENETIKA = { 277, 563, 587 };
public static final Integer[] ICU_NICU = { 328, 75, 707, 708 };
public static final Integer[] ICU_NICU_V1 = { 328, 75, 707, 708 }; // Perubahan Regulasi Pada 02/12/2025, berlaku untuk data sebelum 1 november 2025
public static final Integer[] ICU_NICU_v2 = { 328,75,463,76,45,464,44,707,708 }; // Perubahan Regulasi Pada 02/12/2025, berlaku untuk data setelah atau sama dengan 1 november 2025
public static final int KLINIK_FALSE_EMERGENCY = 309;
public static final Integer KLINIK_GIGI_KARYAWAN = 702;
public static final Integer KLINIK_KARYAWAN = 70;
@ -458,6 +461,10 @@ public final class Master {
public static final Integer KSM_OBGYN = 59;
}
public static final class AppDefaultVariabel {
public static final Integer RECURSIVE_BATCH = 8000;
}
public static final class User {
public static final Integer MOBILE_JKN = 3;
}

View File

@ -13,13 +13,55 @@ import java.util.Map;
@Repository("MonitoringAbsenDao")
public interface MonitoringAbsenDao extends PagingAndSortingRepository<MonitoringAbsen, String> {
@Query(value = "select distinct reportdisplay, namashift from shiftkerja_m where statusenabled is true", nativeQuery = true)
List<Object[]> getDataMasterShift();
@Query(value = "WITH jadwal_kerja AS ("
+ " select "
+ " pegawaijadwalkerja_m.id,"
+ " shiftkerja_m.reportdisplay,"
+ " pegawaijadwalkerja_m.objectpegawaifk,"
+ " shiftkerja_m.namashift,"
+ " kalender_s.tanggal,"
+ " shiftkerja_m.factorrate,"
+ " (shiftkerja_m.factorrate * 60) as menit_efektif"
+ " from "
+ " pegawaijadwalkerja_m inner join "
+ " kalender_s on pegawaijadwalkerja_m.objecttanggalfk = kalender_s.id inner join "
+ " shiftkerja_m on pegawaijadwalkerja_m.objectshiftfk = shiftkerja_m.id"
+ " where "
+ " pegawaijadwalkerja_m.statusenabled is not false"
+ " and kalender_s.tanggal between '2025-11-01' and '2025-11-30'"
+ " )"
+ " select "
+ " pegawai_m.id,"
+ " pegawai_m.namalengkap,"
+ " count(jadwal_kerja.id) FILTER (WHERE jadwal_kerja.reportdisplay not in ('L')) as jumlah_hari_kerja,"
+ " case when sum(jadwal_kerja.menit_efektif) is null then 0 else sum(jadwal_kerja.menit_efektif) end as menit_efektif,"
+ " mappegawaijabatantounitkerja_m.objectjabatanfk"
+ " from "
+ " pegawai_m inner join "
+ " kategorypegawai_m on pegawai_m.kategorypegawai = kategorypegawai_m.id left outer join"
+ " sdm_kedudukan_m on pegawai_m.kedudukanfk = sdm_kedudukan_m.id left outer join "
+ " mappegawaijabatantounitkerja_m on pegawai_m.id = mappegawaijabatantounitkerja_m.objectpegawaifk and mappegawaijabatantounitkerja_m.statusenabled is true and mappegawaijabatantounitkerja_m.isprimary is true left outer join "
+ " jadwal_kerja on jadwal_kerja.objectpegawaifk = pegawai_m.id"
+ " where "
+ " sdm_kedudukan_m.id = 1 and pegawai_m.id in (22924,22349,22953,1224,23220,23004) and "
+ " sdm_kedudukan_m.id = 1 and mappegawaijabatantounitkerja_m.objectjabatanfk is not null "
+ " group by "
+ " pegawai_m.id,"
+ " pegawai_m.namalengkap,"
+ " mappegawaijabatantounitkerja_m.objectjabatanfk"
+ " limit 100", nativeQuery = true)
List<Object[]> getTargetHariJamKerja();
@Query(" select monitoringAbsen.noRec" + " from MonitoringAbsen monitoringAbsen"
+ " left join monitoringAbsen.pegawai pegawai"
+ " where pegawai.id = :idPegawai and monitoringAbsen.tanggal = :date")
String findByIdPegawaiAndTanggal(@Param("idPegawai") Integer idPegawai, @Param("date") String date);
@Query(" select new map(pegawai.nipPns as nip, pegawai.namaLengkap as nama,shift.kodeExternal as kodeShift, shift.namaShift as namaShift,"
+ " shift.jamMasuk as jamMasuk, shift.jamPulang as jamPulang, shift.waktuIstirahat as waktuIstirahat, "
+ " shift.jamMasuk as jamMasuk, shift.jamPulang as jamPulang, shift.factorRate as factorRate, shift.waktuIstirahat as waktuIstirahat, "
+ " jabatanInternal.namaJabatan as jabatanInternal, ruangan.namaRuangan as namaRuangan, "
+ " tanggal.hariKeDlmBulan as hari, tanggal.namaBulan as bulan, tanggal.tahunKalender as tahun, tanggal.hariKeDlmBulan as tgl,"
+ " kelompokShiftKerja.id as idKelompokShiftKerja, unitKerja.name as unitKerja, "
@ -34,10 +76,9 @@ public interface MonitoringAbsenDao extends PagingAndSortingRepository<Monitorin
+ "and to_char(tanggal.tanggal,'yyyy-MM-dd') between :startDate and :endDate "
+ "and pegawai.idFinger = :idFinger " + "and pegawai.statusEnabled is not false "
+ "order by tanggal,pegawai.nama asc")
List<Map<String, Object>> findJadwalPegawai(@Param("idFinger") String idFinger,
@Param("startDate") String startDate, @Param("endDate") String endDate);
List<Map<String, Object>> findJadwalPegawai(@Param("idFinger") String idFinger,@Param("startDate") String startDate, @Param("endDate") String endDate);
@Query("select new map(shift.kodeExternal as kodeShift, " + "shift.namaShift as namaShift, "
@Query("select new map(shift.kodeExternal as kodeShift, " + "shift.namaShift as namaShift, shift.factorRate as factorRate, "
+ "shift.jamMasuk as jamMasuk, " + "shift.jamPulang as jamPulang, "
+ "shift.waktuIstirahat as waktuIstirahat, " + "kelompokShiftKerja.id as idKelompokShiftKerja, "
+ "tanggal.tanggal as tanggal, " + "shift.id as idShift, " + "jadwalpegawai.keteranganAlasan as ket) "

View File

@ -245,6 +245,7 @@ public interface PelayananPasienDao extends JpaRepository<PelayananPasien, Strin
String WHERE_LOGBOOK_DOKTER = "where pr.id not in (:listIdKarcis) "
+ "and ppd.pelayananPasienId = pp.noRec and (ppp.statusEnabled is true or ppp.statusEnabled is null) "
+ "and (pp.statusEnabled is true or pp.statusEnabled is null) and pp.strukResepId is null "
+ "and apd.ruanganId not in (777) "
+ "and (pd.statusEnabled is true or pd.statusEnabled is null) ";
String PARAMATER_LOGBOOK_DOKTER = "and ppp.ObjectPegawaiId = :pegawaiId "

View File

@ -110,4 +110,5 @@ public interface MonitoringAbsenService {
void updateLogbookKinerja(MonitoringAbsenVO vo) throws ParseException;
Map<String, Object> rekapitulasiCapaianHariDanJamKerjaPegawai(String tglAwal, String tglAkhir);
}

View File

@ -333,24 +333,25 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement
logbookKinerjaDetailDao.save(catatanKinerja);
}
{
Optional<LogbookKinerja> byIdLogbook = logbookKinerjaDao
.findByNoRec(catatanKinerja.getLogbookKinerjaId());
Optional<LogbookKinerja> byIdLogbook = logbookKinerjaDao.findByNoRec(catatanKinerja.getLogbookKinerjaId());
byIdLogbook.ifPresent(logbookKinerja -> {
if (Arrays.asList(PERCENTAGE)
.contains(logbookKinerja.getIndikatorKinerja().getSatuanIndikatorId())) {
List<Map<String, Object>> listCatatan = logbookKinerjaDetailDao
.findAvgCapaianByKontrak(logbookKinerja.getNoRec(), Arrays.asList(PERCENTAGE));
Optional<Map<String, Object>> catatan = listCatatan.stream()
.filter(c -> logbookKinerja.getNoRec().equals(c.get("logbookId"))).findFirst();
catatan.ifPresent(
c -> logbookKinerja.setCapaian(Double.parseDouble(c.get("avgCapaian").toString())));
if (Arrays.asList(PERCENTAGE).contains(logbookKinerja.getIndikatorKinerja().getSatuanIndikatorId())) {
List<Map<String, Object>> listCatatan = logbookKinerjaDetailDao.findAvgCapaianByKontrak(logbookKinerja.getNoRec(), Arrays.asList(PERCENTAGE));
Optional<Map<String, Object>> catatan = listCatatan.stream().filter(c -> logbookKinerja.getNoRec().equals(c.get("logbookId"))).findFirst();
if (catatan.isPresent()) {
logbookKinerja.setCapaian(Double.parseDouble(catatan.get().get("avgCapaian").toString()));
} else {
logbookKinerja.setCapaian(0.0);
}
} else {
List<Map<String, Object>> listCatatan = logbookKinerjaDetailDao
.findSumCapaianByKontrak(logbookKinerja.getNoRec(), Arrays.asList(PERCENTAGE));
Optional<Map<String, Object>> catatan = listCatatan.stream()
.filter(c -> logbookKinerja.getNoRec().equals(c.get("logbookId"))).findFirst();
catatan.ifPresent(
c -> logbookKinerja.setCapaian(Double.parseDouble(c.get("sumCapaian").toString())));
List<Map<String, Object>> listCatatan = logbookKinerjaDetailDao.findSumCapaianByKontrak(logbookKinerja.getNoRec(), Arrays.asList(PERCENTAGE));
Optional<Map<String, Object>> catatan = listCatatan.stream().filter(c -> logbookKinerja.getNoRec().equals(c.get("logbookId"))).findFirst();
if (catatan.isPresent()) {
logbookKinerja.setCapaian(Double.parseDouble(catatan.get().get("sumCapaian").toString()));
} else {
logbookKinerja.setCapaian(0.0);
}
}
logbookKinerjaDao.save(logbookKinerja);
});

View File

@ -13,6 +13,8 @@ import com.jasamedika.medifirst2000.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.annotation.Propagation;
import com.jasamedika.medifirst2000.util.DateUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
@ -25,12 +27,20 @@ import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.time.LocalDate;
import static com.jasamedika.medifirst2000.constants.Master.KelompokJabatan.PENUNJANG_MEDIK;
@Service("monitoringAbsenService")
public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements MonitoringAbsenService {
private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringAbsenServiceImpl.class);
@Autowired
private BaseConverterImpl<StrukHistoriVO, StrukHistori> strukHistoriConverter;
@ -151,6 +161,9 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
@Autowired
private LogbookKinerjaDao logbookKinerjaDao;
@Autowired
private LogbookKinerjaDetailDao logbookKinerjaDetailDao;
@Override
public Long reduceTime(Date jamAbsensi, Date jamJadwal) {
long diffMinutes = 0;
@ -198,6 +211,78 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
} else {
minutes = minutesAbsen;
}
if (CommonUtil.isNotNullOrEmpty(jadwalMasuk) && CommonUtil.isNotNullOrEmpty(jadwalPulang)) {
if ( (CommonUtil.isNullOrEmpty(jamAbsensiMasuk) && CommonUtil.isNotNullOrEmpty(jamAbsensiPulang)) || (CommonUtil.isNotNullOrEmpty(jamAbsensiMasuk) && CommonUtil.isNullOrEmpty(jamAbsensiPulang)) ) {
minutesJadwal = reduceTime(jadwalPulang, jadwalMasuk);
minutes = minutesJadwal / 2;
}
}
long menit = minutes % 60;// menit
Long jam = minutes / 60;// jam
jam_efektif = jam + ".";
String minute = Long.toString(menit);
if (minute.length() < 2) {
minute = "0" + minute;
}
jam_efektif += minute;
Map<String, Integer> countHari = countHariKerja(minutes, shift);
if (CommonUtil.isNotNullOrEmpty(countHari)) {
result.putAll(countHari);
}
result.put("jam_efektif", jam_efektif);
result.put("Minutes_Efektif", minutes);
return result;
}
public Map<String, Object> jamEfektifFactorRate(float factorRate, String shift) {
Map<String, Object> result = new HashMap<>();
Long minutes = (long) 0;
if (CommonUtil.isNotNullOrEmpty(factorRate)) {
minutes = (long) (factorRate * 60);
}
long menit = minutes % 60;// menit
Long jam = minutes / 60;// jam
String jam_efektif = jam + ".";
String minute = Long.toString(menit);
if (minute.length() < 2) {
minute = "0" + minute;
}
jam_efektif += minute;
Map<String, Integer> countHari = countHariKerja(minutes, shift);
if (CommonUtil.isNotNullOrEmpty(countHari)) {
result.putAll(countHari);
}
result.put("jam_efektif", jam_efektif);
result.put("Minutes_Efektif", minutes);
return result;
}
public Map<String, Object> jamEfektifTunggal(Date jadwalPulang, Date jadwalMasuk, long waktuIstirahat, String shift, float factorRate) {
Map<String, Object> result = new HashMap<>();
String jam_efektif;
long minutes;
Long minutesAbsen = (long) 0;
Long minutesJadwal = (long) 0;
if (CommonUtil.isNotNullOrEmpty(factorRate)) {
minutesJadwal = (long) (factorRate * 60);
}else{
if (CommonUtil.isNotNullOrEmpty(jadwalMasuk) && CommonUtil.isNotNullOrEmpty(jadwalPulang)) {
minutesJadwal = reduceTime(jadwalPulang, jadwalMasuk);
if (minutesJadwal > 30) {
minutesJadwal = minutesJadwal - waktuIstirahat; // 30_adalah_waktu_istirahat
}
}
}
minutes = minutesJadwal / 2;
long menit = minutes % 60;// menit
Long jam = minutes / 60;// jam
jam_efektif = jam + ".";
@ -1279,7 +1364,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
List<Map<String, Object>> rawDataJadwal = new ArrayList<>();
List<Map<String, Object>> rawDataPresensi = new ArrayList<>();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String prevTglAwal = df.format(addOrMinDays(startDate, -1));
String prevTglAkhir = df.format(addOrMinDays(endDate, 1));
if (CommonUtil.isNotNullOrEmpty(idUnitKerja) && CommonUtil.isNotNullOrEmpty(idSubunitKerja)
@ -1368,12 +1453,12 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
@Override
@Transactional(readOnly = true)
public Map<String, Object> jumlahKehadiran(Integer unitKerjaId, Integer subUnitKerjaId, Integer idPegawai,
String startDate, String endDate) {
public Map<String, Object> jumlahKehadiran(Integer unitKerjaId, Integer subUnitKerjaId, Integer idPegawai,
String startDate, String endDate) {
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> listRs = new ArrayList<>();
List<Integer> listIdPegawaiFilter = new ArrayList<>();
List<Integer> listIdPegawai = new ArrayList<>();
if (CommonUtil.isNotNullOrEmpty(idPegawai)) {
listIdPegawai.add(idPegawai);
@ -1427,11 +1512,21 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
List<String> vpnIPXList = stringSplitDataSettingDatafixed("vpnAksesLuar");
List<String> listIp = stringSplitDataSettingDatafixed("ip_addr");
Map<String, Object> pegawaiMonitoring = new HashMap<>();
String[] listKetidakhadiran = {"L","PDK","I","CM","SKT","TL","CAP","CT","CB","S-P2"};
if (CommonUtil.isNotNullOrEmpty(idFinger)) {
pegawaiMonitoring = pegawaiDao.getPegawaiToMonitoringAbsen(idFinger);
}
List<Map<String, Object>> listKomponenJadwal = monitoringAbsenDao.findKalender(startDate, endDate);
List<Object[]> ListMasterShift = monitoringAbsenDao.getDataMasterShift();
List<Map<String, Object>> resultListMasterShift = ListMasterShift.stream().map(r -> {
Map<String, Object> m = new HashMap<>();
m.put("kodeShift", r[0]); // reportdisplay kodeShift
m.put("namaShift", r[1]); // namashift namaShift
return m;
}).collect(Collectors.toList());
for (Map<String, Object> data : listKomponenJadwal) {
String alasanCuti = "";
// put everything data needs
@ -1489,6 +1584,13 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
e.printStackTrace();
}
}
float rawFactorRate = (float) 0.0;
if (CommonUtil.isNotNullOrEmpty(data.get("factorRate")) && CommonUtil.isNotNullOrEmpty(data.get("factorRate"))) {
rawFactorRate = (float) listJadwal.get("factorRate");
}
data.put("factorRate", rawFactorRate);
data.put("jadwalMasuk", jamMasuk);
data.put("jadwalPulang", jamPulang);
data.put("idFinger", idFinger);
@ -1556,8 +1658,8 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
e.printStackTrace();
}
if (CommonUtil.isNotNullOrEmpty(data.get("namaShift")) && ((data.get("namaShift").equals("Pagi Malam"))
|| (data.get("namaShift").equals("Non Shift MOD")))) {
if (CommonUtil.isNotNullOrEmpty(data.get("namaShift")) && ((data.get("namaShift").equals("Pagi Malam")) || (data.get("namaShift").equals("Non Shift MOD")))) {
//if (CommonUtil.isNotNullOrEmpty(data.get("namaShift")) && (data.get("namaShift").equals("Non Shift MOD"))) {
try {
List<Map<String, Object>> listAbsensiPagi = new ArrayList<>();
List<Map<String, Object>> listAbsensiPM = new ArrayList<>();
@ -1708,12 +1810,11 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
Map<String, Object> jamEfektif = null;
if (i == 1) {
jamEfektif = jamEfektif(absensiDate, absensiMasuk, jadwalPulang, jadwalMasuk,
(Integer) data.get("idKelompokShiftKerja"), waktuIstirahatPagi, "Pagi");
jamEfektif = jamEfektif(absensiDate, absensiMasuk, jadwalPulang, jadwalMasuk, (Integer) data.get("idKelompokShiftKerja"), waktuIstirahatPagi, "Pagi");
//jamEfektif = jamEfektifFactorRate((float) data.get("factorRate"), "Pagi");
} else if (i == 2) {
jamEfektif = jamEfektif(absensiDate, absensiMasuk, jadwalPulang, jadwalMasuk,
(Integer) data.get("idKelompokShiftKerja"), waktuIstirahatMalam,
"Malam");
jamEfektif = jamEfektif(absensiDate, absensiMasuk, jadwalPulang, jadwalMasuk, (Integer) data.get("idKelompokShiftKerja"), waktuIstirahatMalam, "Malam");
//jamEfektif = jamEfektifFactorRate((float) data.get("factorRate"), "Malam");
}
if (CommonUtil.isNotNullOrEmpty(jamEfektif)) {
@ -1759,16 +1860,63 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
hadir_tanpa_jadwal++;
}
}else{
if ((CommonUtil.isNullOrEmpty(dataPM.get("absensiPulang"))
&& CommonUtil.isNotNullOrEmpty(dataPM.get("absensiMasuk")))
&& (CommonUtil.isNotNullOrEmpty(jamMasuk)
&& CommonUtil.isNotNullOrEmpty(jamPulang))) {
absenTunggal++;
} else if ((CommonUtil.isNotNullOrEmpty(dataPM.get("absensiPulang"))
&& CommonUtil.isNullOrEmpty(dataPM.get("absensiMasuk")))
&& (CommonUtil.isNotNullOrEmpty(jamMasuk)
&& CommonUtil.isNotNullOrEmpty(jamPulang))) {
float factorRateX = (float) data.get("factorRate");
if ((CommonUtil.isNullOrEmpty(data.get("absensiPulang")) && CommonUtil.isNotNullOrEmpty(data.get("absensiMasuk"))) && !Arrays.asList(listKetidakhadiran).contains(data.get("kodeShift"))) {
//System.out.print(data.get("tanggal2"));
try {
DateFormat sdfX = new SimpleDateFormat("yyyy-MM-dd");
Date target = sdfX.parse( data.get("tanggal2").toString() );
Date now = new Date();
Date twoDaysAgo = new Date(now.getTime() - (2L * 24 * 60 * 60 * 1000));
if (target.before(twoDaysAgo) || target.equals(twoDaysAgo)) {
absenTunggal++;
Map<String, Object> jamEfektif = new HashMap<>();
jamEfektif = jamEfektifTunggal(jadwalPulang, jadwalMasuk, (long) data.get("waktuIstirahat"), (String) data.get("namaShift"), (float) factorRateX);
if (CommonUtil.isNotNullOrEmpty(jamEfektif)) {
jamEf = (String) jamEfektif.get("jam_efektif");
jumlahJamEfektif += (Long) jamEfektif.get("Minutes_Efektif");
if (((Integer) jamEfektif.get("hariKerja")) != 0) {
harikerja += (Integer) jamEfektif.get("hariKerja");
p1 += (Integer) jamEfektif.get("p1");
pagi += (Integer) jamEfektif.get("pagi");
sore += (Integer) jamEfektif.get("sore");
malam += (Integer) jamEfektif.get("malam");
data.putAll(jamEfektif);
}
}
jumlahTerlambat += (long) 0;
data.put("terlambat", "0");
data.put("telat", (long) 0);
}
} catch (ParseException e) {
e.printStackTrace();
}
} else if ((CommonUtil.isNotNullOrEmpty(data.get("absensiPulang")) && CommonUtil.isNullOrEmpty(data.get("absensiMasuk"))) && (CommonUtil.isNotNullOrEmpty(jamMasuk) && CommonUtil.isNotNullOrEmpty(jamPulang))) {
absenTunggal++;
} else if ( CommonUtil.isNotNullOrEmpty(data.get("factorRate")) && factorRateX > 0.0 && Arrays.asList(listKetidakhadiran).contains(data.get("kodeShift")) ) {
Map<String, Object> jamEfektif = new HashMap<>();
jamEfektif = jamEfektifFactorRate((float) data.get("factorRate"), "Pagi");
if (CommonUtil.isNotNullOrEmpty(jamEfektif)) {
jamEf = (String) jamEfektif.get("jam_efektif");
jumlahJamEfektif += (Long) jamEfektif.get("Minutes_Efektif");
}
if (((Integer) jamEfektif.get("hariKerja")) != 0) {
harikerja += (Integer) jamEfektif.get("hariKerja");
p1 += (Integer) jamEfektif.get("p1");
pagi += (Integer) jamEfektif.get("pagi");
sore += (Integer) jamEfektif.get("sore");
malam += (Integer) jamEfektif.get("malam");
data.putAll(jamEfektif);
}
}
}
@ -1874,12 +2022,17 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
dataPM.put("verifikasi", "X");
}
}
dataPM.put("jamEfektif", jamEf);
dataPM.put("jamEfektif", jamEf); //xxx
dataPM.put("jam_efektif", jamEf); //xxx
dataPM.put("kelebihanJamKerja", kelebihanJamKerja);
dataPM.put("jumlahTerlambat", jumlahTerlambat.toString());
dataPM.put("jumlahJamEfektif", jumlahJamEfektif.toString());
dataPM.put("jumlahPulangAwal", jumlahPulangAwal.toString());
dataPM.put("alasan", alasanCuti);
rsMap.put("jumlahCountKelebihanJamKerja", jumlahCountKelebihanJamKerja);
rsMap.put("jumlahKelebihanJamKerja", jumlahKelebihanJamKerja / 60);
rsMap.put("jumlahKelebihanMenitKerja", jumlahKelebihanJamKerja);
dataPM.put("jumlahTerlambat", jumlahTerlambat.toString()); //xxx
dataPM.put("jumlahJamEfektif", jumlahJamEfektif.toString()); //xxx
dataPM.put("jumlahPulangAwal", jumlahPulangAwal.toString()); //xxx
dataPM.put("alasan", alasanCuti); //xxx
listkehadiran.add(dataPM);
}
rsMap.put("jumlahKelebihanJamKerja", jumlahKelebihanJamKerja / 60);
@ -1963,11 +2116,11 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
if (kelebihanJamKerja != 0L) {
jumlahCountKelebihanJamKerja += 1;
}
Map<String, Object> jamEfektif = new HashMap<>();
if (CommonUtil.isNotNullOrEmpty(data.get("namaShift"))) {
jamEfektif = jamEfektif(absensiDate, absensiMasuk, jadwalPulang, jadwalMasuk,
(Integer) data.get("idKelompokShiftKerja"), (long) data.get("waktuIstirahat"),
(String) data.get("namaShift"));
//jamEfektif = jamEfektif(absensiDate, absensiMasuk, jadwalPulang, jadwalMasuk, (Integer) data.get("idKelompokShiftKerja"), (long) data.get("waktuIstirahat"), (String) data.get("namaShift"));
jamEfektif = jamEfektifFactorRate((float) data.get("factorRate"), (String) data.get("namaShift"));
}
if (CommonUtil.isNotNullOrEmpty(jamEfektif)) {
@ -1996,7 +2149,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
if (CommonUtil.isNotNullOrEmpty(listTrNo)) {
data.put("listTrNo", listTrNo);
}
if (CommonUtil.isNullOrEmpty(data.get("kodeShift"))){
if ((CommonUtil.isNullOrEmpty(data.get("absensiPulang"))
&& CommonUtil.isNotNullOrEmpty(data.get("absensiMasuk")))
@ -2010,14 +2163,79 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
hadir_tanpa_jadwal++;
}
}else{
if ((CommonUtil.isNullOrEmpty(data.get("absensiPulang"))
&& CommonUtil.isNotNullOrEmpty(data.get("absensiMasuk")))
&& (CommonUtil.isNotNullOrEmpty(jamMasuk) && CommonUtil.isNotNullOrEmpty(jamPulang))) {
absenTunggal++;
} else if ((CommonUtil.isNotNullOrEmpty(data.get("absensiPulang"))
&& CommonUtil.isNullOrEmpty(data.get("absensiMasuk")))
&& (CommonUtil.isNotNullOrEmpty(jamMasuk) && CommonUtil.isNotNullOrEmpty(jamPulang))) {
float factorRateX = (float) data.get("factorRate");
if ((CommonUtil.isNullOrEmpty(data.get("absensiPulang")) && CommonUtil.isNotNullOrEmpty(data.get("absensiMasuk"))) && !Arrays.asList(listKetidakhadiran).contains(data.get("kodeShift"))) {
//System.out.print(data.get("tanggal2"));
try {
DateFormat sdfX = new SimpleDateFormat("yyyy-MM-dd");
Date target = sdfX.parse( data.get("tanggal2").toString() );
Date now = new Date();
Date twoDaysAgo = new Date(now.getTime() - (2L * 24 * 60 * 60 * 1000));
if (target.before(twoDaysAgo) || target.equals(twoDaysAgo)) {
absenTunggal++;
Map<String, Object> jamEfektif = new HashMap<>();
jamEfektif = jamEfektifTunggal(jadwalPulang, jadwalMasuk, (long) data.get("waktuIstirahat"), (String) data.get("namaShift"), (float) factorRateX);
if (CommonUtil.isNotNullOrEmpty(jamEfektif)) {
jamEf = (String) jamEfektif.get("jam_efektif");
jumlahJamEfektif += (Long) jamEfektif.get("Minutes_Efektif");
if (count == 1) {
if ( CommonUtil.isNotNullOrEmpty(data.get("terlambat"))) {
jumlahTerlambat -= (long) data.get("terlambat");
jumlahCountTerlambat -= 1;
data.put("terlambat", "0");
data.put("telat", (long) 0);
}
}else{
jumlahTerlambat += (long) 0;
data.put("terlambat", "0");
data.put("telat", (long) 0);
}
if (((Integer) jamEfektif.get("hariKerja")) != 0) {
harikerja += (Integer) jamEfektif.get("hariKerja");
p1 += (Integer) jamEfektif.get("p1");
pagi += (Integer) jamEfektif.get("pagi");
sore += (Integer) jamEfektif.get("sore");
malam += (Integer) jamEfektif.get("malam");
data.putAll(jamEfektif);
}
}else{
jumlahTerlambat += (long) 0;
data.put("terlambat", "0");
data.put("telat", (long) 0);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
} else if ((CommonUtil.isNotNullOrEmpty(data.get("absensiPulang")) && CommonUtil.isNullOrEmpty(data.get("absensiMasuk"))) && (CommonUtil.isNotNullOrEmpty(jamMasuk) && CommonUtil.isNotNullOrEmpty(jamPulang))) {
absenTunggal++;
System.out.print("terlambat 2");
} else if ( CommonUtil.isNotNullOrEmpty(data.get("factorRate")) && factorRateX > 0.0 && Arrays.asList(listKetidakhadiran).contains(data.get("kodeShift")) ) {
//System.out.print("Ini Gua Cuti 123");
Map<String, Object> jamEfektif = new HashMap<>();
jamEfektif = jamEfektifFactorRate((float) data.get("factorRate"), "Pagi");
if (CommonUtil.isNotNullOrEmpty(jamEfektif)) {
jamEf = (String) jamEfektif.get("jam_efektif");
jumlahJamEfektif += (Long) jamEfektif.get("Minutes_Efektif");
}
if (((Integer) jamEfektif.get("hariKerja")) != 0) {
harikerja += (Integer) jamEfektif.get("hariKerja");
p1 += (Integer) jamEfektif.get("p1");
pagi += (Integer) jamEfektif.get("pagi");
sore += (Integer) jamEfektif.get("sore");
malam += (Integer) jamEfektif.get("malam");
data.putAll(jamEfektif);
}
}
}
@ -2122,6 +2340,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
}
}
data.put("jamEfektif", jamEf);
data.put("jam_efektif", jamEf);
data.put("kelebihanJamKerja", kelebihanJamKerja);
rsMap.put("jumlahCountKelebihanJamKerja", jumlahCountKelebihanJamKerja);
rsMap.put("jumlahKelebihanJamKerja", jumlahKelebihanJamKerja / 60);
@ -2167,7 +2386,21 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
listInformasiAbsensiLainnya.put("absen_tunggal_tanpa_jadwal", absenTunggalNonJadwal);
if (CommonUtil.isNotNullOrEmpty(listkehadiran) && CommonUtil.isNotNullOrEmpty(groupKodeShift)) {
dataShift.put(groupKodeShift, listkehadiran.stream().filter(p -> p.containsKey("kodeShift") && groupKodeShift.equals(p.get("kodeShift"))).count());
if (Arrays.asList(listKetidakhadiran).contains(groupKodeShift)) {
long jumlah = listkehadiran.stream().filter(
p -> p.containsKey("kodeShift") &&
groupKodeShift.equals(p.get("kodeShift"))
).count();
dataShift.put(groupKodeShift, jumlah);
}else{
long jumlah = listkehadiran.stream().filter(
p -> p.containsKey("kodeShift") &&
groupKodeShift.equals(p.get("kodeShift")) &&
!p.get("absensiMasuk").equals("-") &&
!p.get("absensiPulang").equals("-")
).count();
dataShift.put(groupKodeShift, jumlah);
}
}
}
listShiftArray.add(dataShift);
@ -2186,6 +2419,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
rsMap.put("jumlahCountTerlambat", jumlahCountTerlambat);
rsMap.put("jumlahTerlambat", jumlahTerlambat / 60);
rsMap.put("menitTerlambat", jumlahTerlambat);
rsMap.put("jumlahMenitEfektif", jumlahJamEfektif);
rsMap.put("jumlahJamEfektif", jumlahJamEfektif / 60);
rsMap.put("jumlahPulangAwal", jumlahPulangAwal / 60);
rsMap.put("menitPulangAwal", jumlahPulangAwal);
@ -2196,6 +2430,7 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
rsMap.put("hariKerja", hariKerja);
rsMap.put("listkehadiran", listkehadiran);
rsMap.put("totalQtyShift", newResultDataShift);
rsMap.put("masterShift", resultListMasterShift);
listRs.addAll(listkehadiran);
result.putAll(rsMap);
@ -2979,7 +3214,175 @@ public class MonitoringAbsenServiceImpl extends BaseVoServiceImpl implements Mon
result.put("listRekapKehadiran", listRekap);
return result;
}
@Override
@Transactional
public Map<String, Object> rekapitulasiCapaianHariDanJamKerjaPegawai(String tglAwal, String tglAkhir) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
LocalDate localDate = LocalDate.now().minusMonths(1);
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date tglAwalDefault = DateUtil.startMonth(date);
Date tglAkhirDefault = DateUtil.endMonth(date);
String tglAwalString = df.format(tglAwalDefault);
String tglAkhirString = df.format(tglAkhirDefault);
List<Object[]> listTargetHariJamKerja = monitoringAbsenDao.getTargetHariJamKerja();
List<Map<String, Object>> resultListTargetHariJamKerja = listTargetHariJamKerja.stream().map(r -> {
Map<String, Object> m = new HashMap<>();
m.put("pegawaiId", r[0]);
m.put("namaLengkap", r[1]);
m.put("jumlahTargetHari", r[2]);
m.put("jumlahTargetMenit", r[3]);
m.put("objectjabatanfk", r[4]);
return m;
}).collect(Collectors.toList());
ExecutorService executorService = Executors.newFixedThreadPool(2);
CountDownLatch latch = new CountDownLatch(resultListTargetHariJamKerja.size());
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> listRekap = Collections.synchronizedList(new ArrayList<>());
try {
for (Map<String, Object> data : resultListTargetHariJamKerja) {
executorService.execute(() -> {
LOGGER.info("Simpan rekap absensi {}", data.get("namaLengkap"));
Map<String, Object> kehadiranByPegawai = this.simpanLogbookKinerja(data, tglAwalString, tglAkhirString);
listRekap.add(kehadiranByPegawai);
latch.countDown();
});
}
latch.await();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
executorService.shutdown();
}
result.put("listRekapKehadiran", listRekap);
return result;
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Map<String, Object> simpanLogbookKinerja(Map<String, Object> data, String tglAwalString, String tglAkhirString) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Short kdprofile = 0;
boolean statusenabled = true;
boolean statusverifikasi = true;
Integer pegawaiId = (Integer) data.get("pegawaiId");
Pegawai pegawaiObject = new Pegawai();
pegawaiObject.setId(pegawaiId);
Integer jabatanId = (Integer) data.get("objectjabatanfk");
Jabatan jabatanObject = new Jabatan();
jabatanObject.setId(jabatanId);
String namaLengkap = (String) data.get("namaLengkap");
Date bulan = null;
Double capaianLogbookKinerja = null;
Double bobot = null;
Integer indikatorLogbookKinerja = null;
Double targetLogbookKinerja = null;
String catatan = "-";
String namakegiatan = null;
try {
bulan = df.parse(tglAwalString);
} catch (ParseException e) {
e.printStackTrace();
}
Map<String, Object> kehadiranByPegawai = this.jumlahKehadiran(null, null, pegawaiId, tglAwalString, tglAkhirString);
capaianLogbookKinerja = ((Number) kehadiranByPegawai.get("hariKerja")).doubleValue(); // Untuk Capaian Row Insert Hari Kerja
bobot = (double) Master.IndikatorKinerja.BOBOT_HARI_KERJA;
indikatorLogbookKinerja = Master.IndikatorKinerja.PEMENUHAN_HARI_KERJA;
IndikatorKinerja indikatorLogbookKinerjaObject = new IndikatorKinerja();
indikatorLogbookKinerjaObject.setId(indikatorLogbookKinerja);
targetLogbookKinerja = ((Number) data.get("jumlahTargetHari")).doubleValue();
// ===============================
// 1. INSERT LOGBOOK HARI KERJA
// ===============================
LogbookKinerja logbookHariKerja = new LogbookKinerja();
logbookHariKerja.setBulan(bulan);
logbookHariKerja.setKdProfile(kdprofile);
logbookHariKerja.setStatusEnabled(statusenabled);
logbookHariKerja.setTarget(targetLogbookKinerja);
logbookHariKerja.setBobot(bobot);
logbookHariKerja.setCapaian(capaianLogbookKinerja);
logbookHariKerja.setStatusVerifikasi(statusverifikasi);
logbookHariKerja.setPegawai(pegawaiObject);
logbookHariKerja.setJabatan(jabatanObject);
logbookHariKerja.setIndikatorKinerja(indikatorLogbookKinerjaObject);
logbookHariKerja = logbookKinerjaDao.save(logbookHariKerja);
namakegiatan = "Hari Kerja Periode "+ tglAwalString +" s/d "+tglAkhirString;
LogbookKinerjaDetail detailHariKerja = new LogbookKinerjaDetail();
detailHariKerja.setKdProfile(kdprofile);
detailHariKerja.setStatusEnabled(statusenabled);
detailHariKerja.setNamaKegiatan(namakegiatan);
detailHariKerja.setCapaian(capaianLogbookKinerja);
detailHariKerja.setCatatan(catatan);
detailHariKerja.setTanggalKegiatan(bulan);
detailHariKerja.setStatusVerifikasi(statusverifikasi);
detailHariKerja.setLogbookKinerja(logbookHariKerja);
logbookKinerjaDetailDao.save(detailHariKerja);
// ===============================
// 1. INSERT LOGBOOK JAM KERJA
// ===============================
capaianLogbookKinerja = ((Number) kehadiranByPegawai.get("jumlahMenitEfektif")).doubleValue(); // Untuk Capaian Row Insert Jam Kerja
bobot = (double) Master.IndikatorKinerja.BOBOT_JAM_KERJA;
indikatorLogbookKinerja = Master.IndikatorKinerja.PEMENUHAN_JAM_KERJA;
IndikatorKinerja indikatorLogbookKinerjaJamObject = new IndikatorKinerja();
indikatorLogbookKinerjaJamObject.setId(indikatorLogbookKinerja);
targetLogbookKinerja = ((Number) data.get("jumlahTargetMenit")).doubleValue();
LogbookKinerja logbookJamKerja = new LogbookKinerja();
logbookJamKerja.setBulan(bulan);
logbookJamKerja.setKdProfile(kdprofile);
logbookJamKerja.setStatusEnabled(statusenabled);
logbookJamKerja.setTarget(targetLogbookKinerja);
logbookJamKerja.setBobot(bobot);
logbookJamKerja.setCapaian(capaianLogbookKinerja);
logbookJamKerja.setStatusVerifikasi(statusverifikasi);
logbookJamKerja.setPegawai(pegawaiObject);
logbookJamKerja.setJabatan(jabatanObject);
logbookJamKerja.setIndikatorKinerja(indikatorLogbookKinerjaJamObject);
logbookJamKerja = logbookKinerjaDao.save(logbookJamKerja);
namakegiatan = "Hari Kerja Periode "+ tglAwalString +" s/d "+tglAkhirString;
LogbookKinerjaDetail detailJamKerja = new LogbookKinerjaDetail();
detailJamKerja.setKdProfile(kdprofile);
detailJamKerja.setStatusEnabled(statusenabled);
detailJamKerja.setNamaKegiatan(namakegiatan);
detailJamKerja.setCapaian(capaianLogbookKinerja);
detailJamKerja.setCatatan(catatan);
detailJamKerja.setTanggalKegiatan(bulan);
detailJamKerja.setStatusVerifikasi(statusverifikasi);
detailJamKerja.setLogbookKinerja(logbookJamKerja);
logbookKinerjaDetailDao.save(detailJamKerja);
Map<String, Object> mapFilter = new HashMap<>();
mapFilter.put("idPegawai", kehadiranByPegawai.get("idPegawai"));
mapFilter.put("namaLengkap", namaLengkap);
mapFilter.put("hariKerja", kehadiranByPegawai.get("hariKerja"));
mapFilter.put("jumlahMenitEfektif", kehadiranByPegawai.get("jumlahMenitEfektif"));
mapFilter.put("menitTerlambat", kehadiranByPegawai.get("menitTerlambat"));
mapFilter.put("jumlahKelebihanMenitKerja", kehadiranByPegawai.get("jumlahKelebihanMenitKerja"));
mapFilter.put("jumlahTargetHariKerja", data.get("jumlahTargetHari"));
mapFilter.put("jumlahTargetMenitKerja", data.get("jumlahTargetMenit"));
return mapFilter;
}
@Override
@Transactional
public Map<String, Object> rekapitulasiKehadiranByUnitKerja(Integer idUnitKerja, String startDate, String endDate) {

View File

@ -693,6 +693,13 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
double persenRemunDokterUmumHD = toDoubleSettingFix("persenRemunDokterUmumHD", tglAkhir);
double persenRemunLabGenetika = toDoubleSettingFix("persenRemunLabGenetika", tglAkhir);
double persenRemunTerapis = toDoubleSettingFix("persenRemunTerapis", tglAkhir);
Integer[] ICU_NICU;
if((date.before(new Date(1761929999000L)) || date.equals(new Date(1761929999000L)))){
ICU_NICU = ICU_NICU_V1;
}else{
ICU_NICU = ICU_NICU_v2;
}
/*
* Persiapan filter logic remunerasi
*/
@ -2218,6 +2225,14 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
double persenRemunDokterUmumHD = toDoubleSettingFix("persenRemunDokterUmumHD", tglAkhir);
double persenRemunLabGenetika = toDoubleSettingFix("persenRemunLabGenetika", tglAkhir);
double persenRemunTerapis = toDoubleSettingFix("persenRemunTerapis", tglAkhir);
Integer[] ICU_NICU;
if((date.before(new Date(1761929999000L)) || date.equals(new Date(1761929999000L)))){
ICU_NICU = ICU_NICU_V1;
}else{
ICU_NICU = ICU_NICU_v2;
}
/*
* Persiapan filter logic remunerasi
*/

View File

@ -281,6 +281,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
} catch (ParseException e) {
return null;
}
/*
* Mendapatkan kelompok kerja dokter
*/
@ -296,6 +297,14 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
/*
* Mendapatkan nominal target remunerasi untuk simulasi
*/
Integer[] ICU_NICU;
if((date.before(new Date(1761929999000L)) || date.equals(new Date(1761929999000L)))){
ICU_NICU = ICU_NICU_V1;
}else{
ICU_NICU = ICU_NICU_v2;
}
Double targetRemun = 0.0;
String sdTarget = getSettingDataFixed("targetRemunJasaDokter");
if (CommonUtil.isNotNullOrEmpty(sdTarget))
@ -571,8 +580,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
d.put("hargaJasa", hargaJasa.getNilai());
if (!DOKTER_PEMERIKSA.equals(d.get("idJenisPelaksana")))
d.put("isTermasukProporsi", false);
} else if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan"))
&& Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString()))) {
} else if (CommonUtil.isNotNullOrEmpty(d.get("idRuangan")) && Arrays.asList(ICU_NICU).contains(Integer.parseInt(d.get("idRuangan").toString()))) {
double persenJasa = persenTindakan / 100;
RemunHargaJasaDto hargaJasa = hargaJasa(persenJasa * persenTarifICU, hargaJual, d);
d.put("hargaJasa", hargaJasa.getNilai());
@ -1869,8 +1877,17 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
.map(d -> d.get("paketId").toString() + d.get("idKelas").toString()).collect(Collectors.toList()));
allConcatProdukKelas.addAll(listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idProduk")))
.map(d -> d.get("idProduk").toString() + d.get("idKelas").toString()).collect(Collectors.toList()));
List<HargaNettoProdukByKelasD> tarifDetailReguler = hargaNettoProdukByKelasDDao
.findByConcateProdukKelas(allConcatProdukKelas);
//List<HargaNettoProdukByKelasD> tarifDetailReguler = hargaNettoProdukByKelasDDao.findByConcateProdukKelas(allConcatProdukKelas); // Ganti Versi batching
final int BATCH_SIZE = Master.AppDefaultVariabel.RECURSIVE_BATCH; // Limitasi Jumlah Data Per Batch
int total = allConcatProdukKelas.size();
List<HargaNettoProdukByKelasD> tarifDetailReguler = new ArrayList<>();
for (int i = 0; i < total; i += BATCH_SIZE) {
int end = Math.min(i + BATCH_SIZE, total);
List<String> batchKeys = allConcatProdukKelas.subList(i, end);
List<HargaNettoProdukByKelasD> batchResult = hargaNettoProdukByKelasDDao.findByConcateProdukKelas(batchKeys);
tarifDetailReguler.addAll(batchResult);
}
List<String> allConcatProdukNonkelas = listData.stream()
.filter(d -> CommonUtil.isNotNullOrEmpty(d.get("regRefId")))
.map(d -> d.get("regRefId").toString() + NON_KELAS).collect(Collectors.toList());
@ -1878,8 +1895,17 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
.map(d -> d.get("paketId").toString() + NON_KELAS).collect(Collectors.toList()));
allConcatProdukNonkelas.addAll(listData.stream().filter(d -> CommonUtil.isNotNullOrEmpty(d.get("idProduk")))
.map(d -> d.get("idProduk").toString() + NON_KELAS).collect(Collectors.toList()));
List<HargaNettoProdukByKelasD> tarifDetailNonKelas = hargaNettoProdukByKelasDDao
.findByConcateProdukKelas(allConcatProdukNonkelas);
//List<HargaNettoProdukByKelasD> tarifDetailNonKelas = hargaNettoProdukByKelasDDao.findByConcateProdukKelas(allConcatProdukNonkelas); // Ganti Versi batching
final int BATCH_SIZE_NB = Master.AppDefaultVariabel.RECURSIVE_BATCH;
int totalNB = allConcatProdukNonkelas.size();
List<HargaNettoProdukByKelasD> tarifDetailNonKelas = new ArrayList<>();
for (int i = 0; i < totalNB; i += BATCH_SIZE_NB) {
int end = Math.min(i + BATCH_SIZE_NB, totalNB);
List<String> batchKeys = allConcatProdukNonkelas.subList(i, end);
List<HargaNettoProdukByKelasD> batchResult = hargaNettoProdukByKelasDDao.findByConcateProdukKelas(batchKeys);
tarifDetailNonKelas.addAll(batchResult);
}
Set<Map<String, Object>> ibuPaketDiRanapByDokter = pelayananPasienDao.findPasienPaketDiRanapByDokter(drKsmObgyn,
allProdukEntriId, Arrays.asList(GRUP_RAWAT_INAP));
Set<Integer> setIdIbu = ibuPaketDiRanapByDokter.stream()
@ -2240,6 +2266,9 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
} else {
remunFfs = this.splitRemunFfs(idPegawai, bulan);
}
// cek disini
@SuppressWarnings("unchecked")
List<Map<String, Object>> listData = (List<Map<String, Object>>) remunFfs.get("remun");
Double target = Double.parseDouble(remunFfs.get("targetRemun").toString());
@ -2267,6 +2296,14 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
double persenRemunVisiteDokterKelompokBudiRahmat = toDoubleSettingFix(
"persenRemunVisiteDokterKelompokBudiRahmat", tglAkhir);
long millisPersenJasa2024 = Long.parseLong(getSettingDataFixed("tmtPersenJasa2024"));
Integer[] ICU_NICU;
if((date.before(new Date(1761929999000L)) || date.equals(new Date(1761929999000L)))){
ICU_NICU = ICU_NICU_V1;
}else{
ICU_NICU = ICU_NICU_v2;
}
/*
* TMT persentase jasa tahun 2024
*/
@ -2337,7 +2374,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
double persenJasa = persenOperatorAkumulatif / 100;
RemunHargaJasaDto hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
d.put("persenJasa", persenOperatorAkumulatif + "%");
d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
d.put("keterangan", "Tarif Jasa (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
d.put("hargaJasa", hargaJasa.getNilai());
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
@ -2347,7 +2384,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
double persenJasa = persenAsisten / 100;
RemunHargaJasaDto hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
d.put("persenJasa", persenAsisten + "%");
d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
d.put("keterangan", "Tarif Jasa (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
d.put("hargaJasa", hargaJasa.getNilai());
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
@ -2357,7 +2394,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
double persenJasa = persenAnestesi / 100;
RemunHargaJasaDto hargaJasa = hargaJasa(persenJasa * persenTarifIBS, hargaJual, d);
d.put("persenJasa", persenAnestesi + "%");
d.put("keterangan", "Tarif Jasa Bedah (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
d.put("keterangan", "Tarif Jasa (" + persenTarifJasaBedah + "%)" + hargaJasa.getKeterangan());
d.put("hargaJasa", hargaJasa.getNilai());
} else if ((BEDAH_SENTRAL.equals(d.get("idDepartemen"))
|| (RADIOLOGI.equals(d.get("idDepartemen")) && CATHLAB.equals(d.get("idRuangan"))))
@ -2464,7 +2501,7 @@ public class RemunerasiServiceImpl extends BaseVoServiceImpl implements Remunera
double persenJasa = persenTindakan / 100;
RemunHargaJasaDto hargaJasa = hargaJasa(persenJasa * persenTarifICU, hargaJual, d);
d.put("persenJasa", persenTindakan + "%");
d.put("keterangan", "Tarif Jasa ICU (" + persenTarifJasaICU + "%)" + hargaJasa.getKeterangan());
d.put("keterangan", "Tarif Jasa (" + persenTarifJasaICU + "%)" + hargaJasa.getKeterangan());
d.put("hargaJasa", hargaJasa.getNilai());
} else {
RemunHargaJasaDto hargaJasa = hargaJasa(persenTindakan / 100, hargaJual, d);

View File

@ -30,6 +30,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
@ -2627,7 +2629,18 @@ public class SdmController extends LocaleController<AkunVO> {
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK);
} catch (Exception e) {
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR);
Map<String, Object> error = new HashMap<>();
error.put("message", e.getMessage());
if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
error.put("line", e.getStackTrace()[0].getLineNumber());
error.put("class", e.getStackTrace()[0].getClassName());
error.put("method", e.getStackTrace()[0].getMethodName());
}
return RestUtil.getJsonResponse(error, HttpStatus.INTERNAL_SERVER_ERROR);
//return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@ -2642,7 +2655,16 @@ public class SdmController extends LocaleController<AkunVO> {
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK);
} catch (Exception e) {
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR);
Map<String, Object> error = new HashMap<>();
error.put("message", e.getMessage());
if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
error.put("line", e.getStackTrace()[0].getLineNumber());
error.put("class", e.getStackTrace()[0].getClassName());
error.put("method", e.getStackTrace()[0].getMethodName());
}
return RestUtil.getJsonResponse(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@ -3823,6 +3845,53 @@ public class SdmController extends LocaleController<AkunVO> {
}
}
// Create Fitur Auto Generate Capaian Kehadian
@RequestMapping(value = "/new-rekap-kehadiran", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> generateCapaianHariDanJamKerjaPegawai(
HttpServletRequest request) {
try {
Map<String, Object> result = monitoringAbsenService.rekapitulasiCapaianHariDanJamKerjaPegawai(null, null);
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK);
} catch (Exception e) {
Map<String, Object> error = new HashMap<>();
error.put("message", e.getMessage());
if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
error.put("line", e.getStackTrace()[0].getLineNumber());
error.put("class", e.getStackTrace()[0].getClassName());
error.put("method", e.getStackTrace()[0].getMethodName());
}
return RestUtil.getJsonResponse(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@RequestMapping(value = "/new-rekap-kehadiran/{startDate}/{endDate}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> generateCapaianHariDanJamKerjaPegawaiByDate(@PathVariable("startDate") String startDate, @PathVariable("endDate") String endDate, HttpServletRequest request) {
try {
Map<String, Object> result = monitoringAbsenService.rekapitulasiCapaianHariDanJamKerjaPegawai(startDate, endDate);
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK);
} catch (Exception e) {
Map<String, Object> error = new HashMap<>();
error.put("message", e.getMessage());
if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
error.put("line", e.getStackTrace()[0].getLineNumber());
error.put("class", e.getStackTrace()[0].getClassName());
error.put("method", e.getStackTrace()[0].getMethodName());
}
return RestUtil.getJsonResponse(error, HttpStatus.INTERNAL_SERVER_ERROR);
//return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@RequestMapping(value = "/rekap-kehadiran-by-unit-kerja/{idUnitKerja}/{startDate}/{endDate}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> rekapKehadiranByUnitKerja(
@PathVariable("idUnitKerja") Integer idUnitKerja, @PathVariable("startDate") String startDate,
@ -5924,4 +5993,18 @@ public class SdmController extends LocaleController<AkunVO> {
}
}
@RequestMapping(value = "cek-health", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> cekHealth(HttpServletRequest request) {
long startTime = System.currentTimeMillis();
Map<String, Object> body = new HashMap<>();
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
body.put("message", "ready");
body.put("time", now);
return ResponseEntity.ok(body);
}
}