diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KonsultasiDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KonsultasiDao.java index 9191c242..7c0d06e1 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KonsultasiDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/KonsultasiDao.java @@ -1,23 +1,22 @@ package com.jasamedika.medifirst2000.dao; -import java.util.Date; -import java.util.List; -import java.util.Map; - +import com.jasamedika.medifirst2000.entities.Konsultasi; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 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.Konsultasi; +import java.util.Date; +import java.util.List; +import java.util.Map; @Repository("KonsultasiDao") public interface KonsultasiDao extends PagingAndSortingRepository, JpaSpecificationExecutor { @Query("select model from Konsultasi model where model.antrianPasienDiPeriksa.noRec=:noRec") - public List findAllByNoRecAntrian(@Param("noRec") String noRec); + List findAllByNoRecAntrian(@Param("noRec") String noRec); @Query("select new map (strukOrder.noRec as noRec, " + "ruanganAsal.id as idRuanganAsal, " + "ruanganAsal.namaRuangan as namaRuanganAsal, " + "ruanganTujuan.id as idRuanganTujuan, " @@ -28,29 +27,31 @@ public interface KonsultasiDao + "left join strukOrder.noRegistrasi pasienDaftar " + "left join pasienDaftar.pasien pasien, " + "AntrianPasienDiPeriksa antrian " + "where antrian.strukOrderId = strukOrder.noRec " + "and pasien.noCm = :noCm and to_char(strukOrder.tglOrder,'yyyy-MM-dd')between :startDate and :endDate") - public List> findRiwayatKonsultasi(@Param("noCm") String noCm, - @Param("startDate") String startDate, @Param("endDate") String endDate); + List> findRiwayatKonsultasi(@Param("noCm") String noCm, @Param("startDate") String startDate, + @Param("endDate") String endDate); @Query("select NEW Map(" + "a.noRec as noRecJawaban," + "a.keteranganLainnya as keteranganKonsultasi," + "a.jawabanKonsultasi as jawabanKonsultasi) " + "from PasienDiRujukKeIntExt a " + "left join a.noRegistrasi b " + "where b.noRec=:noRec") - public Map getIkhtiarKlinik(@Param("noRec") String noRec); + Map getIkhtiarKlinik(@Param("noRec") String noRec); @Query("select new Map(pd.noRegistrasi as noRegistrasi, " + "ps.namaPasien as namaPasien, " + "rk.namaRekanan as namaRekanan, " + "ru.namaRuangan as namaRuangan, " - + "to_char(pp.tglPelayanan,'yyyy-MM-dd HH:mm') as tglPelayanan, " + "pr.namaProduk as namaProduk, " + "pp.hargaJual as hargaJual, " - + "pg.namaLengkap as pegawaiTindakan, " + "dpj.namaLengkap as dokterPenanggungJawab) " - + "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp " + "left join ppp.kdpegawai pg " - + "inner join pp.produk pr " + "inner join pp.pasienDaftar apd " + "inner join pr.detailJenisProduk djp " + + "to_char(pp.tglPelayanan,'yyyy-MM-dd HH:mm') as tglPelayanan, " + "pr.namaProduk as namaProduk, " + + "pp.hargaJual as hargaJual, " + "pg.namaLengkap as pegawaiTindakan, " + + "dpj.namaLengkap as dokterPenanggungJawab) " + "from PelayananPasienPetugas ppp " + + "inner join ppp.pelayananPasien pp " + "left join ppp.kdpegawai pg " + "inner join pp.produk pr " + + "inner join pp.pasienDaftar apd " + "inner join pr.detailJenisProduk djp " + "inner join apd.pasienDaftar pd " + "inner join pd.pasien ps " + "left join pd.dokterPenanggungJawab dpj " + "inner join apd.ruangan ru " + "left join pd.rekanan rk " - + "where pp.tglPelayanan between :tglAwal and :tglAkhir " + "and ru.departemenId not in (:listIdDepartemen) " - + "and (pg.id is null or pg.id in (:listIdPegawai)) " + "and pr.id <> :idProduk " - + "and djp.jenisProdukId not in (:listIdJenisProduk) " + "and djp.id not in (:listIdDetailJenisProduk) " - + "order by dpj.namaLengkap, ru.namaRuangan") - public List> findAllKonsultasiTindakanKosong(@Param("tglAwal") Date tglAwal, + + "where pp.tglPelayanan between :tglAwal and :tglAkhir " + + "and ru.departemenId not in (:listIdDepartemen) " + "and (pg.id is null or pg.id in (:listIdPegawai)) " + + "and pr.id not in (:listKarcisIdProduk) " + "and djp.jenisProdukId not in (:listIdJenisProduk) " + + "and djp.id not in (:listIdDetailJenisProduk) " + "order by dpj.namaLengkap, ru.namaRuangan") + List> findAllKonsultasiTindakanKosong(@Param("tglAwal") Date tglAwal, @Param("tglAkhir") Date tglAkhir, @Param("listIdDepartemen") List listIdDepartemen, - @Param("listIdPegawai") List listIdPegawai, @Param("idProduk") Integer idProduk, + @Param("listIdPegawai") List listIdPegawai, + @Param("listKarcisIdProduk") List listKarcisIdProduk, @Param("listIdJenisProduk") List listIdJenisProduk, @Param("listIdDetailJenisProduk") List listIdDetailJenisProduk); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/KonsultasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/KonsultasiServiceImpl.java index abc45bba..8a77711c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/KonsultasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/KonsultasiServiceImpl.java @@ -1,41 +1,10 @@ package com.jasamedika.medifirst2000.service.impl; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -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.AntrianPasienDiPeriksaDao; -import com.jasamedika.medifirst2000.dao.JadwalDokterDao; -import com.jasamedika.medifirst2000.dao.KonsultasiDao; -import com.jasamedika.medifirst2000.dao.PasienDaftarDao; -import com.jasamedika.medifirst2000.dao.PasienDiRujukKeIntExtDao; -import com.jasamedika.medifirst2000.dao.RuanganDao; -import com.jasamedika.medifirst2000.dao.RunningNumberDao; -import com.jasamedika.medifirst2000.dao.StrukOrderDao; +import com.jasamedika.medifirst2000.dao.*; import com.jasamedika.medifirst2000.dto.RuanganJumlah; -import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa; -import com.jasamedika.medifirst2000.entities.JadwalDokter; -import com.jasamedika.medifirst2000.entities.Konsultasi; -import com.jasamedika.medifirst2000.entities.PasienDaftar; -import com.jasamedika.medifirst2000.entities.PasienDiRujukKeIntExt; -import com.jasamedika.medifirst2000.entities.Pegawai; -import com.jasamedika.medifirst2000.entities.Ruangan; -import com.jasamedika.medifirst2000.entities.RunningNumber; -import com.jasamedika.medifirst2000.entities.StrukOrder; +import com.jasamedika.medifirst2000.entities.*; import com.jasamedika.medifirst2000.enums.StatusAntrianEnum; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.AntrianPasienDiPeriksaService; @@ -48,6 +17,14 @@ import com.jasamedika.medifirst2000.util.StringUtil; import com.jasamedika.medifirst2000.vo.KonsultasiVO; import com.jasamedika.medifirst2000.vo.PegawaiVO; import com.jasamedika.medifirst2000.vo.RuanganVO; +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 java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; /** * Implement class for PAPSkriningGiziService @@ -97,7 +74,7 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta @Override public Map addKonsultasi(KonsultasiVO vo) { - Map result = new HashMap(); + Map result = new HashMap<>(); Konsultasi konsultasi = konsultasiConverter.transferVOToModel(vo, new Konsultasi()); AntrianPasienDiPeriksa antrian = antrianPasienDiPeriksaDao .findByNoRec(vo.getAntrianPasienDiPeriksa().getNoRec()); @@ -109,18 +86,16 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta Konsultasi resultModel = konsultasiDao.save(konsultasi); try { result.put("konsultasi", JsonUtil.ToMapObject(resultModel)); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new ServiceVOException(e.getMessage()); } return result; } @Override - @Transactional(readOnly = false) + @Transactional public Map addKonsultasi2(KonsultasiVO vo) { - Map result = new HashMap(); + Map result = new HashMap<>(); if (CommonUtil.isNotNullOrEmpty(vo.getNoRec())) { PasienDiRujukKeIntExt pasienDiRujukKeIntExt = pasienDiRujukKeIntExtDao.findOne(vo.getNoRec()); pasienDiRujukKeIntExt.setJawabanKonsultasi(vo.getJawabanKonsultasi()); @@ -132,46 +107,19 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta AntrianPasienDiPeriksa antrian = antrianPasienDiPeriksaDao .findByNoRec(vo.getAntrianPasienDiPeriksa().getNoRec()); PasienDaftar pasienDaftar = antrian.getPasienDaftar(); - Ruangan ruanganTujuan = null; + Ruangan ruanganTujuan; Integer hitungBilik = ruanganDao.countRuanganBilik(vo.getTujuanKonsultasi().getId()); - // System.out.println("QQQQQQQQQQQQQQQQ : "+" - // "+vo.getTujuanKonsultasi().getId()+" - // "+vo.getTanggalKonsultasi()); if (hitungBilik == 0) { ruanganTujuan = ruanganConverter.transferVOToModel(vo.getTujuanKonsultasi(), new Ruangan()); } else { - Ruangan r = findRuanganBilik(vo.getTujuanKonsultasi().getId(), vo.getTanggalKonsultasi()); - ruanganTujuan = r; + ruanganTujuan = findRuanganBilik(vo.getTujuanKonsultasi().getId(), vo.getTanggalKonsultasi()); } - // Ruangan - // ruanganTujuan=ruanganConverter.transferVOToModel(vo.getTujuanKonsultasi(), - // new Ruangan()); Ruangan ruanganAsal = antrian.getRuangan(); - // save konsultasi ke antrian pasien di periksa AntrianPasienDiPeriksa antrianPasienDiPeriksa = new AntrianPasienDiPeriksa(); antrianPasienDiPeriksa.setRuangan(ruanganTujuan); - StrukOrder strukOrder = new StrukOrder(); - strukOrder.setNoOrder(getRunningNumber("NoOrder")); - strukOrder.setTglOrder(new Date()); - strukOrder.setIsDelivered((byte) 1); - strukOrder.setQtyJenisProduk(1.0); - strukOrder.setNoCm(pasienDaftar.getPasien()); - strukOrder.setNoRegistrasi(pasienDaftar); - strukOrder.setQtyProduk(1.0); - strukOrder.setTotalBeaMaterai(0.0); - strukOrder.setTotalBiayaKirim(0.0); - strukOrder.setTotalBiayaTambahan(0.0); - strukOrder.setTotalHargaSatuan(0.0); - strukOrder.setTotalDiscount(0.0); - strukOrder.setTotalHarusDibayar(0.0); - strukOrder.setTotalPph(0.0); - strukOrder.setTotalPpn(0.0); - strukOrder.setRuanganTujuan(ruanganTujuan); - strukOrder.setRuangan(ruanganAsal); - strukOrder.setKeteranganOrder("Konsultasi"); - strukOrder.setPegawaiOrder(loginUserService.getLoginUser().getPegawai()); + StrukOrder strukOrder = setAndGetStrukOrder(pasienDaftar, ruanganTujuan, ruanganAsal); StrukOrder strukOrderSave = strukOrderDao.save(strukOrder); antrianPasienDiPeriksa.setStrukOrder(strukOrderSave); antrianPasienDiPeriksa.setTglRegistrasi(strukOrderSave.getTglOrder()); @@ -179,7 +127,6 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta PegawaiVO pegawaiVo = new PegawaiVO(); - // pilih dokter yang otomatis dan per quota List jadwalDokters = jadwalDokterDao.findJadwalByTanggalRuangan(ruanganTujuan.getId(), vo.getTanggalKonsultasi()); Integer maxQuota = 0; @@ -188,7 +135,7 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta maxQuota = jadwalDokter.getQuota(); } } - Boolean valid = false; + boolean valid = false; for (JadwalDokter jadwalDokter : jadwalDokters) { if (jadwalDokter.getQuota() != null && jadwalDokter.getQuota() < maxQuota) { valid = true; @@ -201,8 +148,7 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta } if (!valid) { for (JadwalDokter jadwalDokter : jadwalDokters) { - if (jadwalDokter.getQuota() == null || jadwalDokter.getQuota() == maxQuota) { - valid = true; + if (jadwalDokter.getQuota() == null || Objects.equals(jadwalDokter.getQuota(), maxQuota)) { if (jadwalDokter.getQuota() == null) jadwalDokter.setQuota(0); jadwalDokter.setQuota(jadwalDokter.getQuota() + 1); @@ -212,7 +158,7 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta break; } } - } // added by susy 2017-09-18 + } if (CommonUtil.isNotNullOrEmpty(pasienDaftar)) { pasienDaftar.setRuangan(ruanganTujuan); antrianPasienDiPeriksa.setPasienDaftar(pasienDaftar); @@ -252,15 +198,37 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta PasienDiRujukKeIntExt resultModel = pasienDiRujukKeIntExtDao.save(pasienDiRujukKeIntExt); try { result.put("konsultasi", JsonUtil.ToMapObject(resultModel)); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new ServiceVOException(e.getMessage()); } } return result; } + private StrukOrder setAndGetStrukOrder(PasienDaftar pasienDaftar, Ruangan ruanganTujuan, Ruangan ruanganAsal) { + StrukOrder strukOrder = new StrukOrder(); + strukOrder.setNoOrder(getRunningNumber()); + strukOrder.setTglOrder(new Date()); + strukOrder.setIsDelivered((byte) 1); + strukOrder.setQtyJenisProduk(1.0); + strukOrder.setNoCm(pasienDaftar.getPasien()); + strukOrder.setNoRegistrasi(pasienDaftar); + strukOrder.setQtyProduk(1.0); + strukOrder.setTotalBeaMaterai(0.0); + strukOrder.setTotalBiayaKirim(0.0); + strukOrder.setTotalBiayaTambahan(0.0); + strukOrder.setTotalHargaSatuan(0.0); + strukOrder.setTotalDiscount(0.0); + strukOrder.setTotalHarusDibayar(0.0); + strukOrder.setTotalPph(0.0); + strukOrder.setTotalPpn(0.0); + strukOrder.setRuanganTujuan(ruanganTujuan); + strukOrder.setRuangan(ruanganAsal); + strukOrder.setKeteranganOrder("Konsultasi"); + strukOrder.setPegawaiOrder(loginUserService.getLoginUser().getPegawai()); + return strukOrder; + } + @Override public KonsultasiVO add(KonsultasiVO vo) throws JpaSystemException, ServiceVOException { return null; @@ -292,29 +260,26 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta return null; } - @Transactional(readOnly = false) - private String getRunningNumber(String kegunaan) { - RunningNumber runningNumber = runningNumberDao.findByResetAndKegunaan("0", kegunaan); + @Transactional + private String getRunningNumber() { + RunningNumber runningNumber = runningNumberDao.findByResetAndKegunaan("0", "NoOrder"); - Integer number = (runningNumber.getNomerTerbaru() + (Integer) 1); + int number = (runningNumber.getNomerTerbaru() + (Integer) 1); runningNumber.setNomerTerbaru(runningNumber.getNomerTerbaru() + (Integer) 1); - String noOrderIntern = StringUtil.formatNumber(number.toString(), 6); + String noOrderIntern = StringUtil.formatNumber(Integer.toString(number), 6); runningNumberDao.save(runningNumber); return noOrderIntern; } private Ruangan findRuanganBilik(Integer id, Date tglRegistrasi) { - List output = new ArrayList(); - // List listRuangan=ruanganDao.findRuanganByParent(id); - List listRuangan = new ArrayList(); + List output = new ArrayList<>(); + List listRuangan = new ArrayList<>(); List listJadwal = jadwalDokterDao.findJadwalByTanggalRuanganBilik2(id, tglRegistrasi); for (JadwalDokter jd : listJadwal) { listRuangan.add(jd.getRuangan()); } for (Ruangan localR : listRuangan) { RuanganJumlah jml = new RuanganJumlah(); - // System.out.println("RUANGAN BILIK A : "+localR.getId()+" - // "+localR.getNamaRuangan()); List list = antrianPasienDiPeriksaDao.findRuanganByRuanganId(localR.getId(), DateUtil.formatDate(tglRegistrasi)); for (Object[] o : list) { @@ -337,21 +302,13 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta output.add(jml); } } - Collections.sort(output, new Comparator() { - @Override - public int compare(RuanganJumlah t, RuanganJumlah t1) { - int a = Integer.parseInt(String.valueOf(t.getCount() - t1.getCount())); - if (a == 0L) { - int a1 = t.getNamaRuangan().compareTo(t1.getNamaRuangan()); - return a1; - } else - return a; - } + output.sort((t, t1) -> { + int a = Integer.parseInt(String.valueOf(t.getCount() - t1.getCount())); + if (a == 0L) { + return t.getNamaRuangan().compareTo(t1.getNamaRuangan()); + } else + return a; }); - // for(RuanganJumlah l:output){ - // System.out.println("RUANGAN BILIK B : "+l.getCount()+" - // "+l.getIdRuangan()+" "+l.getNamaRuangan()+" "+l.getTglRegistrasi()); - // } Ruangan ruang = new Ruangan(); ruang.setId(output.get(0).getIdRuangan()); return ruang; @@ -360,10 +317,10 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta @Override public List> getRiwayatKonsultasi(String noCm, String startDate, String endDate) { List> data = konsultasiDao.findRiwayatKonsultasi(noCm, startDate, endDate); - List> result = new ArrayList>(); + List> result = new ArrayList<>(); for (Map temp : data) { String status = (String) temp.get("statusAntrian"); - Integer indeks = Integer.valueOf(status); + int indeks = Integer.parseInt(status); String statusAntrian = StatusAntrianEnum.values()[indeks].toString(); temp.put("status", statusAntrian); @@ -407,10 +364,9 @@ public class KonsultasiServiceImpl extends BaseVoServiceImpl implements Konsulta excJenisProduk.add(Master.JenisProduk.LAB_KLINIK); List idsRegDJPPenunjangLab = splitDataSettingDatafixed("penunjang_laboratorium"); + List listKarcisIdProduk = splitDataSettingDatafixed("listKarcisIdProduk"); - List> result = konsultasiDao.findAllKonsultasiTindakanKosong(tglAwal, tglAkhir, inapDanLab, - Arrays.asList(Master.Pegawai.ADMINISTRATOR), Master.Produk.KARCIS, excJenisProduk, idsRegDJPPenunjangLab); - - return result; + return konsultasiDao.findAllKonsultasiTindakanKosong(tglAwal, tglAkhir, inapDanLab, + Arrays.asList(Master.Pegawai.ADMINISTRATOR), listKarcisIdProduk, excJenisProduk, idsRegDJPPenunjangLab); } }