Update logbook task scheduler

Penambahan scheduler detail rekapitulasi untuk logbook dokter dan terapis
This commit is contained in:
Salman Manoe 2024-05-31 08:55:54 +07:00
parent 29ea64f491
commit 8e2104b5d3
24 changed files with 1479 additions and 756 deletions

View File

@ -1,11 +1,21 @@
package com.jasamedika.medifirst2000.dao;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import com.jasamedika.medifirst2000.entities.DetailLogbookDokter;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.sql.Date;
import java.util.List;
@Repository("DetailLogbookDokterDao")
public interface DetailLogbookDokterDao extends PagingAndSortingRepository<DetailLogbookDokter, String> {
@Modifying
@Query(value = "delete from remun.t_logbook_dokter_detail " + "where logbook_dokter_id in (select no_rec "
+ "from remun.t_logbook_dokter " + "where logbook_remun_id in (select no_rec "
+ "from remun.t_logbook_remun " + "where pegawai_id in (:idPegawai) "
+ "and bulan between :tglAwal and :tglAkhir))", nativeQuery = true)
void deleteByKelompokKerjaAndPeriod(@Param("idPegawai") List<Integer> idPegawai, @Param("tglAwal") Date tglAwal,
@Param("tglAkhir") Date tglAkhir);
}

View File

@ -2,6 +2,19 @@ package com.jasamedika.medifirst2000.dao;
import com.jasamedika.medifirst2000.entities.LogbookDokter;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.sql.Date;
import java.util.List;
public interface LogbookDokterDao extends JpaRepository<LogbookDokter, String> {
@Modifying
@Query(value = "delete from remun.t_logbook_dokter " + "where logbook_remun_id in (select no_rec "
+ "from remun.t_logbook_remun where pegawai_id in (:idPegawai) "
+ "and bulan between :tglAwal and :tglAkhir)", nativeQuery = true)
void deleteByKelompokKerjaAndPeriod(@Param("idPegawai") List<Integer> idPegawai, @Param("tglAwal") Date tglAwal,
@Param("tglAkhir") Date tglAkhir);
}

View File

@ -0,0 +1,24 @@
package com.jasamedika.medifirst2000.dao;
import com.jasamedika.medifirst2000.entities.LogbookRemun;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.sql.Date;
import java.util.List;
/**
* @author salmanoe
* @version 1.0.0
* @since 25/04/2024
*/
public interface LogbookRemunDao extends JpaRepository<LogbookRemun, String> {
@Modifying
@Query(value = "delete from remun.t_logbook_remun " + "where pegawai_id in (:idPegawai) "
+ "and bulan between :tglAwal and :tglAkhir", nativeQuery = true)
void deleteByKelompokKerjaAndPeriod(@Param("idPegawai") List<Integer> idPegawai, @Param("tglAwal") Date tglAwal,
@Param("tglAkhir") Date tglAkhir);
}

View File

@ -10,6 +10,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
/**
* Repository class for AbsensiPegawai
@ -502,4 +503,9 @@ public interface MapPegawaiJabatanToUnitKerjaDao extends CrudRepository<MapPegaw
+ "and mj.unitKerjaPegawaiId in (:unitKerjaId) " + "and mj.jabatanId in (:jabatanId)")
List<Integer> findPegawaiIdByUnitKerjaIdAndJabatanId(@Param("unitKerjaId") List<Integer> unitKerjaId,
@Param("jabatanId") List<Integer> jabatanId);
@Query("select mj.pegawaiId from MapPegawaiJabatanToUnitKerja mj " +
"where mj.statusEnabled is true " +
"and mj.subUnitKerjaPegawaiId in (:subUnitKerjaIdIn)")
Set<Integer> findPegawaiIdBySubUnitKerjaIn(@Param("subUnitKerjaIdIn") List<Integer> subUnitKerjaIdIn);
}

View File

@ -77,4 +77,8 @@ public interface SubUnitKerjaDao extends JpaRepository<SubUnitKerjaPegawai, Inte
+ "order by skj.id")
List<Map<String, Object>> findAllKelompokKerjaMedis();
@Query("select distinct skj.id " + "from SubUnitKerjaPegawai skj "
+ "inner join skj.unitKerja ukj " + "where skj.statusEnabled is true " + "and lower(skj.name) like 'kk%' "
+ "order by skj.id")
List<Integer> findAllKelompokKerjaMedisId();
}

View File

@ -84,8 +84,6 @@ public interface IndekKinerjaService {
List<Map<String, Object>> getAllTindakanDokter(String periode, Integer idPegawai);
void generateAllTindakanDokter();
List<Map<String, Object>> findPatientDetailForEveryTindakan(Integer idProduk, Integer idKelas, Integer idPegawai,
String tgl, Boolean ffs);

View File

@ -0,0 +1,14 @@
package com.jasamedika.medifirst2000.service;
import java.util.Date;
import java.util.Set;
/**
* @author salmanoe
* @version 1.0.0
* @since 25/04/2024
*/
public interface LogbookRemunService {
void deleteByPeriod(Set<Integer> idPegawai, Date tglAwal, Date tglAkhir);
}

View File

