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;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.PagingAndSortingRepository;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.jasamedika.medifirst2000.entities.IndeksKinerjaDokter;
|
||||
|
||||
/**
|
||||
* @author ITI-14
|
||||
* @author salmanoe
|
||||
* @since Nov 29, 2021
|
||||
*/
|
||||
@Repository("indeksKinerjaDokterDao")
|
||||
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.Map;
|
||||
|
||||
import com.jasamedika.medifirst2000.vo.LogbookKinerjaDokterVO;
|
||||
import com.jasamedika.medifirst2000.vo.SettingPirSdmVO;
|
||||
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
|
||||
import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO;
|
||||
@ -33,6 +32,8 @@ public interface IkiDanRemunerasiService {
|
||||
|
||||
public Map<String, Object> savePirDanIku(List<SettingPirSdmVO> vo);
|
||||
|
||||
public void autoSaveTargetCapaianLayananJamKerja() throws ParseException;
|
||||
|
||||
public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException;
|
||||
|
||||
public void saveTargetCapaianLayananKelompokKerja(TargetLayananJamKerjaVO vo, Date periodeHitung)
|
||||
|
||||
@ -2,12 +2,14 @@ package com.jasamedika.medifirst2000.service.impl;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@ -24,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import com.jasamedika.medifirst2000.constants.Master;
|
||||
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
|
||||
import com.jasamedika.medifirst2000.dao.IkiDanRemunerasiDao;
|
||||
import com.jasamedika.medifirst2000.dao.IndeksKinerjaDokterDao;
|
||||
import com.jasamedika.medifirst2000.dao.IndikatorKinerjaDetailDao;
|
||||
import com.jasamedika.medifirst2000.dao.JabatanDao;
|
||||
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.entities.EvaluasiJabatan;
|
||||
import com.jasamedika.medifirst2000.entities.IkiDanRemunerasi;
|
||||
import com.jasamedika.medifirst2000.entities.IndeksKinerjaDokter;
|
||||
import com.jasamedika.medifirst2000.entities.IndikatorKinerjaDetail;
|
||||
import com.jasamedika.medifirst2000.entities.Jabatan;
|
||||
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.UnitKerjaPegawai;
|
||||
import com.jasamedika.medifirst2000.service.IkiDanRemunerasiService;
|
||||
import com.jasamedika.medifirst2000.service.LogbookKinerjaService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
import com.jasamedika.medifirst2000.util.CurrencyUtil;
|
||||
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.RuanganVO;
|
||||
import com.jasamedika.medifirst2000.vo.SettingPirSdmVO;
|
||||
import com.jasamedika.medifirst2000.vo.SkorDokterVO;
|
||||
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
|
||||
import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO;
|
||||
import com.jasamedika.medifirst2000.vo.SuratKeputusanVO;
|
||||
@ -80,6 +86,9 @@ import com.jasamedika.medifirst2000.vo.custom.TargetLayananLuarJamKerjaVO;
|
||||
@Service("IkiDanRemunerasiService")
|
||||
public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements IkiDanRemunerasiService {
|
||||
|
||||
@Autowired
|
||||
private LogbookKinerjaService logbookKinerjaService;
|
||||
|
||||
@Autowired
|
||||
private BaseConverterImpl<StrukHistoriVO, StrukHistori> strukHistoriConverter;
|
||||
|
||||
@ -155,6 +164,9 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
|
||||
@Autowired
|
||||
private MapPegawaiLaboratRadiologiDao mapPegawaiLaboratRadiologiDao;
|
||||
|
||||
@Autowired
|
||||
private IndeksKinerjaDokterDao indeksKinerjaDokterDao;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> loadData() {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
@ -485,6 +497,76 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
|
||||
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
|
||||
public void autoSaveTargetCapaianLayananJamKerja(String strPeriode) throws ParseException {
|
||||
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