- penyesuaian monitoring presensi karena reverse geocoding too many request

- penambahan informasi unit kerja di menu mapping indikator kinerja ke jabatan
- pembuatan validasi hapus master jabatan jika data sudah digunakan di data pegawai
- pembuatan fungsi reverse geocoding manual trigger
- perbaikan validasi duplikat data master jabatan jika edit
This commit is contained in:
salmanoe 2021-04-13 22:05:21 +07:00
parent 2c7eeb7bed
commit edace95838
9 changed files with 107 additions and 18 deletions

View File

@ -72,8 +72,9 @@ public interface HabsenDao extends PagingAndSortingRepository<Habsen, Integer> {
@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<Map<String, Object>> getDetailPresensi(@Param("listTrNo") List<Integer> listTrNo);
String strQryHabsen = "select new Map(pg.id as id,pg.namaLengkap as namaLengkap,"

View File

@ -27,9 +27,12 @@ public interface IndikatorKinerjaJabatanDao extends PagingAndSortingRepository<I
+ "ikt.tanggalMulaiBerlaku desc,ikt.tanggalPembaharuanData desc")
List<Map<String, Object>> 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<Map<String, Object>> findAllJabatan();
@Query("select new Map(jb.id as jabatanId," + "ikt.noRec as noRec," + "ikt.tanggalMulaiBerlaku as tglBerlaku,"

View File

@ -439,4 +439,9 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository<MapPegaw
@Query(strAksesPegawaiPenilai + sortUnitKerja)
List<Map<String, Object>> 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<Map<String, Object>> findPegawaiByJabatan(@Param("jabatanId") Integer idJabatan);
}

View File

@ -20,4 +20,6 @@ public interface AbsensiPegawaiService {
List<Map<String, Object>> findDetailPresensi(List<Integer> listTrNo);
String findReverseGeocoding(Double latitude, Double longitude);
}

View File

@ -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<Jabatan, JabatanVO, Intege
List<Map<String, Object>> findJabatan(String namaJabatan, Integer idJenisJabatan, Integer idUnitKerja);
List<Map<String, Object>> findPegawaiByJabatan(Integer idJabatan) throws JpaSystemException;
}

View File

@ -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<String, Object> saveHabsensiPegawai(HabsenVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
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<Map<String, Object>> findDetailPresensi(List<Integer> listTrNo) {
List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> data = habsensiDao.getDetailPresensi(listTrNo);
for (Map<String, Object> map : data) {
Map<String, Object> 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", "");
}

View File

@ -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<String, Object> saveJabatanInternal(JabatanVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
@ -287,7 +295,8 @@ public class JabatanServiceImpl extends BaseVoServiceImpl implements JabatanServ
public Map<String, Object> validateNamaJabatan(Integer idJabatan, String namaJabatan, Integer idJenisJabatan) {
Map<String, Object> result = new HashMap<>();
String replacedNamaJabatan = namaJabatan.replaceAll("[^0-9a-zA-Z]", "").toLowerCase();
String patternText = settingDataFixedDao.getSettingDataFixed("patternTextDuplicate");
String replacedNamaJabatan = namaJabatan.replaceAll(patternText, "").toLowerCase();
List<Map<String, Object>> 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<Map<String, Object>> findPegawaiByJabatan(Integer idJabatan) throws JpaSystemException {
List<Map<String, Object>> result = mapPegawaiJabatanToUnitKerjaDao.findPegawaiByJabatan(idJabatan);
return result;
}
}

View File

@ -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<JabatanVO> {
}
}
@RequestMapping(value = "/get-pegawai-jabatan", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Map<String, Object>>> getPegawaiByJabatan(HttpServletRequest request,
@RequestParam(value = "jabatanId", required = true) Integer idJabatan) {
try {
List<Map<String, Object>> 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);
}
}
}

View File

@ -2667,6 +2667,27 @@ public class SdmController extends LocaleController<AkunVO> {
}
}
@RequestMapping(value = "/get-reverse-geocoding", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> 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<Map<String, Object>> findKehadiran(@PathVariable("idPegawai") Integer idPegawai,
@PathVariable("startDate") String startDate, @PathVariable("endDate") String endDate,