@ -109,12 +109,6 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK
@Autowired
private RevIndekKinerjaDao revIndekKinerjaDao;
@Autowired
private LogbookDokterDao logbookDokterDao;
@Autowired
private DetailLogbookDokterDao detailLogbookDokterDao;
@Autowired
private PelayananPasienDetailDao pelayananPasienDetailDao;
@ -1269,63 +1263,6 @@ public class IndekKinerjaServiceImpl extends BaseVoServiceImpl implements IndekK
listRanap);
}
@Override
@Transactional
public void generateAllTindakanDokter() {
SimpleDateFormat monthFormat = new SimpleDateFormat("yyyy-MM");
List<Integer> allPegawaiKedokteran = pegawaiDao.getPegawaiKedokteran();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
String periode = monthFormat.format(cal.getTime());
for (Integer idPegawai : allPegawaiKedokteran) {
List<Map<String, Object>> allTindakanDokter = getAllTindakanDokter(periode, idPegawai);
for (Map<String, Object> map : allTindakanDokter) {
LogbookDokter logbookDokter = new LogbookDokter();
logbookDokter.setIdPegawai(idPegawai);
logbookDokter.setIdProduk((Integer) map.get("idProduk"));
logbookDokter.setNamaProduk((String) map.get("namaProduk"));
logbookDokter.setHargaKelas1((Double) map.get("hargaKelas1"));
logbookDokter.setTotalTindakan((Long) map.get("totalTindakan"));
logbookDokter.setDetailId((Integer) map.get("detailId"));
logbookDokter.setNamaKelas((String) map.get("namaKelas"));
logbookDokter.setIdKelas((Integer) map.get("idKelas"));
logbookDokter.setPoinQty((Double) map.get("pointQty"));
logbookDokter.setPoin((Double) map.get("poin"));
logbookDokter.setIdJenisPelaksana((Integer) map.get("idJenisPelaksana"));
logbookDokter.setHarga((Double) map.get("harga"));
logbookDokter.setDetailJenisProduk((String) map.get("detailJenisProduk"));
logbookDokter.setStatusEnabled(true);
// kode profile rumah sakit
logbookDokter.setKdProfile((short) 0);
logbookDokterDao.save(logbookDokter);
@SuppressWarnings("unchecked")
List<Map<String, Object>> datas = (List<Map<String, Object>>) map.get("datas");
for (Map<String, Object> data : datas) {
DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter();
SimpleDateFormat tanggalFormat = new SimpleDateFormat("yyyy-MM-dd");
Date tanggal;
try {
tanggal = tanggalFormat.parse(data.get("tanggal").toString());
} catch (ParseException e) {
throw new ServiceVOException(e.getMessage());
}
detailLogbookDokter.setCount((Long) data.get("count"));
detailLogbookDokter.setHarga((Double) data.get("harga"));
detailLogbookDokter.setTanggal(tanggal);
detailLogbookDokter.setLogbookDokter(logbookDokter);
detailLogbookDokter.setStatusEnabled(true);
detailLogbookDokter.setKdProfile((short) 0);
detailLogbookDokterDao.save(detailLogbookDokter);
}
}
}
}
@Override
@Transactional
public List<Map<String, Object>> getAllTindakanDokter(String periode, Integer idPegawai) {

View File

@ -0,0 +1,52 @@
package com.jasamedika.medifirst2000.service.impl;
import com.jasamedika.medifirst2000.dao.DetailLogbookDokterDao;
import com.jasamedika.medifirst2000.dao.LogbookDokterDao;
import com.jasamedika.medifirst2000.dao.LogbookRemunDao;
import com.jasamedika.medifirst2000.service.LogbookRemunService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* @author salmanoe
* @version 1.0.0
* @since 25/04/2024
*/
@Service
@Transactional
public class LogbookRemunServiceImpl implements LogbookRemunService {
private static final Logger LOGGER = LoggerFactory.getLogger(LogbookRemunServiceImpl.class);
@Autowired
private LogbookRemunDao logbookRemunDao;
@Autowired
private LogbookDokterDao logbookDokterDao;
@Autowired
private DetailLogbookDokterDao detailLogbookDokterDao;
@Override
public void deleteByPeriod(Set<Integer> idPegawai, Date tglAwal, Date tglAkhir) {
LOGGER.info("Start deleting previous data");
List<Integer> listIdPegawai = new ArrayList<>(idPegawai);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.sql.Date sqlTglAwal = new java.sql.Date(tglAwal.getTime());
java.sql.Date sqlTglAkhir = new java.sql.Date(tglAkhir.getTime());
detailLogbookDokterDao.deleteByKelompokKerjaAndPeriod(listIdPegawai, sqlTglAwal, sqlTglAkhir);
logbookDokterDao.deleteByKelompokKerjaAndPeriod(listIdPegawai, sqlTglAwal, sqlTglAkhir);
logbookRemunDao.deleteByKelompokKerjaAndPeriod(listIdPegawai, sqlTglAwal, sqlTglAkhir);
LOGGER.info("Deleting previous data successfully...!");
}
}

View File

@ -1103,6 +1103,7 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
*/
List<Map<String, Object>> listDataLuarJamKerja = new ArrayList<>();
for (Map<String, Object> d : listRatedPay) {
d.put("isJamKerja", false);
if (CommonUtil.isNotNullOrEmpty(d.get("tglPelayanan"))) {
LocalDate tglPelayanan = ((Date) d.get("tglPelayanan")).toInstant().atZone(ZoneId.systemDefault())
.toLocalDate();
@ -1116,7 +1117,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
.contains(Integer.parseInt(d.get("idKelompokPasien").toString()))))
if (CommonUtil.isNullOrEmpty(j.get("jamMasuk"))) {
if (tglPelayanan.isEqual(tglMasuk)) {
d.put("isJamKerja", false);
if ("Reguler".equals(d.get("jenisRuangan").toString()))
d.put("isJamKerja", true);
listDataLuarJamKerja.add(d);
@ -1129,7 +1129,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
LocalDateTime tglJamPulang = LocalDateTime.of(tglMasuk, jamPulang);
if ((tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isBefore(tglJamMasuk))
|| (tglPelayanan.isEqual(tglMasuk) && tglJamPelayanan.isAfter(tglJamPulang))) {
d.put("isJamKerja", false);
if ("Reguler".equals(d.get("jenisRuangan").toString()))
d.put("isJamKerja", true);
listDataLuarJamKerja.add(d);
@ -1141,7 +1140,6 @@ public class PelayananPasienServiceImpl extends BaseVoServiceImpl implements Pel
/*
* Tanggal pelayanan null akan dianggap sebagai luar jam kerja
*/
d.put("isJamKerja", false);
if ("Reguler".equals(d.get("jenisRuangan").toString()))
d.put("isJamKerja", true);
listDataLuarJamKerja.add(d);

View File

@ -5,7 +5,7 @@ hibernate.hbm2ddl = none
hibernate.format_sql = false
hibernate.show_sql = false
hikari.config.maximum.pool.size = 25
hikari.config.maximum.pool.size = 75
# DB Production
jdbc.url = jdbc:postgresql://psql1.rsabhk.lan:5432/rsab_hk_production

View File

@ -0,0 +1,20 @@
package com.jasamedika.medifirst2000.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
/**
* @author salmanoe
* @version 1.0.0
* @since 26/04/2024
*/
@Getter
@Setter
public class LogbookDokterDto {
private String noRec;
private List<String> pelayananPasienPetugasId = new ArrayList<>();
}

View File

@ -1,35 +1,73 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import static javax.persistence.FetchType.LAZY;
@Getter
@Setter
@Entity
@Table(name = "DetailLogbookDokter_T")
public class DetailLogbookDokter extends BaseTransaction {
@Table(name = "t_logbook_dokter_detail", schema = "remun")
public class DetailLogbookDokter extends BaseActive {
private static final long serialVersionUID = 8003361970314967209L;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "no_rec", columnDefinition = "CHAR(32)", unique = true)
protected String noRec;
@Column(name = "count")
@Caption(value = "Count")
private Long count;
@Column(name = "jenis_pelaksana")
@Caption(value = "Jenis Pelaksana")
private String jenisPelaksana;
@Column(name = "harga")
@Caption(value = "Harga")
private Double harga;
@Column(name = "jumlah_tindakan")
@Caption(value = "Jumlah Tindakan")
private Integer jumlahTindakan;
@Column(name = "tanggal")
@Caption(value = "Tanggal")
private Date tanggal;
@Column(name = "tarif")
@Caption(value = "Tarif")
private BigDecimal tarif;
@ManyToOne(fetch = FetchType.LAZY)
@Caption(value = "Object Logbook Dokter")
@JoinColumn(name = "ObjectLogbookDokterFK")
@Column(name = "diskon")
@Caption(value = "Diskon")
private BigDecimal diskon;
@Column(name = "kelas")
@Caption(value = "Kelas")
private String kelas;
@Column(name = "ruangan")
@Caption(value = "Ruangan")
private String ruangan;
@Column(name = "nama_pasien")
@Caption(value = "Nama Pasien")
private String namaPasien;
@Column(name = "no_rekam_medis")
@Caption(value = "No Rekam Medis")
private String noRekamMedis;
@Column(name = "no_registrasi")
@Caption(value = "No Registrasi")
private String noRegistrasi;
@Column(name = "tanggal_pelayanan")
@Caption(value = "Tanggal Pelayanan")
private Date tanggalPelayanan;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "logbook_dokter_id")
@NotNull(message = "Logbook dokter tidak boleh kosong")
@Caption(value = "Logbook Dokter")
private LogbookDokter logbookDokter;
}

View File

@ -0,0 +1,41 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotBlank;
import javax.persistence.*;
import javax.validation.constraints.Size;
import static javax.persistence.GenerationType.SEQUENCE;
/**
* @author salmanoe
* @version 1.0.0
* @since 24/04/2024
*/
@Getter
@Setter
@Entity
@Table(name = "m_jenis_layanan_remun_medis", schema = "remun")
public class JenisLayananRemunMedis extends BaseActive {
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "sg_jenis_layanan_remun_medis")
@SequenceGenerator(name = "sg_jenis_layanan_remun_medis", schema = "remun", sequenceName = "remun.m_jenis_layanan_remun_medis_seq", allocationSize = 1)
@Column(name = "id", columnDefinition = "bigint default nextval('remun.m_jenis_layanan_remun_medis_seq'::regclass)")
protected Long id;
/**
* Jenis Layanan Remunerasi : Konsultasi Poli, Visite Ranap, Penunjang Rehab
* Medik, Penunjang Radiologi, Penunjang PK, Penunjang PA, Tindakan
* Non-Operatif, Tindakan Operatif Lengkap, Tindakan Operatif Non Co-op
*/
@Column(name = "jenis_layanan", length = 150, unique = true, nullable = false)
@Size(max = 150, message = "Jenis layanan maksimal {max} karakter")
@NotBlank(message = "Jenis layanan tidak boleh kosong")
@Caption("Jenis Layanan")
private String jenisLayanan;
}

View File

@ -0,0 +1,39 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotBlank;
import javax.persistence.*;
import javax.validation.constraints.Size;
import static javax.persistence.GenerationType.SEQUENCE;
/**
* @author salmanoe
* @version 1.0.0
* @since 24/04/2024
*/
@Getter
@Setter
@Entity
@Table(name = "m_jenis_logbook", schema = "remun")
public class JenisLogbook extends BaseActive {
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "sg_jenis_logbook")
@SequenceGenerator(name = "sg_jenis_logbook", schema = "remun", sequenceName = "remun.m_jenis_logbook_seq", allocationSize = 1)
@Column(name = "id", columnDefinition = "bigint default nextval('remun.m_jenis_logbook_seq'::regclass)")
protected Long id;
/**
* Jenis Logbook : JKN, NON-JKN, FIXED-PAY, KLAIM MPP
*/
@Column(name = "jenis_logbook", length = 150, unique = true, nullable = false)
@Size(max = 150, message = "Jenis logbook maksimal {max} karakter")
@NotBlank(message = "Jenis logbook tidak boleh kosong")
@Caption("Jenis Logbook")
private String jenisLogbook;
}

View File

@ -1,73 +1,81 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Set;
import static javax.persistence.CascadeType.ALL;
import static javax.persistence.FetchType.LAZY;
@Getter
@Setter
@Entity
@Table(name = "LogbookDokter_T")
public class LogbookDokter extends BaseTransaction {
@Table(name = "t_logbook_dokter", schema = "remun")
public class LogbookDokter extends BaseActive {
private static final long serialVersionUID = -3993902298828376060L;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "no_rec", columnDefinition = "CHAR(32)", unique = true)
protected String noRec;
@Column(name = "objectProdukFk")
@Column(name = "jenis_logbook")
@Caption(value = "Jenis Logbook")
private String jenisLogbook;
@Column(name = "produk_id")
@Caption(value = "Id Produk")
private Integer idProduk;
private Integer produkId;
@Column(name = "objectPegawaiFk")
@Caption(value = "Id Pegawai")
private Integer idPegawai;
@Column(name = "produk")
@Caption(value = "Produk")
private String produk;
@Column(name = "objectDetailJenisProdukFk")
@Caption(value = "Id Detail Jenis Produk")
private Integer detailId;
@Column(name = "jenis_ruangan")
@Caption(value = "Jenis Ruangan")
private String jenisRuangan;
@Column(name = "detailJenisProduk")
@Caption(value = "Detail Jenis Produk")
private String detailJenisProduk;
@Column(name = "kelompok_pasien")
@Caption(value = "Kelompok Pasien")
private String kelompokPasien;
@Column(name = "harga")
@Caption(value = "Harga")
private Double harga;
@Column(name = "tarif")
@Caption(value = "Tarif")
private BigDecimal tarif;
@Column(name = "hargaKelasSatu")
@Caption(value = "Harga Kelas 1")
private Double hargaKelas1;
@Column(name = "persen_jasa")
@Caption(value = "Persentase Jasa")
private Double persenJasa;
@Column(name = "objectJenisPelaksanaFk")
@Caption(value = "Id Jenis Pelaksana")
private Integer idJenisPelaksana;
@Column(name = "remun_tindakan")
@Caption(value = "Remun / Tindakan")
private BigDecimal remunTindakan;
@Column(name = "objectKelasFk")
@Caption(value = "Id Kelas")
private Integer idKelas;
@Column(name = "keterangan")
@Caption(value = "Keterangan")
private String keterangan;
@Column(name = "namaKelas")
@Caption(value = "Nama Kelas")
private String namaKelas;
@Column(name = "namaProduk")
@Caption(value = "Nama Produk")
private String namaProduk;
@Column(name = "poin")
@Caption(value = "Poin")
private Double poin;
@Column(name = "poinQty")
@Caption(value = "Jumlah Poin")
private Double poinQty;
@Column(name = "totalTindakan")
@Column(name = "total_tindakan")
@Caption(value = "Total Tindakan")
private Long totalTindakan;
private Integer totalTindakan;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "logbookDokter")
@Column(name = "total_remun_tindakan")
@Caption(value = "Total Remunerasi")
private BigDecimal totalRemunTindakan;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "logbook_remun_id")
@NotNull(message = "Logbook remun tidak boleh kosong")
@Caption(value = "Logbook Remun")
private LogbookRemun logbookRemun;
@OneToMany(cascade = ALL, fetch = LAZY, mappedBy = "logbookDokter")
private Set<DetailLogbookDokter> detailLogbookDokter;
}

