Add CRUD Service target skor dokter

Penambahan service simpan, update, delete, view untuk target skor dokter kelompok kerja dan individu. Penambahan hitung pembagian skor kelopmok kerja untuk individu.
This commit is contained in:
Salman Manoe 2021-12-31 10:52:09 +07:00
parent b396626f69
commit 4705b4d248
7 changed files with 438 additions and 4 deletions

View File

@ -18,10 +18,16 @@ import com.jasamedika.medifirst2000.entities.IndeksKinerjaDokter;
@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")
@Query("select new Map(ikid.noRec as noRec," + "ikid.bulan as bulan," + "ikid.unitKerjaId as unitKerjaId,"
+ "ikid.subunitKerjaId as subunitKerjaId," + "ikid.pegawaiId as pegawaiId," + "ikid.iki as iki,"
+ "ikid.skor as skor," + "ikid.skorDasar as skorDasar) " + "from IndeksKinerjaDokter ikid "
+ "where ikid.statusEnabled is true " + "and to_char(ikid.bulan,'yyyy') = :tahun")
List<Map<String, Object>> findAll(@Param("tahun") String tahun) throws JpaSystemException;
@Query("select new Map(ikid.unitKerjaId as unitKerjaId," + "ikid.subunitKerjaId as subunitKerjaId,"
+ "coalesce(sum(ikid.skorDasar),0) as totalSkorDasar) " + "from IndeksKinerjaDokter ikid "
+ "where ikid.statusEnabled is true " + "and to_char(ikid.bulan,'yyyy') = :tahun "
+ "group by ikid.unitKerjaId, ikid.subunitKerjaId " + "order by ikid.unitKerjaId, ikid.subunitKerjaId")
List<Map<String, Object>> findTotalSkorByKelompokKerja(@Param("tahun") String tahun) throws JpaSystemException;
}

View File

@ -1,6 +1,12 @@
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 com.jasamedika.medifirst2000.entities.TargetSkorDokterDetail;
@ -10,4 +16,10 @@ import com.jasamedika.medifirst2000.entities.TargetSkorDokterDetail;
*/
public interface TargetSkorDokterDetailDao extends PagingAndSortingRepository<TargetSkorDokterDetail, String> {
@Query("select new Map(tsdd.kdProfile as kdProfile,tsdd.statusEnabled as statusEnabled,"
+ "tsdd.targetSkorId as targetSkorId,tsdd.noRec as noRec,"
+ "tsdd.pegawaiId as pegawaiId,tsdd.skor as skor) " + "from TargetSkorDokterDetail tsdd "
+ "where tsdd.statusEnabled is true " + "and tsdd.targetSkorId = :noRec")
public List<Map<String, Object>> findByHeadId(@Param("noRec") String noRec) throws JpaSystemException;
}

View File

@ -0,0 +1,13 @@
package com.jasamedika.medifirst2000.service;
import com.jasamedika.medifirst2000.entities.TargetSkorDokterDetail;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterDetailVO;
/**
* @author salmanoe
* @since Dec 27, 2021
*/
public interface TargetSkorDokterDetailService
extends BaseVoService<TargetSkorDokterDetail, TargetSkorDokterDetailVO, String> {
}

View File

@ -0,0 +1,22 @@
package com.jasamedika.medifirst2000.service;
import java.util.List;
import java.util.Map;
import org.springframework.orm.jpa.JpaSystemException;
import com.jasamedika.medifirst2000.entities.TargetSkorDokter;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterDetailVO;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterVO;
/**
* @author salmanoe
* @since Dec 24, 2021
*/
public interface TargetSkorDokterService extends BaseVoService<TargetSkorDokter, TargetSkorDokterVO, String> {
public List<TargetSkorDokterDetailVO> getDetail(TargetSkorDokter targetSkor) throws JpaSystemException;
public List<Map<String, Object>> findAll(Long tahun) throws JpaSystemException;
}

View File

