From 228d57994d8d49105ec41e632f0d949407c5cf90 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Wed, 16 Mar 2022 11:40:35 +0700 Subject: [PATCH] Update IkiDanRemunerasiController - Penerapan aturan akses skor kelompok kerja pada daftar tindakan belum ada skor - Perbaikan service daftar tindakan belum ada skor melibatkan daftar mapping skor kelompok kerja - Pembuatan service simpan all data mapping produk kelompok kerja - pembuatan service simpan dan delete single data mapping produk kelompok kerja - Pembuatan service tampilan daftar tindakan belum ada skor di skoring tindakan medis - Pembuatan service tampilan daftar kelompok kerja berdasarkan tindakan yang belum ada skor - Perbaikan service deskripsi tindakan belum ada skor melibatkan dokter kelompok kerja dan penerapan multi thread --- .../dao/MapProdukKelompokKerjaDao.java | 49 ++++ .../dao/PelayananPasienPetugasDao.java | 11 +- .../dao/SkoringTindakanMedisDao.java | 19 +- .../medifirst2000/dao/SubUnitKerjaDao.java | 10 +- .../MapProdukKelompokKerjaService.java | 25 ++ .../service/SkoringTindakanMedisService.java | 9 +- .../MapProdukKelompokKerjaServiceImpl.java | 204 ++++++++++++++++ .../impl/SkoringTindakanMedisServiceImpl.java | 230 ++++++++++-------- .../IkiDanRemunerasiController.java | 119 ++++++++- 9 files changed, 563 insertions(+), 113 deletions(-) create mode 100644 jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukKelompokKerjaDao.java create mode 100644 jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukKelompokKerjaService.java create mode 100644 jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukKelompokKerjaServiceImpl.java diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukKelompokKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukKelompokKerjaDao.java new file mode 100644 index 00000000..d20eaf28 --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapProdukKelompokKerjaDao.java @@ -0,0 +1,49 @@ +package com.jasamedika.medifirst2000.dao; + +import java.util.List; +import java.util.Map; + +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.MapProdukKelompokKerja; + +/** + * @author salmanoe + * @since Mar 9, 2022 + */ +@Repository("mapProdukKelompokKerjaDao") +public interface MapProdukKelompokKerjaDao extends PagingAndSortingRepository { + + String strAllMapping = "select new Map(mpk.noRec as noRec," + "skj.id as kelompokKerjaId,skj.name as kelompokKerja," + + "prd.id as produkId,prd.namaProduk as produk) " + "from MapProdukKelompokKerja mpk " + + "inner join mpk.kelompokKerja skj " + "inner join mpk.produk prd " + "where mpk.statusEnabled is true "; + + String whrKelompokKerja = "and mpk.kelompokKerjaId in (:listKelompokKerjaId) "; + + String srtKkProduk = "order by mpk.kelompokKerjaId, mpk.produkId"; + + /** + * @return Daftar Mapping Produk - Kelompok Kerja + */ + @Query(strAllMapping + srtKkProduk) + List> findAllMapping(); + + /** + * @param listIdKelompokKerja Daftar ID Kelompok Kerja + * @return Daftar Mapping Produk - Kelompok Kerja + */ + @Query(strAllMapping + whrKelompokKerja + srtKkProduk) + List> findAllMapping(@Param("listKelompokKerjaId") List listIdKelompokKerja); + + @Query("select distinct new Map(prd.id as id,prd.namaProduk as namaProduk) " + "from MapProdukKelompokKerja mpk " + + "inner join mpk.produk prd " + "order by prd.namaProduk") + List> findProdukMapping(); + + @Query("select new Map(mpk.kelompokKerjaId as kelompokKerjaId,mpk.noRec as noRec) " + + "from MapProdukKelompokKerja mpk " + "where mpk.produkId = :produkId " + "order by mpk.kelompokKerjaId") + List> findMappingByProduk(@Param("produkId") Integer idProduk); + +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java index b1b1ba77..ce4ef4c1 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PelayananPasienPetugasDao.java @@ -39,10 +39,13 @@ public interface PelayananPasienPetugasDao extends PagingAndSortingRepository> findReferensiSkorPelayananAnestesi(@Param("listPelayananId") List listPelayananId, @Param("listKsmId") List listKsmId); - @Query("select new Map(pgw.id as id,pgw.namaLengkap as namaLengkap) " + "from PelayananPasienPetugas ppp " + @Query("select new Map(pgw.id as id,pgw.namaLengkap as namaLengkap) " + + "from PelayananPasienPetugas ppp, MapPegawaiJabatanToUnitKerja mpj " + "inner join ppp.pelayananPasien plp " + "inner join ppp.kdpegawai pgw " - + "where ppp.ObjectJenisPetugasPeId = 4 " + "and plp.statusEnabled is true " - + "and plp.produkId = :produkId " + "order by plp.tglPelayanan desc") - List> findDokterPemeriksaByTindakan(@Param("produkId") Integer idProduk, Pageable pageable); + + "where ppp.ObjectPegawaiId = mpj.pegawaiId " + "and mpj.pegawaiId = pgw.id " + + "and ppp.statusEnabled is true " + "and plp.statusEnabled is true " + "and plp.produkId = :produkId " + + "and mpj.subUnitKerjaPegawaiId = :kelompokKerjaId " + "order by plp.tglPelayanan desc") + List> findDokterByTindakan(@Param("produkId") Integer idProduk, + @Param("kelompokKerjaId") Integer idKelompokKerja, Pageable pageable); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java index ff3fea1b..35666e3d 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SkoringTindakanMedisDao.java @@ -169,10 +169,25 @@ public interface SkoringTindakanMedisDao extends PagingAndSortingRepository> findSkoringLogbookDokter(@Param("bulan") String bulan, @Param("listPegawaiId") List listIdPegawai, @Param("listKsmId") List listIdKsm); + String strProdukScored = "select distinct new Map(stm.kelompokKerjaId as kelompokKerjaId, stm.produkId as produkId) " + + "from SkoringTindakanMedis stm " + "where stm.statusEnabled is true "; + + String whrKelompokKerja = "and stm.kelompokKerjaId in (:listKelompokKerjaId) "; + + String srtKkProduk = "order by stm.kelompokKerjaId, stm.produkId"; + /** * @return Daftar id produk sudah dilakukan skor remunerasi */ - @Query("select distinct stm.produkId from SkoringTindakanMedis stm where stm.statusEnabled is true order by stm.produkId") - List findProdukScored(); + @Query(strProdukScored + srtKkProduk) + List> findProdukScored(); + + /** + * @param listIdKelompokKerja + * Daftar ID Kelompok Kerja + * @return Daftar id produk sudah dilakukan skor remunerasi + */ + @Query(strProdukScored + whrKelompokKerja + srtKkProduk) + List> findProdukScored(@Param("listKelompokKerjaId") List listIdKelompokKerja); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SubUnitKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SubUnitKerjaDao.java index 8406b459..6ddc39df 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SubUnitKerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/SubUnitKerjaDao.java @@ -52,8 +52,10 @@ public interface SubUnitKerjaDao extends PagingAndSortingRepository getSubunitKerjaByUnitKerja(@Param("listUnitKerjaId") List listIdUnitKerja); /** - * @param listIdUnitKerja Kelompok unit kerja tertentu - * @return Daftar unit kerja dan subunit kerja dari kelompok unit kerja tertentu + * @param listIdUnitKerja + * Kelompok unit kerja tertentu + * @return Daftar unit kerja dan subunit kerja dari kelompok unit kerja + * tertentu */ @Query("select new Map(skr.id as subunitKerjaId, skr.name as subunitKerja, " + "ukr.id as unitKerjaId, ukr.name as unitKerja) " + "from SubUnitKerjaPegawai skr " @@ -70,4 +72,8 @@ public interface SubUnitKerjaDao extends PagingAndSortingRepository> getSubUnitKerjaCustomByUnitKerja(@Param("idUnitKerja") Integer idUnitKerja); + @Query("select new Map(skj.id as id,skj.name as subunitKerja) " + "from SubUnitKerjaPegawai skj " + + "where skj.statusEnabled is true " + "and lower(skj.name) like 'kk%' " + "order by skj.id") + List> findAllKelompokKerjaMedis(); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukKelompokKerjaService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukKelompokKerjaService.java new file mode 100644 index 00000000..4f2ba6cc --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MapProdukKelompokKerjaService.java @@ -0,0 +1,25 @@ +package com.jasamedika.medifirst2000.service; + +import java.util.List; +import java.util.Map; + +import org.springframework.orm.jpa.JpaSystemException; + +import com.jasamedika.medifirst2000.entities.MapProdukKelompokKerja; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.vo.MapProdukKelompokKerjaVO; + +/** + * @author salmanoe + * @since Mar 9, 2022 + */ +public interface MapProdukKelompokKerjaService + extends BaseVoService { + + public List addAll(List vos) throws JpaSystemException, ServiceVOException; + + public List> getAllProduk() throws JpaSystemException; + + public List> getAllKelompokKerja(Integer idProduk) throws JpaSystemException; + +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanMedisService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanMedisService.java index 284e276f..1b7008cb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanMedisService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/SkoringTindakanMedisService.java @@ -22,17 +22,22 @@ public interface SkoringTindakanMedisService Map findAkses(Integer idPegawai) throws JpaSystemException; /** + * + * @param listIdKelompokKerja + * Daftar ID Kelompok Kerja * @return Daftar tindakan belum ada skor */ - public List> findTindakanBelumAdaSkor(); + public List> findTindakanBelumAdaSkor(List listIdKelompokKerja); /** * @param idProduk * ID tindakan medis + * @param idKelompokKerja + * ID kelompok kerja * @return Deskripsi Tindakan medis : tarif, ruangan pemeriksaan, dan dokter * pemeriksa terakhir */ - public Map findDeskripsiSkoringTindakanMedis(Integer idProduk); + public Map findDeskripsiSkoringTindakanMedis(Integer idProduk, Integer idKelompokKerja); /** * @return Daftar tindakan logbook skor dokter diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukKelompokKerjaServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukKelompokKerjaServiceImpl.java new file mode 100644 index 00000000..e8b54e2f --- /dev/null +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukKelompokKerjaServiceImpl.java @@ -0,0 +1,204 @@ +package com.jasamedika.medifirst2000.service.impl; + +import java.util.ArrayList; +import java.util.Comparator; +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 com.jasamedika.medifirst2000.converter.BaseConverterImpl; +import com.jasamedika.medifirst2000.dao.MapProdukKelompokKerjaDao; +import com.jasamedika.medifirst2000.dao.SubUnitKerjaDao; +import com.jasamedika.medifirst2000.entities.MapProdukKelompokKerja; +import com.jasamedika.medifirst2000.entities.Produk; +import com.jasamedika.medifirst2000.entities.SubUnitKerjaPegawai; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.MapProdukKelompokKerjaService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.vo.MapProdukKelompokKerjaVO; +import com.jasamedika.medifirst2000.vo.ProdukVO; +import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO; + +/** + * @author salmanoe + * @since Mar 9, 2022 + */ +@Service("mapProdukKelompokKerjaService") +public class MapProdukKelompokKerjaServiceImpl extends BaseVoServiceImpl implements MapProdukKelompokKerjaService { + + @Autowired + private BaseConverterImpl mappingConverter; + + @Autowired + private BaseConverterImpl produkConverter; + + @Autowired + private BaseConverterImpl subunitKerjaConverter; + + @Autowired + private MapProdukKelompokKerjaDao mapProdukKelompokKerjaDao; + + @Autowired + private SubUnitKerjaDao subUnitKerjaDao; + + @Override + public MapProdukKelompokKerjaVO add(MapProdukKelompokKerjaVO vo) throws JpaSystemException, ServiceVOException { + Produk produk = produkConverter.transferVOToModel(vo.getProduk(), new Produk()); + SubUnitKerjaPegawai kelompokKerja = subunitKerjaConverter.transferVOToModel(vo.getKelompokKerja(), + new SubUnitKerjaPegawai()); + + MapProdukKelompokKerja mapping = mappingConverter.transferVOToModel(vo, new MapProdukKelompokKerja()); + mapping.setProduk(produk); + mapping.setKelompokKerja(kelompokKerja); + + MapProdukKelompokKerja resultModel = mapProdukKelompokKerjaDao.save(mapping); + + MapProdukKelompokKerjaVO resultVO = new MapProdukKelompokKerjaVO(); + resultVO = mappingConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + + @Override + public List addAll(List vos) throws JpaSystemException, ServiceVOException { + List result = new ArrayList<>(); + + List mappings = new ArrayList<>(); + for (MapProdukKelompokKerjaVO vo : vos) { + Produk produk = produkConverter.transferVOToModel(vo.getProduk(), new Produk()); + SubUnitKerjaPegawai kelompokKerja = subunitKerjaConverter.transferVOToModel(vo.getKelompokKerja(), + new SubUnitKerjaPegawai()); + + MapProdukKelompokKerja mapping = mappingConverter.transferVOToModel(vo, new MapProdukKelompokKerja()); + mapping.setProduk(produk); + mapping.setKelompokKerja(kelompokKerja); + + mappings.add(mapping); + } + + List addAll = new ArrayList<>(); + List removeAll = new ArrayList<>(); + for (MapProdukKelompokKerja mapping : mappings) { + if (mapping.getStatusEnabled()) { + addAll.add(mapping); + } else { + removeAll.add(mapping); + } + } + + // save all mapping + Iterable models = mapProdukKelompokKerjaDao.save(addAll); + for (MapProdukKelompokKerja model : models) { + MapProdukKelompokKerjaVO vo = new MapProdukKelompokKerjaVO(); + vo = mappingConverter.transferModelToVO(model, vo); + result.add("MapProdukKelompokKerja(" + vo.getNoRec() + ") added"); + } + + // delete all mapping + mapProdukKelompokKerjaDao.delete(removeAll); + for (MapProdukKelompokKerja model : removeAll) { + result.add("Produk(" + model.getProduk().getId() + ") - SubUnitKerjaPegawai(" + + model.getKelompokKerja().getId() + ") removed"); + } + + return result; + } + + @Override + public MapProdukKelompokKerjaVO update(MapProdukKelompokKerjaVO vo) throws JpaSystemException, ServiceVOException { + MapProdukKelompokKerja mappingLama = mapProdukKelompokKerjaDao.findOne(vo.getNoRec()); + + Produk produk = produkConverter.transferVOToModel(vo.getProduk(), new Produk()); + SubUnitKerjaPegawai kelompokKerja = subunitKerjaConverter.transferVOToModel(vo.getKelompokKerja(), + new SubUnitKerjaPegawai()); + + MapProdukKelompokKerja mappingBaru = mappingConverter.transferVOToModel(vo, mappingLama); + mappingBaru.setProduk(produk); + mappingBaru.setKelompokKerja(kelompokKerja); + + MapProdukKelompokKerja resultModel = mapProdukKelompokKerjaDao.save(mappingBaru); + + MapProdukKelompokKerjaVO resultVO = new MapProdukKelompokKerjaVO(); + resultVO = mappingConverter.transferModelToVO(resultModel, resultVO); + + return resultVO; + } + + @Override + public Boolean delete(String key) throws JpaSystemException { + mapProdukKelompokKerjaDao.delete(key); + + return true; + } + + @Override + public MapProdukKelompokKerjaVO findById(String key) throws JpaSystemException { + MapProdukKelompokKerjaVO result = new MapProdukKelompokKerjaVO(); + + MapProdukKelompokKerja mapping = mapProdukKelompokKerjaDao.findOne(key); + if (CommonUtil.isNotNullOrEmpty(mapping)) { + result = mappingConverter.transferModelToVO(mapping, result); + } + + return result; + } + + @Override + public List findAll() throws JpaSystemException { + List result = new ArrayList(); + + Iterable models = mapProdukKelompokKerjaDao.findAll(); + if (CommonUtil.isNotNullOrEmpty(models)) { + for (MapProdukKelompokKerja model : models) { + MapProdukKelompokKerjaVO vo = new MapProdukKelompokKerjaVO(); + vo = mappingConverter.transferModelToVO(model, vo); + result.add(vo); + } + } + + return result; + } + + @Override + public Map findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit, + String sort, String dir) { + + return null; + } + + @Override + public List> getAllProduk() throws JpaSystemException { + List> result = mapProdukKelompokKerjaDao.findProdukMapping(); + + return result; + } + + @Override + public List> getAllKelompokKerja(Integer idProduk) throws JpaSystemException { + List> result = new ArrayList<>(); + + List> kelompokKerja = subUnitKerjaDao.findAllKelompokKerjaMedis(); + List> mapping = mapProdukKelompokKerjaDao.findMappingByProduk(idProduk); + + for (Map mapRs : kelompokKerja) { + mapRs.put("noRec", null); + mapRs.put("statusMapping", false); + for (Map map : mapping) { + if (mapRs.get("id").equals(map.get("kelompokKerjaId")) + && CommonUtil.isNotNullOrEmpty(map.get("noRec"))) { + mapRs.put("noRec", map.get("noRec").toString()); + mapRs.put("statusMapping", true); + } + } + result.add(mapRs); + } + + result.sort(Comparator.comparing(m -> (String) m.get("subunitKerja"))); + + return result; + } + +} diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanMedisServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanMedisServiceImpl.java index 51434e75..57e1ca45 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanMedisServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/SkoringTindakanMedisServiceImpl.java @@ -12,6 +12,9 @@ import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -27,6 +30,7 @@ import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.HargaNettoProdukByKelasDao; import com.jasamedika.medifirst2000.dao.LoggingUserDao; import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; +import com.jasamedika.medifirst2000.dao.MapProdukKelompokKerjaDao; import com.jasamedika.medifirst2000.dao.MapRuanganToProdukDao; import com.jasamedika.medifirst2000.dao.PelayananPasienPetugasDao; import com.jasamedika.medifirst2000.dao.ProdukDao; @@ -84,6 +88,9 @@ public class SkoringTindakanMedisServiceImpl extends BaseVoServiceImpl implement @Autowired private PelayananPasienPetugasDao pelayananPasienPetugasDao; + @Autowired + private MapProdukKelompokKerjaDao mapProdukKelompokKerjaDao; + public static Predicate distinctByKey(Function keyExtractor) { Set seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); @@ -435,122 +442,143 @@ public class SkoringTindakanMedisServiceImpl extends BaseVoServiceImpl implement } @Override - public List> findTindakanBelumAdaSkor() { - List tempList = new ArrayList<>(); - tempList.addAll(Arrays.asList(Master.DetailJenisProduk.ADMINISTRASI_PATOLOGI_KLINIK_EXCEPTION)); - tempList.addAll(Arrays.asList(Master.DetailJenisProduk.MEDIS_UTAMA)); - tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_ANATOMI)); - tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_PATOLOGI_KLINIK)); - tempList.addAll(Arrays.asList(Master.DetailJenisProduk.PENUNJANG_RADIOLOGI)); - tempList.addAll(Arrays.asList(Master.DetailJenisProduk.LABORATORIUM)); + public List> findTindakanBelumAdaSkor(List listIdKelompokKerja) { + List> result = new ArrayList<>(); - List listIdDetailJenisProdukLogbookSkor = tempList.stream().sorted().distinct() - .collect(Collectors.toList()); + List> listProdukMapping = new ArrayList<>(); + List> listProdukScored = new ArrayList<>(); + if (CommonUtil.isNotNullOrEmpty(listIdKelompokKerja)) { + listProdukMapping = mapProdukKelompokKerjaDao.findAllMapping(listIdKelompokKerja); + listProdukScored = skoringTindakanMedisDao.findProdukScored(listIdKelompokKerja); + } else { + listProdukMapping = mapProdukKelompokKerjaDao.findAllMapping(); + listProdukScored = skoringTindakanMedisDao.findProdukScored(); + } - List listIdProdukScored = skoringTindakanMedisDao.findProdukScored(); + List listNorecScored = new ArrayList<>(); + for (Map map : listProdukMapping) { + for (Map skor : listProdukScored) { + if (map.get("kelompokKerjaId").equals(skor.get("kelompokKerjaId")) + && map.get("produkId").equals(skor.get("produkId"))) { + listNorecScored.add(map.get("noRec").toString()); + } + } + } - List> result = produkDao.findTindakanBelumAdaSkor(listIdDetailJenisProdukLogbookSkor, - listIdProdukScored); + for (Map map : listProdukMapping) { + if (!listNorecScored.contains(map.get("noRec"))) { + result.add(map); + } + } return result; } @Override - public Map findDeskripsiSkoringTindakanMedis(Integer idProduk) { - Map result = new HashMap<>(); + public Map findDeskripsiSkoringTindakanMedis(Integer idProduk, Integer idKelompokKerja) { + final Map result = new ConcurrentHashMap(); + final CountDownLatch countDown = new CountDownLatch(4); + final ExecutorService executor = Executors.newFixedThreadPool(4); - { - String deskripsiDiri = ""; - Map produk = produkDao.findProdukById(idProduk); - if (CommonUtil.isNotNullOrEmpty(produk)) { - deskripsiDiri += produk.get("id").toString() + " - " + produk.get("namaProduk").toString(); - } - - if (CommonUtil.isNotNullOrEmpty(deskripsiDiri)) { - result.put("produk", deskripsiDiri); - } else { - result.put("produk", "-"); - } - } - - { - String deskripsiTarif = ""; - List listBesarTarif = new ArrayList<>(); - - NumberFormat rupiah = NumberFormat.getCurrencyInstance(new Locale("in", "ID")); - - List> daftarTarif = hargaNettoProdukByKelasDao.findTarifTindakan(idProduk, - Arrays.asList(Master.Kelas.REF_KELAS_KAMAR)); - - for (Map tarif : daftarTarif) { - if (!listBesarTarif.contains(tarif.get("tarif"))) { - listBesarTarif.add(Double.parseDouble(tarif.get("tarif").toString())); - } - } - - if (listBesarTarif.size() == 1) { - deskripsiTarif += rupiah.format(listBesarTarif.get(0)); - } else { - for (Map tarif : daftarTarif) { - if (deskripsiTarif == "") { - deskripsiTarif += rupiah.format(Double.parseDouble(tarif.get("tarif").toString())) + " (" - + tarif.get("kelas").toString() + ")"; - } else { - deskripsiTarif += ", " + rupiah.format(Double.parseDouble(tarif.get("tarif").toString())) + " (" - + tarif.get("kelas").toString() + ")"; + for (int i = 0; i < 4; i++) { + final int index = i; + executor.execute(() -> { + try { + if (index == 0) { + // Deskripsi Diri + String deskripsiDiri = ""; + Map produk = produkDao.findProdukById(idProduk); + if (CommonUtil.isNotNullOrEmpty(produk)) { + deskripsiDiri += produk.get("id").toString() + " - " + produk.get("namaProduk").toString(); + } + if (CommonUtil.isNotNullOrEmpty(deskripsiDiri)) { + result.put("produk", deskripsiDiri); + } else { + result.put("produk", "-"); + } + } else if (index == 1) { + // Deskripsi Tarif + String deskripsiTarif = ""; + List listBesarTarif = new ArrayList<>(); + NumberFormat rupiah = NumberFormat.getCurrencyInstance(new Locale("in", "ID")); + List> daftarTarif = hargaNettoProdukByKelasDao.findTarifTindakan(idProduk, + Arrays.asList(Master.Kelas.REF_KELAS_KAMAR)); + for (Map tarif : daftarTarif) { + if (!listBesarTarif.contains(tarif.get("tarif"))) { + listBesarTarif.add(Double.parseDouble(tarif.get("tarif").toString())); + } + } + if (listBesarTarif.size() == 1) { + deskripsiTarif += rupiah.format(listBesarTarif.get(0)); + } else { + for (Map tarif : daftarTarif) { + if (deskripsiTarif == "") { + deskripsiTarif += rupiah.format(Double.parseDouble(tarif.get("tarif").toString())) + + " (" + tarif.get("kelas").toString() + ")"; + } else { + deskripsiTarif += ", " + + rupiah.format(Double.parseDouble(tarif.get("tarif").toString())) + " (" + + tarif.get("kelas").toString() + ")"; + } + } + } + if (CommonUtil.isNotNullOrEmpty(deskripsiTarif)) { + result.put("tarif", deskripsiTarif); + } else { + result.put("tarif", "-"); + } + } else if (index == 2) { + // Deskripsi Ruangan Pemeriksaan + String deskripsiRuanganPemeriksaan = ""; + List daftarRuangan = mapRuanganToProdukDao.findRuanganByTindakan(idProduk); + for (String ruangan : daftarRuangan) { + if (deskripsiRuanganPemeriksaan == "") { + deskripsiRuanganPemeriksaan += ruangan; + } else { + deskripsiRuanganPemeriksaan += ", " + ruangan; + } + } + if (CommonUtil.isNotNullOrEmpty(deskripsiRuanganPemeriksaan)) { + result.put("ruanganPemeriksaan", deskripsiRuanganPemeriksaan); + } else { + result.put("ruanganPemeriksaan", "-"); + } + } else if (index == 3) { + // Deskripsi Dokter Pelayanan + String deskripsiDokterPelayanan = ""; + Pageable pageable = new PageRequest(0, 3); + List> tempList = pelayananPasienPetugasDao.findDokterByTindakan(idProduk, + idKelompokKerja, pageable); + List> daftarDokter = tempList.stream() + .filter(distinctByKey(p -> Integer.parseInt(p.get("id").toString()))) + .collect(Collectors.toList()); + for (Map dokter : daftarDokter) { + if (deskripsiDokterPelayanan == "") { + deskripsiDokterPelayanan += dokter.get("namaLengkap").toString(); + } else { + deskripsiDokterPelayanan += ", " + dokter.get("namaLengkap").toString(); + } + } + if (CommonUtil.isNotNullOrEmpty(deskripsiDokterPelayanan)) { + result.put("dokterPemeriksaTerakhir", deskripsiDokterPelayanan); + } else { + result.put("dokterPemeriksaTerakhir", "-"); + } } + } finally { + countDown.countDown(); } - } - - if (CommonUtil.isNotNullOrEmpty(deskripsiTarif)) { - result.put("tarif", deskripsiTarif); - } else { - result.put("tarif", "-"); - } + }); } + try { + countDown.await(); - { - String deskripsiRuanganPemeriksaan = ""; - List daftarRuangan = mapRuanganToProdukDao.findRuanganByTindakan(idProduk); - for (String ruangan : daftarRuangan) { - if (deskripsiRuanganPemeriksaan == "") { - deskripsiRuanganPemeriksaan += ruangan; - } else { - deskripsiRuanganPemeriksaan += ", " + ruangan; - } - } + return result; + } catch (InterruptedException e) { + e.printStackTrace(); - if (CommonUtil.isNotNullOrEmpty(deskripsiRuanganPemeriksaan)) { - result.put("ruanganPemeriksaan", deskripsiRuanganPemeriksaan); - } else { - result.put("ruanganPemeriksaan", "-"); - } + return result; } - - { - String deskripsiDokterPemeriksaTerakhir = ""; - Pageable pageable = new PageRequest(0, 3); - List> tempList = pelayananPasienPetugasDao.findDokterPemeriksaByTindakan(idProduk, - pageable); - - List> daftarDokter = tempList.stream() - .filter(distinctByKey(p -> Integer.parseInt(p.get("id").toString()))).collect(Collectors.toList()); - for (Map dokter : daftarDokter) { - if (deskripsiDokterPemeriksaTerakhir == "") { - deskripsiDokterPemeriksaTerakhir += dokter.get("namaLengkap").toString(); - } else { - deskripsiDokterPemeriksaTerakhir += ", " + dokter.get("namaLengkap").toString(); - } - } - - if (CommonUtil.isNotNullOrEmpty(deskripsiDokterPemeriksaTerakhir)) { - result.put("dokterPemeriksaTerakhir", deskripsiDokterPemeriksaTerakhir); - } else { - result.put("dokterPemeriksaTerakhir", "-"); - } - } - - return result; } @Override diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java index 00d2fb3b..a93f203d 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/IkiDanRemunerasiController.java @@ -37,6 +37,7 @@ import com.jasamedika.medifirst2000.service.LogbookKinerjaDetailService; import com.jasamedika.medifirst2000.service.LogbookKinerjaDokterService; import com.jasamedika.medifirst2000.service.LogbookKinerjaService; import com.jasamedika.medifirst2000.service.MapPegawaiJabatanToUnitKerjaService; +import com.jasamedika.medifirst2000.service.MapProdukKelompokKerjaService; import com.jasamedika.medifirst2000.service.PelayananNakesService; import com.jasamedika.medifirst2000.service.PelayananPasienNakesService; import com.jasamedika.medifirst2000.service.PelayananPasienPerawatService; @@ -60,6 +61,7 @@ import com.jasamedika.medifirst2000.vo.IndikatorKinerjaVO; import com.jasamedika.medifirst2000.vo.LogbookKinerjaDetailVO; import com.jasamedika.medifirst2000.vo.LogbookKinerjaDokterVO; import com.jasamedika.medifirst2000.vo.LogbookKinerjaVO; +import com.jasamedika.medifirst2000.vo.MapProdukKelompokKerjaVO; import com.jasamedika.medifirst2000.vo.PelayananNakesVO; import com.jasamedika.medifirst2000.vo.PelayananPasienNakesVO; import com.jasamedika.medifirst2000.vo.PelayananPasienPerawatVO; @@ -149,6 +151,9 @@ public class IkiDanRemunerasiController extends LocaleController> getLoadData(HttpServletRequest request) { try { @@ -2186,9 +2191,11 @@ public class IkiDanRemunerasiController extends LocaleController>> getTindakanBelumAdaSkor(HttpServletRequest request) { + public ResponseEntity>> getTindakanBelumAdaSkor(HttpServletRequest request, + @RequestParam(value = "listKelompokKerjaId", required = false) List listIdKelompokKerja) { try { - List> result = skoringTindakanMedisService.findTindakanBelumAdaSkor(); + List> result = skoringTindakanMedisService + .findTindakanBelumAdaSkor(listIdKelompokKerja); mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, getMessage(MessageResource.LABEL_SUCCESS, request)); return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage); @@ -2285,4 +2292,112 @@ public class IkiDanRemunerasiController extends LocaleController> saveAllMapProdukKelompokKerja(HttpServletRequest request, + @Valid @RequestBody List vos) { + try { + List result = mapProdukKelompokKerjaService.addAll(vos); + if (CommonUtil.isNotNullOrEmpty(result)) { + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.CREATED, mapHeaderMessage); + } else { + return RestUtil.getJsonHttptatus(HttpStatus.NOT_ACCEPTABLE); + } + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when add all mapping produk - kelompok kerja", 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 add all mapping produk - kelompok kerja", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/save-map-produk-kelompok-kerja", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity saveMapProdukKelompokKerja(HttpServletRequest request, + @Valid @RequestBody MapProdukKelompokKerjaVO vo) { + try { + MapProdukKelompokKerjaVO result = new MapProdukKelompokKerjaVO(); + if (CommonUtil.isNotNullOrEmpty(vo.getNoRec())) { + result = mapProdukKelompokKerjaService.update(vo); + } else { + result = mapProdukKelompokKerjaService.add(vo); + } + + if (CommonUtil.isNotNullOrEmpty(result)) { + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.CREATED, mapHeaderMessage); + } else { + return RestUtil.getJsonHttptatus(HttpStatus.NOT_ACCEPTABLE); + } + } catch (ServiceVOException sve) { + LOGGER.error("Got exception {} when add/update mapping produk - kelompok kerja", 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 add/update mapping produk - kelompok kerja", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/delete-map-produk-kelompok-kerja", method = RequestMethod.POST) + public ResponseEntity deleteMapProdukKelompokKerja(HttpServletRequest request, + @RequestParam(value = "noRec", required = true) String norec) { + try { + Boolean result = mapProdukKelompokKerjaService.delete(norec); + 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 delete mapping produk - kelompok kerja", 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 delete mapping produk - kelompok kerja", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/get-subject-map-produk-kelompok-kerja", method = RequestMethod.GET) + public ResponseEntity>> getSubjectMapProdukKelompokKerja(HttpServletRequest request) { + try { + List> result = mapProdukKelompokKerjaService.getAllProduk(); + 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 subject map produk - kelompok kerja", 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 subject map produk - kelompok kerja", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + + @RequestMapping(value = "/get-object-map-produk-kelompok-kerja", method = RequestMethod.GET) + public ResponseEntity>> getObjectMapProdukKelompokKerja(HttpServletRequest request, + @RequestParam(value = "produkId", required = true) Integer idProduk) { + try { + List> result = mapProdukKelompokKerjaService.getAllKelompokKerja(idProduk); + 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 object map produk - kelompok kerja", 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 object map produk - kelompok kerja", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + }