Update PelayananPasienServiceImpl.java

Penerapan data stream untuk kategorisasi data logbook dokter
This commit is contained in:
Salman Manoe 2023-07-04 20:37:40 +07:00
parent 0ba953b529
commit 93333b2244

View File

@ -1521,7 +1521,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
@Override
public Map<String, Object> logbookRemunTarifDokter(Integer idPegawai, String bulan) {
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> dataResult = new ArrayList<>();
List<Integer> listIdProduk = new ArrayList<>();
List<String> listPersenJasa = new ArrayList<>();
List<Double> listHargaJasa = new ArrayList<>();
@ -1672,51 +1671,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
/*
* Pengelompokkan produk layanan
*/
for (Integer idProduk : listIdProduk) {
for (String persenJasa : listPersenJasa) {
for (Double hargaJasa : listHargaJasa) {
for (Double hargaJual : listHargaJual) {
for (Integer idKelompokPasien : listIdKelompokPasien) {
Map<String, Object> mapResult = new HashMap<>();
List<Map<String, Object>> detail = new ArrayList<>();
int counter = 0;
double jumlah = 0.0;
double jumlahHargaJasa;
for (Map<String, Object> map : dataTanggal) {
Map<String, Object> mapCount = new HashMap<>();
if (idProduk.equals(map.get("idProduk")) && persenJasa.equals(map.get("persenJasa"))
&& hargaJasa.equals(map.get("hargaJasa"))
&& hargaJual.equals(map.get("hargaJual"))
&& idKelompokPasien.equals(map.get("idKelompokPasien"))) {
mapCount.put("jumlah", map.get("jumlah"));
mapCount.put("norecs", map.get("norecs"));
mapCount.put("tanggal", map.get("tanggal"));
detail.add(mapCount);
counter++;
jumlah += Double.parseDouble(map.get("jumlah").toString());
if (counter == 1)
mapResult.putAll(map);
}
}
if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) {
/*
* Tambahkan data total
*/
jumlahHargaJasa = jumlah * Double.parseDouble(mapResult.get("hargaJasa").toString());
mapResult.put("jumlah", jumlah);
mapResult.put("jumlahHargaJasa", jumlahHargaJasa);
/*
* Tambahkan data detail
*/
mapResult.put("detail", detail);
dataResult.add(mapResult);
}
}
}
}
}
}
List<Map<String, Object>> dataResult = groupingKategoriRemun(dataTanggal);
/*
* Final sorting
*/
@ -1754,9 +1709,90 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
return result;
}
private List<Map<String, Object>> groupingTanggalRemun(List<Map<String, Object>> listData) {
Map<Integer, Map<String, Map<Double, Map<Double, Map<Integer, Map<String, List<Map<String, Object>>>>>>>> collectTanggal = listData
.stream()
.collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()),
Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(),
Collectors.groupingBy(o3 -> Double.parseDouble(o3.get("hargaJasa").toString()),
Collectors.groupingBy(o4 -> Double.parseDouble(o4.get("hargaJual").toString()),
Collectors.groupingBy(
o5 -> Integer.parseInt(o5.get("idKelompokPasien")
.toString()),
Collectors.groupingBy(o6 -> o6.get("tanggal").toString())))))));
List<Map<String, Object>> result = new ArrayList<>();
collectTanggal.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2
.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> {
HashMap<String, Object> map = new HashMap<>();
map.put("idProduk", k1);
map.put("persenJasa", k2);
map.put("hargaJasa", k3);
map.put("hargaJual", k4);
map.put("idKelompokPasien", k5);
map.put("tanggal", k6);
List<String> norecs = v6.stream().map(e -> e.get("idPelayananPasien").toString())
.collect(Collectors.toList());
map.put("norecs", norecs);
double jumlah = v6.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum();
map.put("jumlah", jumlah);
Optional<Map<String, Object>> first = v6.stream().findFirst();
first.ifPresent(e -> {
map.put("namaProduk", e.get("namaProduk").toString());
map.put("kelompokPasien", e.get("kelompokPasien").toString());
map.put("tglPelayanan", e.get("tglPelayanan"));
map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString()));
map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString()));
});
result.add(map);
}))))));
return result;
}
private List<Map<String, Object>> groupingKategoriRemun(List<Map<String, Object>> data) {
Map<Integer, Map<String, Map<Double, Map<Double, Map<Integer, List<Map<String, Object>>>>>>> collected = data
.stream()
.collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()),
Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(), Collectors.groupingBy(
o3 -> Double.parseDouble(o3.get("hargaJasa").toString()), Collectors.groupingBy(
o4 -> Double.parseDouble(o4.get("hargaJual").toString()), Collectors.groupingBy(
o5 -> Integer.parseInt(o5.get("idKelompokPasien").toString())))))));
List<Map<String, Object>> result = new ArrayList<>();
collected.forEach((k1, v1) -> v1
.forEach((k2, v2) -> v2.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4.forEach((k5, v5) -> {
HashMap<String, Object> map = new HashMap<>();
map.put("idProduk", k1);
map.put("persenJasa", k2);
map.put("hargaJasa", k3);
map.put("hargaJual", k4);
map.put("idKelompokPasien", k5);
List<Map<String, Object>> detail = new ArrayList<>();
v5.forEach(d -> {
Map<String, Object> mapCount = new HashMap<>();
mapCount.put("jumlah", d.get("jumlah"));
mapCount.put("norecs", d.get("norecs"));
mapCount.put("tanggal", d.get("tanggal"));
detail.add(mapCount);
});
map.put("detail", detail);
double jumlah = v5.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum();
map.put("jumlah", jumlah);
double jumlahHargaJasa = jumlah * Double.parseDouble(map.get("hargaJasa").toString());
map.put("jumlahHargaJasa", jumlahHargaJasa);
Optional<Map<String, Object>> first = v5.stream().findFirst();
first.ifPresent(e -> {
map.put("namaProduk", e.get("namaProduk").toString());
map.put("kelompokPasien", e.get("kelompokPasien").toString());
map.put("tglPelayanan", e.get("tglPelayanan"));
map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString()));
map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString()));
});
result.add(map);
})))));
return result;
}
@Override
public List<Map<String, Object>> logbookFfsTarifDokter(Integer idPegawai, String bulan) {
List<Map<String, Object>> result = new ArrayList<>();
List<Integer> listIdProduk = new ArrayList<>();
List<String> listPersenJasa = new ArrayList<>();
List<Double> listHargaJasa = new ArrayList<>();
@ -2064,54 +2100,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
/*
* Pengelompokkan produk layanan
*/
for (Integer idProduk : listIdProduk) {
for (String persenJasa : listPersenJasa) {
for (Double hargaJasa : listHargaJasa) {
for (Double hargaJual : listHargaJual) {
for (Integer idKelompokPasien : listIdKelompokPasien) {
for (String jenisRuangan : listJenisRuangan) {
Map<String, Object> mapResult = new HashMap<>();
List<Map<String, Object>> detail = new ArrayList<>();
int counter = 0;
double jumlah = 0.0;
double jumlahHargaJasa;
for (Map<String, Object> map : dataTanggal) {
Map<String, Object> mapCount = new HashMap<>();
if (idProduk.equals(map.get("idProduk")) && persenJasa.equals(map.get("persenJasa"))
&& hargaJasa.equals(map.get("hargaJasa"))
&& hargaJual.equals(map.get("hargaJual"))
&& idKelompokPasien.equals(map.get("idKelompokPasien"))
&& jenisRuangan.equals(map.get("jenisRuangan"))) {
mapCount.put("jumlah", map.get("jumlah"));
mapCount.put("norecs", map.get("norecs"));
mapCount.put("tanggal", map.get("tanggal"));
detail.add(mapCount);
counter++;
jumlah += Double.parseDouble(map.get("jumlah").toString());
if (counter == 1)
mapResult.putAll(map);
}
}
if (CommonUtil.isNotNullOrEmpty(mapResult.get("jumlah"))) {
/*
* Tambahkan data total
*/
jumlahHargaJasa = jumlah
* Double.parseDouble(mapResult.get("hargaJasa").toString());
mapResult.put("jumlah", jumlah);
mapResult.put("jumlahHargaJasa", jumlahHargaJasa);
/*
* Tambahkan data detail
*/
mapResult.put("detail", detail);
result.add(mapResult);
}
}
}
}
}
}
}
List<Map<String, Object>> result = groupingKategoriFfs(dataTanggal);
/*
* Final sorting
*/
@ -2145,46 +2134,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
return result;
}
private List<Map<String, Object>> groupingTanggalRemun(List<Map<String, Object>> listData) {
Map<Integer, Map<String, Map<Double, Map<Double, Map<Integer, Map<String, List<Map<String, Object>>>>>>>> collectTanggal = listData
.stream()
.collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()),
Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(),
Collectors.groupingBy(o3 -> Double.parseDouble(o3.get("hargaJasa").toString()),
Collectors.groupingBy(o4 -> Double.parseDouble(o4.get("hargaJual").toString()),
Collectors.groupingBy(
o5 -> Integer.parseInt(o5.get("idKelompokPasien")
.toString()),
Collectors.groupingBy(o6 -> o6.get("tanggal").toString())))))));
List<Map<String, Object>> result = new ArrayList<>();
collectTanggal.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2
.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> {
HashMap<String, Object> map = new HashMap<>();
map.put("idProduk", k1);
map.put("persenJasa", k2);
map.put("hargaJasa", k3);
map.put("hargaJual", k4);
map.put("idKelompokPasien", k5);
map.put("tanggal", k6);
List<String> norecs = v6.stream().map(e -> e.get("idPelayananPasien").toString())
.collect(Collectors.toList());
map.put("norecs", norecs);
double jumlah = v6.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum();
map.put("jumlah", jumlah);
Optional<Map<String, Object>> first = v6.stream().findFirst();
first.ifPresent(e -> {
map.put("namaProduk", e.get("namaProduk").toString());
map.put("kelompokPasien", e.get("kelompokPasien").toString());
map.put("hargaJasa", Double.parseDouble(e.get("hargaJasa").toString()));
map.put("tglPelayanan", e.get("tglPelayanan"));
map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString()));
map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString()));
});
result.add(map);
}))))));
return result;
}
private List<Map<String, Object>> groupingTanggalFfs(List<Map<String, Object>> listData) {
Map<Integer, Map<String, Map<Double, Map<Double, Map<Integer, Map<String, Map<String, List<Map<String, Object>>>>>>>>> collectTanggal = listData
.stream()
@ -2218,7 +2167,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
first.ifPresent(e -> {
map.put("namaProduk", e.get("namaProduk").toString());
map.put("kelompokPasien", e.get("kelompokPasien").toString());
map.put("hargaJasa", Double.parseDouble(e.get("hargaJasa").toString()));
map.put("tglPelayanan", e.get("tglPelayanan"));
map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString()));
map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString()));
@ -2229,6 +2177,55 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
return result;
}
private List<Map<String, Object>> groupingKategoriFfs(List<Map<String, Object>> data) {
Map<Integer, Map<String, Map<Double, Map<Double, Map<Integer, Map<String, List<Map<String, Object>>>>>>>> collected = data
.stream()
.collect(Collectors.groupingBy(o1 -> Integer.parseInt(o1.get("idProduk").toString()),
Collectors.groupingBy(o2 -> o2.get("persenJasa").toString(), Collectors.groupingBy(
o3 -> Double.parseDouble(o3.get("hargaJasa").toString()), Collectors.groupingBy(
o4 -> Double.parseDouble(o4.get("hargaJual").toString()), Collectors
.groupingBy(
o5 -> Integer.parseInt(o5.get("idKelompokPasien")
.toString()),
Collectors.groupingBy(
o6 -> o6.get("jenisRuangan").toString())))))));
List<Map<String, Object>> result = new ArrayList<>();
collected.forEach((k1, v1) -> v1.forEach((k2, v2) -> v2
.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4.forEach((k5, v5) -> v5.forEach((k6, v6) -> {
HashMap<String, Object> map = new HashMap<>();
map.put("idProduk", k1);
map.put("persenJasa", k2);
map.put("hargaJasa", k3);
map.put("hargaJual", k4);
map.put("idKelompokPasien", k5);
map.put("jenisRuangan", k6);
List<Map<String, Object>> detail = new ArrayList<>();
v6.forEach(d -> {
Map<String, Object> mapCount = new HashMap<>();
mapCount.put("jumlah", d.get("jumlah"));
mapCount.put("norecs", d.get("norecs"));
mapCount.put("tanggal", d.get("tanggal"));
detail.add(mapCount);
});
map.put("detail", detail);
double jumlah = v6.stream().mapToDouble(e -> Double.parseDouble(e.get("jumlah").toString())).sum();
map.put("jumlah", jumlah);
double jumlahHargaJasa = jumlah * Double.parseDouble(map.get("hargaJasa").toString());
map.put("jumlahHargaJasa", jumlahHargaJasa);
Optional<Map<String, Object>> first = v6.stream().findFirst();
first.ifPresent(e -> {
map.put("namaProduk", e.get("namaProduk").toString());
map.put("kelompokPasien", e.get("kelompokPasien").toString());
map.put("tglPelayanan", e.get("tglPelayanan"));
map.put("sortIdKelompokPasien", Integer.parseInt(e.get("sortIdKelompokPasien").toString()));
map.put("sortIdKelas", Integer.parseInt(e.get("sortIdKelas").toString()));
map.put("jenisRuangan", e.get("jenisRuangan").toString());
});
result.add(map);
}))))));
return result;
}
@Override
public List<Map<String, Object>> detailLogbookTarifDokter(Integer idPegawai, List<String> norecs) {
return pelayananPasienDao.findPelayananPasienByPetugasAndPelayananPasien(idPegawai, norecs);