View File

@ -0,0 +1,55 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;
import java.util.Set;
import static javax.persistence.CascadeType.ALL;
import static javax.persistence.FetchType.LAZY;
import static javax.persistence.TemporalType.DATE;
import static javax.persistence.TemporalType.TIMESTAMP;
/**
* @author salmanoe
* @version 1.0.0
* @since 25/04/2024
*/
@Getter
@Setter
@Entity
@Table(name = "t_logbook_remun", schema = "remun")
public class LogbookRemun extends BaseActive {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "no_rec", columnDefinition = "CHAR(32)", unique = true)
protected String noRec;
@Column(name = "pegawai_id")
@Caption(value = "Id Pegawai")
private Integer pegawaiId;
@Column(name = "pegawai")
@Caption(value = "Pegawai")
private String pegawai;
@Column(name = "bulan")
@Caption(value = "Bulan")
@Temporal(DATE)
private Date bulan;
@Column(name = "tanggal_tarik_data")
@Caption(value = "Tanggal Tarik Data")
@Temporal(TIMESTAMP)
private Date tanggalTarikData;
@OneToMany(cascade = ALL, fetch = LAZY, mappedBy = "logbookRemun")
private Set<LogbookDokter> logbookDokter;
}

View File

@ -54,4 +54,10 @@ public class ObatLayananTindakan extends BaseTransaction implements Serializable
@JoinColumn(name = "diubah_pengguna_id")
@Caption(value = "Diubah oleh pegawai")
private Pegawai diubahOleh;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "ruanganfarmasifk", nullable = false)
@NotNull(message = "Ruangan farmasi Tidak boleh Kosong")
@Caption(value = "Ruangan Farmasi")
private Ruangan ruanganFarmasi;
}

