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.DecimalFormatSymbols;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -411,27 +415,95 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
|
|||||||
date = df.parse(bulan);
|
date = df.parse(bulan);
|
||||||
} catch (ParseException e) {
|
} catch (ParseException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Mendapatkan daftar jadwal kerja, tanggal dan jam kerja
|
||||||
|
*/
|
||||||
Date tglAwal = DateUtil.startMonth(date);
|
Date tglAwal = DateUtil.startMonth(date);
|
||||||
Date tglAkhir = DateUtil.endMonth(date);
|
Date tglAkhir = DateUtil.endMonth(date);
|
||||||
List<Map<String, Object>> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal,
|
List<Map<String, Object>> listJadwalKerja = pegawaiJadwalKerjaDao.findJamMasukJamPulang(idPegawai, tglAwal,
|
||||||
tglAkhir);
|
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,
|
List<Map<String, Object>> listData = pelayananPasienDao.findPelayananPasienByPetugasAndTanggal(idPegawai,
|
||||||
tglAwal, tglAkhir);
|
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 -> {
|
* Setelah diurutkan jam kerja, alokasi urutan data di luar jam kerja.
|
||||||
Date tglPelayanan = (Date) d.get("tglPelayanan");
|
* 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<>();
|
Queue<Map<String, Object>> queuePelayanan = new ArrayDeque<>();
|
||||||
listData.forEach(pelayanan -> {
|
listDataJamKerja.forEach(pelayanan -> {
|
||||||
queuePelayanan.offer(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>> listPelayananRemun = new ArrayList<>();
|
||||||
List<Map<String, Object>> listPelayananFfs = new ArrayList<>();
|
List<Map<String, Object>> listPelayananFfs = new ArrayList<>();
|
||||||
Double capaianRemun = 0.0;
|
Double capaianRemun = 0.0;
|
||||||
@ -445,8 +517,22 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
|
|||||||
} else {
|
} else {
|
||||||
listPelayananFfs.add(next);
|
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(remun);
|
||||||
result.add(ffs);
|
result.add(ffs);
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user