From 6006e2ceb702ac1bbb7a83b3a2b8e9d03ef7f292 Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 1 Dec 2023 09:34:01 +0700 Subject: [PATCH 1/2] Update service logbook kinerja Penerapan synchronized method untuk hitung akumulasi capaian entri working record --- .../impl/LogbookKinerjaDetailServiceImpl.java | 63 +++++++++---------- jasamedika-core/pom.xml | 9 ++- .../medifirst2000/util/DoubleCounter.java | 26 ++++++++ 3 files changed, 64 insertions(+), 34 deletions(-) create mode 100644 jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java index c43a5e88..14c6f798 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java @@ -1,23 +1,5 @@ package com.jasamedika.medifirst2000.service.impl; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -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.LogbookKinerjaDao; @@ -29,7 +11,19 @@ import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.LogbookKinerjaDetailService; import com.jasamedika.medifirst2000.util.CommonUtil; import com.jasamedika.medifirst2000.util.DateUtil; +import com.jasamedika.medifirst2000.util.DoubleCounter; import com.jasamedika.medifirst2000.vo.LogbookKinerjaDetailVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.orm.jpa.JpaSystemException; +import org.springframework.stereotype.Service; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.*; @Service("LogbookKinerjaDetailService") public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implements LogbookKinerjaDetailService { @@ -60,7 +54,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement LogbookKinerjaDetail resultModel = logbookKinerjaDetailDao.save(logbookKinerjaDetail); if (CommonUtil.isNotNullOrEmpty(resultModel)) { - /** + /* * menghitung capaian indikator satuan yang harus dihitung secara * akumulatif */ @@ -76,7 +70,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement logbookKinerjaDao.save(models); } - /** + /* * menghitung capaian indikator satuan yang harus dihitung secara * rata-rata */ @@ -104,14 +98,18 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement LogbookKinerja logbookKinerja = logbookKinerjaDao.findOne(vo.getLogbookKinerja().getNoRec()); LogbookKinerjaDetail logbookKinerjaDetailLama = logbookKinerjaDetailDao.findOne(vo.getNoRec()); - /** + /* * menghitung indikator capaian satuan yang harus dihitung secara * akumulatif */ if (!vo.getStatusEnabled() && !vo.getStatusVerifikasi()) { - logbookKinerja.setCapaian(logbookKinerja.getCapaian() - vo.getCapaian()); + DoubleCounter capaianSubstracted = new DoubleCounter(logbookKinerja.getCapaian()); + capaianSubstracted.add(vo.getCapaian()); + logbookKinerja.setCapaian(capaianSubstracted.getResult()); } else if (vo.getStatusEnabled() && vo.getStatusVerifikasi()) { - logbookKinerja.setCapaian(logbookKinerja.getCapaian() + vo.getCapaian()); + DoubleCounter capaianAdded = new DoubleCounter(logbookKinerja.getCapaian()); + capaianAdded.add(vo.getCapaian()); + logbookKinerja.setCapaian(capaianAdded.getResult()); } LogbookKinerjaDetail logbookKinerjaDetailBaru = logbookKinerjaDetailConverter.transferVOToModel(vo, @@ -122,7 +120,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement logbookKinerjaDao.save(logbookKinerja); LogbookKinerjaDetail resultModel = logbookKinerjaDetailDao.save(logbookKinerjaDetailBaru); - /** + /* * menghitung capaian indikator satuan yang harus dihitung secara * rata-rata */ @@ -167,7 +165,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement @Override public List findAll() throws JpaSystemException { - List result = new ArrayList(); + List result = new ArrayList<>(); Iterable models = logbookKinerjaDetailDao.findAll(); if (CommonUtil.isNotNullOrEmpty(models)) { @@ -202,7 +200,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement List> result = logbookKinerjaDetailDao.findWorkingRecord(idPegawai, idJabatan, start, end, statusVerif); for (Map map : result) { - Map logbook = new HashMap(); + Map logbook = new HashMap<>(); logbook.put("noRec", map.get("logbookNoRec")); map.put("logbookKinerja", logbook); map.put("tglBatasAkhirVerif", Date.from(tglLimitVerif.atZone(ZoneId.systemDefault()).toInstant())); @@ -221,7 +219,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement List> result = logbookKinerjaDetailDao.findWorkingRecord(idPegawai, idJabatan, idIndikator, start, end); for (Map map : result) { - Map logbook = new HashMap(); + Map logbook = new HashMap<>(); logbook.put("noRec", map.get("logbookNoRec")); map.put("logbookKinerja", logbook); map.remove("logbookNoRec"); @@ -250,15 +248,14 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement DateFormat mf = new SimpleDateFormat("yyyy-MM"); - List listKategoriPegawaiWorkingRecord = new ArrayList<>(); - listKategoriPegawaiWorkingRecord.addAll(Arrays.asList(Master.KategoryPegawai.REMUN)); + List listKategoriPegawaiWorkingRecord = new ArrayList<>(Arrays.asList(Master.KategoryPegawai.REMUN)); listKategoriPegawaiWorkingRecord.add(Master.KategoryPegawai.BLU_PKWT); List> tugasVerifikasi = logbookKinerjaDetailDao.findVerifWorkingRecord(idPegawai, mf.format(new Date(bulan)), listKategoriPegawaiWorkingRecord, Arrays.asList(Master.UnitKerja.KSM)); if (CommonUtil.isNotNullOrEmpty(tugasVerifikasi) && tugasVerifikasi.size() == 2) { for (Map tv : tugasVerifikasi) { - if (Boolean.valueOf(tv.get("statusVerifikasi").toString())) { + if (Boolean.parseBoolean(tv.get("statusVerifikasi").toString())) { rsMap1.put("sudahDiverifikasi", tv.get("jumlah")); } else { rsMap1.put("belumDiverifikasi", tv.get("jumlah")); @@ -266,7 +263,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement } } else if (CommonUtil.isNotNullOrEmpty(tugasVerifikasi) && tugasVerifikasi.size() == 1) { for (Map tv : tugasVerifikasi) { - if (Boolean.valueOf(tv.get("statusVerifikasi").toString())) { + if (Boolean.parseBoolean(tv.get("statusVerifikasi").toString())) { rsMap1.put("sudahDiverifikasi", tv.get("jumlah")); rsMap1.put("belumDiverifikasi", 0); } else { @@ -284,7 +281,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement mf.format(new Date(bulan)), listKategoriPegawaiWorkingRecord); if (CommonUtil.isNotNullOrEmpty(statusVerifikasi) && statusVerifikasi.size() == 2) { for (Map sv : statusVerifikasi) { - if (Boolean.valueOf(sv.get("statusVerifikasi").toString())) { + if (Boolean.parseBoolean(sv.get("statusVerifikasi").toString())) { rsMap2.put("sudahDiverifikasi", sv.get("jumlah")); } else { rsMap2.put("belumDiverifikasi", sv.get("jumlah")); @@ -292,7 +289,7 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement } } else if (CommonUtil.isNotNullOrEmpty(statusVerifikasi) && statusVerifikasi.size() == 1) { for (Map sv : statusVerifikasi) { - if (Boolean.valueOf(sv.get("statusVerifikasi").toString())) { + if (Boolean.parseBoolean(sv.get("statusVerifikasi").toString())) { rsMap2.put("sudahDiverifikasi", sv.get("jumlah")); rsMap2.put("belumDiverifikasi", 0); } else { diff --git a/jasamedika-core/pom.xml b/jasamedika-core/pom.xml index 93d6afb0..c95ffbe3 100644 --- a/jasamedika-core/pom.xml +++ b/jasamedika-core/pom.xml @@ -62,7 +62,7 @@ specification-arg-resolver 0.9.0 - + com.itextpdf.tool @@ -77,6 +77,13 @@ 5.5.9 + + + org.projectlombok + lombok + ${project.lombok.version} + provided + diff --git a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java new file mode 100644 index 00000000..f37ac193 --- /dev/null +++ b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java @@ -0,0 +1,26 @@ +package com.jasamedika.medifirst2000.util; + +import lombok.AllArgsConstructor; + +/** + * @author salmanoe + * @version 1.0.0 + * @since 01/12/2023 + */ +@AllArgsConstructor +public class DoubleCounter { + + private double result; + + public synchronized void add(double x) { + result += x; + } + + public synchronized void substract(double x) { + result -= x; + } + + public synchronized double getResult() { + return result; + } +} From adddffcc75c709338a0470476bd9fced3626aedc Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Fri, 1 Dec 2023 10:05:41 +0700 Subject: [PATCH 2/2] Update service logbook kinerja Penerapan hitung akumulasi capaian by database --- .../dao/LogbookKinerjaDetailDao.java | 9 ++-- .../impl/LogbookKinerjaDetailServiceImpl.java | 53 +++++++------------ jasamedika-core/pom.xml | 9 ---- .../medifirst2000/util/DoubleCounter.java | 26 --------- 4 files changed, 23 insertions(+), 74 deletions(-) delete mode 100644 jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDetailDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDetailDao.java index e07e2b06..64816cc0 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDetailDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/LogbookKinerjaDetailDao.java @@ -1,15 +1,14 @@ package com.jasamedika.medifirst2000.dao; -import java.util.Date; -import java.util.List; -import java.util.Map; - +import com.jasamedika.medifirst2000.entities.LogbookKinerjaDetail; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import com.jasamedika.medifirst2000.entities.LogbookKinerjaDetail; +import java.util.Date; +import java.util.List; +import java.util.Map; @Repository("logbookKinerjaDetailDao") public interface LogbookKinerjaDetailDao extends PagingAndSortingRepository { diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java index 14c6f798..4c65feb5 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/LogbookKinerjaDetailServiceImpl.java @@ -11,7 +11,6 @@ import com.jasamedika.medifirst2000.exception.ServiceVOException; import com.jasamedika.medifirst2000.service.LogbookKinerjaDetailService; import com.jasamedika.medifirst2000.util.CommonUtil; import com.jasamedika.medifirst2000.util.DateUtil; -import com.jasamedika.medifirst2000.util.DoubleCounter; import com.jasamedika.medifirst2000.vo.LogbookKinerjaDetailVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.jpa.JpaSystemException; @@ -43,15 +42,10 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement @Override public LogbookKinerjaDetailVO add(LogbookKinerjaDetailVO vo) throws JpaSystemException, ServiceVOException { LogbookKinerja logbookKinerja = logbookKinerjaDao.findOne(vo.getLogbookKinerja().getNoRec()); - LogbookKinerjaDetail logbookKinerjaDetail = logbookKinerjaDetailConverter.transferVOToModel(vo, new LogbookKinerjaDetail()); - logbookKinerjaDetail.setLogbookKinerja(logbookKinerja); logbookKinerjaDetail.setTanggalKegiatan(new Date()); - - logbookKinerjaDao.save(logbookKinerja); - LogbookKinerjaDetail resultModel = logbookKinerjaDetailDao.save(logbookKinerjaDetail); if (CommonUtil.isNotNullOrEmpty(resultModel)) { /* @@ -69,7 +63,6 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement } logbookKinerjaDao.save(models); } - /* * menghitung capaian indikator satuan yang harus dihitung secara * rata-rata @@ -86,10 +79,8 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement logbookKinerjaDao.save(models); } } - LogbookKinerjaDetailVO resultVO = new LogbookKinerjaDetailVO(); resultVO = logbookKinerjaDetailConverter.transferModelToVO(resultModel, resultVO); - return resultVO; } @@ -97,34 +88,30 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement public LogbookKinerjaDetailVO update(LogbookKinerjaDetailVO vo) throws JpaSystemException, ServiceVOException { LogbookKinerja logbookKinerja = logbookKinerjaDao.findOne(vo.getLogbookKinerja().getNoRec()); LogbookKinerjaDetail logbookKinerjaDetailLama = logbookKinerjaDetailDao.findOne(vo.getNoRec()); - - /* - * menghitung indikator capaian satuan yang harus dihitung secara - * akumulatif - */ - if (!vo.getStatusEnabled() && !vo.getStatusVerifikasi()) { - DoubleCounter capaianSubstracted = new DoubleCounter(logbookKinerja.getCapaian()); - capaianSubstracted.add(vo.getCapaian()); - logbookKinerja.setCapaian(capaianSubstracted.getResult()); - } else if (vo.getStatusEnabled() && vo.getStatusVerifikasi()) { - DoubleCounter capaianAdded = new DoubleCounter(logbookKinerja.getCapaian()); - capaianAdded.add(vo.getCapaian()); - logbookKinerja.setCapaian(capaianAdded.getResult()); - } - LogbookKinerjaDetail logbookKinerjaDetailBaru = logbookKinerjaDetailConverter.transferVOToModel(vo, logbookKinerjaDetailLama); - logbookKinerjaDetailBaru.setLogbookKinerja(logbookKinerja); - - logbookKinerjaDao.save(logbookKinerja); LogbookKinerjaDetail resultModel = logbookKinerjaDetailDao.save(logbookKinerjaDetailBaru); - - /* - * menghitung capaian indikator satuan yang harus dihitung secara - * rata-rata - */ if (CommonUtil.isNotNullOrEmpty(resultModel)) { + /* + * menghitung capaian indikator satuan yang harus dihitung secara + * akumulatif + */ + List> dataSatuanJumlah = logbookKinerjaDetailDao.findSumCapaianByKontrak( + vo.getLogbookKinerja().getNoRec(), Arrays.asList(Master.SatuanIndikator.PERCENTAGE)); + if (CommonUtil.isNotNullOrEmpty(dataSatuanJumlah)) { + List models = new ArrayList<>(); + for (Map map : dataSatuanJumlah) { + LogbookKinerja model = logbookKinerjaDao.findOne(map.get("logbookId").toString()); + model.setCapaian(Double.valueOf(map.get("sumCapaian").toString())); + models.add(model); + } + logbookKinerjaDao.save(models); + } + /* + * menghitung capaian indikator satuan yang harus dihitung secara + * rata-rata + */ List> dataSatuanRatarata = logbookKinerjaDetailDao.findAvgCapaianByKontrak( vo.getLogbookKinerja().getNoRec(), Arrays.asList(Master.SatuanIndikator.PERCENTAGE)); if (CommonUtil.isNotNullOrEmpty(dataSatuanRatarata)) { @@ -137,10 +124,8 @@ public class LogbookKinerjaDetailServiceImpl extends BaseVoServiceImpl implement logbookKinerjaDao.save(models); } } - LogbookKinerjaDetailVO resultVO = new LogbookKinerjaDetailVO(); resultVO = logbookKinerjaDetailConverter.transferModelToVO(resultModel, resultVO); - return resultVO; } diff --git a/jasamedika-core/pom.xml b/jasamedika-core/pom.xml index c95ffbe3..e60cfec5 100644 --- a/jasamedika-core/pom.xml +++ b/jasamedika-core/pom.xml @@ -76,15 +76,6 @@ itextpdf 5.5.9 - - - - org.projectlombok - lombok - ${project.lombok.version} - provided - - Jasa Medika diff --git a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java b/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java deleted file mode 100644 index f37ac193..00000000 --- a/jasamedika-core/src/main/java/com/jasamedika/medifirst2000/util/DoubleCounter.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.jasamedika.medifirst2000.util; - -import lombok.AllArgsConstructor; - -/** - * @author salmanoe - * @version 1.0.0 - * @since 01/12/2023 - */ -@AllArgsConstructor -public class DoubleCounter { - - private double result; - - public synchronized void add(double x) { - result += x; - } - - public synchronized void substract(double x) { - result -= x; - } - - public synchronized double getResult() { - return result; - } -}