From 393398a1715a061c8e348b0af0c9f68e68dcf176 Mon Sep 17 00:00:00 2001 From: salmanoersabhk Date: Fri, 15 Jul 2022 17:55:33 +0700 Subject: [PATCH] Update IndekKinerjaService Perbaikan rumus menghitung perkiraan kontribusi menjadi berdasarkan komponen harga tarif --- .../medifirst2000/constants/Master.java | 8 +-- .../dao/HargaNettoProdukByKelasDDao.java | 17 +++--- .../service/impl/IndekKinerjaServiceImpl.java | 53 ++++++++++++++++++- .../entities/HargaNettoProdukByKelas.java | 2 + .../entities/HargaNettoProdukByKelasD.java | 2 + .../medifirst2000/entities/KomponenHarga.java | 29 ++++------ 6 files changed, 81 insertions(+), 30 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index d67e4037..de3f4257 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -127,10 +127,10 @@ public class Master { } public static final class JenisPetugasPelaksana { - public static final int ASISTEN_SPESIALIS = 13; - public static final int DOKTER_PEMERIKSA = 4; - public static final int DOKTER_ANASTESI = 6; - public static final int PETUGAS_PELAKSANA = 2; + public static final Integer ASISTEN_SPESIALIS = 13; + public static final Integer DOKTER_PEMERIKSA = 4; + public static final Integer DOKTER_ANASTESI = 6; + public static final Integer PETUGAS_PELAKSANA = 2; public static final Integer[] MEDIS_UTAMA = { 4, 6, 13 }; public static final Integer[] DOKTER_ANASTESI_OR_ASISTEN_SPESIALIS = { 6, 13 }; diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDDao.java index 65c22b50..c68a14a9 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HargaNettoProdukByKelasDDao.java @@ -1,6 +1,7 @@ package com.jasamedika.medifirst2000.dao; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; @@ -16,12 +17,16 @@ public interface HargaNettoProdukByKelasDDao extends PagingAndSortingRepository< public List findProdByKelas(@Param("produkId") Integer produkId, @Param("kelasId") Integer kelasId, @Param("asalProdukId") Integer asalProdukId, @Param("jenisTarifId") Integer jenisTarifId); - - @Query("select a from HargaNettoProdukByKelasD a " - + "left join a.kelas b " - + "left join a.produk d " + + @Query("select a from HargaNettoProdukByKelasD a " + "left join a.kelas b " + "left join a.produk d " + "where b.id=:kelasId and d.id=:produkId") - public List findByKelasNProduk( - @Param("kelasId") Integer kelasId, + public List findByKelasNProduk(@Param("kelasId") Integer kelasId, @Param("produkId") Integer produkId); + + @Query("select hnd.hargaNetto1 " + "from HargaNettoProdukByKelasD hnd " + "inner join hnd.produk prd " + + "inner join hnd.kelas kls " + "where hnd.statusEnabled is true " + "and prd.statusEnabled is true " + + "and kls.statusEnabled is true " + "and hnd.komponenHargaId = :komponenHargaId " + + "and hnd.produkId = :produkId " + "and hnd.kelasId = :kelasId") + public Optional findHargetNetto1Komponen(@Param("komponenHargaId") Integer idKomponenHarga, + @Param("produkId") Integer idProduk, @Param("kelasId") Integer idKelas); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java index df2ee0ed..5325f45c 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IndekKinerjaServiceImpl.java @@ -18,6 +18,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import org.joda.time.Chronology; import org.joda.time.chrono.ISOChronology; @@ -30,6 +31,7 @@ import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.CustomIndexKerjaDao; import com.jasamedika.medifirst2000.dao.DetailLogbookDokterDao; +import com.jasamedika.medifirst2000.dao.HargaNettoProdukByKelasDDao; import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao; import com.jasamedika.medifirst2000.dao.IndekKinerjaDao; import com.jasamedika.medifirst2000.dao.IndeksKinerjaIndividuDao; @@ -166,6 +168,9 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK @Autowired private DetailLogbookDokterDao detailLogbookDokterDao; + @Autowired + private HargaNettoProdukByKelasDDao detailHargaNettoDao; + @Autowired private IndeksKinerjaDaoCustom indeksKinerjaDaoCustom; @@ -3153,7 +3158,29 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK isDiskonJasamedis1); pointQty = point * totalProduk1.doubleValue(); formatPointQty = Double.parseDouble(df.format(pointQty)); - formatRpKontribusi = totalProduk1 * harga; + + if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA + .equals(mapResult1.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER, + Integer.parseInt(mapResult1.get("idProduk").toString()), + Integer.parseInt(mapResult1.get("idKelas").toString())); + formatRpKontribusi = totalProduk1 * nettoKomponen.orElse(0.0); + } else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI + .equals(mapResult1.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER_ANASTESI, + Integer.parseInt(mapResult1.get("idProduk").toString()), + Integer.parseInt(mapResult1.get("idKelas").toString())); + formatRpKontribusi = totalProduk1 * nettoKomponen.orElse(0.0); + } else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS + .equals(mapResult1.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_ASISTEN_SPESIALIS, + Integer.parseInt(mapResult1.get("idProduk").toString()), + Integer.parseInt(mapResult1.get("idKelas").toString())); + formatRpKontribusi = totalProduk1 * nettoKomponen.orElse(0.0); + } mapResult1.put("totalKonsul", totalKonsul1.longValue()); mapResult1.put("totalVisit", totalVisit1.longValue()); @@ -3211,7 +3238,29 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK isDiskonJasamedis2); pointQty = point * totalProduk2.doubleValue(); formatPointQty = Double.parseDouble(df.format(pointQty)); - formatRpKontribusi = totalProduk2 * harga; + + if (Master.JenisPetugasPelaksana.DOKTER_PEMERIKSA + .equals(mapResult2.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER, + Integer.parseInt(mapResult2.get("idProduk").toString()), + Integer.parseInt(mapResult2.get("idKelas").toString())); + formatRpKontribusi = totalProduk2 * nettoKomponen.orElse(0.0); + } else if (Master.JenisPetugasPelaksana.DOKTER_ANASTESI + .equals(mapResult2.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_DOKTER_ANASTESI, + Integer.parseInt(mapResult2.get("idProduk").toString()), + Integer.parseInt(mapResult2.get("idKelas").toString())); + formatRpKontribusi = totalProduk2 * nettoKomponen.orElse(0.0); + } else if (Master.JenisPetugasPelaksana.ASISTEN_SPESIALIS + .equals(mapResult2.get("idJenisPelaksana"))) { + Optional nettoKomponen = detailHargaNettoDao.findHargetNetto1Komponen( + Master.KomponenHarga.JASA_ASISTEN_SPESIALIS, + Integer.parseInt(mapResult2.get("idProduk").toString()), + Integer.parseInt(mapResult2.get("idKelas").toString())); + formatRpKontribusi = totalProduk2 * nettoKomponen.orElse(0.0); + } mapResult2.put("totalKonsul", totalKonsul2.longValue()); mapResult2.put("totalVisit", totalVisit2.longValue()); diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelas.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelas.java index cadb72cf..ae60487b 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelas.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelas.java @@ -24,6 +24,8 @@ import javax.persistence.Id; @Table(name = "HargaNettoProdukByKelas_M") public class HargaNettoProdukByKelas extends BaseMaster { + private static final long serialVersionUID = 9094957646615611317L; + public HargaNettoProdukByKelas(Double hargaSatuan, Integer id) { super(); this.hargaSatuan = hargaSatuan; diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelasD.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelasD.java index 7c9e0f50..ebcd9bed 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelasD.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/HargaNettoProdukByKelasD.java @@ -24,6 +24,8 @@ import com.jasamedika.medifirst2000.helper.Caption; @Table(name = "HargaNettoProdukByKelasD_M") public class HargaNettoProdukByKelasD extends BaseMaster { + private static final long serialVersionUID = -2040691507588284089L; + @NotNull(message = "Factor Rate tidak boleh kosong") @Column(name = "FactorRate", nullable = false) @Caption(value = "Factor Rate") diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/KomponenHarga.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/KomponenHarga.java index 1372da6f..d0053e6d 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/KomponenHarga.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/KomponenHarga.java @@ -1,26 +1,17 @@ package com.jasamedika.medifirst2000.entities; -import java.io.Serializable; -import org.hibernate.envers.Audited; -import java.util.HashSet; -import java.util.Set; - -import javax.persistence.*; - -import org.hibernate.validator.constraints.NotEmpty; - -import com.jasamedika.medifirst2000.base.BaseMaster; -import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.internal.util.logging.Messages; - -import com.fasterxml.jackson.annotation.JsonManagedReference; -import com.jasamedika.medifirst2000.base.BaseMaster; -import com.jasamedika.medifirst2000.helper.Caption; -import org.hibernate.envers.Audited; +import javax.persistence.Column; +import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +import com.jasamedika.medifirst2000.base.BaseMaster; +import com.jasamedika.medifirst2000.helper.Caption; /** * class KomponenHarga @@ -30,6 +21,8 @@ import javax.persistence.Id; @Entity // @Audited @Table(name = "KomponenHarga_M") public class KomponenHarga extends BaseMaster { + private static final long serialVersionUID = 2283865782290922330L; + @ManyToOne @JoinColumn(name = "ObjectDepartemenFk")