Update LogbookKinerjaService

Pembuatan service logbook skor nakes lain dan detail logbook skor harian
This commit is contained in:
Salman Manoe 2022-01-04 18:10:56 +07:00
parent ed9bdb5d60
commit d77f960932
5 changed files with 200 additions and 1 deletions

View File

@ -1,6 +1,7 @@
package com.jasamedika.medifirst2000.dao;
import java.util.List;
import java.util.Map;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -20,4 +21,25 @@ public interface PelayananNakesDao extends PagingAndSortingRepository<PelayananN
+ "and to_char(pn.tglPelayanan,'yyyy-MM') = :bulan " + "and pn.pegawaiId = :pegawaiId")
List<PelayananNakes> findAllByKontrak(@Param("bulan") String bulan, @Param("pegawaiId") Integer idPegawai);
@Query("select new Map(pnt.noRec as noRec," + "pnt.tglPelayanan as tglPelayanan,"
+ "pnt.skor as skor,pnt.jumlah as jumlah," + "pnt.skor*pnt.jumlah as totalSkor," + "pnt.catatan as detail,"
+ "pn.id as produkId,pn.namaProduk as namaProduk," + "pn.kdProduk as kdProduk,"
+ "(case when pn.kdProduk = 1 then 'Pelayanan Pasien' "
+ "when pn.kdProduk = 2 then 'Pelayanan Non-Pasien' end) as kodeProduk,"
+ "pg.id as pegawaiId,pg.namaLengkap as namaLengkap) " + "from PelayananNakes pnt "
+ "inner join pnt.produk pn " + "inner join pnt.pegawai pg " + "where pnt.statusEnabled is true "
+ "and pn.statusEnabled is true " + "and pg.statusEnabled is true "
+ "and to_char(pnt.tglPelayanan,'yyyy-MM') = :bulan " + "and pnt.pegawaiId = :pegawaiId "
+ "order by pn.namaProduk, pnt.tglPelayanan")
List<Map<String, Object>> findPelayananNakes(@Param("bulan") String bulan, @Param("pegawaiId") Integer idPegawai);
@Query("select new Map(pnt.tglPelayanan as tglPelayanan,"
+ "to_char(pnt.tglPelayanan,'yyyy-MM-dd HH24:MI:ss') as tglPelayananFormatted," + "pnt.jumlah as jumlah,"
+ "pnt.catatan as catatan) " + "from PelayananNakes pnt " + "inner join pnt.pegawai pg "
+ "inner join pnt.produk pn " + "where pnt.statusEnabled is true " + "and pn.statusEnabled is true "
+ "and pg.statusEnabled is true " + "and pg.id = :pegawaiId " + "and pn.id = :produkId "
+ "and to_char(pnt.tglPelayanan,'yyyy-MM-dd') = :tglPelayanan")
List<Map<String, Object>> findPelayananNakesDetail(@Param("pegawaiId") Integer idPegawai,
@Param("produkId") Integer idProduk, @Param("tglPelayanan") String tglPelayanan);
}

View File

@ -30,4 +30,28 @@ public interface PelayananPasienNakesDao extends PagingAndSortingRepository<Pela
List<PelayananPasienNakes> findAllPelayananByKontrak(@Param("bulan") String bulan,
@Param("pegawaiId") Integer idPegawai);
@Query("select new Map(ppn.noRec as noRec," + "ppn.tglPelayanan as tglPelayanan,"
+ "ppn.skor as skor,ppn.jumlah as jumlah," + "ppn.skor*ppn.jumlah as totalSkor,"
+ "ppn.antrianPasienDiperiksaId as detail," + "pn.id as produkId,pn.namaProduk as namaProduk,"
+ "pn.kdProduk as kdProduk," + "(case when pn.kdProduk = 1 then 'Pelayanan Pasien' "
+ "when pn.kdProduk = 2 then 'Pelayanan Non-Pasien' end) as kodeProduk,"
+ "pg.id as pegawaiId,pg.namaLengkap as namaLengkap) " + "from PelayananPasienNakes ppn "
+ "inner join ppn.produk pn " + "inner join ppn.pegawai pg " + "where ppn.statusEnabled is true "
+ "and pn.statusEnabled is true " + "and pg.statusEnabled is true "
+ "and to_char(ppn.tglPelayanan,'yyyy-MM') = :bulan " + "and ppn.pegawaiId = :pegawaiId "
+ "order by pn.namaProduk, ppn.tglPelayanan")
List<Map<String, Object>> findPelayananNakes(@Param("bulan") String bulan, @Param("pegawaiId") Integer idPegawai);
@Query("select new Map(ppn.tglPelayanan as tglPelayanan,"
+ "to_char(ppn.tglPelayanan,'yyyy-MM-dd HH24:MI:ss') as tglPelayananFormatted," + "ppn.jumlah as jumlah,"
+ "pd.noRegistrasi as noRegistrasi," + "ps.noCm as noCm," + "ps.namaPasien as namaPasien,"
+ "pn.id as produkId,pn.namaProduk as namaProduk," + "ru.namaRuangan as namaRuangan) "
+ "from PelayananPasienNakes ppn " + "inner join ppn.antrianPasienDiperiksa apd "
+ "inner join ppn.pegawai pg " + "inner join ppn.produk pn " + "inner join apd.pasienDaftar pd "
+ "inner join apd.ruangan ru " + "inner join pd.pasien ps " + "where ppn.statusEnabled is true "
+ "and pg.statusEnabled is true " + "and pd.statusEnabled is true " + "and pg.id = :pegawaiId "
+ "and pn.id = :produkId " + "and to_char(ppn.tglPelayanan,'yyyy-MM-dd') = :tglPelayanan")
List<Map<String, Object>> findPelayananNakesDetail(@Param("pegawaiId") Integer idPegawai,
@Param("produkId") Integer idProduk, @Param("tglPelayanan") String tglPelayanan);
}