View File

@ -0,0 +1,61 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import static javax.persistence.FetchType.LAZY;
/**
* @author salmanoe
* @version 1.0.0
* @since 24/04/2024
*/
@Getter
@Setter
@Entity
@Table(name = "m_proporsi_jasa_layanan_remun_medis", schema = "remun")
public class ProporsiJasaLayananRemunMedis extends BaseActive {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "no_rec", columnDefinition = "CHAR(32)", unique = true)
protected String noRec;
@NotNull(message = "Persentase tidak boleh kosong")
@Caption(value = "Persentase")
private Double persentase;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "id_jenis_logbook", nullable = false)
@NotNull(message = "Jenis logbook tidak boleh kosong")
@Caption(value = "Jenis Logbook")
private JenisLogbook jenisLogbook;
@Column(name = "id_jenis_logbook", insertable = false, updatable = false, nullable = false)
private Long jenisLogbookId;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "id_jenis_petugas_pelaksana")
@NotNull(message = "Jenis petugas pelaksana tidak boleh kosong")
@Caption(value = "Jenis Petugas Pelaksana")
private JenisPetugasPelaksana jenisPetugasPelaksana;
@Column(name = "id_jenis_petugas_pelaksana", insertable = false, updatable = false, nullable = false)
private Integer jenisPetugasPelaksanaId;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "id_jenis_layanan", nullable = false)
@NotNull(message = "Jenis layanan tidak boleh kosong")
@Caption(value = "Jenis Layanan Remun Medis")
private JenisLayananRemunMedis jenisLayanan;
@Column(name = "id_jenis_layanan", insertable = false, updatable = false, nullable = false)
private Long jenisLayananId;
}