@ -6,6 +6,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@ -62,6 +63,7 @@ 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.service.TargetSkorDokterService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.CurrencyUtil;
import com.jasamedika.medifirst2000.util.StringUtil;
@ -77,6 +79,7 @@ import com.jasamedika.medifirst2000.vo.SkorDokterVO;
import com.jasamedika.medifirst2000.vo.StrukHistoriVO;
import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO;
import com.jasamedika.medifirst2000.vo.SuratKeputusanVO;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterVO;
import com.jasamedika.medifirst2000.vo.UnitKerjaPegawaiVO;
import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaDetailVO;
import com.jasamedika.medifirst2000.vo.custom.TargetLayananJamKerjaVO;
@ -89,6 +92,9 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
@Autowired
private LogbookKinerjaService logbookKinerjaService;
@Autowired
private TargetSkorDokterService targetSkorDokterService;
@Autowired
private BaseConverterImpl<StrukHistoriVO, StrukHistori> strukHistoriConverter;
@ -501,6 +507,8 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
public void autoSaveTargetCapaianLayananJamKerja() throws ParseException {
List<Map<String, Object>> listIkiDokter = new ArrayList<>();
Date tglHitung = new Date();
LocalDate firstDayOfYear = LocalDate.now().with(TemporalAdjusters.firstDayOfYear());
Integer lastYear = LocalDate.now().minusYears(1).getYear();
List<Map<String, Object>> data = indeksKinerjaDokterDao.findAll(lastYear.toString());
@ -565,6 +573,35 @@ public class IkiDanRemunerasiServiceImpl extends BaseVoServiceImpl implements Ik
}
indeksKinerjaDokterDao.save(models);
List<Map<String, Object>> listTotalSkor = indeksKinerjaDokterDao
.findTotalSkorByKelompokKerja(lastYear.toString());
for (Map<String, Object> totalSkor : listTotalSkor) {
TargetSkorDokterVO vo = new TargetSkorDokterVO();
vo.setKdProfile((short) 0);
vo.setStatusEnabled(true);
UnitKerjaPegawaiVO unitKerjVO = new UnitKerjaPegawaiVO();
unitKerjVO.setId(Integer.parseInt(totalSkor.get("unitKerjaId").toString()));
vo.setUnitKerjaPegawai(unitKerjVO);
SubUnitKerjaPegawaiVO subunitKerjaVO = new SubUnitKerjaPegawaiVO();
subunitKerjaVO.setId(Integer.parseInt(totalSkor.get("subunitKerjaId").toString()));
vo.setSubUnitKerjaPegawai(subunitKerjaVO);
vo.setTotalSkorDasar(Double.parseDouble(totalSkor.get("totalSkorDasar").toString()));
vo.setTglHitung(tglHitung);
vo.setTmt(Date.from(firstDayOfYear.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
/**
* Tidak memungkinkan untuk hitung ulang target skor kelompok kerja
* dengan asumsi tidak adanya fitur batal verifikasi logbook skor
* dokter
*
* Sehingga tidak memanggil service update
*/
targetSkorDokterService.add(vo);
}
}
@Override

View File

@ -0,0 +1,120 @@
package com.jasamedika.medifirst2000.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Service;
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.TargetSkorDokterDetailDao;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.TargetSkorDokter;
import com.jasamedika.medifirst2000.entities.TargetSkorDokterDetail;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.TargetSkorDokterDetailService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterDetailVO;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterVO;
/**
* @author salmanoe
* @since Dec 27, 2021
*/
@Service("targetSkorDokterDetailService")
public class TargetSkorDokterDetailServiceImpl extends BaseVoServiceImpl implements TargetSkorDokterDetailService {
@Autowired
private BaseConverterImpl<TargetSkorDokterVO, TargetSkorDokter> targetSkorConverter;
@Autowired
private BaseConverterImpl<PegawaiVO, Pegawai> pegawaiConverter;
@Autowired
private BaseConverterImpl<TargetSkorDokterDetailVO, TargetSkorDokterDetail> targetSkorDetailConverter;
@Autowired
private TargetSkorDokterDetailDao targetSkorDetailDao;
@Override
public TargetSkorDokterDetailVO add(TargetSkorDokterDetailVO vo) throws JpaSystemException, ServiceVOException {
TargetSkorDokter targetSkor = targetSkorConverter.transferVOToModel(vo.getTargetSkor(), new TargetSkorDokter());
Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai());
TargetSkorDokterDetail targetSkorDetail = targetSkorDetailConverter.transferVOToModel(vo,
new TargetSkorDokterDetail());
targetSkorDetail.setTargetSkor(targetSkor);
targetSkorDetail.setPegawai(pegawai);
TargetSkorDokterDetail resultModel = targetSkorDetailDao.save(targetSkorDetail);
TargetSkorDokterDetailVO resultVO = new TargetSkorDokterDetailVO();
resultVO = targetSkorDetailConverter.transferModelToVO(resultModel, resultVO);
return resultVO;
}
@Override
public TargetSkorDokterDetailVO update(TargetSkorDokterDetailVO vo) throws JpaSystemException, ServiceVOException {
TargetSkorDokterDetail targetSkorDetailLama = targetSkorDetailDao.findOne(vo.getNoRec());
TargetSkorDokter targetSkor = targetSkorConverter.transferVOToModel(vo.getTargetSkor(), new TargetSkorDokter());
Pegawai pegawai = pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai());
TargetSkorDokterDetail targetSkorDetailBaru = targetSkorDetailConverter.transferVOToModel(vo,
targetSkorDetailLama);
targetSkorDetailBaru.setTargetSkor(targetSkor);
targetSkorDetailBaru.setPegawai(pegawai);
TargetSkorDokterDetail resultModel = targetSkorDetailDao.save(targetSkorDetailBaru);
TargetSkorDokterDetailVO resultVO = new TargetSkorDokterDetailVO();
resultVO = targetSkorDetailConverter.transferModelToVO(resultModel, resultVO);
return resultVO;
}
@Override
public Boolean delete(String key) throws JpaSystemException {
targetSkorDetailDao.delete(key);
return true;
}
@Override
public TargetSkorDokterDetailVO findById(String key) throws JpaSystemException {
TargetSkorDokterDetailVO result = new TargetSkorDokterDetailVO();
TargetSkorDokterDetail targetSkorDetail = targetSkorDetailDao.findOne(key);
if (CommonUtil.isNotNullOrEmpty(targetSkorDetail)) {
result = targetSkorDetailConverter.transferModelToVO(targetSkorDetail, result);
}
return result;
}
@Override
public List<TargetSkorDokterDetailVO> findAll() throws JpaSystemException {
List<TargetSkorDokterDetailVO> result = new ArrayList<TargetSkorDokterDetailVO>();
Iterable<TargetSkorDokterDetail> models = targetSkorDetailDao.findAll();
if (CommonUtil.isNotNullOrEmpty(models)) {
for (TargetSkorDokterDetail model : models) {
TargetSkorDokterDetailVO vo = new TargetSkorDokterDetailVO();
vo = targetSkorDetailConverter.transferModelToVO(model, vo);
result.add(vo);
}
}
return result;
}
@Override
public Map<String, Object> findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit,
String sort, String dir) {
return null;
}
}

