diff --git a/jasamedika-business/pom.xml b/jasamedika-business/pom.xml
index f35e83dc..60219c96 100644
--- a/jasamedika-business/pom.xml
+++ b/jasamedika-business/pom.xml
@@ -283,6 +283,25 @@
${commons-io.version}
+
+
+ io.minio
+ minio
+ 8.3.0
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
+
+
+ com.google.guava
+ guava
+ 31.0-jre
+
+
+
Jasa Medika
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 586c20af..56e506f9 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
@@ -11,21 +11,25 @@ import com.jasamedika.medifirst2000.entities.AbsensiPegawai;
import com.jasamedika.medifirst2000.entities.Habsen;
import com.jasamedika.medifirst2000.entities.JadwalDokter;
import com.jasamedika.medifirst2000.entities.ShiftKerja;
+import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.AbsensiPegawaiService;
import com.jasamedika.medifirst2000.service.LogAccService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.ImageUtil;
+import com.jasamedika.medifirst2000.util.minio.MinioClientUtil;
import com.jasamedika.medifirst2000.vo.AbsensiPegawaiVO;
import com.jasamedika.medifirst2000.vo.HabsenVO;
+import io.minio.PutObjectArgs;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import java.io.ByteArrayInputStream;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.nio.file.Files;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
@@ -65,7 +69,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
@Override
public Map saveAbsensiPegawai(AbsensiPegawaiVO vo) {
- Map result = new HashMap();
+ Map result = new HashMap<>();
AbsensiPegawai model = new AbsensiPegawai();
model = absensiPegawaiConverter.transferVOToModel(vo, model);
@@ -92,13 +96,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
@Override
public Map findByName(String nama) {
- Map result = new HashMap();
- try {
-
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- }
- return result;
+ return new HashMap<>();
}
@Override
@@ -114,7 +112,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
@Override
public Map saveHabsensiPegawai(HabsenVO vo) {
- Map result = new HashMap();
+ Map result = new HashMap<>();
Habsen model = presensiConverter.transferVOToModel(vo, new Habsen());
@@ -125,7 +123,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
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
*/
@@ -169,28 +167,35 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
}
public void uploadPhotoCapture(String imageURLData, String idFinger, Date trDate, Date trTime, Integer trNo) {
- DateFormat mf = new SimpleDateFormat("yyyyMM");
+ byte[] imageData = Base64.decodeBase64(imageURLData.substring(imageURLData.indexOf(",") + 1));
+ if (trDate.after(new Date(MinioClientUtil.CUTOFF_TIMESTAMP))) {
+ uploadToMinio(imageData, idFinger, trDate, trTime, trNo);
+ } else {
+ try {
+ DateFormat mf = new SimpleDateFormat("yyyyMM");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+ DateFormat tf = new SimpleDateFormat("HH.mm.ss");
+ String directory = getDirPathPresensiPegawai(mf.format(trDate));
+ String filename = directory + idFinger + "_" + df.format(trDate) + "_" + tf.format(trTime) + "#" + trNo
+ + ".jpg";
+ File outputFile = new File(filename);
+ OutputStream stream = Files.newOutputStream(outputFile.toPath());
+ stream.write(imageData);
+ stream.close();
+ } catch (IOException e) {
+ throw new ServiceVOException(e.getMessage());
+ }
+ }
+ }
+
+ private void uploadToMinio(byte[] imageData, String idFinger, Date trDate, Date trTime, Integer trNo) {
+ ByteArrayInputStream inputStream = new ByteArrayInputStream(imageData);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
DateFormat tf = new SimpleDateFormat("HH.mm.ss");
-
- String directory = getDirPathPresensiPegawai(mf.format(trDate));
- String filename = directory + idFinger.toString() + "_" + df.format(trDate) + "_" + tf.format(trTime) + "#"
- + trNo + ".jpg";
-
- String str = imageURLData;
-
- byte[] imagedata = Base64.decodeBase64(str.substring(str.indexOf(",") + 1));
- try {
- File dire = new File(directory);
- if (!dire.exists())
- dire.mkdirs();
- File outputFile = new File(filename);
- OutputStream stream = new FileOutputStream(outputFile);
- stream.write(imagedata);
- stream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
+ String filename = idFinger + "_" + df.format(trDate) + "_" + tf.format(trTime) + "#" + trNo + ".jpg";
+ PutObjectArgs objectArgs = PutObjectArgs.builder().bucket("presensi-pegawai").object(filename)
+ .stream(inputStream, imageData.length, -1).contentType("image/jpeg").build();
+ MinioClientUtil.upload(objectArgs);
}
private Double getDecimal(Double n) {
@@ -207,13 +212,13 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
nf.setMaximumFractionDigits(2);
String latSecStr = nf.format(getDecimal(getDecimal(Math.abs(latitude)) * 60) * 60);
- String latStr = "";
+ String latStr;
if (latitude < 0) {
- latStr = latDegStr + "\u00B0" + latMinStr + "\u2032" + latSecStr + "\u2033 LS";
+ latStr = latDegStr + "°" + latMinStr + "′" + latSecStr + "″ LS";
} else if (latitude > 0) {
- latStr = latDegStr + "\u00B0" + latMinStr + "\u2032" + latSecStr + "\u2033 LU";
+ latStr = latDegStr + "°" + latMinStr + "′" + latSecStr + "″ LU";
} else {
- latStr = latDegStr + "\u00B0" + latMinStr + "\u2032" + latSecStr + "\u2033";
+ latStr = latDegStr + "°" + latMinStr + "′" + latSecStr + "″";
}
nf.setMaximumFractionDigits(0);
@@ -223,13 +228,13 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
nf.setMaximumFractionDigits(2);
String longSecStr = nf.format(getDecimal(getDecimal(Math.abs(longitude)) * 60) * 60);
- String longStr = "";
+ String longStr;
if (longitude < 0) {
- longStr = longDegStr + "\u00B0" + longMinStr + "\u2032" + longSecStr + "\u2033 BB";
+ longStr = longDegStr + "°" + longMinStr + "′" + longSecStr + "″ BB";
} else if (longitude > 0) {
- longStr = longDegStr + "\u00B0" + longMinStr + "\u2032" + longSecStr + "\u2033 BT";
+ longStr = longDegStr + "°" + longMinStr + "′" + longSecStr + "″ BT";
} else {
- longStr = longDegStr + "\u00B0" + longMinStr + "\u2032" + longSecStr + "\u2033";
+ longStr = longDegStr + "°" + longMinStr + "′" + longSecStr + "″";
}
return latStr + ", " + longStr;
@@ -298,7 +303,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
@Override
public Map findJadwalPegawai(Integer idPegawai) {
- Map result = new HashMap<>();
+ Map result;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String today = sdf.format(new Date());
result = habsensiDao.getPegawai(idPegawai);
@@ -332,7 +337,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
@Override
public List