View File

@ -0,0 +1,48 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseActive;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import static javax.persistence.FetchType.LAZY;
/**
* @author salmanoe
* @version 1.0.0
* @since 24/04/2024
*/
@Getter
@Setter
@Entity
@Table(name = "m_ruangan_jenis_layanan_remun_medis", schema = "remun")
public class RuanganJenisLayananRemunMedis extends BaseActive {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "no_rec", columnDefinition = "CHAR(32)", unique = true)
protected String noRec;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "id_ruangan", nullable = false)
@NotNull(message = "Ruangan tidak boleh kosong")
@Caption(value = "Ruangan")
private Ruangan ruangan;
@Column(name = "id_ruangan", insertable = false, updatable = false, nullable = false)
private Integer ruanganId;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "id_jenis_layanan", nullable = false)
@NotNull(message = "Jenis layanan tidak boleh kosong")
@Caption(value = "Jenis Layanan Remun Medis")
private JenisLayananRemunMedis jenisLayanan;
@Column(name = "id_jenis_layanan", insertable = false, updatable = false, nullable = false)
private Long jenisLayananId;
}

View File

@ -1,10 +1,8 @@
package com.jasamedika.medifirst2000.task.schedule;
import com.jasamedika.medifirst2000.dao.PelayananPasienPetugasDao;
import com.jasamedika.medifirst2000.dao.RekapLogbookDokterDao;
import com.jasamedika.medifirst2000.entities.KelompokPasien;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.RekapLogbookDokter;
import com.jasamedika.medifirst2000.dao.*;
import com.jasamedika.medifirst2000.entities.*;
import com.jasamedika.medifirst2000.service.LogbookRemunService;
import com.jasamedika.medifirst2000.service.PelayananPasienService;
import com.jasamedika.medifirst2000.service.RekapLogbookDokterService;
import com.jasamedika.medifirst2000.util.DateUtil;
@ -14,11 +12,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static com.jasamedika.medifirst2000.constants.Master.Profesi.TERAPI;
/**
* @author salmanoe
@ -41,9 +45,30 @@ public class LogbookTask {
@Autowired
private RekapLogbookDokterService rekapLogbookDokterService;
@Autowired
private LogbookRemunService logbookRemunService;
@Autowired
private LogbookRemunDao logbookRemunDao;
@Autowired
private LogbookDokterDao logbookDokterDao;
@Autowired
private DetailLogbookDokterDao detailLogbookDokterDao;
@Autowired
private MapPegawaiJabatanToUnitKerjaDao mapPegawaiJabatanToUnitKerjaDao;
@Autowired
private SubUnitKerjaDao subUnitKerjaDao;
@Autowired
private MapJabatanProfesiDao mapJabatanProfesiDao;
@Scheduled(cron = "0 0 0 1-6 * ?")
public void saveRekapLogbookDokter() {
LOGGER.info("Simpan rekapitulasi logbook dokter");
LOGGER.info("Start simpan rekapitulasi logbook dokter");
LocalDate localDate = LocalDate.now().minusMonths(1);
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
@ -168,5 +193,343 @@ public class LogbookTask {
}
});
rekapLogbookDokterDao.save(models);
LOGGER.info("Simpan rekapitulasi logbook dokter berhasil...!");
}
@Scheduled(cron = "0 0 0 1-6 * ?")
public void saveRekapDetailLogbookDokter() {
LOGGER.info("Start simpan rekapitulasi detail logbook dokter");
LocalDate localDate = LocalDate.now().minusMonths(1);
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date tglAwal = DateUtil.startMonth(date);
Date tglAkhir = DateUtil.endMonth(date);
List<Integer> subUnitKerjaIn = subUnitKerjaDao.findAllKelompokKerjaMedisId();
Set<Integer> idPegawaiKelompokKerja = mapPegawaiJabatanToUnitKerjaDao
.findPegawaiIdBySubUnitKerjaIn(subUnitKerjaIn);
List<Integer> terapisRehabMedik = mapJabatanProfesiDao.findIdPegawaiByProfesiIn(Arrays.asList(TERAPI));
idPegawaiKelompokKerja.addAll(terapisRehabMedik);
if (!idPegawaiKelompokKerja.isEmpty()) {
// Delete untuk pembaharuan data
logbookRemunService.deleteByPeriod(idPegawaiKelompokKerja, tglAwal, tglAkhir);
}
saveRekapDetailLogbookDokter(idPegawaiKelompokKerja, date);
}
private void saveRekapDetailLogbookDokter(Set<Integer> idPegawaiKelompokKerja, Date date) {
DateFormat df = new SimpleDateFormat("yyyy-MM");
String bulan = df.format(date);
ExecutorService executorService = Executors.newFixedThreadPool(50);
CountDownLatch latch = new CountDownLatch(50);
try {
for (Integer idPegawai : idPegawaiKelompokKerja) {
executorService.execute(() -> {
LOGGER.info("Simpan rekapitulasi detail logbook dokter id {}", idPegawai);
LogbookRemun logbookRemun = new LogbookRemun();
logbookRemun.setKdProfile((short) 0);
logbookRemun.setStatusEnabled(true);
logbookRemun.setPegawaiId(idPegawai);
logbookRemun.setBulan(date);
logbookRemun.setTanggalTarikData(new Date());
LogbookRemun savedRemun = logbookRemunDao.save(logbookRemun);
{
Map<String, Object> kinerjaDokter = pelayananPasienService.logbookRemunTarifDokter(idPegawai,
bulan);
List<Map<String, Object>> remun = (List<Map<String, Object>>) kinerjaDokter.get("data");
for (Map<String, Object> map : remun) {
List<String> listNorecPelayananPasienPetugas = new ArrayList<>();
{
List<Map<String, Object>> detail = (List<Map<String, Object>>) map.get("detail");
for (Map<String, Object> d : detail)
listNorecPelayananPasienPetugas.addAll((List<String>) d.get("norecs"));
}
LogbookDokter logbookDokter = new LogbookDokter();
logbookDokter.setKdProfile((short) 0);
logbookDokter.setStatusEnabled(true);
logbookDokter.setJenisLogbook("JKN");
logbookDokter.setKelompokPasien(map.get("kelompokPasien").toString());
logbookDokter.setKeterangan(map.get("keterangan").toString());
logbookDokter.setPersenJasa(
Double.parseDouble(map.get("persenJasa").toString().replace("%", "")));
logbookDokter.setProduk(map.get("namaProduk").toString());
logbookDokter.setProdukId(Integer.parseInt(map.get("idProduk").toString()));
double hargaJasa = Double.parseDouble(map.get("hargaJasa").toString());
logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa));
logbookDokter
.setTarif(BigDecimal.valueOf(Double.parseDouble(map.get("hargaJual").toString())));
int jumlah = Double.valueOf(map.get("jumlah").toString()).intValue();
logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah));
logbookDokter.setTotalTindakan(jumlah);
logbookDokter.setLogbookRemun(savedRemun);
LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter);
{
List<Map<String, Object>> detailLogbook = pelayananPasienService
.detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas);
List<DetailLogbookDokter> listDetailLogbookDokter = new ArrayList<>();
for (Map<String, Object> detail : detailLogbook) {
DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter();
detailLogbookDokter.setKdProfile((short) 0);
detailLogbookDokter.setStatusEnabled(true);
detailLogbookDokter.setDiskon(
BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString())));
detailLogbookDokter.setJumlahTindakan(
Double.valueOf(detail.get("jumlah").toString()).intValue());
detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString());
detailLogbookDokter.setKelas(detail.get("namaKelas").toString());
detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString());
detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString());
detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString());
detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString());
detailLogbookDokter
.setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString()));
detailLogbookDokter.setTarif(
BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString())));
detailLogbookDokter.setLogbookDokter(savedLogbookDokter);
listDetailLogbookDokter.add(detailLogbookDokter);
}
detailLogbookDokterDao.save(listDetailLogbookDokter);
}
}
}
{
List<Map<String, Object>> ffs = pelayananPasienService.logbookFfsTarifDokter(idPegawai, bulan);
for (Map<String, Object> fee : ffs) {
List<String> listNorecPelayananPasienPetugas = new ArrayList<>();
{
List<Map<String, Object>> detail = (List<Map<String, Object>>) fee.get("detail");
for (Map<String, Object> d : detail)
listNorecPelayananPasienPetugas.addAll((List<String>) d.get("norecs"));
}
LogbookDokter logbookDokter = new LogbookDokter();
logbookDokter.setKdProfile((short) 0);
logbookDokter.setStatusEnabled(true);
logbookDokter.setJenisLogbook("NON-JKN DALAM JAM KERJA");
logbookDokter.setJenisRuangan(fee.get("jenisRuangan").toString());
logbookDokter.setKelompokPasien(fee.get("kelompokPasien").toString());
logbookDokter.setKeterangan(fee.get("keterangan").toString());
logbookDokter.setPersenJasa(
Double.parseDouble(fee.get("persenJasa").toString().replace("%", "")));
logbookDokter.setProduk(fee.get("namaProduk").toString());
logbookDokter.setProdukId(Integer.parseInt(fee.get("idProduk").toString()));
double hargaJasa = Double.parseDouble(fee.get("hargaJasa").toString());
logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa));
logbookDokter
.setTarif(BigDecimal.valueOf(Double.parseDouble(fee.get("hargaJual").toString())));
int jumlah = Double.valueOf(fee.get("jumlah").toString()).intValue();
logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah));
logbookDokter.setTotalTindakan(jumlah);
logbookDokter.setLogbookRemun(savedRemun);
LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter);
{
List<Map<String, Object>> detailLogbook = pelayananPasienService
.detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas);
List<DetailLogbookDokter> listDetailLogbookDokter = new ArrayList<>();
for (Map<String, Object> detail : detailLogbook) {
DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter();
detailLogbookDokter.setKdProfile((short) 0);
detailLogbookDokter.setStatusEnabled(true);
detailLogbookDokter.setDiskon(
BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString())));
detailLogbookDokter.setJumlahTindakan(
Double.valueOf(detail.get("jumlah").toString()).intValue());
detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString());
detailLogbookDokter.setKelas(detail.get("namaKelas").toString());
detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString());
detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString());
detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString());
detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString());
detailLogbookDokter
.setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString()));
detailLogbookDokter.setTarif(
BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString())));
detailLogbookDokter.setLogbookDokter(savedLogbookDokter);
listDetailLogbookDokter.add(detailLogbookDokter);
}
detailLogbookDokterDao.save(listDetailLogbookDokter);
}
}
}
{
List<Map<String, Object>> ffs = pelayananPasienService.logbookFfsLuarTarifDokter(idPegawai,
bulan);
for (Map<String, Object> fee : ffs) {
List<String> listNorecPelayananPasienPetugas = new ArrayList<>();
{
List<Map<String, Object>> detail = (List<Map<String, Object>>) fee.get("detail");
for (Map<String, Object> d : detail)
listNorecPelayananPasienPetugas.addAll((List<String>) d.get("norecs"));
}
LogbookDokter logbookDokter = new LogbookDokter();
logbookDokter.setKdProfile((short) 0);
logbookDokter.setStatusEnabled(true);
logbookDokter.setJenisLogbook("NON-JKN LUAR JAM KERJA");
logbookDokter.setJenisRuangan(fee.get("jenisRuangan").toString());
logbookDokter.setKelompokPasien(fee.get("kelompokPasien").toString());
logbookDokter.setKeterangan(fee.get("keterangan").toString());
logbookDokter.setPersenJasa(
Double.parseDouble(fee.get("persenJasa").toString().replace("%", "")));
logbookDokter.setProduk(fee.get("namaProduk").toString());
logbookDokter.setProdukId(Integer.parseInt(fee.get("idProduk").toString()));
double hargaJasa = Double.parseDouble(fee.get("hargaJasa").toString());
logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa));
logbookDokter
.setTarif(BigDecimal.valueOf(Double.parseDouble(fee.get("hargaJual").toString())));
int jumlah = Double.valueOf(fee.get("jumlah").toString()).intValue();
logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah));
logbookDokter.setTotalTindakan(jumlah);
logbookDokter.setLogbookRemun(savedRemun);
LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter);
{
List<Map<String, Object>> detailLogbook = pelayananPasienService
.detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas);
List<DetailLogbookDokter> listDetailLogbookDokter = new ArrayList<>();
for (Map<String, Object> detail : detailLogbook) {
DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter();
detailLogbookDokter.setKdProfile((short) 0);
detailLogbookDokter.setStatusEnabled(true);
detailLogbookDokter.setDiskon(
BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString())));
detailLogbookDokter.setJumlahTindakan(
Double.valueOf(detail.get("jumlah").toString()).intValue());
detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString());
detailLogbookDokter.setKelas(detail.get("namaKelas").toString());
detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString());
detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString());
detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString());
detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString());
detailLogbookDokter
.setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString()));
detailLogbookDokter.setTarif(
BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString())));
detailLogbookDokter.setLogbookDokter(savedLogbookDokter);
listDetailLogbookDokter.add(detailLogbookDokter);
}
detailLogbookDokterDao.save(listDetailLogbookDokter);
}
}
}
{
List<Map<String, Object>> fixedPay = pelayananPasienService.logbookFixedPayDokter(idPegawai,
bulan);
for (Map<String, Object> pay : fixedPay) {
List<String> listNorecPelayananPasienPetugas = new ArrayList<>();
{
List<Map<String, Object>> detail = (List<Map<String, Object>>) pay.get("detail");
for (Map<String, Object> d : detail)
listNorecPelayananPasienPetugas.addAll((List<String>) d.get("norecs"));
}
LogbookDokter logbookDokter = new LogbookDokter();
logbookDokter.setKdProfile((short) 0);
logbookDokter.setStatusEnabled(true);
logbookDokter.setJenisLogbook("FIXED-PAY");
logbookDokter.setJenisRuangan(pay.get("jenisRuangan").toString());
logbookDokter.setKelompokPasien(pay.get("kelompokPasien").toString());
logbookDokter.setKeterangan(pay.get("keterangan").toString());
logbookDokter.setProduk(pay.get("namaProduk").toString());
logbookDokter.setProdukId(Integer.parseInt(pay.get("idProduk").toString()));
double hargaJasa = Double.parseDouble(pay.get("hargaJasa").toString());
logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa));
logbookDokter
.setTarif(BigDecimal.valueOf(Double.parseDouble(pay.get("hargaJual").toString())));
int jumlah = Double.valueOf(pay.get("jumlah").toString()).intValue();
logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah));
logbookDokter.setTotalTindakan(jumlah);
logbookDokter.setLogbookRemun(savedRemun);
LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter);
{
List<Map<String, Object>> detailLogbook = pelayananPasienService
.detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas);
List<DetailLogbookDokter> listDetailLogbookDokter = new ArrayList<>();
for (Map<String, Object> detail : detailLogbook) {
DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter();
detailLogbookDokter.setKdProfile((short) 0);
detailLogbookDokter.setStatusEnabled(true);
detailLogbookDokter.setDiskon(
BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString())));
detailLogbookDokter.setJumlahTindakan(
Double.valueOf(detail.get("jumlah").toString()).intValue());
detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString());
detailLogbookDokter.setKelas(detail.get("namaKelas").toString());
detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString());
detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString());
detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString());
detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString());
detailLogbookDokter
.setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString()));
detailLogbookDokter.setTarif(
BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString())));
detailLogbookDokter.setLogbookDokter(savedLogbookDokter);
listDetailLogbookDokter.add(detailLogbookDokter);
}
detailLogbookDokterDao.save(listDetailLogbookDokter);
}
}
}
{
List<Map<String, Object>> klaimMpp = pelayananPasienService.logbookKlaimMppDokter(idPegawai,
bulan);
for (Map<String, Object> mpp : klaimMpp) {
List<String> listNorecPelayananPasienPetugas = new ArrayList<>();
{
List<Map<String, Object>> detail = (List<Map<String, Object>>) mpp.get("detail");
for (Map<String, Object> d : detail)
listNorecPelayananPasienPetugas.addAll((List<String>) d.get("norecs"));
}
LogbookDokter logbookDokter = new LogbookDokter();
logbookDokter.setKdProfile((short) 0);
logbookDokter.setStatusEnabled(true);
logbookDokter.setJenisLogbook("KLAIM MPP");
logbookDokter.setJenisRuangan(mpp.get("jenisRuangan").toString());
logbookDokter.setKelompokPasien(mpp.get("kelompokPasien").toString());
logbookDokter.setKeterangan(mpp.get("keterangan").toString());
logbookDokter.setProduk(mpp.get("namaProduk").toString());
logbookDokter.setProdukId(Integer.parseInt(mpp.get("idProduk").toString()));
double hargaJasa = Double.parseDouble(mpp.get("hargaJasa").toString());
logbookDokter.setRemunTindakan(BigDecimal.valueOf(hargaJasa));
logbookDokter
.setTarif(BigDecimal.valueOf(Double.parseDouble(mpp.get("hargaJual").toString())));
int jumlah = Double.valueOf(mpp.get("jumlah").toString()).intValue();
logbookDokter.setTotalRemunTindakan(BigDecimal.valueOf(hargaJasa * jumlah));
logbookDokter.setTotalTindakan(jumlah);
logbookDokter.setLogbookRemun(savedRemun);
LogbookDokter savedLogbookDokter = logbookDokterDao.save(logbookDokter);
{
List<Map<String, Object>> detailLogbook = pelayananPasienService
.detailLogbookTarifDokter(idPegawai, listNorecPelayananPasienPetugas);
List<DetailLogbookDokter> listDetailLogbookDokter = new ArrayList<>();
for (Map<String, Object> detail : detailLogbook) {
DetailLogbookDokter detailLogbookDokter = new DetailLogbookDokter();
detailLogbookDokter.setKdProfile((short) 0);
detailLogbookDokter.setStatusEnabled(true);
detailLogbookDokter.setDiskon(
BigDecimal.valueOf(Double.parseDouble(detail.get("diskon").toString())));
detailLogbookDokter.setJumlahTindakan(
Double.valueOf(detail.get("jumlah").toString()).intValue());
detailLogbookDokter.setJenisPelaksana(detail.get("jenisPelaksana").toString());
detailLogbookDokter.setKelas(detail.get("namaKelas").toString());
detailLogbookDokter.setNamaPasien(detail.get("namaPasien").toString());
detailLogbookDokter.setNoRegistrasi(detail.get("noRegistrasi").toString());
detailLogbookDokter.setNoRekamMedis(detail.get("noCm").toString());
detailLogbookDokter.setRuangan(detail.get("namaRuangan").toString());
detailLogbookDokter
.setTanggalPelayanan(DateUtil.toDate(detail.get("tanggal").toString()));
detailLogbookDokter.setTarif(
BigDecimal.valueOf(Double.parseDouble(detail.get("hargaJual").toString())));
detailLogbookDokter.setLogbookDokter(savedLogbookDokter);
listDetailLogbookDokter.add(detailLogbookDokter);
}
detailLogbookDokterDao.save(listDetailLogbookDokter);
}
}
}
latch.countDown();
});
}
latch.await();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}

View File

@ -21,7 +21,7 @@ public class ScheduleTaskConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setPoolSize(75);
threadPoolTaskScheduler.setThreadNamePrefix("PelayananThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}