diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookRemunService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookRemunService.java index 69d70be1..f562bd21 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookRemunService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookRemunService.java @@ -1,8 +1,5 @@ package com.jasamedika.medifirst2000.service; -import java.util.Date; -import java.util.Set; - /** * @author salmanoe * @version 1.0.0 @@ -10,5 +7,5 @@ import java.util.Set; */ public interface LogbookRemunService { - void deleteByPeriod(Set idPegawai, Date tglAwal, Date tglAkhir); + void generateRecap(); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookRemunServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookRemunServiceImpl.java index 54266ac0..aa4ffa70 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookRemunServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookRemunServiceImpl.java @@ -1,20 +1,33 @@ package com.jasamedika.medifirst2000.service.impl; -import com.jasamedika.medifirst2000.dao.DetailLogbookDokterDao; -import com.jasamedika.medifirst2000.dao.LogbookDokterDao; -import com.jasamedika.medifirst2000.dao.LogbookRemunDao; +import com.jasamedika.medifirst2000.dao.*; +import com.jasamedika.medifirst2000.entities.DetailLogbookDokter; +import com.jasamedika.medifirst2000.entities.LogbookDokter; +import com.jasamedika.medifirst2000.entities.LogbookRemun; +import com.jasamedika.medifirst2000.entities.constant.KelompokPasienM; import com.jasamedika.medifirst2000.service.LogbookRemunService; +import com.jasamedika.medifirst2000.service.PelayananPasienService; +import com.jasamedika.medifirst2000.service.RemunerasiService; +import com.jasamedika.medifirst2000.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI; /** * @author salmanoe @@ -24,6 +37,7 @@ import java.util.Set; @Service @Transactional public class LogbookRemunServiceImpl implements LogbookRemunService { + private static final Logger LOGGER = LoggerFactory.getLogger(LogbookRemunServiceImpl.class); @Autowired @@ -35,12 +49,45 @@ public class LogbookRemunServiceImpl implements LogbookRemunService { @Autowired private DetailLogbookDokterDao detailLogbookDokterDao; + @Autowired + private PelayananPasienService pelayananPasienService; + + @Autowired + private RemunerasiService remunerasiService; + + @Autowired + private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; + + @Autowired + private SubUnitKerjaDao subUnitKerjaDao; + + @Autowired + private MapJabatanProfesiDao mapJabatanProfesiDao; + @Override + public void generateRecap() { + LOGGER.info("Start simpan rekapitulasi detail logbook dokter"); + + LocalDate localDate = LocalDate.now().minusMonths(1); + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date tglAwal = DateUtil.startMonth(date); + Date tglAkhir = DateUtil.endMonth(date); + List subUnitKerjaIn = subUnitKerjaDao.findAllKelompokKerjaMedisId(); + Set idPegawaiKelompokKerja = mapPegawaiJabatanToUnitKerjaDao + .findPegawaiIdBySubUnitKerjaIn(subUnitKerjaIn); + List terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); + idPegawaiKelompokKerja.addAll(terapisRehabMedik); + if (!idPegawaiKelompokKerja.isEmpty()) { + // Delete untuk pembaharuan data + deleteByPeriod(idPegawaiKelompokKerja, tglAwal, tglAkhir); + } + saveRekapDetailLogbookDokter(idPegawaiKelompokKerja, date); + } + public void deleteByPeriod(Set idPegawai, Date tglAwal, Date tglAkhir) { LOGGER.info("Start deleting previous data"); List listIdPegawai = new ArrayList<>(idPegawai); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.sql.Date sqlTglAwal = new java.sql.Date(tglAwal.getTime()); java.sql.Date sqlTglAkhir = new java.sql.Date(tglAkhir.getTime()); detailLogbookDokterDao.deleteByKelompokKerjaAndPeriod(listIdPegawai, sqlTglAwal, sqlTglAkhir); @@ -49,4 +96,354 @@ public class LogbookRemunServiceImpl implements LogbookRemunService { LOGGER.info("Deleting previous data successfully...!"); } + + private void saveRekapDetailLogbookDokter(Set idPegawaiKelompokKerja, Date date) { + DateFormat df = new SimpleDateFormat("yyyy-MM"); + String bulan = df.format(date); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth oct24 = YearMonth.parse("2024-09", formatter); + YearMonth month = YearMonth.parse(bulan, formatter); + ExecutorService executorService = Executors.newFixedThreadPool(50); + CountDownLatch latch = new CountDownLatch(50); + try { + for (Integer idPegawai : idPegawaiKelompokKerja) { + executorService.execute(() -> { + LOGGER.info("Simpan rekapitulasi detail logbook dokter id {}", idPegawai); + + LogbookRemun logbookRemun = new LogbookRemun(); + logbookRemun.setKdProfile((short) 0); + logbookRemun.setStatusEnabled(true); + logbookRemun.setPegawaiId(idPegawai); + logbookRemun.setBulan(date); + logbookRemun.setTanggalTarikData(new Date()); + LogbookRemun savedRemun = logbookRemunDao.save(logbookRemun); + { + Map kinerjaDokter; + if (month.isBefore(oct24)) { + kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); + } else { + kinerjaDokter = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); + } + List> remun = (List>) kinerjaDokter.get("data"); + for (Map map : remun) { + List listNorecPelayananPasienPetugas = new ArrayList<>(); + { + List> detail = (List>) map.get("detail"); + for (Map d : detail) + listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); + } + LogbookDokter logbookDokter = new LogbookDokter(); + logbookDokter.setKdProfile((short) 0); + logbookDokter.setStatusEnabled(true); + logbookDokter.setJenisLogbook("JKN"); + logbookDokter.setKelompokPasien( + getKelompokPasien(Integer.parseInt(map.get("idKelompokPasien").toString()))); + logbookDokter.setKeterangan(map.get("keterangan").toString()); + logbookDokter.setPersenJasa( + Double.parseDouble(map.get("persenJasa").toString().replace("%", ""))); + logbookDokter.setProduk(map.get("namaProduk").toString()); + logbookDokter.setProdukId(Integer.parseInt(map.get("idProduk").toString())); + double hargaJasa = Double.parseDouble(map.get("hargaJasa").toString()); + logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); + logbookDokter + .setTarif(BigDecimal.valueOf(Double.parseDouble(map.get("hargaJual").toString()))); + int jumlah = Double.valueOf(map.get("jumlah").toString()).intValue(); + logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); + logbookDokter.setTotalTindakan(jumlah); + logbookDokter.setLogbookRemun(savedRemun); + LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); + { + List> detailLogbook = pelayananPasienService + .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); + List listDetailLogbookDokter = new ArrayList<>(); + for (Map detail : detailLogbook) { + DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); + detailLogbookDokter.setKdProfile((short) 0); + detailLogbookDokter.setStatusEnabled(true); + detailLogbookDokter.setDiskon( + BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); + detailLogbookDokter.setJumlahTindakan( + Double.valueOf(detail.get("jumlah").toString()).intValue()); + detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); + detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); + detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); + detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); + detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); + detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); + detailLogbookDokter + .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); + detailLogbookDokter.setTarif( + BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); + detailLogbookDokter.setLogbookDokter(savedLogbookDokter); + listDetailLogbookDokter.add(detailLogbookDokter); + } + detailLogbookDokterDao.save(listDetailLogbookDokter); + } + } + } + { + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); + } + for (Map fee : ffs) { + List listNorecPelayananPasienPetugas = new ArrayList<>(); + { + List> detail = (List>) fee.get("detail"); + for (Map d : detail) + listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); + } + LogbookDokter logbookDokter = new LogbookDokter(); + logbookDokter.setKdProfile((short) 0); + logbookDokter.setStatusEnabled(true); + logbookDokter.setJenisLogbook("NON_JKN_DALAM_JAM_KERJA"); + logbookDokter.setJenisRuangan(fee.get("jenisRuangan").toString().toUpperCase()); + logbookDokter.setKelompokPasien( + getKelompokPasien(Integer.parseInt(fee.get("idKelompokPasien").toString()))); + logbookDokter.setKeterangan(fee.get("keterangan").toString()); + logbookDokter.setPersenJasa( + Double.parseDouble(fee.get("persenJasa").toString().replace("%", ""))); + logbookDokter.setProduk(fee.get("namaProduk").toString()); + logbookDokter.setProdukId(Integer.parseInt(fee.get("idProduk").toString())); + double hargaJasa = Double.parseDouble(fee.get("hargaJasa").toString()); + logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); + logbookDokter + .setTarif(BigDecimal.valueOf(Double.parseDouble(fee.get("hargaJual").toString()))); + int jumlah = Double.valueOf(fee.get("jumlah").toString()).intValue(); + logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); + logbookDokter.setTotalTindakan(jumlah); + logbookDokter.setLogbookRemun(savedRemun); + LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); + { + List> detailLogbook = pelayananPasienService + .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); + List listDetailLogbookDokter = new ArrayList<>(); + for (Map detail : detailLogbook) { + DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); + detailLogbookDokter.setKdProfile((short) 0); + detailLogbookDokter.setStatusEnabled(true); + detailLogbookDokter.setDiskon( + BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); + detailLogbookDokter.setJumlahTindakan( + Double.valueOf(detail.get("jumlah").toString()).intValue()); + detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); + detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); + detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); + detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); + detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); + detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); + detailLogbookDokter + .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); + detailLogbookDokter.setTarif( + BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); + detailLogbookDokter.setLogbookDokter(savedLogbookDokter); + listDetailLogbookDokter.add(detailLogbookDokter); + } + detailLogbookDokterDao.save(listDetailLogbookDokter); + } + } + } + { + List> ffs; + if (month.isBefore(oct24)) { + ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } else { + ffs = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); + } + for (Map fee : ffs) { + List listNorecPelayananPasienPetugas = new ArrayList<>(); + { + List> detail = (List>) fee.get("detail"); + for (Map d : detail) + listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); + } + LogbookDokter logbookDokter = new LogbookDokter(); + logbookDokter.setKdProfile((short) 0); + logbookDokter.setStatusEnabled(true); + logbookDokter.setJenisLogbook("NON_JKN_LUAR_JAM_KERJA"); + logbookDokter.setJenisRuangan(fee.get("jenisRuangan").toString().toUpperCase()); + logbookDokter.setKelompokPasien( + getKelompokPasien(Integer.parseInt(fee.get("idKelompokPasien").toString()))); + logbookDokter.setKeterangan(fee.get("keterangan").toString()); + logbookDokter.setPersenJasa( + Double.parseDouble(fee.get("persenJasa").toString().replace("%", ""))); + logbookDokter.setProduk(fee.get("namaProduk").toString()); + logbookDokter.setProdukId(Integer.parseInt(fee.get("idProduk").toString())); + double hargaJasa = Double.parseDouble(fee.get("hargaJasa").toString()); + logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); + logbookDokter + .setTarif(BigDecimal.valueOf(Double.parseDouble(fee.get("hargaJual").toString()))); + int jumlah = Double.valueOf(fee.get("jumlah").toString()).intValue(); + logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); + logbookDokter.setTotalTindakan(jumlah); + logbookDokter.setLogbookRemun(savedRemun); + LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); + { + List> detailLogbook = pelayananPasienService + .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); + List listDetailLogbookDokter = new ArrayList<>(); + for (Map detail : detailLogbook) { + DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); + detailLogbookDokter.setKdProfile((short) 0); + detailLogbookDokter.setStatusEnabled(true); + detailLogbookDokter.setDiskon( + BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); + detailLogbookDokter.setJumlahTindakan( + Double.valueOf(detail.get("jumlah").toString()).intValue()); + detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); + detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); + detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); + detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); + detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); + detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); + detailLogbookDokter + .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); + detailLogbookDokter.setTarif( + BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); + detailLogbookDokter.setLogbookDokter(savedLogbookDokter); + listDetailLogbookDokter.add(detailLogbookDokter); + } + detailLogbookDokterDao.save(listDetailLogbookDokter); + } + } + } + { + List> fixedPay; + if (month.isBefore(oct24)) { + fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); + } else { + fixedPay = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); + } + for (Map pay : fixedPay) { + List listNorecPelayananPasienPetugas = new ArrayList<>(); + { + List> detail = (List>) pay.get("detail"); + for (Map d : detail) + listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); + } + LogbookDokter logbookDokter = new LogbookDokter(); + logbookDokter.setKdProfile((short) 0); + logbookDokter.setStatusEnabled(true); + logbookDokter.setJenisLogbook("FIXED_PAY"); + logbookDokter.setJenisRuangan(pay.get("jenisRuangan").toString().toUpperCase()); + logbookDokter.setKelompokPasien( + getKelompokPasien(Integer.parseInt(pay.get("idKelompokPasien").toString()))); + logbookDokter.setKeterangan(pay.get("keterangan").toString()); + logbookDokter.setProduk(pay.get("namaProduk").toString()); + logbookDokter.setProdukId(Integer.parseInt(pay.get("idProduk").toString())); + double hargaJasa = Double.parseDouble(pay.get("hargaJasa").toString()); + logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); + logbookDokter + .setTarif(BigDecimal.valueOf(Double.parseDouble(pay.get("hargaJual").toString()))); + int jumlah = Double.valueOf(pay.get("jumlah").toString()).intValue(); + logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); + logbookDokter.setTotalTindakan(jumlah); + logbookDokter.setLogbookRemun(savedRemun); + LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); + { + List> detailLogbook = pelayananPasienService + .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); + List listDetailLogbookDokter = new ArrayList<>(); + for (Map detail : detailLogbook) { + DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); + detailLogbookDokter.setKdProfile((short) 0); + detailLogbookDokter.setStatusEnabled(true); + detailLogbookDokter.setDiskon( + BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); + detailLogbookDokter.setJumlahTindakan( + Double.valueOf(detail.get("jumlah").toString()).intValue()); + detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); + detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); + detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); + detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); + detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); + detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); + detailLogbookDokter + .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); + detailLogbookDokter.setTarif( + BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); + detailLogbookDokter.setLogbookDokter(savedLogbookDokter); + listDetailLogbookDokter.add(detailLogbookDokter); + } + detailLogbookDokterDao.save(listDetailLogbookDokter); + } + } + } + { + List> klaimMpp; + if (month.isBefore(oct24)) { + klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai, bulan); + } else { + klaimMpp = remunerasiService.logbookKlaimMppDokter(idPegawai, bulan); + } + for (Map mpp : klaimMpp) { + List listNorecPelayananPasienPetugas = new ArrayList<>(); + { + List> detail = (List>) mpp.get("detail"); + for (Map d : detail) + listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); + } + LogbookDokter logbookDokter = new LogbookDokter(); + logbookDokter.setKdProfile((short) 0); + logbookDokter.setStatusEnabled(true); + logbookDokter.setJenisLogbook("KLAIM_MPP"); + logbookDokter.setJenisRuangan(mpp.get("jenisRuangan").toString().toUpperCase()); + logbookDokter.setKelompokPasien( + getKelompokPasien(Integer.parseInt(mpp.get("idKelompokPasien").toString()))); + logbookDokter.setKeterangan(mpp.get("keterangan").toString()); + logbookDokter.setProduk(mpp.get("namaProduk").toString()); + logbookDokter.setProdukId(Integer.parseInt(mpp.get("idProduk").toString())); + double hargaJasa = Double.parseDouble(mpp.get("hargaJasa").toString()); + logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); + logbookDokter + .setTarif(BigDecimal.valueOf(Double.parseDouble(mpp.get("hargaJual").toString()))); + int jumlah = Double.valueOf(mpp.get("jumlah").toString()).intValue(); + logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); + logbookDokter.setTotalTindakan(jumlah); + logbookDokter.setLogbookRemun(savedRemun); + LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); + { + List> detailLogbook = pelayananPasienService + .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); + List listDetailLogbookDokter = new ArrayList<>(); + for (Map detail : detailLogbook) { + DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); + detailLogbookDokter.setKdProfile((short) 0); + detailLogbookDokter.setStatusEnabled(true); + detailLogbookDokter.setDiskon( + BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); + detailLogbookDokter.setJumlahTindakan( + Double.valueOf(detail.get("jumlah").toString()).intValue()); + detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); + detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); + detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); + detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); + detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); + detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); + detailLogbookDokter + .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); + detailLogbookDokter.setTarif( + BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); + detailLogbookDokter.setLogbookDokter(savedLogbookDokter); + listDetailLogbookDokter.add(detailLogbookDokter); + } + detailLogbookDokterDao.save(listDetailLogbookDokter); + } + } + } + latch.countDown(); + }); + } + latch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + private String getKelompokPasien(Integer idKelompokPasien) { + KelompokPasienM kelompokPasien = KelompokPasienM.valueOf(idKelompokPasien); + return kelompokPasien.name(); + } } diff --git a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java index 085ac3b4..4558bf1f 100644 --- a/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java +++ b/jasamedika-pelayanan/src/main/java/com/jasamedika/medifirst2000/task/schedule/LogbookTask.java @@ -1,8 +1,9 @@ package com.jasamedika.medifirst2000.task.schedule; import com.jasamedika.medifirst2000.dao.*; -import com.jasamedika.medifirst2000.entities.*; -import com.jasamedika.medifirst2000.entities.constant.KelompokPasienM; +import com.jasamedika.medifirst2000.entities.KelompokPasien; +import com.jasamedika.medifirst2000.entities.Pegawai; +import com.jasamedika.medifirst2000.entities.RekapLogbookDokter; import com.jasamedika.medifirst2000.service.LogbookRemunService; import com.jasamedika.medifirst2000.service.PelayananPasienService; import com.jasamedika.medifirst2000.service.RekapLogbookDokterService; @@ -14,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; @@ -22,11 +22,6 @@ import java.time.YearMonth; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI; /** * @author salmanoe @@ -55,24 +50,6 @@ public class LogbookTask { @Autowired private LogbookRemunService logbookRemunService; - @Autowired - private LogbookRemunDao logbookRemunDao; - - @Autowired - private LogbookDokterDao logbookDokterDao; - - @Autowired - private DetailLogbookDokterDao detailLogbookDokterDao; - - @Autowired - private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; - - @Autowired - private SubUnitKerjaDao subUnitKerjaDao; - - @Autowired - private MapJabatanProfesiDao mapJabatanProfesiDao; - @Scheduled(cron = "0 0 0 1-6 * ?") public void saveRekapLogbookDokter() { LOGGER.info("Start simpan rekapitulasi logbook dokter"); @@ -224,371 +201,7 @@ public class LogbookTask { @Scheduled(cron = "0 0 0 1-6 * ?") public void saveRekapDetailLogbookDokter() { - LOGGER.info("Start simpan rekapitulasi detail logbook dokter"); - - LocalDate localDate = LocalDate.now().minusMonths(1); - Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); - Date tglAwal = DateUtil.startMonth(date); - Date tglAkhir = DateUtil.endMonth(date); - List subUnitKerjaIn = subUnitKerjaDao.findAllKelompokKerjaMedisId(); - Set idPegawaiKelompokKerja = mapPegawaiJabatanToUnitKerjaDao - .findPegawaiIdBySubUnitKerjaIn(subUnitKerjaIn); - List terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI)); - idPegawaiKelompokKerja.addAll(terapisRehabMedik); - if (!idPegawaiKelompokKerja.isEmpty()) { - // Delete untuk pembaharuan data - logbookRemunService.deleteByPeriod(idPegawaiKelompokKerja, tglAwal, tglAkhir); - } - saveRekapDetailLogbookDokter(idPegawaiKelompokKerja, date); + logbookRemunService.generateRecap(); } - private void saveRekapDetailLogbookDokter(Set idPegawaiKelompokKerja, Date date) { - DateFormat df = new SimpleDateFormat("yyyy-MM"); - String bulan = df.format(date); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); - YearMonth oct24 = YearMonth.parse("2024-09", formatter); - YearMonth month = YearMonth.parse(bulan, formatter); - ExecutorService executorService = Executors.newFixedThreadPool(50); - CountDownLatch latch = new CountDownLatch(50); - try { - for (Integer idPegawai : idPegawaiKelompokKerja) { - executorService.execute(() -> { - LOGGER.info("Simpan rekapitulasi detail logbook dokter id {}", idPegawai); - - LogbookRemun logbookRemun = new LogbookRemun(); - logbookRemun.setKdProfile((short) 0); - logbookRemun.setStatusEnabled(true); - logbookRemun.setPegawaiId(idPegawai); - logbookRemun.setBulan(date); - logbookRemun.setTanggalTarikData(new Date()); - LogbookRemun savedRemun = logbookRemunDao.save(logbookRemun); - { - Map kinerjaDokter; - if (month.isBefore(oct24)) { - kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai, bulan, null); - } else { - kinerjaDokter = remunerasiService.logbookRemunTarifDokter(idPegawai, bulan, null); - } - List> remun = (List>) kinerjaDokter.get("data"); - for (Map map : remun) { - List listNorecPelayananPasienPetugas = new ArrayList<>(); - { - List> detail = (List>) map.get("detail"); - for (Map d : detail) - listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); - } - LogbookDokter logbookDokter = new LogbookDokter(); - logbookDokter.setKdProfile((short) 0); - logbookDokter.setStatusEnabled(true); - logbookDokter.setJenisLogbook("JKN"); - logbookDokter.setKelompokPasien( - getKelompokPasien(Integer.parseInt(map.get("idKelompokPasien").toString()))); - logbookDokter.setKeterangan(map.get("keterangan").toString()); - logbookDokter.setPersenJasa( - Double.parseDouble(map.get("persenJasa").toString().replace("%", ""))); - logbookDokter.setProduk(map.get("namaProduk").toString()); - logbookDokter.setProdukId(Integer.parseInt(map.get("idProduk").toString())); - double hargaJasa = Double.parseDouble(map.get("hargaJasa").toString()); - logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); - logbookDokter - .setTarif(BigDecimal.valueOf(Double.parseDouble(map.get("hargaJual").toString()))); - int jumlah = Double.valueOf(map.get("jumlah").toString()).intValue(); - logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); - logbookDokter.setTotalTindakan(jumlah); - logbookDokter.setLogbookRemun(savedRemun); - LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); - { - List> detailLogbook = pelayananPasienService - .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); - List listDetailLogbookDokter = new ArrayList<>(); - for (Map detail : detailLogbook) { - DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); - detailLogbookDokter.setKdProfile((short) 0); - detailLogbookDokter.setStatusEnabled(true); - detailLogbookDokter.setDiskon( - BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); - detailLogbookDokter.setJumlahTindakan( - Double.valueOf(detail.get("jumlah").toString()).intValue()); - detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); - detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); - detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); - detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); - detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); - detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); - detailLogbookDokter - .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); - detailLogbookDokter.setTarif( - BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); - detailLogbookDokter.setLogbookDokter(savedLogbookDokter); - listDetailLogbookDokter.add(detailLogbookDokter); - } - detailLogbookDokterDao.save(listDetailLogbookDokter); - } - } - } - { - List> ffs; - if (month.isBefore(oct24)) { - ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan, null); - } else { - ffs = remunerasiService.logbookFfsTarifDokter(idPegawai, bulan, null); - } - for (Map fee : ffs) { - List listNorecPelayananPasienPetugas = new ArrayList<>(); - { - List> detail = (List>) fee.get("detail"); - for (Map d : detail) - listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); - } - LogbookDokter logbookDokter = new LogbookDokter(); - logbookDokter.setKdProfile((short) 0); - logbookDokter.setStatusEnabled(true); - logbookDokter.setJenisLogbook("NON_JKN_DALAM_JAM_KERJA"); - logbookDokter.setJenisRuangan(fee.get("jenisRuangan").toString().toUpperCase()); - logbookDokter.setKelompokPasien( - getKelompokPasien(Integer.parseInt(fee.get("idKelompokPasien").toString()))); - logbookDokter.setKeterangan(fee.get("keterangan").toString()); - logbookDokter.setPersenJasa( - Double.parseDouble(fee.get("persenJasa").toString().replace("%", ""))); - logbookDokter.setProduk(fee.get("namaProduk").toString()); - logbookDokter.setProdukId(Integer.parseInt(fee.get("idProduk").toString())); - double hargaJasa = Double.parseDouble(fee.get("hargaJasa").toString()); - logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); - logbookDokter - .setTarif(BigDecimal.valueOf(Double.parseDouble(fee.get("hargaJual").toString()))); - int jumlah = Double.valueOf(fee.get("jumlah").toString()).intValue(); - logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); - logbookDokter.setTotalTindakan(jumlah); - logbookDokter.setLogbookRemun(savedRemun); - LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); - { - List> detailLogbook = pelayananPasienService - .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); - List listDetailLogbookDokter = new ArrayList<>(); - for (Map detail : detailLogbook) { - DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); - detailLogbookDokter.setKdProfile((short) 0); - detailLogbookDokter.setStatusEnabled(true); - detailLogbookDokter.setDiskon( - BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); - detailLogbookDokter.setJumlahTindakan( - Double.valueOf(detail.get("jumlah").toString()).intValue()); - detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); - detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); - detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); - detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); - detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); - detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); - detailLogbookDokter - .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); - detailLogbookDokter.setTarif( - BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); - detailLogbookDokter.setLogbookDokter(savedLogbookDokter); - listDetailLogbookDokter.add(detailLogbookDokter); - } - detailLogbookDokterDao.save(listDetailLogbookDokter); - } - } - } - { - List> ffs; - if (month.isBefore(oct24)) { - ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); - } else { - ffs = remunerasiService.logbookFfsLuarTarifDokter(idPegawai, bulan, null); - } - for (Map fee : ffs) { - List listNorecPelayananPasienPetugas = new ArrayList<>(); - { - List> detail = (List>) fee.get("detail"); - for (Map d : detail) - listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); - } - LogbookDokter logbookDokter = new LogbookDokter(); - logbookDokter.setKdProfile((short) 0); - logbookDokter.setStatusEnabled(true); - logbookDokter.setJenisLogbook("NON_JKN_LUAR_JAM_KERJA"); - logbookDokter.setJenisRuangan(fee.get("jenisRuangan").toString().toUpperCase()); - logbookDokter.setKelompokPasien( - getKelompokPasien(Integer.parseInt(fee.get("idKelompokPasien").toString()))); - logbookDokter.setKeterangan(fee.get("keterangan").toString()); - logbookDokter.setPersenJasa( - Double.parseDouble(fee.get("persenJasa").toString().replace("%", ""))); - logbookDokter.setProduk(fee.get("namaProduk").toString()); - logbookDokter.setProdukId(Integer.parseInt(fee.get("idProduk").toString())); - double hargaJasa = Double.parseDouble(fee.get("hargaJasa").toString()); - logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); - logbookDokter - .setTarif(BigDecimal.valueOf(Double.parseDouble(fee.get("hargaJual").toString()))); - int jumlah = Double.valueOf(fee.get("jumlah").toString()).intValue(); - logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); - logbookDokter.setTotalTindakan(jumlah); - logbookDokter.setLogbookRemun(savedRemun); - LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); - { - List> detailLogbook = pelayananPasienService - .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); - List listDetailLogbookDokter = new ArrayList<>(); - for (Map detail : detailLogbook) { - DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); - detailLogbookDokter.setKdProfile((short) 0); - detailLogbookDokter.setStatusEnabled(true); - detailLogbookDokter.setDiskon( - BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); - detailLogbookDokter.setJumlahTindakan( - Double.valueOf(detail.get("jumlah").toString()).intValue()); - detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); - detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); - detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); - detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); - detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); - detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); - detailLogbookDokter - .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); - detailLogbookDokter.setTarif( - BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); - detailLogbookDokter.setLogbookDokter(savedLogbookDokter); - listDetailLogbookDokter.add(detailLogbookDokter); - } - detailLogbookDokterDao.save(listDetailLogbookDokter); - } - } - } - { - List> fixedPay; - if (month.isBefore(oct24)) { - fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai, bulan, null); - } else { - fixedPay = remunerasiService.logbookFixedPayDokter(idPegawai, bulan, null); - } - for (Map pay : fixedPay) { - List listNorecPelayananPasienPetugas = new ArrayList<>(); - { - List> detail = (List>) pay.get("detail"); - for (Map d : detail) - listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); - } - LogbookDokter logbookDokter = new LogbookDokter(); - logbookDokter.setKdProfile((short) 0); - logbookDokter.setStatusEnabled(true); - logbookDokter.setJenisLogbook("FIXED_PAY"); - logbookDokter.setJenisRuangan(pay.get("jenisRuangan").toString().toUpperCase()); - logbookDokter.setKelompokPasien( - getKelompokPasien(Integer.parseInt(pay.get("idKelompokPasien").toString()))); - logbookDokter.setKeterangan(pay.get("keterangan").toString()); - logbookDokter.setProduk(pay.get("namaProduk").toString()); - logbookDokter.setProdukId(Integer.parseInt(pay.get("idProduk").toString())); - double hargaJasa = Double.parseDouble(pay.get("hargaJasa").toString()); - logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); - logbookDokter - .setTarif(BigDecimal.valueOf(Double.parseDouble(pay.get("hargaJual").toString()))); - int jumlah = Double.valueOf(pay.get("jumlah").toString()).intValue(); - logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); - logbookDokter.setTotalTindakan(jumlah); - logbookDokter.setLogbookRemun(savedRemun); - LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); - { - List> detailLogbook = pelayananPasienService - .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); - List listDetailLogbookDokter = new ArrayList<>(); - for (Map detail : detailLogbook) { - DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); - detailLogbookDokter.setKdProfile((short) 0); - detailLogbookDokter.setStatusEnabled(true); - detailLogbookDokter.setDiskon( - BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); - detailLogbookDokter.setJumlahTindakan( - Double.valueOf(detail.get("jumlah").toString()).intValue()); - detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); - detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); - detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); - detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); - detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); - detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); - detailLogbookDokter - .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); - detailLogbookDokter.setTarif( - BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); - detailLogbookDokter.setLogbookDokter(savedLogbookDokter); - listDetailLogbookDokter.add(detailLogbookDokter); - } - detailLogbookDokterDao.save(listDetailLogbookDokter); - } - } - } - { - List> klaimMpp; - if (month.isBefore(oct24)) { - klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai, bulan); - } else { - klaimMpp = remunerasiService.logbookKlaimMppDokter(idPegawai, bulan); - } - for (Map mpp : klaimMpp) { - List listNorecPelayananPasienPetugas = new ArrayList<>(); - { - List> detail = (List>) mpp.get("detail"); - for (Map d : detail) - listNorecPelayananPasienPetugas.addAll((List) d.get("norecs")); - } - LogbookDokter logbookDokter = new LogbookDokter(); - logbookDokter.setKdProfile((short) 0); - logbookDokter.setStatusEnabled(true); - logbookDokter.setJenisLogbook("KLAIM_MPP"); - logbookDokter.setJenisRuangan(mpp.get("jenisRuangan").toString().toUpperCase()); - logbookDokter.setKelompokPasien( - getKelompokPasien(Integer.parseInt(mpp.get("idKelompokPasien").toString()))); - logbookDokter.setKeterangan(mpp.get("keterangan").toString()); - logbookDokter.setProduk(mpp.get("namaProduk").toString()); - logbookDokter.setProdukId(Integer.parseInt(mpp.get("idProduk").toString())); - double hargaJasa = Double.parseDouble(mpp.get("hargaJasa").toString()); - logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa)); - logbookDokter - .setTarif(BigDecimal.valueOf(Double.parseDouble(mpp.get("hargaJual").toString()))); - int jumlah = Double.valueOf(mpp.get("jumlah").toString()).intValue(); - logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah)); - logbookDokter.setTotalTindakan(jumlah); - logbookDokter.setLogbookRemun(savedRemun); - LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter); - { - List> detailLogbook = pelayananPasienService - .detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas); - List listDetailLogbookDokter = new ArrayList<>(); - for (Map detail : detailLogbook) { - DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter(); - detailLogbookDokter.setKdProfile((short) 0); - detailLogbookDokter.setStatusEnabled(true); - detailLogbookDokter.setDiskon( - BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString()))); - detailLogbookDokter.setJumlahTindakan( - Double.valueOf(detail.get("jumlah").toString()).intValue()); - detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString()); - detailLogbookDokter.setKelas(detail.get("namaKelas").toString()); - detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString()); - detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString()); - detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString()); - detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString()); - detailLogbookDokter - .setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString())); - detailLogbookDokter.setTarif( - BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString()))); - detailLogbookDokter.setLogbookDokter(savedLogbookDokter); - listDetailLogbookDokter.add(detailLogbookDokter); - } - detailLogbookDokterDao.save(listDetailLogbookDokter); - } - } - } - latch.countDown(); - }); - } - latch.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - - private String getKelompokPasien(Integer idKelompokPasien) { - KelompokPasienM kelompokPasien = KelompokPasienM.valueOf(idKelompokPasien); - return kelompokPasien.name(); - } } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/LogbookRemunController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/LogbookRemunController.java new file mode 100644 index 00000000..93c3747b --- /dev/null +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/LogbookRemunController.java @@ -0,0 +1,54 @@ +package com.jasamedika.medifirst2000.controller; + +import com.jasamedika.medifirst2000.constants.MessageResource; +import com.jasamedika.medifirst2000.controller.base.LocaleController; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.LogbookRemunService; +import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.orm.jpa.JpaSystemException; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +import static com.jasamedika.medifirst2000.constants.Constants.MessageInfo.ERROR_MESSAGE; +import static com.jasamedika.medifirst2000.core.web.WebConstants.HttpHeaderInfo.LABEL_SUCCESS; +import static com.jasamedika.medifirst2000.util.rest.RestUtil.getJsonHttptatus; +import static com.jasamedika.medifirst2000.util.rest.RestUtil.getJsonResponse; +import static org.slf4j.LoggerFactory.getLogger; +import static org.springframework.http.HttpStatus.ACCEPTED; +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +/** + * @author Salman + * @version 1.0.0 + * @since 02/01/2025 + */ +@RestController +@RequestMapping("/remunerasi/logbook") +public class LogbookRemunController extends LocaleController { + + private static final Logger LOGGER = getLogger(LogbookRemunController.class); + + @Autowired + private LogbookRemunService logbookRemunService; + + @RequestMapping(value = "/rekap", method = POST, produces = APPLICATION_JSON_VALUE) + public ResponseEntity patchingRecapLogbook(HttpServletRequest request) { + try { + logbookRemunService.generateRecap(); + mapHeaderMessage.put(LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); + return getJsonResponse("The recap has been successfully generated", ACCEPTED, mapHeaderMessage); + } catch (ServiceVOException | JpaSystemException e) { + LOGGER.error("Got Exception {} when generateRecap", e.getMessage()); + mapHeaderMessage.put(ERROR_MESSAGE, e.getMessage()); + return getJsonHttptatus(INTERNAL_SERVER_ERROR, mapHeaderMessage); + } + } + +}