Update service pelayanan pasien

Pembuatan fitur duplikasi relasi petugas pelayanan karena split jumlah pelayanan di diskon paket
This commit is contained in:
Salman Manoe 2023-08-25 21:55:11 +07:00
parent 3c93817c32
commit 56160b11a3
2 changed files with 72 additions and 9 deletions

View File

@ -1,15 +1,14 @@
package com.jasamedika.medifirst2000.dao; package com.jasamedika.medifirst2000.dao;
import java.util.List; import com.jasamedika.medifirst2000.entities.PelayananPasienPetugas;
import java.util.Map;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.jasamedika.medifirst2000.entities.PelayananPasienPetugas; import java.util.List;
import java.util.Map;
/** /**
* Repository class for PelayananPasien * Repository class for PelayananPasien
@ -18,7 +17,6 @@ import com.jasamedika.medifirst2000.entities.PelayananPasienPetugas;
*/ */
@Repository("PelayananPasienPetugasDao") @Repository("PelayananPasienPetugasDao")
public interface PelayananPasienPetugasDao extends PagingAndSortingRepository<PelayananPasienPetugas, String> { public interface PelayananPasienPetugasDao extends PagingAndSortingRepository<PelayananPasienPetugas, String> {
@Query("select new Map(ppp.pelayananPasienId as pelayananId, count(ppp.pelayananPasienId) as sumPelayananId) " @Query("select new Map(ppp.pelayananPasienId as pelayananId, count(ppp.pelayananPasienId) as sumPelayananId) "
+ "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp " + "from PelayananPasienPetugas ppp " + "inner join ppp.pelayananPasien pp "
+ "where ppp.statusEnabled is true " + "and pp.statusEnabled is true " + "where ppp.statusEnabled is true " + "and pp.statusEnabled is true "
@ -48,4 +46,6 @@ public interface PelayananPasienPetugasDao extends PagingAndSortingRepository<Pe
List<Map<String, Object>> findDokterByTindakan(@Param("produkId") Integer idProduk, List<Map<String, Object>> findDokterByTindakan(@Param("produkId") Integer idProduk,
@Param("kelompokKerjaId") Integer idKelompokKerja, Pageable pageable); @Param("kelompokKerjaId") Integer idKelompokKerja, Pageable pageable);
@Query("select ppp from PelayananPasienPetugas ppp left join ppp.pelayananPasien pp where pp.noRec = :noRec")
List<PelayananPasienPetugas> findByPelayananPasien(@Param("noRec") String noRec);
} }

View File

@ -105,6 +105,9 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
@Autowired @Autowired
private HargaNettoProdukByKelasDao hargaNettoProdukByKelasDao; private HargaNettoProdukByKelasDao hargaNettoProdukByKelasDao;
@Autowired
private PelayananPasienPetugasDao pelayananPasienPetugasDao;
@Override @Override
public Map<String, Object> savePelayananPasien(PelayananPasienVO vo) { public Map<String, Object> savePelayananPasien(PelayananPasienVO vo) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
@ -2270,8 +2273,8 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
.checkExisting(voucher.getKelasId(), d.getProdukPaketId()); .checkExisting(voucher.getKelasId(), d.getProdukPaketId());
if (CommonUtil.isNullOrEmpty(tarifProdukPaket) && tarifProdukPaket.isEmpty()) if (CommonUtil.isNullOrEmpty(tarifProdukPaket) && tarifProdukPaket.isEmpty())
throw new ServiceVOException("Harga tarif tidak ditemukan untuk produk " throw new ServiceVOException("Harga tarif tidak ditemukan untuk produk "
+ d.getProduk().getNamaProduk() + " (" + d.getProdukPaket().getNamaProduk() + d.getProduk().getNamaProduk() + " (" + d.getProdukPaket().getNamaProduk() + ") dan kelas "
+ ") dan kelas " + voucher.getKelas().getNamaKelas()); + voucher.getKelas().getNamaKelas());
}); });
} }
{ {
@ -2318,12 +2321,14 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
{ {
List<PelayananPasien> pelayanan = new ArrayList<>(); List<PelayananPasien> pelayanan = new ArrayList<>();
List<PelayananPasienDetail> detailPelayanan = new ArrayList<>(); List<PelayananPasienDetail> detailPelayanan = new ArrayList<>();
List<PelayananPasienPetugas> petugasPelayanan = new ArrayList<>();
dtoList.forEach(dto -> { dtoList.forEach(dto -> {
Optional<PelayananPasien> pelayananReducedQty = pelayananChecked.stream() Optional<PelayananPasien> pelayananReducedQty = pelayananChecked.stream()
.filter(p -> p.getNoRec().equals(dto.getNoRec())) .filter(p -> p.getNoRec().equals(dto.getNoRec()))
.filter(p -> !p.getJumlah().equals(dto.getJumlah())).findFirst(); .filter(p -> !p.getJumlah().equals(dto.getJumlah())).findFirst();
pelayananReducedQty.ifPresent(p -> { pelayananReducedQty.ifPresent(p -> {
List<PelayananPasienDetail> splitDetailPelayanan = new ArrayList<>(); List<PelayananPasienDetail> splitDetailPelayanan = new ArrayList<>();
List<PelayananPasienPetugas> splitPetugasPelayanan = new ArrayList<>();
List<PelayananPasien> splitPelayanan = copyPelayananSplitQty(p); List<PelayananPasien> splitPelayanan = copyPelayananSplitQty(p);
Optional<PelayananPasien> origin = splitPelayanan.stream().filter(cp -> cp.getNoRec() != null) Optional<PelayananPasien> origin = splitPelayanan.stream().filter(cp -> cp.getNoRec() != null)
.findFirst(); .findFirst();
@ -2341,10 +2346,18 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
.filter(d -> d.getNoRec() != null).collect(Collectors.toList()); .filter(d -> d.getNoRec() != null).collect(Collectors.toList());
detailPelayanan.addAll(originDetail); detailPelayanan.addAll(originDetail);
} }
{
List<PelayananPasienPetugas> petugasOrigin = pelayananPasienPetugasDao
.findByPelayananPasien(origin.get().getNoRec());
splitPetugasPelayanan = copyPelayananPasienPetugasSplitQty(petugasOrigin);
List<PelayananPasienPetugas> originPetugas = splitPetugasPelayanan.stream()
.filter(pt -> pt.getNoRec() != null).collect(Collectors.toList());
petugasPelayanan.addAll(originPetugas);
}
pelayanan.add(origin.get()); pelayanan.add(origin.get());
} }
Optional<PelayananPasien> duplicate = splitPelayanan.stream() Optional<PelayananPasien> duplicate = splitPelayanan.stream().filter(cp -> cp.getNoRec() == null)
.filter(cp -> cp.getNoRec() == null).findFirst(); .findFirst();
if (duplicate.isPresent()) { if (duplicate.isPresent()) {
duplicate.get().setJumlah(pelayananReducedQty.get().getJumlah() - dto.getJumlah()); duplicate.get().setJumlah(pelayananReducedQty.get().getJumlah() - dto.getJumlah());
duplicate.get().setIsPaket(false); duplicate.get().setIsPaket(false);
@ -2355,6 +2368,12 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
duplicateDetail.forEach(d -> d.setPelayananPasien(duplicate.get())); duplicateDetail.forEach(d -> d.setPelayananPasien(duplicate.get()));
detailPelayanan.addAll(duplicateDetail); detailPelayanan.addAll(duplicateDetail);
} }
{
List<PelayananPasienPetugas> duplicatePetugas = splitPetugasPelayanan.stream()
.filter(pt -> pt.getNoRec() == null).collect(Collectors.toList());
duplicatePetugas.forEach(dp -> dp.setPelayananPasien(duplicate.get()));
petugasPelayanan.addAll(duplicatePetugas);
}
pelayanan.add(duplicate.get()); pelayanan.add(duplicate.get());
} }
}); });
@ -2362,6 +2381,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
if (CommonUtil.isNotNullOrEmpty(pelayanan)) { if (CommonUtil.isNotNullOrEmpty(pelayanan)) {
pelayananPasienDao.save(pelayanan); pelayananPasienDao.save(pelayanan);
pelayananPasienDetailDao.save(detailPelayanan); pelayananPasienDetailDao.save(detailPelayanan);
pelayananPasienPetugasDao.save(petugasPelayanan);
} }
} }
} }
@ -2578,4 +2598,47 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
}); });
return duplicateDetail; return duplicateDetail;
} }
private List<PelayananPasienPetugas> copyPelayananPasienPetugasSplitQty(
List<PelayananPasienPetugas> originPetugas) {
List<PelayananPasienPetugas> duplicatePetugas = new ArrayList<>();
originPetugas.forEach(origin -> {
PelayananPasienPetugas duplicate;
duplicate = origin;
{
AntrianPasienDiPeriksa nomasuk = origin.getNomasuk();
if (CommonUtil.isNotNullOrEmpty(nomasuk))
duplicate.setNomasuk(nomasuk);
}
{
AsalProduk kdasalproduk = origin.getKdasalproduk();
if (CommonUtil.isNotNullOrEmpty(kdasalproduk))
duplicate.setKdasalproduk(kdasalproduk);
}
{
JenisPetugasPelaksana kdjenispetugaspe = origin.getKdjenispetugaspe();
if (CommonUtil.isNotNullOrEmpty(kdjenispetugaspe))
duplicate.setKdjenispetugaspe(kdjenispetugaspe);
}
{
Pegawai kdpegawai = origin.getKdpegawai();
if (CommonUtil.isNotNullOrEmpty(kdpegawai))
duplicate.setKdpegawai(kdpegawai);
}
{
Produk kdproduk = origin.getKdproduk();
if (CommonUtil.isNotNullOrEmpty(kdproduk))
duplicate.setKdproduk(kdproduk);
}
{
Ruangan kdruangan = origin.getKdruangan();
if (CommonUtil.isNotNullOrEmpty(kdruangan))
duplicate.setKdruangan(kdruangan);
}
duplicate.setNoRec(null);
duplicatePetugas.add(duplicate);
duplicatePetugas.add(origin);
});
return duplicatePetugas;
}
} }