diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HabsenDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HabsenDao.java index fa2141c2..4dc1b522 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HabsenDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/HabsenDao.java @@ -72,8 +72,9 @@ public interface HabsenDao extends PagingAndSortingRepository { @Query("select new Map(concat(absen.empl_code,'_',to_char(absen.tr_date,'yyyy-MM-dd'),'_',to_char(absen.tr_time,'HH24.MI.ss'),'#',absen.tr_no,'.jpg') as filePath," + "concat(to_char(absen.tr_date,'dd/MM/yyyy'),' ',to_char(absen.tr_time,'HH24:MI:ss')) as tanggal," - + "absen.akurasi as akurasi,absen.lokasi as lokasi) " + "from Habsen absen " - + "where absen.tr_no in (:listTrNo) " + "and absen.loc_code = '99999' " + "and absen.remoteno = 99") + + "absen.latitude as lintang,absen.longitude as bujur,absen.akurasi as akurasi," + + "absen.lokasi as lokasi) " + "from Habsen absen " + "where absen.tr_no in (:listTrNo) " + + "and absen.loc_code = '99999' " + "and absen.remoteno = 99") List> getDetailPresensi(@Param("listTrNo") List listTrNo); String strQryHabsen = "select new Map(pg.id as id,pg.namaLengkap as namaLengkap," diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaJabatanDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaJabatanDao.java index 68c85e2d..3d6047d1 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaJabatanDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/IndikatorKinerjaJabatanDao.java @@ -27,9 +27,12 @@ public interface IndikatorKinerjaJabatanDao extends PagingAndSortingRepository> findAllByJabatan(@Param("jabatanId") Integer idJabatan); - @Query("select new Map(jj.id as jenisJabatanId,jj.jenisJabatan as jenisJabatan," + @Query("select new Map(uk.id as unitKerjaId,uk.name as unitKerja," + + "jj.id as jenisJabatanId,jj.jenisJabatan as jenisJabatan," + "jb.id as jabatanId,jb.namaJabatan as namaJabatan) " + "from Jabatan jb " - + "inner join jb.jenisJabatan jj " + "where jb.statusEnabled is true " + "order by jb.namaJabatan, jb.id") + + "inner join jb.jenisJabatan jj " + "inner join jb.unitKerja uk " + "where jb.statusEnabled is true " + + "and jj.statusEnabled is true " + "and uk.statusEnabled is true " + + "order by uk.name, jj.jenisJabatan, jb.namaJabatan") List> findAllJabatan(); @Query("select new Map(jb.id as jabatanId," + "ikt.noRec as noRec," + "ikt.tanggalMulaiBerlaku as tglBerlaku," diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java index 033f4a86..a5935ae4 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MapPegawaiJabatanToUnitKerjaDao.java @@ -439,4 +439,9 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository> findAksesPegawaiPenilai(@Param("pegawaiId") Integer idPegawai); + @Query("select new Map(mj.id as id," + "pg.id as pegawaiId,pg.namaLengkap as namaPegawai) " + + "from MapPegawaiJabatanToUnitKerja mj " + "inner join mj.pegawai pg " + "where mj.statusEnabled is true " + + "and pg.statusEnabled is true " + "and mj.jabatanId = :jabatanId") + List> findPegawaiByJabatan(@Param("jabatanId") Integer idJabatan); + } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/AbsensiPegawaiService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/AbsensiPegawaiService.java index 28a3d500..29a70a0d 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/AbsensiPegawaiService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/AbsensiPegawaiService.java @@ -20,4 +20,6 @@ public interface AbsensiPegawaiService { List> findDetailPresensi(List listTrNo); + String findReverseGeocoding(Double latitude, Double longitude); + } 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 49e3c752..be3c413f 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 @@ -3,6 +3,8 @@ package com.jasamedika.medifirst2000.service; import java.util.List; import java.util.Map; +import org.springframework.orm.jpa.JpaSystemException; + import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.vo.JabatanVO; import com.jasamedika.medifirst2000.vo.KelompokJabatanVO; @@ -31,4 +33,6 @@ public interface JabatanService extends BaseVoService> findJabatan(String namaJabatan, Integer idJenisJabatan, Integer idUnitKerja); + List> findPegawaiByJabatan(Integer idJabatan) 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 89dcfcc2..ebb03f4e 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 @@ -103,26 +103,35 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse return result; } + @Override + public String findReverseGeocoding(Double latitude, Double longitude) { + NominatimReverseGeocodingJAPI nominatim = new NominatimReverseGeocodingJAPI(18); + + String result = ""; + if (CommonUtil.isNotNullOrEmpty(latitude) && CommonUtil.isNotNullOrEmpty(longitude)) { + result = nominatim.getAdress(latitude, longitude).toString(); + } + return result; + } + @Override public Map saveHabsensiPegawai(HabsenVO vo) { Map result = new HashMap(); - NominatimReverseGeocodingJAPI nominatim = new NominatimReverseGeocodingJAPI(18); Habsen model = new Habsen(); Date newDate = new Date(); String idFinger = pegawaiDao.getidFinger(vo.getPegawai().getId()); - String displayName = ""; - if (CommonUtil.isNotNullOrEmpty(vo.getLatitude()) && CommonUtil.isNotNullOrEmpty(vo.getLongitude())) { - displayName = nominatim.getAdress(vo.getLatitude(), vo.getLongitude()).toString(); - } - model = habsenConverter.transferVOToModel(vo, model); model.setEmpl_code(idFinger); model.setLoc_code(Master.PresensiPegawai.SMART_LOC_CODE); model.setRemoteno(Master.PresensiPegawai.SMART_REMOTE_NO); model.setAcc_code(Master.PresensiPegawai.DEFAULT_ACC_CODE); - model.setLokasi(displayName); + + // 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); @@ -202,6 +211,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse public List> findDetailPresensi(List listTrNo) { List> result = new ArrayList<>(); List> data = habsensiDao.getDetailPresensi(listTrNo); + for (Map map : data) { Map mapRs = new HashMap<>(); String imageURLData = ""; @@ -212,26 +222,36 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse } if (CommonUtil.isNotNullOrEmpty(encodeRs) && CommonUtil.isNotNullOrEmpty(map.get("akurasi")) - && CommonUtil.isNotNullOrEmpty(map.get("lokasi"))) { + && 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("lokasi")); + mapRs.put("location", map.get("lintang").toString() + ", " + map.get("bujur").toString()); } else if (CommonUtil.isNullOrEmpty(encodeRs) && CommonUtil.isNotNullOrEmpty(map.get("akurasi")) - && CommonUtil.isNotNullOrEmpty(map.get("lokasi"))) { + && CommonUtil.isNotNullOrEmpty(map.get("lintang")) + && CommonUtil.isNotNullOrEmpty(map.get("bujur"))) { mapRs.put("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("lokasi")); + mapRs.put("location", map.get("lintang").toString() + ", " + map.get("bujur").toString()); } else if (CommonUtil.isNotNullOrEmpty(encodeRs) && CommonUtil.isNullOrEmpty(map.get("akurasi")) - && CommonUtil.isNullOrEmpty(map.get("lokasi"))) { + && CommonUtil.isNullOrEmpty(map.get("lintang")) && CommonUtil.isNullOrEmpty(map.get("bujur"))) { mapRs.put("imageURLData", imageURLData); mapRs.put("date", map.get("tanggal")); + mapRs.put("latitude", ""); + mapRs.put("longitude", ""); mapRs.put("accuracy", ""); mapRs.put("location", ""); } else { mapRs.put("imageURLData", ""); mapRs.put("date", ""); + mapRs.put("latitude", ""); + mapRs.put("longitude", ""); mapRs.put("accuracy", ""); mapRs.put("location", ""); } 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 c45a0790..280557f9 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 @@ -13,6 +13,8 @@ import org.springframework.stereotype.Service; import com.jasamedika.medifirst2000.converter.BaseConverterImpl; import com.jasamedika.medifirst2000.dao.JabatanDao; import com.jasamedika.medifirst2000.dao.KelompokJabatanDao; +import com.jasamedika.medifirst2000.dao.MapPegawaiJabatanToUnitKerjaDao; +import com.jasamedika.medifirst2000.dao.SettingDataFixedDao; import com.jasamedika.medifirst2000.entities.Eselon; import com.jasamedika.medifirst2000.entities.Jabatan; import com.jasamedika.medifirst2000.entities.JenisJabatan; @@ -56,6 +58,12 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ @Autowired private KelompokJabatanDao kelompokJabatanDao; + @Autowired + private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao; + + @Autowired + private SettingDataFixedDao settingDataFixedDao; + @Override public Map saveJabatanInternal(JabatanVO vo) { Map result = new HashMap(); @@ -287,7 +295,8 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ public Map validateNamaJabatan(Integer idJabatan, String namaJabatan, Integer idJenisJabatan) { Map result = new HashMap<>(); - String replacedNamaJabatan = namaJabatan.replaceAll("[^0-9a-zA-Z]", "").toLowerCase(); + String patternText = settingDataFixedDao.getSettingDataFixed("patternTextDuplicate"); + String replacedNamaJabatan = namaJabatan.replaceAll(patternText, "").toLowerCase(); List> listNamaJabatan = new ArrayList<>(); if (CommonUtil.isNotNullOrEmpty(idJabatan)) { listNamaJabatan = jabatanDao.checkNamaJabatan(idJabatan, replacedNamaJabatan, idJenisJabatan); @@ -335,4 +344,11 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ return result; } + @Override + public List> findPegawaiByJabatan(Integer idJabatan) throws JpaSystemException { + List> result = mapPegawaiJabatanToUnitKerjaDao.findPegawaiByJabatan(idJabatan); + + 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 ed96832d..98bc4b83 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 @@ -3,7 +3,6 @@ package com.jasamedika.medifirst2000.controller; import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -235,4 +234,22 @@ public class JabatanController extends LocaleController { } } + @RequestMapping(value = "/get-pegawai-jabatan", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity>> getPegawaiByJabatan(HttpServletRequest request, + @RequestParam(value = "jabatanId", required = true) Integer idJabatan) { + try { + List> result = jabatanService.findPegawaiByJabatan(idJabatan); + + return RestUtil.getJsonResponse(result, HttpStatus.OK); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when get pegawai 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 pegawai jabatan", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + } diff --git a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java index 9d47a4f6..aea2c7cc 100644 --- a/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java +++ b/jasamedika-sdm/src/main/java/com/jasamedika/medifirst2000/controller/SdmController.java @@ -2667,6 +2667,27 @@ public class SdmController extends LocaleController { } } + @RequestMapping(value = "/get-reverse-geocoding", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getReverseGeocoding(HttpServletRequest request, + @RequestParam(value = "latitude", required = true) Double latitude, + @RequestParam(value = "longitude", required = true) Double longitude) { + try { + String result = absensiPegawaiService.findReverseGeocoding(latitude, longitude); + if (null != result) + mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS, + getMessage(MessageResource.LABEL_SUCCESS, request)); + return RestUtil.getJsonResponse(result, HttpStatus.CREATED, mapHeaderMessage); + } catch (ServiceVOException e) { + LOGGER.error("Got exception {} when get reverse geocoding", 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 reverse geocoding", jse.getMessage()); + addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage()); + return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage); + } + } + @RequestMapping(value = "/get-kehadiran/{idPegawai}/{startDate}/{endDate}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> findKehadiran(@PathVariable("idPegawai") Integer idPegawai, @PathVariable("startDate") String startDate, @PathVariable("endDate") String endDate,