From 93333b2244608008a8305bc1ded2ceafe025b86e Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Tue, 4 Jul 2023 20:37:40 +0700 Subject: [PATCH] Update PelayananPasienServiceImpl.java Penerapan data stream untuk kategorisasi data logbook dokter --- .../impl/PelayananPasienServiceImpl.java | 269 +++++++++--------- 1 file changed, 133 insertions(+), 136 deletions(-) diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java index 1a21fa16..c9e8d639 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/PelayananPasienServiceImpl.java @@ -1521,7 +1521,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel @Override public Map logbookRemunTarifDokter(Integer idPegawai, String bulan) { Map result = new HashMap<>(); - List> dataResult = new ArrayList<>(); List listIdProduk = new ArrayList<>(); List listPersenJasa = new ArrayList<>(); List 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 mapResult = new HashMap<>(); - List> detail = new ArrayList<>(); - int counter = 0; - double jumlah = 0.0; - double jumlahHargaJasa; - for (Map map : dataTanggal) { - Map 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> dataResult = groupingKategoriRemun(dataTanggal); /* * Final sorting */ @@ -1754,9 +1709,90 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } + private List> groupingTanggalRemun(List> listData) { + Map>>>>>>> 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> 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 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 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> 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> groupingKategoriRemun(List> data) { + Map>>>>>> 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> result = new ArrayList<>(); + collected.forEach((k1, v1) -> v1 + .forEach((k2, v2) -> v2.forEach((k3, v3) -> v3.forEach((k4, v4) -> v4.forEach((k5, v5) -> { + HashMap map = new HashMap<>(); + map.put("idProduk", k1); + map.put("persenJasa", k2); + map.put("hargaJasa", k3); + map.put("hargaJual", k4); + map.put("idKelompokPasien", k5); + List> detail = new ArrayList<>(); + v5.forEach(d -> { + Map 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> 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> logbookFfsTarifDokter(Integer idPegawai, String bulan) { - List> result = new ArrayList<>(); List listIdProduk = new ArrayList<>(); List listPersenJasa = new ArrayList<>(); List 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 mapResult = new HashMap<>(); - List> detail = new ArrayList<>(); - int counter = 0; - double jumlah = 0.0; - double jumlahHargaJasa; - for (Map map : dataTanggal) { - Map 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> result = groupingKategoriFfs(dataTanggal); /* * Final sorting */ @@ -2145,46 +2134,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel return result; } - private List> groupingTanggalRemun(List> listData) { - Map>>>>>>> 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> 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 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 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> 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> groupingTanggalFfs(List> listData) { Map>>>>>>>> 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> groupingKategoriFfs(List> data) { + Map>>>>>>> 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> 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 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> detail = new ArrayList<>(); + v6.forEach(d -> { + Map 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> 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> detailLogbookTarifDokter(Integer idPegawai, List norecs) { return pelayananPasienDao.findPelayananPasienByPetugasAndPelayananPasien(idPegawai, norecs);