View File

@ -0,0 +1,224 @@
package com.jasamedika.medifirst2000.service.impl;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Service;
import com.jasamedika.medifirst2000.constants.Master;
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao;
import com.jasamedika.medifirst2000.dao.TargetSkorDokterDao;
import com.jasamedika.medifirst2000.dao.TargetSkorDokterDetailDao;
import com.jasamedika.medifirst2000.entities.SubUnitKerjaPegawai;
import com.jasamedika.medifirst2000.entities.TargetSkorDokter;
import com.jasamedika.medifirst2000.entities.UnitKerjaPegawai;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.TargetSkorDokterDetailService;
import com.jasamedika.medifirst2000.service.TargetSkorDokterService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.MathUtil;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.SubUnitKerjaPegawaiVO;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterDetailVO;
import com.jasamedika.medifirst2000.vo.TargetSkorDokterVO;
import com.jasamedika.medifirst2000.vo.UnitKerjaPegawaiVO;
/**
* @author salmanoe
* @since Dec 24, 2021
*/
@Service("targetSkorDokterService")
public class TargetSkorDokterServiceImpl extends BaseVoServiceImpl implements TargetSkorDokterService {
@Autowired
private TargetSkorDokterDetailService targetSkorDetailService;
@Autowired
private BaseConverterImpl<UnitKerjaPegawaiVO, UnitKerjaPegawai> unitKerjaConverter;
@Autowired
private BaseConverterImpl<SubUnitKerjaPegawaiVO, SubUnitKerjaPegawai> subunitKerjaConverter;
@Autowired
private BaseConverterImpl<TargetSkorDokterVO, TargetSkorDokter> targetSkorConverter;
@Autowired
private TargetSkorDokterDao targetSkorDao;
@Autowired
private TargetSkorDokterDetailDao targetSkorDetailDao;
@Autowired
private MapPegawaiJabatanToUnitKerjaDao mapJabatanDao;
@Override
public TargetSkorDokterVO add(TargetSkorDokterVO vo) throws JpaSystemException, ServiceVOException {
UnitKerjaPegawai unitKerja = unitKerjaConverter.transferVOToModel(vo.getUnitKerjaPegawai(),
new UnitKerjaPegawai());
SubUnitKerjaPegawai subunitKerja = subunitKerjaConverter.transferVOToModel(vo.getSubUnitKerjaPegawai(),
new SubUnitKerjaPegawai());
TargetSkorDokter targetSkor = targetSkorConverter.transferVOToModel(vo, new TargetSkorDokter());
targetSkor.setUnitKerjaPegawai(unitKerja);
targetSkor.setSubUnitKerjaPegawai(subunitKerja);
targetSkor.setTglHitung(new Date());
TargetSkorDokter resultModel = targetSkorDao.save(targetSkor);
TargetSkorDokterVO resultVO = new TargetSkorDokterVO();
if (CommonUtil.isNotNullOrEmpty(resultModel)) {
resultVO = targetSkorConverter.transferModelToVO(resultModel, resultVO);
/**
* Pembagian skor untuk seluruh anggota kelompok kerja
*/
List<TargetSkorDokterDetailVO> listDetailVO = this.getDetail(resultModel);
for (TargetSkorDokterDetailVO detailVO : listDetailVO) {
if (CommonUtil.isNotNullOrEmpty(detailVO.getNoRec())) {
targetSkorDetailService.update(detailVO);
} else {
targetSkorDetailService.add(detailVO);
}
}
}
return resultVO;
}
@Override
public TargetSkorDokterVO update(TargetSkorDokterVO vo) throws JpaSystemException, ServiceVOException {
TargetSkorDokter targetSkorLama = targetSkorDao.findOne(vo.getNoRec());
UnitKerjaPegawai unitKerja = unitKerjaConverter.transferVOToModel(vo.getUnitKerjaPegawai(),
new UnitKerjaPegawai());
SubUnitKerjaPegawai subunitKerja = subunitKerjaConverter.transferVOToModel(vo.getSubUnitKerjaPegawai(),
new SubUnitKerjaPegawai());
TargetSkorDokter targetSkorBaru = targetSkorConverter.transferVOToModel(vo, targetSkorLama);
targetSkorBaru.setUnitKerjaPegawai(unitKerja);
targetSkorBaru.setSubUnitKerjaPegawai(subunitKerja);
targetSkorBaru.setTglHitung(new Date());
TargetSkorDokter resultModel = targetSkorDao.save(targetSkorBaru);
TargetSkorDokterVO resultVO = new TargetSkorDokterVO();
if (CommonUtil.isNotNullOrEmpty(resultModel)) {
resultVO = targetSkorConverter.transferModelToVO(resultModel, resultVO);
/**
* Pembagian skor untuk seluruh anggota kelompok kerja
*/
List<TargetSkorDokterDetailVO> listDetailVO = this.getDetail(resultModel);
for (TargetSkorDokterDetailVO detailVO : listDetailVO) {
if (CommonUtil.isNotNullOrEmpty(detailVO.getNoRec())) {
targetSkorDetailService.update(detailVO);
} else {
targetSkorDetailService.add(detailVO);
}
}
}
return resultVO;
}
@Override
public Boolean delete(String key) throws JpaSystemException {
targetSkorDao.delete(key);
return true;
}
@Override
public TargetSkorDokterVO findById(String key) throws JpaSystemException {
TargetSkorDokterVO result = new TargetSkorDokterVO();
TargetSkorDokter targetSkor = targetSkorDao.findOne(key);
if (CommonUtil.isNotNullOrEmpty(targetSkor)) {
result = targetSkorConverter.transferModelToVO(targetSkor, result);
}
return result;
}
@Override
public List<TargetSkorDokterVO> findAll() throws JpaSystemException {
List<TargetSkorDokterVO> result = new ArrayList<TargetSkorDokterVO>();
Iterable<TargetSkorDokter> models = targetSkorDao.findAll();
if (CommonUtil.isNotNullOrEmpty(models)) {
for (TargetSkorDokter model : models) {
TargetSkorDokterVO vo = new TargetSkorDokterVO();
vo = targetSkorConverter.transferModelToVO(model, vo);
result.add(vo);
}
}
return result;
}
@Override
public Map<String, Object> findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit,
String sort, String dir) {
return null;
}
@Override
public List<TargetSkorDokterDetailVO> getDetail(TargetSkorDokter targetSkor) throws JpaSystemException {
List<TargetSkorDokterDetailVO> result = new ArrayList<>();
List<Map<String, Object>> listPegawai = mapJabatanDao.findPegawaiJabatanByKelompokKerja(
targetSkor.getSubUnitKerjaPegawai().getId(), Arrays.asList(Master.KategoryPegawai.REMUN),
Master.JenisPegawai.DOKTER, Arrays.asList(Master.KedudukanPegawai.INACTIVE_LOGIN));
List<Map<String, Object>> listDetail = targetSkorDetailDao.findByHeadId(targetSkor.getNoRec());
for (Map<String, Object> pegawai : listPegawai) {
TargetSkorDokterDetailVO vo = new TargetSkorDokterDetailVO();
for (Map<String, Object> detail : listDetail) {
if (detail.get("pegawaiId").toString().equals(pegawai.get("pegawaiId").toString())) {
vo.setNoRec(detail.get("noRec").toString());
break;
}
}
TargetSkorDokterVO targetSkorVO = new TargetSkorDokterVO();
targetSkorVO = targetSkorConverter.transferModelToVO(targetSkor, targetSkorVO);
vo.setTargetSkor(targetSkorVO);
PegawaiVO pegawaiVO = new PegawaiVO();
pegawaiVO.setId(Integer.parseInt(pegawai.get("pegawaiId").toString()));
vo.setPegawai(pegawaiVO);
vo.setKdProfile((short) 0);
vo.setStatusEnabled(true);
vo.setSkor(targetSkor.getTotalSkorDasar() / listPegawai.size());
result.add(vo);
}
return result;
}
@Override
public List<Map<String, Object>> findAll(Long tahun) throws JpaSystemException {
DateFormat tf = new SimpleDateFormat("yyyy");
List<Map<String, Object>> result = targetSkorDao.findAll(tf.format(new Date(tahun)));
for (Map<String, Object> rs : result) {
double totalTargetSkor = Double.parseDouble(rs.get("totalTargetSkor").toString());
rs.put("totalTargetSkor", MathUtil.round(totalTargetSkor, 2));
}
return result;
}
}