From e49884c679dbc106a7573e07f9af0f627dfd192b Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Sat, 12 Jun 2021 09:34:49 +0700 Subject: [PATCH] - perbaikan service pencarian hasil hitung target pelayanan medis bulanan - perbaikan service otomatis hitung pelayanan medis bulanan --- .../dao/IndikatorKinerjaDetailDao.java | 5 +- .../medifirst2000/dao/SubUnitKerjaDao.java | 10 +- .../medifirst2000/dao/TargetLayananDao.java | 5 +- .../service/IkiDanRemunerasiService.java | 8 +- .../service/TargetLayananService.java | 10 - .../impl/IkiDanRemunerasiServiceImpl.java | 190 ++++++++++++------ .../impl/TargetLayananServiceImpl.java | 112 +---------- .../main/resources/jdbc.localhost.properties | 4 +- .../medifirst2000/entities/TargetLayanan.java | 7 +- .../vo/SubUnitKerjaPegawaiVO.java | 2 - .../asynctask/TargetLayananGenerating.java | 12 +- .../IkiDanRemunerasiController.java | 21 -- .../controller/SdmController.java | 21 -- 13 files changed, 162 insertions(+), 245 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaDetailDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaDetailDao.java index cedddfd1..4970df1e 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaDetailDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaDetailDao.java @@ -1,6 +1,7 @@ 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; @@ -12,8 +13,8 @@ import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail; @Repository("indikatorKinerjaDetailDao") public interface IndikatorKinerjaDetailDao extends PagingAndSortingRepository { - @Query("select ikd from IndikatorKinerjaDetail ikd " + @Query("select new Map(ikd.id as id,ikd.detailIndikator as detailIndikator) " + "from IndikatorKinerjaDetail ikd " + "where ikd.statusEnabled is true and ikd.id in (:listDetailId) " + "order by ikd.detailIndikator") - public List findByListId(@Param("listDetailId") List listIdDetail); + public List> findByListId(@Param("listDetailId") List listIdDetail); } 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 435a8cbe..0c3b8e21 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 @@ -22,9 +22,15 @@ public interface SubUnitKerjaDao extends PagingAndSortingRepository getSubUnitKerjaByUnitkerja(@Param("id") Integer id); - @Query("select model from SubUnitKerjaPegawai model " + "where model.statusEnabled is true " + @Query("select distinct new Map(sk.id as subId,sk.name as subName," + "uk.id as unitId,uk.name as unitName) " + + "from SubUnitKerjaPegawai sk " + "inner join sk.unitKerja uk " + "where sk.statusEnabled is true " + + "and sk.id in (:listSubunitKerjaId) " + "order by sk.name") + List> findSubunitKerjaById(@Param("listSubunitKerjaId") List listIdSubunitKerja); + + @Query("select new Map(model.id as subunitKerjaId,model.unitKerjaId as unitKerjaId) " + + "from SubUnitKerjaPegawai model " + "where model.statusEnabled is true " + "and model.id in (:listSubunitKerjaId) " + "order by model.name") - List findSubunitKerjaById(@Param("listSubunitKerjaId") List listIdSubunitKerja); + List> findSubDanUnitKerjaById(@Param("listSubunitKerjaId") List listIdSubunitKerja); @Query("select subUnitKerja.id " + "from MapPegawaiJabatanToUnitKerja mappeg " + "left join mappeg.pegawai p " + "inner join mappeg.subUnitKerjaPegawai subUnitKerja " + "where mappeg.statusEnabled is true " diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java index 6a0d2165..c802e1bb 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/TargetLayananDao.java @@ -1,18 +1,17 @@ package com.jasamedika.medifirst2000.dao; -import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.jasamedika.medifirst2000.entities.TargetLayanan; @Repository("targetLayananDao") -public interface TargetLayananDao extends CrudRepository { +public interface TargetLayananDao extends PagingAndSortingRepository { @Query("select new Map(sk.id as kelompokKerjaId," + "ikd.id as indikatorId," + "tl.target as target," + "to_char(tl.periode,'yyyy-MM') as periode," + "tl.tglHitung as tglHitung) " + "from TargetLayanan tl " diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java index 2468be4d..8ce4c0d8 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/IkiDanRemunerasiService.java @@ -1,6 +1,7 @@ package com.jasamedika.medifirst2000.service; import java.text.ParseException; +import java.util.Date; import java.util.List; import java.util.Map; @@ -30,8 +31,11 @@ public interface IkiDanRemunerasiService { public Map savePirDanIku(List vo); - public List calcTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; + public void autoSaveTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; - public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException; + public void saveTargetCapaianLayanan(TargetLayananCustomVO vo, Date periodeHitung) throws ParseException; + + public List findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) + throws ParseException; } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java index 86b17e3f..053f8326 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/TargetLayananService.java @@ -1,18 +1,8 @@ package com.jasamedika.medifirst2000.service; -import java.text.ParseException; -import java.util.List; - -import org.springframework.orm.jpa.JpaSystemException; - import com.jasamedika.medifirst2000.entities.TargetLayanan; -import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.vo.TargetLayananVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; public interface TargetLayananService extends BaseVoService { - List addAll(List vos, Long periodeHitung) - throws JpaSystemException, ServiceVOException, ParseException; - } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java index b37c43ba..da6aef0f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/IkiDanRemunerasiServiceImpl.java @@ -22,6 +22,8 @@ import com.jasamedika.medifirst2000.constants.Master; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao; import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDetailDao; +import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; +import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; import com.jasamedika.medifirst2000.dao.MonitoringAbsenDao; import com.jasamedika.medifirst2000.dao.RunningNumberDao; import com.jasamedika.medifirst2000.dao.SettingPirSdmDao; @@ -33,7 +35,9 @@ import com.jasamedika.medifirst2000.dao.TargetLayananDao; import com.jasamedika.medifirst2000.entities.EvaluasiJabatan; import com.jasamedika.medifirst2000.entities.IkiDanRemunerasi; import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail; +import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.entities.KelompokTransaksi; +import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter; import com.jasamedika.medifirst2000.entities.Pegawai; import com.jasamedika.medifirst2000.entities.PegawaiHistoriRekap; import com.jasamedika.medifirst2000.entities.Ruangan; @@ -75,9 +79,6 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik @Autowired private BaseConverterImpl unitKerjaPegawaiConverter; - @Autowired - private BaseConverterImpl subunitKerjaConverter; - @Autowired private BaseConverterImpl ruanganConverter; @@ -96,9 +97,6 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik @Autowired private BaseConverterImpl pegawaiConverter; - @Autowired - private BaseConverterImpl indikatorKinerjaDetailConverter; - @Autowired private IkiDanRemunerasiDao ikiDanRemunerasiDao; @@ -129,6 +127,12 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik @Autowired private SubUnitKerjaDao subunitKerjaDao; + @Autowired + private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; + + @Autowired + private LogbookKinerjaDokterDao logbookKinerjaDokterDao; + @Override public Map loadData() { Map result = new HashMap<>(); @@ -460,10 +464,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } @Override - public List calcTargetCapaianLayanan(String strPeriode, Integer idKsm) - throws ParseException { - List result = new ArrayList<>(); - + public void autoSaveTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdfINA = new SimpleDateFormat("MMMM yyyy", new Locale("in", "ID")); @@ -488,8 +489,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik List listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif"); - List listIndikatorPelayanan = indikatorKinerjaDetailDao - .findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS)); + List listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS); List> dataLayananRaw = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(idKsm)) { @@ -519,7 +519,8 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik listIdKK.add(Integer.parseInt(map.get("idKelompokKerja").toString())); } } - List listKelompokKerja = subunitKerjaDao.findSubunitKerjaById(listIdKK); + + List> listKelompokKerja = subunitKerjaDao.findSubDanUnitKerjaById(listIdKK); List> dataLastTargetLayanan = targetLayananDao .getLastTargetLayanan(sdf.format(calTglAwal.getTime()), sdf.format(bulan.getTime())); @@ -608,8 +609,8 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik dataLayananScored.add(layanan); } - for (SubUnitKerjaPegawai kelompokKerja : listKelompokKerja) { - for (IndikatorKinerjaDetail indikator : listIndikatorPelayanan) { + for (Map kelompokKerja : listKelompokKerja) { + for (Integer idIndikator : listIndikatorPelayanan) { TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); List listDetail = new ArrayList<>(); @@ -630,17 +631,17 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik double capaianBulanan = 0.0; double targetBulanan = 0.0; for (Map data : dataLayananScored) { - if (kelompokKerja.getId().equals(data.get("idKelompokKerja")) + if (kelompokKerja.get("subunitKerjaId").equals(data.get("idKelompokKerja")) && datePelayanan.equals(sdf.format(data.get("tglPelayanan")))) { - if (indikator.getId().equals(Master.IndikatorKinerja.KONSUL_EKS) + if (idIndikator.equals(Master.IndikatorKinerja.KONSUL_EKS) && data.get("namaTindakan").equals(Master.KONSUL) && listRuangEks.contains(data.get("idRuangan"))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanKE += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -650,15 +651,15 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKE / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.KONSUL_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerja.KONSUL_GADAR) && data.get("namaTindakan").equals(Master.KONSUL) && data.get("idDepartemen").equals(Master.Departemen.IGD)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanKG += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -668,14 +669,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKG / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.KONSUL_REG) + } else if (idIndikator.equals(Master.IndikatorKinerja.KONSUL_REG) && data.get("namaTindakan").equals(Master.KONSUL)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanKR += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -685,14 +686,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanKR / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.VISITE) + } else if (idIndikator.equals(Master.IndikatorKinerja.VISITE) && data.get("namaTindakan").equals(Master.VISIT)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanVI += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -702,14 +703,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanVI / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.TINDAKAN_EKS) + } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_EKS) && listRuangEks.contains(data.get("idRuangan"))) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanTE += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -719,14 +720,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTE / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.TINDAKAN_GADAR) + } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_GADAR) && data.get("idDepartemen").equals(Master.Departemen.IGD)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanTG += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -736,14 +737,14 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTG / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.TINDAKAN_OPS) + } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_OPS) && data.get("idRuangan").equals(Master.Ruangan.OK)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanTO += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -753,13 +754,13 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik targetBulanan = Math .floor(capaianTriwulanTO / (listBulanPelayananSorted.size() - 1)); } - } else if (indikator.getId().equals(Master.IndikatorKinerja.TINDAKAN_REG)) { + } else if (idIndikator.equals(Master.IndikatorKinerja.TINDAKAN_REG)) { capaianBulanan += Double.valueOf(data.get("jumlahTindakan").toString()); if (i < listBulanPelayananSorted.size()) { capaianTriwulanTR += Double.valueOf(data.get("jumlahTindakan").toString()); for (Map target : dataTargetFiltered) { - if (kelompokKerja.getId().equals(target.get("kelompokKerjaId")) - && indikator.getId().equals(target.get("indikatorId")) + if (kelompokKerja.get("subunitKerjaId").equals(target.get("kelompokKerjaId")) + && idIndikator.equals(target.get("indikatorId")) && datePelayanan.equals(target.get("periode"))) { targetBulanan = Double.valueOf(target.get("target").toString()); break; @@ -782,17 +783,83 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik } if (Double.valueOf(listDetail.get(listDetail.size() - 1).getTarget()) > 0.0) { resultVo.setDetail(listDetail); - resultVo.setKelompokKerja( - subunitKerjaConverter.transferModelToVO(kelompokKerja, new SubUnitKerjaPegawaiVO())); - resultVo.setIndikator(indikatorKinerjaDetailConverter.transferModelToVO(indikator, - new IndikatorKinerjaDetailVO())); + SubUnitKerjaPegawaiVO kelompokKerjaVO = new SubUnitKerjaPegawaiVO(); + kelompokKerjaVO.setId(Integer.valueOf(kelompokKerja.get("subunitKerjaId").toString())); - result.add(resultVo); + UnitKerjaPegawaiVO unitKerjaVO = new UnitKerjaPegawaiVO(); + unitKerjaVO.setId(Integer.valueOf(kelompokKerja.get("unitKerjaId").toString())); + kelompokKerjaVO.setUnitKerja(unitKerjaVO); + + IndikatorKinerjaDetailVO detailIndikatorVO = new IndikatorKinerjaDetailVO(); + detailIndikatorVO.setId(idIndikator); + + resultVo.setKelompokKerja(kelompokKerjaVO); + resultVo.setIndikator(detailIndikatorVO); + + saveTargetCapaianLayanan(resultVo, sdf.parse(strPeriode)); } } } - return result; + } + + @Override + @Transactional(readOnly = false) + public void saveTargetCapaianLayanan(TargetLayananCustomVO vo, Date periodeHitung) throws ParseException { + Date tglHitung = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + for (TargetLayananCustomDetailVO detail : vo.getDetail()) { + SubUnitKerjaPegawai kelompokKerja = new SubUnitKerjaPegawai(); + kelompokKerja.setId(vo.getKelompokKerja().getId()); + + UnitKerjaPegawai unitKerja = new UnitKerjaPegawai(); + unitKerja.setId(vo.getKelompokKerja().getUnitKerja().getId()); + kelompokKerja.setUnitKerja(unitKerja); + + IndikatorKinerjaDetail indikator = new IndikatorKinerjaDetail(); + indikator.setId(vo.getIndikator().getId()); + + TargetLayanan targetLayanan = new TargetLayanan(); + targetLayanan.setKdProfile((short) 0); + targetLayanan.setStatusEnabled(true); + targetLayanan.setUnitKerjaPegawai(unitKerja); + targetLayanan.setSubUnitKerjaPegawai(kelompokKerja); + targetLayanan.setTglHitung(tglHitung); + targetLayanan.setPeriode(sdf.parse(detail.getDate())); + targetLayanan.setIndikatorDetail(indikator); + targetLayanan.setTarget(detail.getTarget()); + targetLayanan.setCapaian(detail.getCapaian()); + + targetLayananDao.save(targetLayanan); + if (sdf.format(targetLayanan.getPeriode()).equals(sdf.format(periodeHitung))) { + List> dataPegawai = mapPegawaiJabatanToUnitKerjaDao + .findPegawaiJabatanBySubunitKerja(targetLayanan.getSubUnitKerjaPegawai().getId()); + + Double detailTarget = Math.floor(targetLayanan.target / dataPegawai.size()); + if (detailTarget < 1.0) { + detailTarget = 1.0; + } + + for (Map map : dataPegawai) { + LogbookKinerjaDokter logbook = new LogbookKinerjaDokter(); + logbook.setKdProfile((short) 0); + logbook.setStatusEnabled(true); + logbook.setBulan(targetLayanan.getPeriode()); + logbook.setDetailTarget(detailTarget); + logbook.setDetailCapaian( + CommonUtil.isNotNullOrEmpty(targetLayanan.getCapaian()) ? targetLayanan.getCapaian() : 0); + logbook.setIndikatorDetail(targetLayanan.getIndikatorDetail()); + Jabatan jabatan = new Jabatan(); + jabatan.setId(Integer.valueOf(map.get("jabatanId").toString())); + logbook.setJabatan(jabatan); + Pegawai pegawai = new Pegawai(); + pegawai.setId(Integer.valueOf(map.get("pegawaiId").toString())); + logbook.setPegawai(pegawai); + + logbookKinerjaDokterDao.save(logbook); + } + } + } } @Override @@ -800,7 +867,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik throws ParseException { List result = new ArrayList<>(); List data = new ArrayList<>(); - List listKelompokKerja = new ArrayList<>(); + List> listKelompokKerja = new ArrayList<>(); List listIdKelompokKerja = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); @@ -842,18 +909,18 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik listKelompokKerja = subunitKerjaDao.findSubunitKerjaById(listIdKelompokKerja); } - List listIndikatorPelayanan = indikatorKinerjaDetailDao + List> listIndikatorPelayanan = indikatorKinerjaDetailDao .findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS)); - for (SubUnitKerjaPegawai kelompokKerja : listKelompokKerja) { - for (IndikatorKinerjaDetail indikator : listIndikatorPelayanan) { + for (Map kelompokKerja : listKelompokKerja) { + for (Map indikator : listIndikatorPelayanan) { List paramPeriode = new ArrayList<>(); TargetLayananCustomVO resultVo = new TargetLayananCustomVO(); List listDetail = new ArrayList<>(); for (TargetLayanan targetLayanan : data) { - if (kelompokKerja.getId().equals(targetLayanan.getSubUnitKerjaPegawai().getId()) - && indikator.getId().equals(targetLayanan.getIndikatorDetail().getId())) { + if (kelompokKerja.get("subId").equals(targetLayanan.getSubUnitKerjaPegawai().getId()) + && indikator.get("id").equals(targetLayanan.getIndikatorDetail().getId())) { TargetLayananCustomDetailVO detail = new TargetLayananCustomDetailVO(); detail.setDate(sdf.format(targetLayanan.getPeriode())); detail.setBulan(sdfINA.format(targetLayanan.getPeriode())); @@ -872,10 +939,21 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik if (listDetail.size() == 4 && listDetail.get(listDetail.size() - 1).getTarget() > 0.0) { resultVo.setDetail(listDetail); - resultVo.setKelompokKerja( - subunitKerjaConverter.transferModelToVO(kelompokKerja, new SubUnitKerjaPegawaiVO())); - resultVo.setIndikator(indikatorKinerjaDetailConverter.transferModelToVO(indikator, - new IndikatorKinerjaDetailVO())); + + UnitKerjaPegawaiVO unitKerjaVO = new UnitKerjaPegawaiVO(); + unitKerjaVO.setId(Integer.valueOf(kelompokKerja.get("unitId").toString())); + unitKerjaVO.setName(kelompokKerja.get("unitName").toString()); + + SubUnitKerjaPegawaiVO kelompokKerjaVO = new SubUnitKerjaPegawaiVO(); + kelompokKerjaVO.setId(Integer.valueOf(kelompokKerja.get("subId").toString())); + kelompokKerjaVO.setName(kelompokKerja.get("subName").toString()); + kelompokKerjaVO.setUnitKerja(unitKerjaVO); + resultVo.setKelompokKerja(kelompokKerjaVO); + + IndikatorKinerjaDetailVO indikatorVO = new IndikatorKinerjaDetailVO(); + indikatorVO.setId(Integer.valueOf(indikator.get("id").toString())); + indikatorVO.setDetailIndikator(indikator.get("detailIndikator").toString()); + resultVo.setIndikator(indikatorVO); result.add(resultVo); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java index 9c935ed7..17071ef5 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/TargetLayananServiceImpl.java @@ -1,9 +1,6 @@ package com.jasamedika.medifirst2000.service.impl; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Map; @@ -11,130 +8,23 @@ 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.converter.TargetLayananConverter; -import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao; -import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; import com.jasamedika.medifirst2000.dao.TargetLayananDao; -import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail; -import com.jasamedika.medifirst2000.entities.Jabatan; -import com.jasamedika.medifirst2000.entities.LogbookKinerjaDokter; -import com.jasamedika.medifirst2000.entities.Pegawai; -import com.jasamedika.medifirst2000.entities.SubUnitKerjaPegawai; import com.jasamedika.medifirst2000.entities.TargetLayanan; -import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai; import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.TargetLayananService; import com.jasamedika.medifirst2000.util.CommonUtil; -import com.jasamedika.medifirst2000.vo.IndikatorKinerjaDetailVO; -import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO; import com.jasamedika.medifirst2000.vo.TargetLayananVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomDetailVO; -import com.jasamedika.medifirst2000.vo.custom.TargetLayananCustomVO; @Service("targetLayananService") -public class TargetLayananServiceImpl implements TargetLayananService { +public class TargetLayananServiceImpl extends BaseVoServiceImpl implements TargetLayananService { @Autowired private TargetLayananConverter targetLayananConverter; - @Autowired - private BaseConverterImpl subunitKerjaConverter; - - @Autowired - private BaseConverterImpl indikatorKinerjaDetailConverter; - @Autowired private TargetLayananDao targetLayananDao; - @Autowired - private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; - - @Autowired - private LogbookKinerjaDokterDao logbookKinerjaDokterDao; - - @Override - public List addAll(List vos, Long periodeHitung) - throws JpaSystemException, ServiceVOException, ParseException { - List resultListVO = new ArrayList<>(); - List listTargetLayanan = new ArrayList<>(); - - Date tglHitung = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); - for (TargetLayananCustomVO vo : vos) { - for (TargetLayananCustomDetailVO detail : vo.getDetail()) { - UnitKerjaPegawai unitKerja = new UnitKerjaPegawai(); - unitKerja.setId(vo.getKelompokKerja().getUnitKerjaId()); - - SubUnitKerjaPegawai kelompokKerja = subunitKerjaConverter.transferVOToModel(vo.getKelompokKerja(), - new SubUnitKerjaPegawai()); - IndikatorKinerjaDetail indikator = indikatorKinerjaDetailConverter.transferVOToModel(vo.getIndikator(), - new IndikatorKinerjaDetail()); - - TargetLayanan targetLayanan = new TargetLayanan(); - targetLayanan.setKdProfile((short) 0); - targetLayanan.setStatusEnabled(true); - targetLayanan.setUnitKerjaPegawai(unitKerja); - targetLayanan.setSubUnitKerjaPegawai(kelompokKerja); - targetLayanan.setTglHitung(tglHitung); - targetLayanan.setPeriode(sdf.parse(detail.getDate())); - targetLayanan.setIndikatorDetail(indikator); - targetLayanan.setTarget(detail.getTarget()); - targetLayanan.setCapaian(detail.getCapaian()); - - listTargetLayanan.add(targetLayanan); - } - } - - Iterable listResultModel = targetLayananDao.save(listTargetLayanan); - for (TargetLayanan resultModel : listResultModel) { - TargetLayananVO resultVo = new TargetLayananVO(); - resultVo = targetLayananConverter.transferModelToVO(resultModel, resultVo); - - // pembagian target untuk anggota kelompok kerja - if (sdf.format(resultModel.getPeriode()).equals(sdf.format(new Date(periodeHitung)))) { - setKontrakKinerjaDokter(resultModel); - } - - resultListVO.add(resultVo.getNoRec()); - } - - return resultListVO; - } - - public void setKontrakKinerjaDokter(TargetLayanan targetLayanan) throws JpaSystemException, ServiceVOException { - List models = new ArrayList<>(); - - List> dataPegawai = mapPegawaiJabatanToUnitKerjaDao - .findPegawaiJabatanBySubunitKerja(targetLayanan.getSubUnitKerjaPegawai().getId()); - - Double detailTarget = Math.floor(targetLayanan.target / dataPegawai.size()); - if (detailTarget < 1.0) { - detailTarget = 1.0; - } - - for (Map map : dataPegawai) { - LogbookKinerjaDokter logbook = new LogbookKinerjaDokter(); - logbook.setKdProfile((short) 0); - logbook.setStatusEnabled(true); - logbook.setBulan(targetLayanan.getPeriode()); - logbook.setDetailTarget(detailTarget); - logbook.setDetailCapaian( - CommonUtil.isNotNullOrEmpty(targetLayanan.getCapaian()) ? targetLayanan.getCapaian() : 0); - logbook.setIndikatorDetail(targetLayanan.getIndikatorDetail()); - Jabatan jabatan = new Jabatan(); - jabatan.setId(Integer.valueOf(map.get("jabatanId").toString())); - logbook.setJabatan(jabatan); - Pegawai pegawai = new Pegawai(); - pegawai.setId(Integer.valueOf(map.get("pegawaiId").toString())); - logbook.setPegawai(pegawai); - - models.add(logbook); - } - - logbookKinerjaDokterDao.save(models); - } - @Override public TargetLayananVO add(TargetLayananVO vo) throws JpaSystemException, ServiceVOException { TargetLayanan targetLayanan = targetLayananConverter.transferVOToModel(vo, new TargetLayanan()); diff --git a/jasamedika-config/src/main/resources/jdbc.localhost.properties b/jasamedika-config/src/main/resources/jdbc.localhost.properties index 2ccf9011..838e15db 100644 --- a/jasamedika-config/src/main/resources/jdbc.localhost.properties +++ b/jasamedika-config/src/main/resources/jdbc.localhost.properties @@ -8,11 +8,11 @@ hibernate.show_sql = true hikari.config.maximum.pool.size = 5 # DB Development -jdbc.url = jdbc:postgresql://localhost:5432/backup_31Jan21 +jdbc.url = jdbc:postgresql://localhost:5432/backup_01Mar21 jdbc.username = postgres jdbc.password = root jdbc.serverName = localhost -jdbc.databaseName = backup_31Jan21 +jdbc.databaseName = backup_01Mar21 jdbc.portNumber = 5432 corePoolSizeAsyncConfigurer = 5 diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java index 35dfcb05..82e16af1 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/TargetLayanan.java @@ -4,6 +4,7 @@ import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @@ -19,7 +20,7 @@ public class TargetLayanan extends BaseTransaction { private static final long serialVersionUID = -8426274186046883050L; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "objectunitkerjafk") @Caption(value = "Unit Kerja") public UnitKerjaPegawai unitKerjaPegawai; @@ -27,7 +28,7 @@ public class TargetLayanan extends BaseTransaction { @Column(name = "objectunitkerjafk", insertable = false, updatable = false) public Integer unitKerjaPegawaiId; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "objectsubunitkerjafk") @Caption(value = "Subunit Kerja") public SubUnitKerjaPegawai subUnitKerjaPegawai; @@ -45,7 +46,7 @@ public class TargetLayanan extends BaseTransaction { @Caption(value = "Periode") public Date periode; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "objectindikatordetailfk") @Caption(value = "Indikator Kinerja") public IndikatorKinerjaDetail indikatorDetail; diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SubUnitKerjaPegawaiVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SubUnitKerjaPegawaiVO.java index 93db3b09..be65ca35 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SubUnitKerjaPegawaiVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/SubUnitKerjaPegawaiVO.java @@ -1,7 +1,5 @@ package com.jasamedika.medifirst2000.vo; -import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai; - public class SubUnitKerjaPegawaiVO extends BaseKeyValueMasterVO{ private UnitKerjaPegawaiVO unitKerja; diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java index 88a334f9..faeea2ad 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/asynctask/TargetLayananGenerating.java @@ -2,7 +2,6 @@ package com.jasamedika.medifirst2000.asynctask; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,7 +12,6 @@ import org.springframework.stereotype.Component; import com.jasamedika.medifirst2000.asynctask.timer.MonthlyTimer; import com.jasamedika.medifirst2000.controller.base.LocaleController; import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService; -import com.jasamedika.medifirst2000.service.TargetLayananService; import com.jasamedika.medifirst2000.util.CommonUtil; import com.jasamedika.medifirst2000.vo.TargetLayananVO; @@ -24,9 +22,6 @@ public class TargetLayananGenerating extends LocaleController { @Autowired private IkiDanRemunerasiService remunerasiService; - @Autowired - private TargetLayananService targetLayananService; - public TargetLayananGenerating() { int the1st = 1; int at0hrs = 0; @@ -50,11 +45,8 @@ public class TargetLayananGenerating extends LocaleController { try { if (CommonUtil.isNotNullOrEmpty(remunerasiService)) { LOGGER.info("Task Target Layanan : Running Generate Target Layanan"); - List rsList = targetLayananService.addAll(remunerasiService.calcTargetCapaianLayanan( - new SimpleDateFormat("yyyy-MM").format(new Date()), null), new Date().getTime()); - if (CommonUtil.isNullOrEmpty(rsList)) { - LOGGER.info("Task Target Layanan : No Generating Target Layanan"); - } + remunerasiService.autoSaveTargetCapaianLayanan(new SimpleDateFormat("yyyy-MM").format(new Date()), + null); } else { LOGGER.warn("Task Target Layanan : Undefined service"); } 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 fd09003b..495aff48 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 @@ -239,27 +239,6 @@ public class IkiDanRemunerasiController extends LocaleController> calculateTargetLayanan(HttpServletRequest request, - @RequestParam(value = "periode", required = true) String periode, - @RequestParam(value = "ksmId", required = false) Integer idKsm) throws ParseException { - try { - List result = service.calcTargetCapaianLayanan(periode, idKsm); - 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 calculate target dan capaian layanan", 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 calculate target dan capaian layanan", jse.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); - } - } - @RequestMapping(value = "/get-all-target-dan-capaian-layanan", method = RequestMethod.GET) public ResponseEntity> getAllTargetLayanan(HttpServletRequest request, @RequestParam(value = "periode", required = true) String periode, diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index 8408aa45..084acdd5 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -5530,27 +5530,6 @@ public class SdmController extends LocaleController { } } - @RequestMapping(value = "/save-target-layanan/", method = RequestMethod.POST) - public ResponseEntity> saveTargetLayanan(HttpServletRequest request, - @RequestBody List vos, - @RequestParam(value = "periodeHitung", required = true) Long periodeHitung) throws ParseException { - try { - List result = targetLayananService.addAll(vos, periodeHitung); - if (null != result) - mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, - getMessage(MessageResource.LABEL_SUCCESS, request)); - return RestUtil.getJsonResponse(result, HttpStatus.CREATED, mapHeaderMessage); - } catch (ServiceVOException e) { - LOGGER.error("Got exception {} when add target layanan", e.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, e.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage); - } catch (JpaSystemException jse) { - LOGGER.error("Got exception {} when add target layanan", jse.getMessage()); - addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); - return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); - } - } - @RequestMapping(value = "/get-jadwal-pegawai", method = RequestMethod.GET) public ResponseEntity> getJadwalPegawai(HttpServletRequest request, @RequestParam(value = "idPegawai", required = true) Integer idPegawai) {