From 73d361468b4e7f627c268e8527bd95faf2e3721b Mon Sep 17 00:00:00 2001 From: salmanoe Date: Mon, 15 Nov 2021 19:51:20 +0700 Subject: [PATCH] - pembuatan service presensi visite dokter - pembuatan daftar dokter untuk pencarian monitoring presensi visite dokter --- ...atanPerkembanganPasienTerintegrasiDao.java | 19 +-- .../medifirst2000/dao/KalenderDao.java | 4 +- .../dao/MapPegawaiJabatanToUnitKerjaDao.java | 29 ++++ ...PerkembanganPasienTerintegrasiService.java | 8 +- ...embanganPasienTerintegrasiServiceImpl.java | 134 ++++++++++++++++-- .../controller/ReportingController.java | 28 ++++ .../controller/SdmController.java | 25 ++++ 7 files changed, 227 insertions(+), 20 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/CatatanPerkembanganPasienTerintegrasiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/CatatanPerkembanganPasienTerintegrasiDao.java index 867e9537..7dce17f8 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/CatatanPerkembanganPasienTerintegrasiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/CatatanPerkembanganPasienTerintegrasiDao.java @@ -5,23 +5,26 @@ import java.util.List; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; import com.jasamedika.medifirst2000.entities.CatatanPerkembanganPasienTerintegrasi; -import com.jasamedika.medifirst2000.vo.CpptHarianPertamaVO; /** * @author ITI-14 * @since Oct 21, 2021 */ +@Repository("cpptDao") public interface CatatanPerkembanganPasienTerintegrasiDao extends PagingAndSortingRepository { - @Query(nativeQuery = true, value = "select distinct on (cp.pegawaifk) cp.pegawaifk, cp.tglinput " - + "from cppt_t cp " + "inner join pegawai_m pg on cp.pegawaifk = pg.id " + "where cp.statusenabled is true " - + "and cp.isverifikasi is true " + "and pg.kategorypegawai in (:listKategoryId) " - + "and pg.objectjenispegawaifk = :jenisPegawaiId " + "and to_char(cp.tglinput, 'yyyy-MM-dd') = :tglInput " - + "order by cp.pegawaifk, cp.tglinput asc") - List findCpptHarianPertama(@Param("listKategoryId") List listIdKategoryPegawai, - @Param("jenisPegawaiId") Integer idJenisPegawai, @Param("tglInput") String tglInput); + @Query(nativeQuery = true, value = "select distinct on (cppt.pegawaifk,to_char(cppt.tglinput,'yyyy-MM-dd')) cppt.* " + + "from (select cp.* from cppt_t cp " + + "inner join antrianpasiendiperiksa_t apd on cp.noregistrasifk = apd.norec " + + "where cp.statusenabled is true " + "and cp.flag_ in (1,3) " + + "and to_char(cp.tglinput,'yyyy-MM-dd') between :startDate and :endDate " + + "and cp.pegawaifk in (:listPegawaiId) " + "order by cp.pegawaifk, cp.tglinput) as cppt " + + "order by cppt.pegawaifk, to_char(cppt.tglinput,'yyyy-MM-dd')") + List findPresensiCPPT(@Param("listPegawaiId") List listIdPegawai, + @Param("startDate") String startDate, @Param("endDate") String endDate); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KalenderDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KalenderDao.java index 73d87e55..a8ff762b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KalenderDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KalenderDao.java @@ -14,8 +14,8 @@ import com.jasamedika.medifirst2000.entities.Kalender; @Repository("KalenderDao") public interface KalenderDao extends PagingAndSortingRepository { - @Query("select k.tanggal from Kalender k where to_char(k.tanggal,'yyyy-MM-dd') between :tglAwal and :tglAkhir") - List getDateFromPeriodicParameter(@Param("tglAwal") String tglAwal, @Param("tglAkhir") String tglAkhir); + @Query("select k.tanggal from Kalender k where to_char(k.tanggal,'yyyy-MM-dd') between :startDate and :endDate") + List getDateFromPeriodicParameter(@Param("startDate") String tglAwal, @Param("endDate") String tglAkhir); @Query("select new Map(k.id as kalendarId," + "k.tanggal as date," + "to_char(k.tanggal,'yyyy-MM-dd') as strDate," + "concat(k.hariKeDlmBulan,' ',k.namaBulan,' ',k.tahunKalender) as tanggal) " 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 14680b6b..5cd9c835 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 @@ -493,4 +493,33 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository findAllDokterKelompokStafMedik(@Param("listKsmId") List listIdKsm); + String strDokter = "select distinct new Map(pg.id as pegawaiId,pg.nama as nama,pg.namaLengkap as namaLengkap) " + + "from MapPegawaiJabatanToUnitKerja mj " + "inner join mj.pegawai pg " + "inner join mj.jabatan jb " + + "where mj.statusEnabled is true " + "and pg.statusEnabled is true " + "and pg.jenisPegawaiId = 1 " + + "and jb.levelJabatan = 5 "; + + String ksm = "and mj.unitKerjaPegawaiId = :ksmId "; + + String kk = "and mj.subUnitKerjaPegawaiId = :kkId "; + + String dr = "and mj.pegawaiId = :drId "; + + String sortDr = "order by pg.nama"; + + @Query(strDokter + sortDr) + List> findDokter(); + + @Query(strDokter + ksm + sortDr) + List> findDokterByKsm(@Param("ksmId") Integer idKsm); + + @Query(strDokter + ksm + kk + sortDr) + List> findDokterByKk(@Param("ksmId") Integer idKsm, @Param("kkId") Integer idKk); + + @Query(strDokter + ksm + kk + dr + sortDr) + List> findDokterById(@Param("ksmId") Integer idKsm, @Param("kkId") Integer idKk, + @Param("drId") Integer idDr); + + @Query(strDokter + dr + sortDr) + List> findDokterById(@Param("drId") Integer idDr); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/CatatanPerkembanganPasienTerintegrasiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/CatatanPerkembanganPasienTerintegrasiService.java index b22fc7ce..3172bb5c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/CatatanPerkembanganPasienTerintegrasiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/CatatanPerkembanganPasienTerintegrasiService.java @@ -1,5 +1,8 @@ package com.jasamedika.medifirst2000.service; +import java.util.List; +import java.util.Map; + import org.springframework.orm.jpa.JpaSystemException; import com.jasamedika.medifirst2000.entities.CatatanPerkembanganPasienTerintegrasi; @@ -12,6 +15,9 @@ import com.jasamedika.medifirst2000.vo.CatatanPerkembanganPasienTerintegrasiVO; public interface CatatanPerkembanganPasienTerintegrasiService extends BaseVoService { - void hitungKepatuhanCpptHarianPertama(Long tglInput) throws JpaSystemException; + List> findPresensiVisiteDokter(Integer idKsm, Integer idKk, Integer idDr, Long startDate, + Long endDate) throws JpaSystemException; + + List> findDokter(Integer idKsm, Integer idKk, Integer idDr) throws JpaSystemException; } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/CatatanPerkembanganPasienTerintegrasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/CatatanPerkembanganPasienTerintegrasiServiceImpl.java index a1436e67..cf65890b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/CatatanPerkembanganPasienTerintegrasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/CatatanPerkembanganPasienTerintegrasiServiceImpl.java @@ -3,19 +3,19 @@ package com.jasamedika.medifirst2000.service.impl; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.jpa.JpaSystemException; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.CatatanPerkembanganPasienTerintegrasiDao; +import com.jasamedika.medifirst2000.dao.KalenderDao; +import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa; import com.jasamedika.medifirst2000.entities.CatatanPerkembanganPasienTerintegrasi; import com.jasamedika.medifirst2000.entities.Pasien; @@ -26,7 +26,6 @@ import com.jasamedika.medifirst2000.service.CatatanPerkembanganPasienTerintegras import com.jasamedika.medifirst2000.util.CommonUtil; import com.jasamedika.medifirst2000.vo.AntrianPasienDiPeriksaVO; import com.jasamedika.medifirst2000.vo.CatatanPerkembanganPasienTerintegrasiVO; -import com.jasamedika.medifirst2000.vo.CpptHarianPertamaVO; import com.jasamedika.medifirst2000.vo.PasienVO; import com.jasamedika.medifirst2000.vo.PegawaiVO; import com.jasamedika.medifirst2000.vo.RuanganVO; @@ -57,6 +56,12 @@ public class CatatanPerkembanganPasienTerintegrasiServiceImpl extends BaseVoServ @Autowired private CatatanPerkembanganPasienTerintegrasiDao cpptDao; + @Autowired + private KalenderDao kalenderDao; + + @Autowired + private MapPegawaiJabatanToUnitKerjaDao mapJabatanDao; + @Override public CatatanPerkembanganPasienTerintegrasiVO add(CatatanPerkembanganPasienTerintegrasiVO vo) throws JpaSystemException, ServiceVOException { @@ -154,13 +159,124 @@ public class CatatanPerkembanganPasienTerintegrasiServiceImpl extends BaseVoServ return null; } + /** + * @author ITI-14 + * @since Nov 15, 2021 + * @param idKsm + * id kelompok staf medik + * @param idKk + * id kelompok kerja + * @param idDr + * id pegawai dokter + * @return daftar dokter + */ @Override - @Transactional - public void hitungKepatuhanCpptHarianPertama(Long tglInput) throws JpaSystemException { - DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + public List> findDokter(Integer idKsm, Integer idKk, Integer idDr) throws JpaSystemException { + List> result = new ArrayList<>(); - List listCppt = cpptDao.findCpptHarianPertama(Arrays.asList(Master.KategoryPegawai.REMUN), - Master.JenisPegawai.DOKTER, df.format(new Date(tglInput))); + if (CommonUtil.isNotNullOrEmpty(idKsm) && CommonUtil.isNotNullOrEmpty(idKk) + && CommonUtil.isNotNullOrEmpty(idDr)) { + result = mapJabatanDao.findDokterById(idKsm, idKk, idDr); + } else if (CommonUtil.isNullOrEmpty(idKsm) && CommonUtil.isNullOrEmpty(idKk) + && CommonUtil.isNotNullOrEmpty(idDr)) { + result = mapJabatanDao.findDokterById(idDr); + } else if (CommonUtil.isNotNullOrEmpty(idKk) && CommonUtil.isNullOrEmpty(idDr)) { + result = mapJabatanDao.findDokterByKk(idKsm, idKk); + } else if (CommonUtil.isNotNullOrEmpty(idKsm) && CommonUtil.isNullOrEmpty(idKk)) { + result = mapJabatanDao.findDokterByKsm(idKsm); + } else { + result = mapJabatanDao.findDokter(); + } + + return result; + } + + /** + * @author ITI-14 + * @since Nov 12, 2021 + * @param idKsm + * id kelompok staf medik + * @param idKk + * id kelompok kerja + * @param idDr + * id pegawai dokter + * @param startDate + * tanggal awal pengambilan data + * @param endDate + * tanggal akhir pengambilan data + * @return presensi visite dokter + */ + @Override + public List> findPresensiVisiteDokter(Integer idKsm, Integer idKk, Integer idDr, Long startDate, + Long endDate) throws JpaSystemException { + List> result = new ArrayList<>(); + List> dataInit = new ArrayList<>(); + + List listIdDokter = new ArrayList<>(); + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat df_ina = new SimpleDateFormat("dd-MM-yyyy"); + DateFormat sf_ina = new SimpleDateFormat("HH:mm:ss"); + String strStartDate = df.format(new Date(startDate)); + String strEndDate = df.format(new Date(endDate)); + + List> listDokter = this.findDokter(idKsm, idKk, idDr); + for (Map map : listDokter) { + listIdDokter.add(Integer.valueOf(map.get("pegawaiId").toString())); + } + + List listTgl = kalenderDao.getDateFromPeriodicParameter(strStartDate, strEndDate); + for (Map dokter : listDokter) { + for (Date tgl : listTgl) { + Map mapDate = new HashMap<>(); + mapDate.putAll(dokter); + mapDate.put("tgl", tgl); + dataInit.add(mapDate); + } + + } + + if (CommonUtil.isNotNullOrEmpty(listIdDokter)) { + List rawData = cpptDao.findPresensiCPPT(listIdDokter, strStartDate, + strEndDate); + for (Map map : dataInit) { + + Map mapRs = new HashMap<>(); + mapRs.put("cpptId", null); + mapRs.put("tglInput", null); + mapRs.put("strTgl", df_ina.format(map.get("tgl"))); + mapRs.put("strJamInput", null); + mapRs.put("antrianId", null); + mapRs.put("namaRuangan", null); + mapRs.put("isDpjp", null); + for (CatatanPerkembanganPasienTerintegrasi cppt : rawData) { + if (df.format(map.get("tgl")).equals(df.format(cppt.getTglInput())) + && map.get("pegawaiId").equals(cppt.getPegawaiId())) { + Boolean isDpjp = false; + if (CommonUtil.isNotNullOrEmpty(cppt.getAntrianPasienDiperiksa()) + && CommonUtil.isNotNullOrEmpty(cppt.getAntrianPasienDiperiksa().getPegawai())) { + isDpjp = cppt.getAntrianPasienDiperiksa().getPegawai().getId().equals(map.get("pegawaiId")) + ? true : false; + } + + mapRs.put("cpptId", cppt.getNoRec()); + mapRs.put("tglInput", cppt.getTglInput()); + mapRs.put("strTgl", df_ina.format(map.get("tgl"))); + mapRs.put("strJamInput", sf_ina.format(cppt.getTglInput())); + mapRs.put("antrianId", cppt.getAntrianPasienDiperiksaId()); + mapRs.put("namaRuangan", cppt.getRuangan().getNamaRuangan()); + mapRs.put("isDpjp", isDpjp); + + break; + } + } + mapRs.putAll(map); + + result.add(mapRs); + } + } + + return result; } } diff --git a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java index 8ce296e7..65feedd8 100644 --- a/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java +++ b/jasamedika-reporting/src/main/java/com/jasamedika/medifirst2000/controller/ReportingController.java @@ -101,6 +101,7 @@ import com.jasamedika.medifirst2000.entities.LoginUser; import com.jasamedika.medifirst2000.entities.Pasien; import com.jasamedika.medifirst2000.entities.Pegawai; import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.CatatanPerkembanganPasienTerintegrasiService; import com.jasamedika.medifirst2000.service.CssdSterilisasiService; import com.jasamedika.medifirst2000.service.HasilPemeriksaanSwaPantauLimbahCairService; import com.jasamedika.medifirst2000.service.IndekKinerjaService; @@ -328,6 +329,9 @@ public class ReportingController extends LocaleController @Autowired private PasienService pasienService; + @Autowired + private CatatanPerkembanganPasienTerintegrasiService cpptService; + @RequestMapping("/instalasiRawatInap") public ModelAndView generateInstalasiRawatInap(ModelAndView m, @RequestParam(value = "format", required = false) String format, @@ -7691,4 +7695,28 @@ public class ReportingController extends LocaleController } } + @RequestMapping(value = "/presensi-visite-dokter", method = RequestMethod.GET) + public ResponseEntity>> presensiVisiteDokter(HttpServletRequest request, + @RequestParam(value = "startDate", required = true) Long startDate, + @RequestParam(value = "endDate", required = true) Long endDate, + @RequestParam(value = "ksmId", required = false) Integer idKsm, + @RequestParam(value = "kkId", required = false) Integer idKk, + @RequestParam(value = "drId", required = false) Integer idDr) { + try { + List> result = cpptService.findPresensiVisiteDokter(idKsm, idKk, idDr, startDate, + endDate); + 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 data presensi visite 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 data presensi visite dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index 6db58000..84577ca8 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -46,6 +46,7 @@ import com.jasamedika.medifirst2000.service.AsuransiNakerService; import com.jasamedika.medifirst2000.service.AturanPeminjamanService; import com.jasamedika.medifirst2000.service.BerkasLamaranService; import com.jasamedika.medifirst2000.service.BibliographyService; +import com.jasamedika.medifirst2000.service.CatatanPerkembanganPasienTerintegrasiService; import com.jasamedika.medifirst2000.service.CustomIndexKerjaService; import com.jasamedika.medifirst2000.service.DaftarKeanggotaanService; import com.jasamedika.medifirst2000.service.DataKeluargaService; @@ -415,6 +416,9 @@ public class SdmController extends LocaleController { @Autowired private RemunerasiOperasionalService remunerasiOperasionalService; + @Autowired + private CatatanPerkembanganPasienTerintegrasiService cpptService; + @RequestMapping(value = "/save-custom-uraian-kerja", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> saveBerkasLamaran(@Valid @RequestBody CustomIndexKerjaVO vo, HttpServletRequest request) throws ParseException { @@ -5907,4 +5911,25 @@ public class SdmController extends LocaleController { } } + @RequestMapping(value = "/daftar-dokter", method = RequestMethod.GET) + public ResponseEntity>> getDaftarDokter(HttpServletRequest request, + @RequestParam(value = "ksmId", required = false) Integer idKsm, + @RequestParam(value = "kkId", required = false) Integer idKk, + @RequestParam(value = "drId", required = false) Integer idDr) { + try { + List> result = cpptService.findDokter(idKsm, idKk, idDr); + 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 daftar 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 daftar dokter", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + }