Update service remunerasi
Pembuatan service hitung target skor dokter
This commit is contained in:
parent
18b3f5d7e2
commit
224b70647f
@ -1,15 +1,27 @@
|
|||||||
package com.jasamedika.medifirst2000.dao;
|
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.PagingAndSortingRepository;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
import org.springframework.orm.jpa.JpaSystemException;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import com.jasamedika.medifirst2000.entities.IndeksKinerjaDokter;
|
import com.jasamedika.medifirst2000.entities.IndeksKinerjaDokter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ITI-14
|
* @author salmanoe
|
||||||
* @since Nov 29, 2021
|
* @since Nov 29, 2021
|
||||||
*/
|
*/
|
||||||
@Repository("indeksKinerjaDokterDao")
|
@Repository("indeksKinerjaDokterDao")
|
||||||
public interface IndeksKinerjaDokterDao extends PagingAndSortingRepository<IndeksKinerjaDokter, String> {
|
public interface IndeksKinerjaDokterDao extends PagingAndSortingRepository<IndeksKinerjaDokter, String> {
|
||||||
|
|
||||||
|
@Query("select new Map(pkd.noRec as noRec," + "pkd.bulan as bulan," + "pkd.unitKerjaId as unitKerjaId,"
|
||||||
|
+ "pkd.subunitKerjaId as subunitKerjaId," + "pkd.pegawaiId as pegawaiId," + "pkd.iki as iki,"
|
||||||
|
+ "pkd.skor as skor," + "pkd.skorDasar as skorDasar) " + "from IndeksKinerjaDokter pkd "
|
||||||
|
+ "where pkd.statusEnabled is true " + "and to_char(pkd.bulan,'yyyy') = :tahun")
|
||||||
|
List<Map<String, Object>> findAll(@Param("tahun") String tahun) throws JpaSystemException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.jasamedika.medifirst2000.vo.LogbookKinerjaDokterVO;
|
|
||||||
import com.jasamedika.medifirst2000.vo.SettingPirSdmVO;
|
import com.jasamedika.medifirst2000.vo.SettingPirSdmVO;
|
||||||
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
|
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
|
||||||
import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO;
|
import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO;
|
||||||
@ -33,6 +32,8 @@ public interface IkiDanRemunerasiService {
|
|||||||
|
|
||||||
public Map<String, Object> savePirDanIku(List<SettingPirSdmVO> vo);
|
public Map<String, Object> savePirDanIku(List<SettingPirSdmVO> vo);
|
||||||
|
|
||||||
|
public void autoSaveTargetCapaianLayananJamKerja() throws ParseException;
|
||||||
|
|
||||||
public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException;
|
public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException;
|
||||||
|
|
||||||
public void saveTargetCapaianLayananKelompokKerja(TargetLayananJamKerjaVO vo, Date periodeHitung)
|
public void saveTargetCapaianLayananKelompokKerja(TargetLayananJamKerjaVO vo, Date periodeHitung)
|
||||||
|
|||||||
@ -2,12 +2,14 @@ package com.jasamedika.medifirst2000.service.impl;
|
|||||||
|
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -24,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.jasamedika.medifirst2000.constants.Master;
|
import com.jasamedika.medifirst2000.constants.Master;
|
||||||
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
|
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
|
||||||
import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao;
|
import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao;
|
||||||
|
import com.jasamedika.medifirst2000.dao.IndeksKinerjaDokterDao;
|
||||||
import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDetailDao;
|
import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDetailDao;
|
||||||
import com.jasamedika.medifirst2000.dao.JabatanDao;
|
import com.jasamedika.medifirst2000.dao.JabatanDao;
|
||||||
import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao;
|
import com.jasamedika.medifirst2000.dao.LogbookKinerjaDokterDao;
|
||||||
@ -41,6 +44,7 @@ import com.jasamedika.medifirst2000.dao.SubUnitKerjaDao;
|
|||||||
import com.jasamedika.medifirst2000.dao.TargetLayananDao;
|
import com.jasamedika.medifirst2000.dao.TargetLayananDao;
|
||||||
import com.jasamedika.medifirst2000.entities.EvaluasiJabatan;
|
import com.jasamedika.medifirst2000.entities.EvaluasiJabatan;
|
||||||
import com.jasamedika.medifirst2000.entities.IkiDanRemunerasi;
|
import com.jasamedika.medifirst2000.entities.IkiDanRemunerasi;
|
||||||
|
import com.jasamedika.medifirst2000.entities.IndeksKinerjaDokter;
|
||||||
import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail;
|
import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail;
|
||||||
import com.jasamedika.medifirst2000.entities.Jabatan;
|
import com.jasamedika.medifirst2000.entities.Jabatan;
|
||||||
import com.jasamedika.medifirst2000.entities.KelompokTransaksi;
|
import com.jasamedika.medifirst2000.entities.KelompokTransaksi;
|
||||||
@ -57,6 +61,7 @@ import com.jasamedika.medifirst2000.entities.SuratKeputusan;
|
|||||||
import com.jasamedika.medifirst2000.entities.TargetLayanan;
|
import com.jasamedika.medifirst2000.entities.TargetLayanan;
|
||||||
import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai;
|
import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai;
|
||||||
import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService;
|
import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService;
|
||||||
|
import com.jasamedika.medifirst2000.service.LogbookKinerjaService;
|
||||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||||
import com.jasamedika.medifirst2000.util.CurrencyUtil;
|
import com.jasamedika.medifirst2000.util.CurrencyUtil;
|
||||||
import com.jasamedika.medifirst2000.util.StringUtil;
|
import com.jasamedika.medifirst2000.util.StringUtil;
|
||||||
@ -68,6 +73,7 @@ import com.jasamedika.medifirst2000.vo.KelompokTransaksiVO;
|
|||||||
import com.jasamedika.medifirst2000.vo.PegawaiVO;
|
import com.jasamedika.medifirst2000.vo.PegawaiVO;
|
||||||
import com.jasamedika.medifirst2000.vo.RuanganVO;
|
import com.jasamedika.medifirst2000.vo.RuanganVO;
|
||||||
import com.jasamedika.medifirst2000.vo.SettingPirSdmVO;
|
import com.jasamedika.medifirst2000.vo.SettingPirSdmVO;
|
||||||
|
import com.jasamedika.medifirst2000.vo.SkorDokterVO;
|
||||||
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
|
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
|
||||||
import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO;
|
import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO;
|
||||||
import com.jasamedika.medifirst2000.vo.SuratKeputusanVO;
|
import com.jasamedika.medifirst2000.vo.SuratKeputusanVO;
|
||||||
@ -80,6 +86,9 @@ import com.jasamedika.medifirst2000.vo.custom.TargetLayananLuarJamKerjaVO;
|
|||||||
@Service("IkiDanRemunerasiService")
|
@Service("IkiDanRemunerasiService")
|
||||||
public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements IkiDanRemunerasiService {
|
public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements IkiDanRemunerasiService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LogbookKinerjaService logbookKinerjaService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private BaseConverterImpl<StrukHistoriVO, StrukHistori> strukHistoriConverter;
|
private BaseConverterImpl<StrukHistoriVO, StrukHistori> strukHistoriConverter;
|
||||||
|
|
||||||
@ -155,6 +164,9 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao;
|
private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IndeksKinerjaDokterDao indeksKinerjaDokterDao;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> loadData() {
|
public Map<String, Object> loadData() {
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
@ -485,6 +497,76 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void autoSaveTargetCapaianLayananJamKerja() throws ParseException {
|
||||||
|
List<Map<String, Object>> listIkiDokter = new ArrayList<>();
|
||||||
|
|
||||||
|
Integer lastYear = LocalDate.now().minusYears(1).getYear();
|
||||||
|
|
||||||
|
List<Map<String, Object>> data = indeksKinerjaDokterDao.findAll(lastYear.toString());
|
||||||
|
List<SkorDokterVO> listSkorDokter = this.logbookKinerjaService
|
||||||
|
.hitungTargetSkorLogbookDokter(lastYear.toString());
|
||||||
|
|
||||||
|
for (Map<String, Object> map : data) {
|
||||||
|
for (SkorDokterVO skorDokter : listSkorDokter) {
|
||||||
|
if (CommonUtil.isNullOrEmpty(map.get("skor")) && skorDokter.getIdPegawai().equals(map.get("pegawaiId"))
|
||||||
|
&& skorDokter.getBulan().equals(map.get("bulan"))) {
|
||||||
|
map.put("skor", skorDokter.getSkor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommonUtil.isNotNullOrEmpty(data)) {
|
||||||
|
data.stream()
|
||||||
|
.filter(ikiDokter -> ikiDokter.get("iki") != null && ikiDokter.get("skor") != null
|
||||||
|
&& !Double.valueOf(0.0).equals(ikiDokter.get("skor")))
|
||||||
|
.collect(Collectors.groupingBy(ikiDokter -> ikiDokter.get("subunitKerjaId"),
|
||||||
|
Collectors.groupingBy(ikiDokter -> ikiDokter.get("iki"))))
|
||||||
|
.forEach((o1, objectListMap) -> objectListMap.forEach((o2, maps) -> {
|
||||||
|
List<Map<String, Object>> sortedCollectMap = maps.stream()
|
||||||
|
.sorted(Comparator.comparing(o3 -> Double.valueOf(o3.get("skor").toString())))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
int listMapSize = sortedCollectMap.size();
|
||||||
|
boolean isIkiMax = Double.valueOf(3.0).equals(sortedCollectMap.get(0).get("iki"));
|
||||||
|
double score;
|
||||||
|
if (isIkiMax) {
|
||||||
|
// min
|
||||||
|
score = Double.parseDouble(sortedCollectMap.get(0).get("skor").toString());
|
||||||
|
} else if (listMapSize % 2 == 0) {
|
||||||
|
// med for even
|
||||||
|
int center1 = listMapSize / 2 - 1;
|
||||||
|
int center2 = listMapSize / 2;
|
||||||
|
score = (Double.parseDouble(sortedCollectMap.get(center1).get("skor").toString())
|
||||||
|
+ Double.parseDouble(sortedCollectMap.get(center2).get("skor").toString())) / 2;
|
||||||
|
} else {
|
||||||
|
// med for odd
|
||||||
|
int center = listMapSize / 2;
|
||||||
|
score = Double.parseDouble(sortedCollectMap.get(center).get("skor").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
sortedCollectMap.forEach(collectMap -> {
|
||||||
|
double skorDasar = score / Double.parseDouble(collectMap.get("iki").toString());
|
||||||
|
|
||||||
|
collectMap.put("skorDasar", skorDasar);
|
||||||
|
});
|
||||||
|
|
||||||
|
listIkiDokter.addAll(sortedCollectMap);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<IndeksKinerjaDokter> models = new ArrayList<>();
|
||||||
|
for (Map<String, Object> ikiDokter : listIkiDokter) {
|
||||||
|
IndeksKinerjaDokter model = indeksKinerjaDokterDao.findOne(ikiDokter.get("noRec").toString());
|
||||||
|
model.setSkor(Double.parseDouble(ikiDokter.get("skor").toString()));
|
||||||
|
model.setSkorDasar(Double.parseDouble(ikiDokter.get("skorDasar").toString()));
|
||||||
|
|
||||||
|
models.add(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
indeksKinerjaDokterDao.save(models);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException {
|
public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException {
|
||||||
List<Map<String, Object>> dataLayananRaw = new ArrayList<>();
|
List<Map<String, Object>> dataLayananRaw = new ArrayList<>();
|
||||||
|
|||||||
@ -2147,4 +2147,22 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/hitung-target-skor-dokter", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
public ResponseEntity<Boolean> hitungTargetSkorDokter(HttpServletRequest request) throws ParseException {
|
||||||
|
try {
|
||||||
|
service.autoSaveTargetCapaianLayananJamKerja();
|
||||||
|
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
|
||||||
|
getMessage(MessageResource.LABEL_SUCCESS, request));
|
||||||
|
return RestUtil.getJsonResponse(true, HttpStatus.CREATED, mapHeaderMessage);
|
||||||
|
} catch (ServiceVOException sve) {
|
||||||
|
LOGGER.error("Got exception {} when hitung target skor dokter", 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 hitung target skor dokter", jse.getMessage());
|
||||||
|
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage());
|
||||||
|
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user