From 050fdcc0e3de6d76c99123e28a957f760d5ba401 Mon Sep 17 00:00:00 2001 From: salmanoe Date: Wed, 14 Apr 2021 21:55:07 +0700 Subject: [PATCH] - perbaikan service get nilai batas terendah dan tertinggi di evaluasi jabatan - perbaikan format lintang bujur saat pengecekan swafoto dan lokasi presensi --- .../medifirst2000/constants/Master.java | 4 ++ .../medifirst2000/dao/JabatanDao.java | 22 ++++++-- .../medifirst2000/service/JabatanService.java | 3 ++ .../impl/AbsensiPegawaiServiceImpl.java | 54 +++++++++++++++++-- .../service/impl/JabatanServiceImpl.java | 51 +++++++++++++----- .../controller/JabatanController.java | 19 +++++++ 6 files changed, 134 insertions(+), 19 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java index 2668a423..dd0f7a4b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/constants/Master.java @@ -147,6 +147,10 @@ public class Master { public static final Integer NONKELAS = 6; } + public static final class KelompokJabatan { + public static final Integer[] RANGE_REMUN = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + } + public static final class KelompokPasien { public static final Integer BPJS = 2; public static final Integer UMUM = 1; diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JabatanDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JabatanDao.java index a5acd973..244107c4 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JabatanDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/JabatanDao.java @@ -72,9 +72,12 @@ public interface JabatanDao extends PagingAndSortingRepository String strJabatan = "select new Map(jb.id as id,jb.namaJabatan as namaJabatan," + "jb.levelJabatan as levelJabatan,jb.subLevelJabatan as levelDireksi," + "jj.id as jenisJabatanId,jj.jenisJabatan as jenisJabatan," + "uk.id as unitKerjaId,uk.name as unitKerja," - + "el.id as eselonId,el.eselon as eselon) " + "from Jabatan jb " + "inner join jb.jenisJabatan jj " - + "inner join jb.unitKerja uk " + "left join jb.eselon el with el.statusEnabled is true " - + "where jb.statusEnabled is true " + "and jj.statusEnabled is true " + "and uk.statusEnabled is true"; + + "el.id as eselonId,el.eselon as eselon," + + "kj.id as kelompokJabatanId,kj.namaKelompokJabatan as kelompokJabatan) " + "from Jabatan jb " + + "inner join jb.jenisJabatan jj " + "inner join jb.unitKerja uk " + + "left join jb.eselon el with el.statusEnabled is true " + + "left join jb.kelompokJabatan kj with kj.id between 1 and 10 " + "where jb.statusEnabled is true " + + "and jj.statusEnabled is true " + "and uk.statusEnabled is true"; String namaJabatan = " and lower(jb.namaJabatan) like %:namaJabatan%"; @@ -112,4 +115,17 @@ public interface JabatanDao extends PagingAndSortingRepository List> findJabatanByNamaJenisUnit(@Param("namaJabatan") String namaJabatan, @Param("jenisJabatanId") Integer idJenisJabatan, @Param("unitKerjaId") Integer idUnitKerja); + @Query("select new Map(jb.id as id,jb.namaJabatan as namaJabatan," + "jb.kelompokJabatanId as kelompokJabatanId) " + + "from Jabatan jb " + "where jb.statusEnabled is true " + "and jb.unitKerjaId = :unitKerjaId " + + "and jb.jenisJabatanId = :jenisJabatanId " + "group by jb.id, jb.namaJabatan " + + "order by jb.namaJabatan") + List> findJabatan(@Param("jenisJabatanId") Integer idJenisJabatan, + @Param("unitKerjaId") Integer idUnitKerja); + + @Query("select new Map(nj.kelompokJabatanId as kelompokJabatanId," + "min(nj.nilaiTerendah) as nilaiTerendah," + + "max(nj.nilaiTertinggi) as nilaiTertinggi) " + "from NilaiKelompokJabatan nj " + + "where nj.statusEnabled is true " + "and nj.kelompokJabatanId in (:listKelompokJabatanId) " + + "group by nj.kelompokJabatanId " + "order by min(nj.nilaiTerendah)") + List> findPeringkatJabatan(@Param("listKelompokJabatanId") List listIdKelompokJabatan); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/JabatanService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/JabatanService.java index be3c413f..3bb1558f 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/JabatanService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/JabatanService.java @@ -35,4 +35,7 @@ public interface JabatanService extends BaseVoService> findPegawaiByJabatan(Integer idJabatan) throws JpaSystemException; + List> findJabatanDanBatasNilai(Integer idJenisJabatan, Integer idUnitKerja) + throws JpaSystemException; + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/AbsensiPegawaiServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/AbsensiPegawaiServiceImpl.java index ebb03f4e..c92cb851 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/AbsensiPegawaiServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/AbsensiPegawaiServiceImpl.java @@ -6,6 +6,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.DateFormat; +import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -127,11 +128,11 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse model.setLoc_code(Master.PresensiPegawai.SMART_LOC_CODE); model.setRemoteno(Master.PresensiPegawai.SMART_REMOTE_NO); model.setAcc_code(Master.PresensiPegawai.DEFAULT_ACC_CODE); - + // automatic reverse geocoding was disabled // due to too many request to nominatim.openstreetmap.org model.setLokasi(null); - + model.setTr_date(newDate); model.setTr_time(newDate); @@ -207,6 +208,48 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse } + private Double getDecimal(Double n) { + return n - Math.floor(n); + } + + private String getCoordinateFormatted(Double latitude, Double longitude) { + NumberFormat nf = NumberFormat.getNumberInstance(); + + nf.setMaximumFractionDigits(0); + String latDegStr = nf.format(Math.floor(Math.abs(latitude))); + String latMinStr = nf.format(Math.floor(getDecimal(Math.abs(latitude)) * 60)); + + nf.setMaximumFractionDigits(2); + String latSecStr = nf.format(getDecimal(getDecimal(Math.abs(latitude)) * 60) * 60); + + String latStr = ""; + if (latitude < 0) { + latStr = latDegStr + "\u00B0" + latMinStr + "\u2032" + latSecStr + "\u2033 LS"; + } else if (latitude > 0) { + latStr = latDegStr + "\u00B0" + latMinStr + "\u2032" + latSecStr + "\u2033 LU"; + } else { + latStr = latDegStr + "\u00B0" + latMinStr + "\u2032" + latSecStr + "\u2033"; + } + + nf.setMaximumFractionDigits(0); + String longDegStr = nf.format(Math.floor(Math.abs(longitude))); + String longMinStr = nf.format(Math.floor(getDecimal(Math.abs(longitude)) * 60)); + + nf.setMaximumFractionDigits(2); + String longSecStr = nf.format(getDecimal(getDecimal(Math.abs(longitude)) * 60) * 60); + + String longStr = ""; + if (longitude < 0) { + longStr = longDegStr + "\u00B0" + longMinStr + "\u2032" + longSecStr + "\u2033 BB"; + } else if (longitude > 0) { + longStr = longDegStr + "\u00B0" + longMinStr + "\u2032" + longSecStr + "\u2033 BT"; + } else { + longStr = longDegStr + "\u00B0" + longMinStr + "\u2032" + longSecStr + "\u2033"; + } + + return latStr + ", " + longStr; + } + @Override public List> findDetailPresensi(List listTrNo) { List> result = new ArrayList<>(); @@ -224,12 +267,14 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse if (CommonUtil.isNotNullOrEmpty(encodeRs) && CommonUtil.isNotNullOrEmpty(map.get("akurasi")) && CommonUtil.isNotNullOrEmpty(map.get("lintang")) && CommonUtil.isNotNullOrEmpty(map.get("bujur"))) { + mapRs.put("imageURLData", imageURLData); mapRs.put("date", map.get("tanggal")); mapRs.put("latitude", map.get("lintang")); mapRs.put("longitude", map.get("bujur")); mapRs.put("accuracy", map.get("akurasi").toString()); - mapRs.put("location", map.get("lintang").toString() + ", " + map.get("bujur").toString()); + mapRs.put("location", getCoordinateFormatted(Double.valueOf(map.get("lintang").toString()), + Double.valueOf(map.get("bujur").toString()))); } else if (CommonUtil.isNullOrEmpty(encodeRs) && CommonUtil.isNotNullOrEmpty(map.get("akurasi")) && CommonUtil.isNotNullOrEmpty(map.get("lintang")) && CommonUtil.isNotNullOrEmpty(map.get("bujur"))) { @@ -238,7 +283,8 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse mapRs.put("latitude", map.get("lintang")); mapRs.put("longitude", map.get("bujur")); mapRs.put("accuracy", map.get("akurasi").toString()); - mapRs.put("location", map.get("lintang").toString() + ", " + map.get("bujur").toString()); + mapRs.put("location", getCoordinateFormatted(Double.valueOf(map.get("lintang").toString()), + Double.valueOf(map.get("bujur").toString()))); } else if (CommonUtil.isNotNullOrEmpty(encodeRs) && CommonUtil.isNullOrEmpty(map.get("akurasi")) && CommonUtil.isNullOrEmpty(map.get("lintang")) && CommonUtil.isNullOrEmpty(map.get("bujur"))) { mapRs.put("imageURLData", imageURLData); diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JabatanServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JabatanServiceImpl.java index 280557f9..aef71eb3 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JabatanServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/JabatanServiceImpl.java @@ -1,6 +1,7 @@ package com.jasamedika.medifirst2000.service.impl; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -10,6 +11,7 @@ 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.JabatanDao; import com.jasamedika.medifirst2000.dao.KelompokJabatanDao; @@ -85,20 +87,18 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ public JabatanVO add(JabatanVO vo) throws JpaSystemException, ServiceVOException { Jabatan jabatan = jabatanConverter.transferVOToModel(vo, new Jabatan()); - JenisJabatan jenisJabatan = jenisJabatanConverter.transferVOToModel(vo.getJenisJabatan(), new JenisJabatan()); UnitKerjaPegawai unitKerja = unitKerjaConverter.transferVOToModel(vo.getUnitKerja(), new UnitKerjaPegawai()); + JenisJabatan jenisJabatan = jenisJabatanConverter.transferVOToModel(vo.getJenisJabatan(), new JenisJabatan()); + KelompokJabatan kelompokJabatan = kelompokJabatanConverter.transferVOToModel(vo.getKelompokJabatan(), + new KelompokJabatan()); - if (CommonUtil.isNotNullOrEmpty(vo.getKelompokJabatan())) { - KelompokJabatan kelompokJabatan = kelompokJabatanConverter.transferVOToModel(vo.getKelompokJabatan(), - new KelompokJabatan()); - jabatan.setKelompokJabatan(kelompokJabatan); - } if (CommonUtil.isNotNullOrEmpty(vo.getEselon())) { Eselon eselon = eselonConverter.transferVOToModel(vo.getEselon(), new Eselon()); jabatan.setEselon(eselon); } jabatan.setUnitKerja(unitKerja); jabatan.setJenisJabatan(jenisJabatan); + jabatan.setKelompokJabatan(kelompokJabatan); Jabatan resultModel = jabatanDao.save(jabatan); JabatanVO resultVO = new JabatanVO(); @@ -112,14 +112,11 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ Jabatan jabatanLama = jabatanDao.findOne(vo.getId()); Jabatan jabatanBaru = jabatanConverter.transferVOToModel(vo, jabatanLama); - JenisJabatan jenisJabatan = jenisJabatanConverter.transferVOToModel(vo.getJenisJabatan(), new JenisJabatan()); UnitKerjaPegawai unitKerja = unitKerjaConverter.transferVOToModel(vo.getUnitKerja(), new UnitKerjaPegawai()); + JenisJabatan jenisJabatan = jenisJabatanConverter.transferVOToModel(vo.getJenisJabatan(), new JenisJabatan()); + KelompokJabatan kelompokJabatan = kelompokJabatanConverter.transferVOToModel(vo.getKelompokJabatan(), + new KelompokJabatan()); - if (CommonUtil.isNotNullOrEmpty(vo.getKelompokJabatan())) { - KelompokJabatan kelompokJabatan = kelompokJabatanConverter.transferVOToModel(vo.getKelompokJabatan(), - new KelompokJabatan()); - jabatanBaru.setKelompokJabatan(kelompokJabatan); - } if (CommonUtil.isNotNullOrEmpty(vo.getEselon())) { Eselon eselon = eselonConverter.transferVOToModel(vo.getEselon(), new Eselon()); jabatanBaru.setEselon(eselon); @@ -129,6 +126,7 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ } jabatanBaru.setUnitKerja(unitKerja); jabatanBaru.setJenisJabatan(jenisJabatan); + jabatanBaru.setKelompokJabatan(kelompokJabatan); Jabatan resultModel = jabatanDao.save(jabatanBaru); JabatanVO resultVO = new JabatanVO(); @@ -351,4 +349,33 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ return result; } + @Override + public List> findJabatanDanBatasNilai(Integer idJenisJabatan, Integer idUnitKerja) + throws JpaSystemException { + List> result = new ArrayList<>(); + + List> dataPeringkat = jabatanDao + .findPeringkatJabatan(Arrays.asList(Master.KelompokJabatan.RANGE_REMUN)); + List> dataJabatan = jabatanDao.findJabatan(idJenisJabatan, idUnitKerja); + for (Map jabatan : dataJabatan) { + Integer nilaiTerendah = null; + Integer nilaiTertinggi = null; + for (Map peringkat : dataPeringkat) { + if (CommonUtil.isNotNullOrEmpty(jabatan.get("kelompokJabatanId")) + && jabatan.get("kelompokJabatanId").equals(peringkat.get("kelompokJabatanId"))) { + nilaiTerendah = Integer.valueOf(peringkat.get("nilaiTerendah").toString()); + nilaiTertinggi = Integer.valueOf(peringkat.get("nilaiTertinggi").toString()); + + break; + } + } + jabatan.put("nilaiTerendah", nilaiTerendah); + jabatan.put("nilaiTertinggi", nilaiTertinggi); + + result.add(jabatan); + } + + return result; + } + } \ No newline at end of file diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/JabatanController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/JabatanController.java index 98bc4b83..0ada3571 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/JabatanController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/JabatanController.java @@ -252,4 +252,23 @@ public class JabatanController extends LocaleController { } } + @RequestMapping(value = "/get-jabatan-dan-batas-nilai", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity>> getJabatanDanBatasNilai(HttpServletRequest request, + @RequestParam(value = "jenisJabatanId", required = true) Integer idJenisJabatan, + @RequestParam(value = "unitKerjaId", required = true) Integer idUnitKerja) { + try { + List> result = jabatanService.findJabatanDanBatasNilai(idJenisJabatan, idUnitKerja); + + return RestUtil.getJsonResponse(result, HttpStatus.OK); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when get jabatan dan batas nilai jabatan", 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 get jabatan dan batas nilai jabatan", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + }