From f7db1f389ec911414e6c7171045062210343b55a Mon Sep 17 00:00:00 2001 From: salmanoe Date: Wed, 10 Nov 2021 08:57:28 +0700 Subject: [PATCH] pembuatan service hitung capaian skor dokter berdasarkan tahun --- .../dao/MapPegawaiJabatanToUnitKerjaDao.java | 5 + .../service/LogbookKinerjaService.java | 8 +- .../impl/LogbookKinerjaServiceImpl.java | 96 +++++++++++++++++-- .../IkiDanRemunerasiController.java | 20 ++++ 4 files changed, 119 insertions(+), 10 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java index 86905a4a..14680b6b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java @@ -488,4 +488,9 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository listIdRemun, @Param("dokter") Integer idDokter, @Param("nonAktif") List listIdNonAktif); + @Query("select distinct mj.pegawaiId " + "from MapPegawaiJabatanToUnitKerja mj " + "inner join mj.pegawai pg " + + "inner join mj.jabatan jb " + "where mj.unitKerjaPegawaiId in (:listKsmId) " + + "and pg.jenisPegawaiId = 1 " + "and jb.levelJabatan = 5") + List findAllDokterKelompokStafMedik(@Param("listKsmId") List listIdKsm); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java index 532a388f..e9d23222 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/LogbookKinerjaService.java @@ -1,5 +1,6 @@ package com.jasamedika.medifirst2000.service; +import java.text.ParseException; import java.util.Date; import java.util.List; import java.util.Map; @@ -9,6 +10,7 @@ import org.springframework.orm.jpa.JpaSystemException; import com.jasamedika.medifirst2000.entities.LogbookKinerja; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; +import com.jasamedika.medifirst2000.vo.SkorDokterVO; public interface LogbookKinerjaService extends BaseVoService { @@ -53,9 +55,11 @@ public interface LogbookKinerjaService extends BaseVoService hitungTargetSkorLogbookDokter(String tahun) throws ParseException; + public List findBobotJenisJabatan(Long periode, Integer idJabatan); - + List> findJabatanKontrakVerifKinerja(Integer idPegawai, Integer idPegawaiLogin); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java index f0c50250..ba5eb2d1 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaServiceImpl.java @@ -5,6 +5,7 @@ import java.math.RoundingMode; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; @@ -57,6 +58,7 @@ import com.jasamedika.medifirst2000.vo.JabatanVO; import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; import com.jasamedika.medifirst2000.vo.PegawaiVO; import com.jasamedika.medifirst2000.vo.SatuanIndikatorVO; +import com.jasamedika.medifirst2000.vo.SkorDokterVO; @Service("LogbookKinerjaService") public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements LogbookKinerjaService { @@ -2247,8 +2249,14 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb return result; } - @Override - public void autoVerifLogbookJamKerjaDokter(Date bulan) { + /** + * @param bulan + * bulan spesifik perhitungan + * @param typeId + * 1-Hitung Target, 2-Hitung Verifikasi + */ + public List hitungSkorDokter(Date bulan, byte typeId) { + List result = new ArrayList<>(); List listDetailJenisProduk = new ArrayList<>(); List listDetailJenisProdukException = new ArrayList<>(); @@ -2269,8 +2277,14 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb List listIdNonjadwal = shiftKerjaDao.findListNonjadwal(); - List listIdPegawai = logbookKinerjaDao.findPegawaiKontrakByIndikator(mf.format(bulan), - Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA); + List listIdPegawai = new ArrayList<>(); + if (typeId == 1) { + listIdPegawai = mapPegawaiJabatanToUnitKerjaDao + .findAllDokterKelompokStafMedik(Arrays.asList(Master.UnitKerja.KSM)); + } else if (typeId == 2) { + listIdPegawai = logbookKinerjaDao.findPegawaiKontrakByIndikator(mf.format(bulan), + Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA); + } List> dataLayanan = ikiDanRemunerasiDao.getDataLogbookJamKerjaDokter(mf.format(bulan), pssbAwal, pssbAkhir, listIdNonjadwal, Master.JenisPegawai.DOKTER, listIdPegawai, @@ -2330,6 +2344,8 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb List drKsmUmumList = mapPegawaiJabatanToUnitKerjaDao.getPegawaiByUnitKerja(Master.UnitKerja.KSM_UMUM); for (Integer idPegawai : listIdPegawai) { + SkorDokterVO skorDokterVO = new SkorDokterVO(); + if (pegawaiDao.getDokterLabPatologiAnatomi().contains(idPegawai)) { listDetailJenisProduk = new ArrayList<>( Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); @@ -2362,19 +2378,83 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb } } + skorDokterVO.setBulan(bulan); + skorDokterVO.setIdPegawai(idPegawai); + skorDokterVO.setSkor(capaian); + result.add(skorDokterVO); + } + + return result; + } + + @Override + public void autoVerifLogbookJamKerjaDokter(Date bulan) { + byte verifId = 2; + List listSkorDokterVO = hitungSkorDokter(bulan, verifId); + + for (SkorDokterVO skorDokterVO : listSkorDokterVO) { LogbookKinerjaVO vo = new LogbookKinerjaVO(); PegawaiVO pegawai = new PegawaiVO(); - pegawai.setId(idPegawai); + pegawai.setId(skorDokterVO.getIdPegawai()); vo.setPegawai(pegawai); IndikatorKinerjaVO indikator = new IndikatorKinerjaVO(); indikator.setId(Master.IndikatorKinerja.PELAYANAN_MEDIS_JAM_KERJA); vo.setIndikatorKinerja(indikator); - vo.setBulan(bulan); - vo.setCapaian(capaian); + vo.setBulan(skorDokterVO.getBulan()); + vo.setCapaian(skorDokterVO.getSkor()); this.autoVerify(vo); } } + @Override + public List hitungTargetSkorLogbookDokter(String tahun) throws ParseException { + List result = new ArrayList<>(); + + DateFormat mf = new SimpleDateFormat("yyyy-MM"); + byte hitungTargetId = 1; + for (int bulan = 1; bulan <= 12; bulan++) { + List listRs = hitungSkorDokter(mf.parse(tahun + "-" + (bulan < 10 ? "0" + bulan : bulan)), + hitungTargetId); + result.addAll(listRs); + } + + /** + * Untuk output internal + */ + List listIdPegawai = new ArrayList<>(); + List listBulan = new ArrayList<>(); + for (SkorDokterVO skorDokterVO : result) { + if (!listIdPegawai.contains(skorDokterVO.getIdPegawai())) { + listIdPegawai.add(skorDokterVO.getIdPegawai()); + } + if (!listBulan.contains(skorDokterVO.getBulan())) { + listBulan.add(skorDokterVO.getBulan()); + } + } + List sortedListIdPegawai = listIdPegawai.stream().sorted().collect(Collectors.toList()); + List sortedListBulan = listBulan.stream().sorted().collect(Collectors.toList()); + + for (Integer idPegawai : sortedListIdPegawai) { + String out = ""; + String skor = ""; + for (Date bulan : sortedListBulan) { + for (SkorDokterVO vo : result) { + if (idPegawai.equals(vo.getIdPegawai()) && bulan.equals(vo.getBulan())) { + if (skor == "") { + skor = vo.getSkor().toString(); + } else { + skor += "," + vo.getSkor().toString(); + } + } + } + } + out = idPegawai + "," + skor; + System.out.println(out); + } + + return result; + } + @Override public List findBobotJenisJabatan(Long periode, Integer idJabatan) { List result = new ArrayList<>(); @@ -2422,4 +2502,4 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb return result; } -} +} \ No newline at end of file diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java index 13edba3e..4651c4d1 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java @@ -64,6 +64,7 @@ import com.jasamedika.medifirst2000.vo.ProdukPerawatVO; import com.jasamedika.medifirst2000.vo.ProfesiVO; import com.jasamedika.medifirst2000.vo.RemunerasiOperasionalVO; import com.jasamedika.medifirst2000.vo.SettingPirSdmVO; +import com.jasamedika.medifirst2000.vo.SkorDokterVO; import com.jasamedika.medifirst2000.vo.SkoringTindakanMedisVO; import com.jasamedika.medifirst2000.vo.SkoringTindakanNakesVO; import com.jasamedika.medifirst2000.vo.SkoringTindakanPerawatVO; @@ -2074,4 +2075,23 @@ public class IkiDanRemunerasiController extends LocaleController> getSkorDokter(HttpServletRequest request, + @RequestParam(value = "tahun", required = true) String tahun) throws ParseException { + try { + List result = logbookKinerjaService.hitungTargetSkorLogbookDokter(tahun); + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when get skor dokter", sve.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); + } catch (JpaSystemException jse) { + LOGGER.error("Got exception {} when get skor dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + }