Merge branch 'dev/report/konsultasi-kosong' into prod/base

This commit is contained in:
Salman Manoe 2024-11-01 10:52:06 +07:00
commit cb6b91f1ed
2 changed files with 85 additions and 128 deletions

View File

@ -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<Konsultasi, String>, JpaSpecificationExecutor<Konsultasi> {
@Query("select model from Konsultasi model where model.antrianPasienDiPeriksa.noRec=:noRec")
public List<Konsultasi> findAllByNoRecAntrian(@Param("noRec") String noRec);
List<Konsultasi> 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<Map<String, Object>> findRiwayatKonsultasi(@Param("noCm") String noCm,
@Param("startDate") String startDate, @Param("endDate") String endDate);
List<Map<String, Object>> 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<String, Object> getIkhtiarKlinik(@Param("noRec") String noRec);
Map<String, Object> 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<Map<String, Object>> 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<Map<String, Object>> findAllKonsultasiTindakanKosong(@Param("tglAwal") Date tglAwal,
@Param("tglAkhir") Date tglAkhir, @Param("listIdDepartemen") List<Integer> listIdDepartemen,
@Param("listIdPegawai") List<Integer> listIdPegawai, @Param("idProduk") Integer idProduk,
@Param("listIdPegawai") List<Integer> listIdPegawai,
@Param("listKarcisIdProduk") List<Integer> listKarcisIdProduk,
@Param("listIdJenisProduk") List<Integer> listIdJenisProduk,
@Param("listIdDetailJenisProduk") List<Integer> listIdDetailJenisProduk);

View File

@ -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<String, Object> addKonsultasi(KonsultasiVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> 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<String, Object> addKonsultasi2(KonsultasiVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> 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<JadwalDokter> 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<RuanganJumlah> output = new ArrayList<RuanganJumlah>();
// List<Ruangan> listRuangan=ruanganDao.findRuanganByParent(id);
List<Ruangan> listRuangan = new ArrayList<Ruangan>();
List<RuanganJumlah> output = new ArrayList<>();
List<Ruangan> listRuangan = new ArrayList<>();
List<JadwalDokter> 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<Object[]> 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<RuanganJumlah>() {
@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<Map<String, Object>> getRiwayatKonsultasi(String noCm, String startDate, String endDate) {
List<Map<String, Object>> data = konsultasiDao.findRiwayatKonsultasi(noCm, startDate, endDate);
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> result = new ArrayList<>();
for (Map<String, Object> 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<Integer> idsRegDJPPenunjangLab = splitDataSettingDatafixed("penunjang_laboratorium");
List<Integer> listKarcisIdProduk = splitDataSettingDatafixed("listKarcisIdProduk");
List<Map<String, Object>> 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);
}
}