View File

@ -60,6 +60,10 @@ public interface LogbookKinerjaService extends BaseVoService<LogbookKinerja, Log
public List<Double> findBobotJenisJabatan(Long periode, Integer idJabatan);
List<Map<String, Object>> findJabatanKontrakVerifKinerja(Integer idPegawai, Integer idPegawaiLogin);
public List<Map<String, Object>> findJabatanKontrakVerifKinerja(Integer idPegawai, Integer idPegawaiLogin);
public List<Map<String, Object>> findLogbookNakes(Integer idPegawai, Long bulan);
public List<Map<String, Object>> findDetailLogbookNakes(Integer idPegawai, Integer idProduk, String tglPelayanan);
}

View File

@ -2785,4 +2785,111 @@ public class LogbookKinerjaServiceImpl extends BaseVoServiceImpl implements Logb
return result;
}
@Override
public List<Map<String, Object>> findLogbookNakes(Integer idPegawai, Long bulan) {
List<Map<String, Object>> result = new ArrayList<>();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
DateFormat mf = new SimpleDateFormat("yyyy-MM");
DecimalFormat decf = new DecimalFormat("###.###");
decf.setRoundingMode(RoundingMode.HALF_UP);
List<Map<String, Object>> pelayananNakes = new ArrayList<>();
pelayananNakes.addAll(pelayananPasienNakesDao.findPelayananNakes(mf.format(new Date(bulan)), idPegawai));
pelayananNakes.addAll(pelayananNakesDao.findPelayananNakes(mf.format(new Date(bulan)), idPegawai));
pelayananNakes = pelayananNakes.stream().sorted(Comparator.comparing(o1 -> (Date) o1.get("tglPelayanan")))
.sorted(Comparator.comparing(o2 -> o2.get("namaProduk").toString())).collect(Collectors.toList());
List<Integer> listIdProduk = new ArrayList<>();
List<Double> listSkor = new ArrayList<>();
List<String> listTglPelayanan = new ArrayList<>();
for (Map<String, Object> map : pelayananNakes) {
if (!listIdProduk.contains(map.get("produkId"))) {
listIdProduk.add(Integer.parseInt(map.get("produkId").toString()));
}
if (!listSkor.contains(map.get("skor"))) {
listSkor.add(Double.parseDouble(map.get("skor").toString()));
}
if (!listTglPelayanan.contains(df.format((Date) map.get("tglPelayanan")))) {
listTglPelayanan.add(df.format((Date) map.get("tglPelayanan")));
}
}
listTglPelayanan = listTglPelayanan.stream().sorted().collect(Collectors.toList());
// GROUPING_TANGGAL_PELAYANAN
List<Map<String, Object>> dataTglPelayanan = new ArrayList<>();
for (Integer idProduk : listIdProduk) {
for (Double skor : listSkor) {
for (String tglPelayanan : listTglPelayanan) {
Map<String, Object> data = new HashMap<>();
double jumlahTindakan = 0.0;
double jumlahSkor = 0.0;
for (Map<String, Object> mapLayanan : pelayananNakes) {
if (idProduk.equals(mapLayanan.get("produkId")) && skor.equals(mapLayanan.get("skor"))
&& tglPelayanan.equals(df.format((Date) mapLayanan.get("tglPelayanan")))) {
jumlahTindakan += Double.valueOf(mapLayanan.get("jumlah").toString());
jumlahSkor += Double.valueOf(mapLayanan.get("totalSkor").toString());
data.putAll(mapLayanan);
data.put("tglPelayanan", df.format(((Date) mapLayanan.get("tglPelayanan"))));
}
}
if (CommonUtil.isNotNullOrEmpty(data)) {
data.put("jumlah", jumlahTindakan);
data.put("totalSkor", jumlahSkor);
dataTglPelayanan.add(data);
}
}
}
}
// GROUPING_HEADER
for (Integer idProduk : listIdProduk) {
for (Double skor : listSkor) {
Map<String, Object> data = new HashMap<>();
List<Map<String, Object>> detail = new ArrayList<>();
double jumlahTindakan = 0.0;
double jumlahSkor = 0.0;
for (Map<String, Object> mapLayanan : dataTglPelayanan) {
if (idProduk.equals(mapLayanan.get("produkId")) && skor.equals(mapLayanan.get("skor"))) {
jumlahTindakan += Double.valueOf(mapLayanan.get("jumlah").toString());
jumlahSkor += Double.valueOf(mapLayanan.get("totalSkor").toString());
Map<String, Object> mapDetail = new HashMap<>();
mapDetail.put("jumlah", mapLayanan.get("jumlah"));
mapDetail.put("tglPelayanan", mapLayanan.get("tglPelayanan"));
detail.add(mapDetail);
mapLayanan.remove("noRec");
mapLayanan.remove("tglPelayanan");
data.putAll(mapLayanan);
}
}
if (CommonUtil.isNotNullOrEmpty(data)) {
data.put("detail", detail);
data.put("jumlah", jumlahTindakan);
data.put("totalSkor", Double.parseDouble(decf.format(jumlahSkor)));
result.add(data);
}
}
}
return result;
}
@Override
public List<Map<String, Object>> findDetailLogbookNakes(Integer idPegawai, Integer idProduk, String tglPelayanan) {
List<Map<String, Object>> result = new ArrayList<>();
result = pelayananPasienNakesDao.findPelayananNakesDetail(idPegawai, idProduk, tglPelayanan);
if (CommonUtil.isNullOrEmpty(result)) {
result = pelayananNakesDao.findPelayananNakesDetail(idPegawai, idProduk, tglPelayanan);
}
return result;
}
}

