Compare commits

..

64 Commits

Author SHA1 Message Date
adesyawal
49bc3eab2b Merge branch 'dev/base' into dev/integrasi/minio 2026-02-02 13:55:42 +07:00
adesyawal
2f29beded1 Merge branch 'dev/base' into dev/integrasi/minio 2026-01-18 09:51:21 +07:00
adesyawal
637ad7b114 Merge branch 'dev/base' into dev/integrasi/minio 2026-01-08 10:00:45 +07:00
adesyawal
9cabc456e2 Merge branch 'dev/base' into dev/integrasi/minio 2026-01-06 13:25:29 +07:00
adesyawal
2515620d10 Merge branch 'dev/base' into dev/integrasi/minio 2026-01-06 09:38:21 +07:00
adesyawal
52dcdb4201 Merge branch 'dev/base' into dev/integrasi/minio 2026-01-06 08:33:21 +07:00
adesyawal
c8fca0445d Merge branch 'dev/base' into dev/integrasi/minio 2025-12-31 13:45:08 +07:00
adesyawal
502012f7f0 Merge branch 'dev/base' into dev/integrasi/minio 2025-12-31 11:48:39 +07:00
adesyawal
30d36f129a Merge branch 'dev/base' into dev/integrasi/minio 2025-12-31 11:41:18 +07:00
adesyawal
6a3126341a Merge branch 'dev/base' into dev/integrasi/minio 2025-12-29 10:02:49 +07:00
adesyawal
051374df6c Merge branch 'dev/base' into dev/integrasi/minio 2025-12-02 13:09:48 +07:00
adesyawal
84e983143f Merge branch 'dev/base' into dev/integrasi/minio 2025-11-28 15:28:55 +07:00
adesyawal
d10230f543 Merge branch 'dev/base' into dev/integrasi/minio 2025-11-06 15:05:14 +07:00
adesyawal
eca2b190e8 Merge branch 'dev/base' into dev/integrasi/minio 2025-10-27 14:33:37 +07:00
adesyawal
5b9380c63c Merge branch 'dev/base' into dev/integrasi/minio 2025-10-22 08:34:13 +07:00
adesyawal
6546aefbe7 Merge branch 'dev/base' into dev/integrasi/minio 2025-10-03 22:09:12 +07:00
adesyawal
6f28b48c7a Merge branch 'dev/base' into dev/integrasi/minio 2025-09-30 19:44:10 +07:00
adesyawal
e63ba3c8b1 Merge branch 'dev/base' into dev/integrasi/minio 2025-09-30 10:54:34 +07:00
adesyawal
f079ffad28 Merge branch 'dev/base' into dev/integrasi/minio 2025-09-16 15:02:45 +07:00
adesyawal
1a664d9fe6 Merge branch 'dev/base' into dev/integrasi/minio 2025-08-13 07:55:32 +07:00
adesyawal
3f2895d4cb Merge branch 'dev/base' into dev/integrasi/minio 2025-06-18 08:55:17 +07:00
adesyawal
fbcd022429 Merge branch 'dev/base' into dev/integrasi/minio 2025-06-08 15:47:08 +07:00
adesyawal
56c44aa388 Merge branch 'dev/base' into dev/integrasi/minio 2025-06-07 04:13:36 +07:00
adesyawal
2713a4927e Merge branch 'dev/base' into dev/integrasi/minio 2025-05-19 13:51:43 +07:00
adesyawal
9c64591c76 Merge branch 'dev/base' into dev/integrasi/minio 2025-04-09 11:27:25 +07:00
Salman Manoe
4b9f6ad740 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-19 11:01:09 +07:00
Salman Manoe
bc28361a12 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-18 16:30:14 +07:00
Salman Manoe
d39d47313f Merge branch 'dev/base' into dev/integrasi/minio 2025-03-17 13:58:29 +07:00
Salman Manoe
a805a616b8 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-14 13:40:33 +07:00
Salman Manoe
fbe65a8af4 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-12 11:23:28 +07:00
Salman Manoe
180faab946 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-11 13:52:04 +07:00
Salman Manoe
139d7a57a6 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-11 13:12:50 +07:00
Salman Manoe
1482cb6dde Merge branch 'dev/base' into dev/integrasi/minio 2025-03-11 09:17:59 +07:00
Salman Manoe
8ed9fc27e7 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-07 14:43:31 +07:00
Salman Manoe
1c7aaa71d6 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-06 08:48:21 +07:00
Salman Manoe
dcccf5dc3d Merge branch 'dev/base' into dev/integrasi/minio 2025-03-04 11:24:15 +07:00
Salman Manoe
e25d26a49a Merge branch 'dev/base' into dev/integrasi/minio 2025-03-04 09:29:24 +07:00
Salman Manoe
ca96ba6d64 Merge branch 'dev/base' into dev/integrasi/minio 2025-03-04 07:24:55 +07:00
Salman Manoe
6c5cc07fb2 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-27 13:24:09 +07:00
Salman Manoe
f859ab92ad Merge branch 'dev/base' into dev/integrasi/minio 2025-02-26 10:33:49 +07:00
Salman Manoe
a25a820361 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-22 14:20:46 +07:00
Salman Manoe
48f612fbd8 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-21 08:12:14 +07:00
Salman Manoe
be77b86d2a Merge branch 'dev/base' into dev/integrasi/minio 2025-02-18 12:01:13 +07:00
Salman Manoe
8b999bde97 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-17 14:22:34 +07:00
Salman Manoe
961bb57df2 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-14 16:32:11 +07:00
Salman Manoe
65bcea3547 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-14 14:40:09 +07:00
Salman Manoe
0193bd0a2e Merge branch 'dev/base' into dev/integrasi/minio 2025-02-13 13:46:53 +07:00
Salman Manoe
e47d9fd0d6 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-13 08:43:34 +07:00
Salman Manoe
df4d59f39d Merge branch 'dev/base' into dev/integrasi/minio 2025-02-12 14:05:19 +07:00
Salman Manoe
8bfdf00358 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-11 14:57:22 +07:00
Salman Manoe
5c56a4cfa4 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-07 16:52:11 +07:00
Salman Manoe
39315301f0 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-07 09:59:35 +07:00
Salman Manoe
5ac387ca31 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-05 14:17:19 +07:00
Salman Manoe
177db62add Merge branch 'dev/base' into dev/integrasi/minio 2025-02-03 13:38:08 +07:00
Salman Manoe
736d8bad72 Merge branch 'dev/base' into dev/integrasi/minio 2025-02-03 09:51:34 +07:00
Salman Manoe
6ee529c729 Merge branch 'dev/base' into dev/integrasi/minio 2025-01-17 17:13:20 +07:00
Salman Manoe
be12f12a17 Merge branch 'dev/base' into dev/integrasi/minio 2025-01-03 14:13:40 +07:00
Salman Manoe
fae53fea4b Merge branch 'dev/base' into dev/integrasi/minio 2025-01-03 10:28:25 +07:00
Salman Manoe
671f40e155 Merge branch 'dev/base' into dev/integrasi/minio 2025-01-02 11:12:39 +07:00
Salman Manoe
6564b0367d Merge branch 'dev/base' into dev/integrasi/minio 2024-12-31 22:45:53 +07:00
Salman Manoe
8aeeada858 Merge branch 'dev/base' into dev/integrasi/minio 2024-12-31 11:33:36 +07:00
Salman Manoe
3b7767bb23 Merge branch 'dev/base' into dev/integrasi/minio 2024-12-19 08:11:51 +07:00
Salman Manoe
5ae8da95af Merge branch 'dev/base' into dev/integrasi/minio 2024-12-02 14:20:30 +07:00
Salman Manoe
337c4309f1 Update service absensi pegawai
Penerapan MinIO untuk penyimpanan object storage presensi pegawai
2024-11-29 10:14:01 +07:00
5 changed files with 121 additions and 44 deletions

