Update PelayananPasienServiceImpl.java
Pembuatan alur pemisahan dan urutan logbook remun dan ffs
This commit is contained in:
parent
e0641a1b2c
commit
09e5767a48
@ -5,18 +5,22 @@ import java.text.DecimalFormat;
|
||||
import java.text.DecimalFormatSymbols;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -411,27 +415,95 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
|
||||
date = df.parse(bulan);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
return result;
|
||||
}
|
||||
/*
|
||||
* Mendapatkan daftar jadwal kerja, tanggal dan jam kerja
|
||||
*/
|
||||
Date tglAwal = DateUtil.startMonth(date);
|
||||
Date tglAkhir = DateUtil.endMonth(date);
|
||||
List<Map<String, Object>> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal,
|
||||
tglAkhir);
|
||||
Double targetRemun = 5_000_000.00;
|
||||
/*
|
||||
* Mendapatkan nominal target remunerasi
|
||||
*/
|
||||
Double targetRemun = 161_000_000.00;
|
||||
/*
|
||||
* Mendapatkan data mentah pelayanan pasien
|
||||
*/
|
||||
List<Map<String, Object>> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai,
|
||||
tglAwal, tglAkhir);
|
||||
/*
|
||||
* Alokasi data diurutkan dulu untuk jam kerja. Asumsi jam kerja dokter
|
||||
* nonshift
|
||||
*/
|
||||
List<Map<String, Object>> listDataJamKerja = new ArrayList<>();
|
||||
for (Map<String, Object> d : listData) {
|
||||
LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
|
||||
.toLocalDate();
|
||||
LocalDateTime tglJamPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
|
||||
.toLocalDateTime();
|
||||
for (Map<String, Object> j : listJadwalKerja) {
|
||||
if (CommonUtil.isNotNullOrEmpty(j.get("jamMasuk"))) {
|
||||
LocalDate tglMasuk = ((Date) j.get("tanggal")).toInstant().atZone(ZoneId.systemDefault())
|
||||
.toLocalDate();
|
||||
LocalTime jamMasuk = LocalTime.from(jamFormat.parse(j.get("jamMasuk").toString()));
|
||||
LocalTime jamPulang = LocalTime.from(jamFormat.parse(j.get("jamPulang").toString()));
|
||||
LocalDateTime tglJamMasuk = LocalDateTime.of(tglMasuk, jamMasuk);
|
||||
LocalDateTime tglJamPulang = LocalDateTime.of(tglMasuk, jamPulang);
|
||||
if (tglPelayanan.isEqual(tglMasuk)
|
||||
&& (tglJamMasuk.isBefore(tglJamPelayanan) || tglJamMasuk.isEqual(tglJamPelayanan))
|
||||
&& (tglJamPelayanan.isEqual(tglJamPulang) || tglJamPelayanan.isBefore(tglJamPulang))) {
|
||||
listDataJamKerja.add(d);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
listJadwalKerja.forEach(j -> {
|
||||
LocalTime jamMasuk = LocalTime.from(jamFormat.parse(j.get("jamMasuk").toString()));
|
||||
LocalTime jamPulang = LocalTime.from(jamFormat.parse(j.get("jamPulang").toString()));
|
||||
listData.forEach(d -> {
|
||||
Date tglPelayanan = (Date) d.get("tglPelayanan");
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Setelah diurutkan jam kerja, alokasi urutan data di luar jam kerja.
|
||||
* Asumsi jam kerja dokter nonshift
|
||||
*/
|
||||
List<Map<String, Object>> listDataLuarJamKerja = new ArrayList<>();
|
||||
for (Map<String, Object> d : listData) {
|
||||
LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
|
||||
.toLocalDate();
|
||||
LocalDateTime tglJamPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
|
||||
.toLocalDateTime();
|
||||
for (Map<String, Object> j : listJadwalKerja) {
|
||||
LocalDate tglMasuk = ((Date) j.get("tanggal")).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
if (CommonUtil.isNullOrEmpty(j.get("jamMasuk"))) {
|
||||
if (tglPelayanan.isEqual(tglMasuk)) {
|
||||
listDataLuarJamKerja.add(d);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
LocalTime jamMasuk = LocalTime.from(jamFormat.parse(j.get("jamMasuk").toString()));
|
||||
LocalTime jamPulang = LocalTime.from(jamFormat.parse(j.get("jamPulang").toString()));
|
||||
LocalDateTime tglJamMasuk = LocalDateTime.of(tglMasuk, jamMasuk);
|
||||
LocalDateTime tglJamPulang = LocalDateTime.of(tglMasuk, jamPulang);
|
||||
if ((tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isBefore(tglJamMasuk))
|
||||
|| (tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isAfter(tglJamPulang))) {
|
||||
listDataLuarJamKerja.add(d);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Offer data yang sudah diurutkan dalam queue
|
||||
*/
|
||||
Queue<Map<String, Object>> queuePelayanan = new ArrayDeque<>();
|
||||
listData.forEach(pelayanan -> {
|
||||
listDataJamKerja.forEach(pelayanan -> {
|
||||
queuePelayanan.offer(pelayanan);
|
||||
});
|
||||
listDataLuarJamKerja.forEach(pelayanan -> {
|
||||
queuePelayanan.offer(pelayanan);
|
||||
});
|
||||
/*
|
||||
* Memisahkan data diurutkan menjadi logbook remun dan logbook ffs
|
||||
*/
|
||||
List<Map<String, Object>> listPelayananRemun = new ArrayList<>();
|
||||
List<Map<String, Object>> listPelayananFfs = new ArrayList<>();
|
||||
Double capaianRemun = 0.0;
|
||||
@ -445,8 +517,22 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
|
||||
} else {
|
||||
listPelayananFfs.add(next);
|
||||
}
|
||||
remun.put("remun", listPelayananRemun);
|
||||
ffs.put("ffs", listPelayananFfs);
|
||||
/*
|
||||
* Sorting data remun diurutkan
|
||||
*/
|
||||
List<Map<String, Object>> remunSorted = listPelayananRemun.stream()
|
||||
.sorted(Comparator.comparing(o1 -> o1.get("namaProduk").toString()))
|
||||
.sorted(Comparator.comparing(o2 -> o2.get("namaKelas").toString()))
|
||||
.sorted(Comparator.comparing(o3 -> (Date) o3.get("tglPelayanan"))).collect(Collectors.toList());
|
||||
remun.put("remun", remunSorted);
|
||||
/*
|
||||
* Sorting data ffs diurutkan
|
||||
*/
|
||||
List<Map<String, Object>> ffsSorted = listPelayananFfs.stream()
|
||||
.sorted(Comparator.comparing(o1 -> o1.get("namaProduk").toString()))
|
||||
.sorted(Comparator.comparing(o2 -> o2.get("namaKelas").toString()))
|
||||
.sorted(Comparator.comparing(o3 -> (Date) o3.get("tglPelayanan"))).collect(Collectors.toList());
|
||||
ffs.put("ffs", ffsSorted);
|
||||
result.add(remun);
|
||||
result.add(ffs);
|
||||
return result;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user