View File

@ -2174,4 +2174,46 @@ public class IkiDanRemunerasiController extends LocaleController<IkiDanRemuneras
}
}
@RequestMapping(value = "/get-logbook-skoring-nakes", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getLogbookSkoringNakes(HttpServletRequest request,
@RequestParam(value = "bulan", required = true) Long bulan,
@RequestParam(value = "pegawaiId", required = true) Integer idPegawai) {
try {
List<Map<String, Object>> result = logbookKinerjaService.findLogbookNakes(idPegawai, bulan);
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);
} catch (ServiceVOException sve) {
LOGGER.error("Got exception {} when get logbook skoring nakes lain", sve.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage);
} catch (JpaSystemException jse) {
LOGGER.error("Got exception {} when get logbook skoring nakes lain", jse.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
@RequestMapping(value = "/get-detail-logbook-skoring-nakes", method = RequestMethod.GET)
public ResponseEntity<List<Map<String, Object>>> getDetailLogbookSkoringNakes(HttpServletRequest request,
@RequestParam(value = "pegawaiId", required = true) Integer idPegawai,
@RequestParam(value = "produkId", required = true) Integer idProduk,
@RequestParam(value = "tglPelayanan", required = true) String tglPelayanan) {
try {
List<Map<String, Object>> result = logbookKinerjaService.findDetailLogbookNakes(idPegawai, idProduk,
tglPelayanan);
mapHeaderMessage.put(WebConstants.HttpHeaderInfo.LABEL_SUCCESS,
getMessage(MessageResource.LABEL_SUCCESS, request));
return RestUtil.getJsonResponse(result, HttpStatus.OK, mapHeaderMessage);
} catch (ServiceVOException sve) {
LOGGER.error("Got exception {} when get detail logbook skoring nakes lain", sve.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, sve.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.INTERNAL_SERVER_ERROR, mapHeaderMessage);
} catch (JpaSystemException jse) {
LOGGER.error("Got exception {} when get detail logbook skoring nakes lain", jse.getMessage());
addHeaderMessage(Constants.MessageInfo.ERROR_MESSAGE, jse.getMessage());
return RestUtil.getJsonHttptatus(HttpStatus.CONFLICT, mapHeaderMessage);
}
}
}