View File

@ -15,7 +15,7 @@
</context-param>
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>bridging</param-value>
<param-value>localhost</param-value>
</context-param>
<listener>

View File

@ -283,6 +283,25 @@
<version>${commons-io.version}</version>
</dependency>
<!-- End Lukman -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0-jre</version>
</dependency>
</dependencies>
<organization>
<name>Jasa Medika</name>

View File

@ -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<String, Object> saveAbsensiPegawai(AbsensiPegawaiVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> 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<String, Object> findByName(String nama) {
Map<String, Object> result = new HashMap<String, Object>();
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<String, Object> saveHabsensiPegawai(HabsenVO vo) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> 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<String, Object> findJadwalPegawai(Integer idPegawai) {
Map<String, Object> result = new HashMap<>();
Map<String, Object> 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<Map<String, Object>> findHistoriPresensi(Integer idPegawai) {
List<Map<String, Object>> result = new ArrayList<>();
List<Map<String, Object>> result;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String today = sdf.format(new Date());
@ -348,7 +353,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
} else {
map.put("processtatus", "WFO");
}
if (vpnIPList.contains(map.get("ip_addr"))) {
if (vpnIPList.contains(map.get("ip_addr").toString())) {
boolean isAksesLuar = false;
for (String vpnIPX : vpnIPXList)
if (map.get("client_ip_addr").toString().startsWith(vpnIPX)) {
@ -361,7 +366,7 @@ public class AbsensiPegawaiServiceImpl extends BaseVoServiceImpl implements Abse
map.put("ip_addr", "menggunakan jaringan internet RSAB");
} else {
if (listIp.contains(map.get("ip_addr"))) {
if (listIp.contains(map.get("ip_addr").toString())) {
map.put("ip_addr", "menggunakan jaringan internet RSAB");
} else if (CommonUtil.isNullOrEmpty(map.get("ip_addr"))) {
map.put("ip_addr", "jaringan internet tidak terdeteksi");

View File

@ -0,0 +1,31 @@
package com.jasamedika.medifirst2000.util.minio;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* @author salmanoe
* @version 1.0.0
* @since 20/11/2024
*/
public final class MinioClientUtil {
public static final long CUTOFF_TIMESTAMP = 1732035599000L;
public static void upload(PutObjectArgs objectArgs) {
MinioClient minioClient;
try {
minioClient = MinioClientWrapper.minioClient();
minioClient.putObject(objectArgs);
} catch (IOException | MinioException | InvalidKeyException | NoSuchAlgorithmException e) {
throw new ServiceVOException(e.getMessage());
}
}
}

View File

@ -0,0 +1,22 @@
package com.jasamedika.medifirst2000.util.minio;
import io.minio.MinioClient;
import java.io.IOException;
/**
* @author salmanoe
* @version 1.0.0
* @since 19/11/2024
*/
public class MinioClientWrapper {
private static final String ENDPOINT = "https://minio-2.rsabhk.co.id:90";
private static final String ACCESS_KEY = "6QLQ3GNgQFf2ax8PJXuu";
private static final String SECRET_KEY = "nPrfuFezKLd36mI2qqGJ5djLiKxhNExIrPr3j4oq";
public static MinioClient minioClient() throws IOException {
return MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
}
}