- perbaikan service pencarian hasil hitung target pelayanan medis bulanan

- perbaikan service otomatis hitung pelayanan medis bulanan
This commit is contained in:
Salman Manoe 2021-06-12 09:34:49 +07:00
parent a6d207af30
commit e49884c679
13 changed files with 162 additions and 245 deletions

View File

@ -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<IndikatorKinerjaDetail, Integer> {
@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<IndikatorKinerjaDetail> findByListId(@Param("listDetailId") List<Integer> listIdDetail);
public List<Map<String, Object>> findByListId(@Param("listDetailId") List<Integer> listIdDetail);
}

View File

@ -22,9 +22,15 @@ public interface SubUnitKerjaDao extends PagingAndSortingRepository<SubUnitKerja
@Query("select model from SubUnitKerjaPegawai model where model.statusEnabled is true and model.unitKerjaId = :id order by model.name")
List<SubUnitKerjaPegawai> 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<Map<String, Object>> findSubunitKerjaById(@Param("listSubunitKerjaId") List<Integer> 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<SubUnitKerjaPegawai> findSubunitKerjaById(@Param("listSubunitKerjaId") List<Integer> listIdSubunitKerja);
List<Map<String, Object>> findSubDanUnitKerjaById(@Param("listSubunitKerjaId") List<Integer> listIdSubunitKerja);
@Query("select subUnitKerja.id " + "from MapPegawaiJabatanToUnitKerja mappeg " + "left join mappeg.pegawai p "
+ "inner join mappeg.subUnitKerjaPegawai subUnitKerja " + "where mappeg.statusEnabled is true "

View File

@ -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<TargetLayanan, String> {
public interface TargetLayananDao extends PagingAndSortingRepository<TargetLayanan, String> {
@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 "

View File

@ -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<String, Object> savePirDanIku(List<SettingPirSdmVO> vo);
public List<TargetLayananCustomVO> calcTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException;
public void autoSaveTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException;
public List<TargetLayananCustomVO> findAllTargetCapaianLayanan(String strPeriode, Integer idKsm) throws ParseException;
public void saveTargetCapaianLayanan(TargetLayananCustomVO vo, Date periodeHitung) throws ParseException;
public List<TargetLayananCustomVO> findAllTargetCapaianLayanan(String strPeriode, Integer idKsm)
throws ParseException;
}

View File

@ -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<TargetLayanan, TargetLayananVO, String> {
List<String> addAll(List<TargetLayananCustomVO> vos, Long periodeHitung)
throws JpaSystemException, ServiceVOException, ParseException;
}

View File

@ -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<UnitKerjaPegawaiVO, UnitKerjaPegawai> unitKerjaPegawaiConverter;
@Autowired
private BaseConverterImpl<SubUnitKerjaPegawaiVO, SubUnitKerjaPegawai> subunitKerjaConverter;
@Autowired
private BaseConverterImpl<RuanganVO, Ruangan> ruanganConverter;
@ -96,9 +97,6 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
@Autowired
private BaseConverterImpl<PegawaiVO, Pegawai> pegawaiConverter;
@Autowired
private BaseConverterImpl<IndikatorKinerjaDetailVO, IndikatorKinerjaDetail> 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<String, Object> loadData() {
Map<String, Object> result = new HashMap<>();
@ -460,10 +464,7 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
}
@Override
public List<TargetLayananCustomVO> calcTargetCapaianLayanan(String strPeriode, Integer idKsm)
throws ParseException {
List<TargetLayananCustomVO> 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<Integer> listRuangEks = splitDataSettingDatafixed("IdRuanganEksekutif");
List<IndikatorKinerjaDetail> listIndikatorPelayanan = indikatorKinerjaDetailDao
.findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS));
List<Integer> listIndikatorPelayanan = Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS);
List<Map<String, Object>> 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<SubUnitKerjaPegawai> listKelompokKerja = subunitKerjaDao.findSubunitKerjaById(listIdKK);
List<Map<String, Object>> listKelompokKerja = subunitKerjaDao.findSubDanUnitKerjaById(listIdKK);
List<Map<String, Object>> 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<String, Object> kelompokKerja : listKelompokKerja) {
for (Integer idIndikator : listIndikatorPelayanan) {
TargetLayananCustomVO resultVo = new TargetLayananCustomVO();
List<TargetLayananCustomDetailVO> listDetail = new ArrayList<>();
@ -630,17 +631,17 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
double capaianBulanan = 0.0;
double targetBulanan = 0.0;
for (Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<Map<String, Object>> dataPegawai = mapPegawaiJabatanToUnitKerjaDao
.findPegawaiJabatanBySubunitKerja(targetLayanan.getSubUnitKerjaPegawai().getId());
Double detailTarget = Math.floor(targetLayanan.target / dataPegawai.size());
if (detailTarget < 1.0) {
detailTarget = 1.0;
}
for (Map<String, Object> 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<TargetLayananCustomVO> result = new ArrayList<>();
List<TargetLayanan> data = new ArrayList<>();
List<SubUnitKerjaPegawai> listKelompokKerja = new ArrayList<>();
List<Map<String, Object>> listKelompokKerja = new ArrayList<>();
List<Integer> 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<IndikatorKinerjaDetail> listIndikatorPelayanan = indikatorKinerjaDetailDao
List<Map<String, Object>> listIndikatorPelayanan = indikatorKinerjaDetailDao
.findByListId(Arrays.asList(Master.IndikatorKinerja.INDIKATOR_PELAYANAN_MEDIS));
for (SubUnitKerjaPegawai kelompokKerja : listKelompokKerja) {
for (IndikatorKinerjaDetail indikator : listIndikatorPelayanan) {
for (Map<String, Object> kelompokKerja : listKelompokKerja) {
for (Map<String, Object> indikator : listIndikatorPelayanan) {
List<String> paramPeriode = new ArrayList<>();
TargetLayananCustomVO resultVo = new TargetLayananCustomVO();
List<TargetLayananCustomDetailVO> 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);
}

View File

@ -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<SubUnitKerjaPegawaiVO, SubUnitKerjaPegawai> subunitKerjaConverter;
@Autowired
private BaseConverterImpl<IndikatorKinerjaDetailVO, IndikatorKinerjaDetail> indikatorKinerjaDetailConverter;
@Autowired
private TargetLayananDao targetLayananDao;
@Autowired
private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao;
@Autowired
private LogbookKinerjaDokterDao logbookKinerjaDokterDao;
@Override
public List<String> addAll(List<TargetLayananCustomVO> vos, Long periodeHitung)
throws JpaSystemException, ServiceVOException, ParseException {
List<String> resultListVO = new ArrayList<>();
List<TargetLayanan> 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<TargetLayanan> 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<LogbookKinerjaDokter> models = new ArrayList<>();
List<Map<String, Object>> dataPegawai = mapPegawaiJabatanToUnitKerjaDao
.findPegawaiJabatanBySubunitKerja(targetLayanan.getSubUnitKerjaPegawai().getId());
Double detailTarget = Math.floor(targetLayanan.target / dataPegawai.size());
if (detailTarget < 1.0) {
detailTarget = 1.0;
}
for (Map<String, Object> 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());

View File

@ -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

View File

@ -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;

View File

@ -1,7 +1,5 @@
package com.jasamedika.medifirst2000.vo;
import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai;
public class SubUnitKerjaPegawaiVO extends BaseKeyValueMasterVO{
private UnitKerjaPegawaiVO unitKerja;

View File

@ -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<TargetLayananVO> {
@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<TargetLayananVO> {
try {
if (CommonUtil.isNotNullOrEmpty(remunerasiService)) {
LOGGER.info("Task Target Layanan : Running Generate Target Layanan");
List<String> 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");
}

View File

@ -239,27 +239,6 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
// Postman using only!
@RequestMapping(value = "/calculate-target-dan-capaian-layanan", method = RequestMethod.GET)
public ResponseEntity<List<TargetLayananCustomVO>> calculateTargetLayanan(HttpServletRequest request,
@RequestParam(value = "periode", required = true) String periode,
@RequestParam(value = "ksmId", required = false) Integer idKsm) throws ParseException {
try {
List<TargetLayananCustomVO> 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<List<TargetLayananCustomVO>> getAllTargetLayanan(HttpServletRequest request,
@RequestParam(value = "periode", required = true) String periode,

View File

@ -5530,27 +5530,6 @@ public class SdmController extends LocaleController<AkunVO> {
}
}
@RequestMapping(value = "/save-target-layanan/", method = RequestMethod.POST)
public ResponseEntity<List<String>> saveTargetLayanan(HttpServletRequest request,
@RequestBody List<TargetLayananCustomVO> vos,
@RequestParam(value = "periodeHitung", required = true) Long periodeHitung) throws ParseException {
try {
List<String> 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<Map<String, Object>> getJadwalPegawai(HttpServletRequest request,
@RequestParam(value = "idPegawai", required = true) Integer idPegawai) {