diff --git a/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/controller/MigrasiPasienController.java b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/controller/MigrasiPasienController.java index ac41d2d8..37295d05 100644 --- a/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/controller/MigrasiPasienController.java +++ b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/controller/MigrasiPasienController.java @@ -5,6 +5,7 @@ import com.jasamedika.medifirst2000.service.MigrasiPasienService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -12,6 +13,7 @@ import java.util.List; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; import static org.springframework.web.bind.annotation.RequestMethod.GET; +import static org.springframework.web.bind.annotation.RequestMethod.POST; /** * @author Salman @@ -27,13 +29,23 @@ public class MigrasiPasienController { @RequestMapping(value = "/init", method = GET, produces = APPLICATION_JSON_VALUE) public ResponseEntity initiateMigrasiPasien() { - migrasiPasienService.init(); + migrasiPasienService.newMigrate(); return new ResponseEntity<>(null, HttpStatus.OK); } @RequestMapping(value = "/extraction/transformation", method = GET, produces = APPLICATION_JSON_VALUE) - public ResponseEntity extractAndTransform() { - List dto = migrasiPasienService.extractAndTransform(); - return new ResponseEntity<>(dto, HttpStatus.OK); + public ResponseEntity> extractAndTransform() { + List result = migrasiPasienService.extractAndTransform(); + return new ResponseEntity<>(result, HttpStatus.OK); + } + + @RequestMapping(value = "/status", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE) + public ResponseEntity setStatus(@RequestBody List noRekamMedisList) { + try { + migrasiPasienService.setStatus(noRekamMedisList); + return new ResponseEntity<>(null, HttpStatus.ACCEPTED); + } catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } } } diff --git a/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/MigrasiPasienTask.java b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/MigrasiPasienTask.java new file mode 100644 index 00000000..6bb01160 --- /dev/null +++ b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/MigrasiPasienTask.java @@ -0,0 +1,69 @@ +package com.jasamedika.medifirst2000.task.schedule; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jasamedika.medifirst2000.service.MigrasiPasienService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import java.net.URI; +import java.net.URISyntaxException; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.jasamedika.medifirst2000.task.schedule.config.HeaderHandler.getHttpHeaders; +import static org.springframework.http.HttpMethod.GET; + +/** + * @author salmanoe + * @version 1.0.0 + * @since 11/10/2023 + */ +@Component +public class MigrasiPasienTask { + private static final Logger LOGGER = LoggerFactory.getLogger(MigrasiPasienTask.class); + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private MigrasiPasienService migrasiPasienService; + + @Value("${app.etl.migrasi.pasien}") + String baseUrl; + + @Scheduled(cron = "0 0 18 * * ?") + public void newMigrate() { + LOGGER.info("Task MigrasiPasienTask.newMigrate {}", LocalDateTime.now()); + + migrasiPasienService.newMigrate(); + } + + @Scheduled(cron = "0 0 0 * * ?") + public void setStatusTerkirim() throws URISyntaxException { + LOGGER.info("Task MigrasiPasienTask.setStatusTerkirim {}", LocalDateTime.now()); + + URI uri = new URI(baseUrl + "/no-rekam-medis"); + HttpEntity entity = new HttpEntity<>(null, getHttpHeaders()); + ResponseEntity exchange = restTemplate.exchange(uri, GET, entity, Object.class); + if (CommonUtil.isNotNullOrEmpty(exchange.getBody())) { + Map dto = objectMapper.convertValue(exchange.getBody(), HashMap.class); + if (CommonUtil.isNotNullOrEmpty(dto) && CommonUtil.isNotNullOrEmpty(dto.get("response"))) { + List noRekamMedisList = objectMapper.convertValue(dto.get("response"), List.class); + migrasiPasienService.setStatus(noRekamMedisList); + } + } + } +} diff --git a/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/config/HeaderHandler.java b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/config/HeaderHandler.java new file mode 100644 index 00000000..a26f9d8c --- /dev/null +++ b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/config/HeaderHandler.java @@ -0,0 +1,24 @@ +package com.jasamedika.medifirst2000.task.schedule.config; + +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Component; + +import java.util.Collections; + +import static org.springframework.http.MediaType.APPLICATION_JSON; + +/** + * @author Salman + * @version 1.0.0 + * @since 29/07/2024 + */ +@Component +public class HeaderHandler { + + public static HttpHeaders getHttpHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Collections.singletonList(APPLICATION_JSON)); + headers.setContentType(APPLICATION_JSON); + return headers; + } +} diff --git a/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/config/ScheduleTaskConfig.java b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/config/ScheduleTaskConfig.java new file mode 100644 index 00000000..d116429c --- /dev/null +++ b/jasamedika-bridging/src/main/java/com/jasamedika/medifirst2000/task/schedule/config/ScheduleTaskConfig.java @@ -0,0 +1,38 @@ +package com.jasamedika.medifirst2000.task.schedule.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.web.client.RestTemplate; + +/** + * @author Salman + * @since 12 Jul 2023 + */ +@Configuration +@EnableScheduling +@ComponentScan("com.jasamedika.medifirst2000.task") +public class ScheduleTaskConfig { + + @Bean + public TaskScheduler taskScheduler() { + ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); + threadPoolTaskScheduler.setPoolSize(50); + threadPoolTaskScheduler.setThreadNamePrefix("BridgingThreadPoolTaskScheduler"); + return threadPoolTaskScheduler; + } + + @Bean + public ObjectMapper objectMapper() { + return new ObjectMapper(); + } + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } +} diff --git a/jasamedika-bridging/src/main/webapp/WEB-INF/web.xml b/jasamedika-bridging/src/main/webapp/WEB-INF/web.xml index bf081aeb..f739001b 100644 --- a/jasamedika-bridging/src/main/webapp/WEB-INF/web.xml +++ b/jasamedika-bridging/src/main/webapp/WEB-INF/web.xml @@ -15,7 +15,7 @@ spring.profiles.default - bridging + localhost diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MigrasiPasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MigrasiPasienDao.java index 85b890d4..0c33a5df 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MigrasiPasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/MigrasiPasienDao.java @@ -15,6 +15,14 @@ import java.util.List; * @since 06/11/2023 */ public interface MigrasiPasienDao extends JpaRepository { - @Query("select mp.pasien from MigrasiPasien mp where mp.statusMigrasi in (:listStatusMigrasi)") + @Query("select ps from MigrasiPasien mp " + "inner join mp.pasien ps " + + "where mp.statusMigrasi in (:listStatusMigrasi) " + "and ps.noIdentitas is not null " + + "and ps.noIdentitas <> '' " + "and ps.noIdentitas <> '-'") List findPasienByStatusMigrasiIn(@Param("listStatusMigrasi") List statusMigrasiList); + + @Query(value = "select mp.* from migrasipasien_t mp " + "inner join pasien_m ps on mp.pasienfk = ps.id " + + "where mp.statusmigrasi in (:listStatusMigrasi) " + + "and ps.nocm in (:listNoRekamMedis)", nativeQuery = true) + List findByStatusMigrasiInAndPasienNoCmIn(@Param("listStatusMigrasi") List statusMigrasiList, + @Param("listNoRekamMedis") List noRekamMedisList); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java index aae79884..ecaeb990 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/PasienDao.java @@ -127,7 +127,8 @@ public interface PasienDao extends JpaRepository { @Query(value = "select ps.* from pasien_m ps " + "where ps.statusenabled is true " + "and ps.nocm ~ '^[0-9\\.]+$' " + "and length(ps.nocm) = 8 " + "and cast(ps.nocm as integer) < 10000000 " - + "and ps.id not in (select mp.pasienfk from migrasipasien_t mp) " - + "order by cast(ps.nocm as integer) desc " + "limit 100", nativeQuery = true) + + "and ps.id not in (select mp.pasienfk from migrasipasien_t mp) " + "and ps.noidentitas is not null " + + "and ps.noidentitas <> '' " + "and ps.noidentitas <> '-' " + "order by cast(ps.nocm as integer) desc " + + "limit 100", nativeQuery = true) List find100LatestByNotMigrateYet(); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MigrasiPasienService.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MigrasiPasienService.java index 22071448..6678251b 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MigrasiPasienService.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/MigrasiPasienService.java @@ -10,7 +10,9 @@ import java.util.List; * @since 06/11/2023 */ public interface MigrasiPasienService { - void init(); + void newMigrate(); List extractAndTransform(); + + void setStatus(List noRekamMedisList); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MigrasiPasienServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MigrasiPasienServiceImpl.java index b5ccfb53..87a5819d 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MigrasiPasienServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MigrasiPasienServiceImpl.java @@ -12,7 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.ZoneId; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -23,8 +23,7 @@ import static com.jasamedika.medifirst2000.etl.pasien.constant.JenisAlamat.IDENT import static com.jasamedika.medifirst2000.etl.pasien.constant.JenisIdentitas.KTP; import static com.jasamedika.medifirst2000.etl.pasien.constant.Pekerjaan.*; import static com.jasamedika.medifirst2000.etl.pasien.constant.Pendidikan.*; -import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.BELUM_KIRIM; -import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.PEMBAHARUAN; +import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.*; import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusPerkawinan.*; /** @@ -54,7 +53,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService { private AsuransiPasienDao asuransiPasienDao; @Override - public void init() { + public void newMigrate() { List models = new ArrayList<>(); List oneHundredPasien = pasienDao.find100LatestByNotMigrateYet(); List oneHundredIdPasien = oneHundredPasien.stream().map(Pasien::getId).collect(Collectors.toList()); @@ -72,133 +71,149 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService { @Override public List extractAndTransform() { + List dtoList = new ArrayList<>(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); List statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN)); List listPasien = migrasiPasienDao.findPasienByStatusMigrasiIn(statusMigrasiList); - List listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList()); - List listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList()); - List> listCaraMeninggal = pasienDaftarDao.findPenyebabKematianByPasienIdIn(listIdPasien); - List listAlamat = alamatDao.findByPasienIdIn(listIdPasien); - List listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien); - List listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien); - List listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien); - List dtoList = new ArrayList<>(); - listPasien.forEach(pasien -> { - PasienDto.PasienDtoBuilder dtoBuilder = PasienDto.builder(); - dtoBuilder.noRekamMedis(pasien.getNoCm()); - dtoBuilder.namaLengkap(pasien.getNamaPasien()); - dtoBuilder.namaPanggilan(pasien.getNamaDepan()); - dtoBuilder.tempatLahir(pasien.getTempatLahir()); - if (CommonUtil.isNotNullOrEmpty(pasien.getTglLahir())) - dtoBuilder.tanggalLahir( - pasien.getTglLahir().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - dtoBuilder.surel(pasien.getEmail()); - if (CommonUtil.isNotNullOrEmpty(pasien.getTitlePasienId())) - dtoBuilder.sapaan(SapaanDto.builder().id(pasien.getTitlePasienId().longValue()).build()); - dtoBuilder.identitas(new HashSet<>(Collections.singletonList( - IdentitasDto.builder().jenisIdentitas(JenisIdentitasDto.builder().id(KTP.id()).build()) - .noIdentitas(pasien.getNoIdentitas()).build()))); - if (CommonUtil.isNotNullOrEmpty(pasien.getJenisKelaminId())) - dtoBuilder.jenisKelamin(JenisKelaminDto.builder().id(pasien.getJenisKelaminId().longValue()).build()); - if (CommonUtil.isNotNullOrEmpty(pasien.getGolonganDarahId())) - dtoBuilder - .golonganDarah(GolonganDarahDto.builder().id(pasien.getGolonganDarahId().longValue()).build()); - listCaraMeninggal.stream().filter(c -> pasien.getId().equals(c.get("idPasien"))).findFirst() - .ifPresent(c -> { - if (CommonUtil.isNotNullOrEmpty(c.get("idPenyebabKematian"))) { - if (Master.CaraMeninggal.BAWAH_DAN_48_JAM.equals(c.get("idPenyebabKematian"))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_48_JAM.id()).build()); - if (Master.CaraMeninggal.ATAS_48_JAM.equals(c.get("idPenyebabKematian"))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_48_JAM.id()).build()); - if (Master.CaraMeninggal.BAWAH_DAN_8_JAM.equals(c.get("idPenyebabKematian"))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_8_JAM.id()).build()); - if (Master.CaraMeninggal.ATAS_8_JAM.equals(c.get("idPenyebabKematian"))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_8_JAM.id()).build()); - if (Master.CaraMeninggal.DOA.equals(c.get("idPenyebabKematian"))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(DOA.id()).build()); - if (Master.CaraMeninggal.BLUECODE.equals(c.get("idPenyebabKematian"))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BLUECODE.id()).build()); - if (Arrays.asList(Master.CaraMeninggal.LAHIR) - .contains(Integer.parseInt(c.get("idPenyebabKematian").toString()))) - dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(LAHIR.id()).build()); - } - }); - if (CommonUtil.isNotNullOrEmpty(pasien.getKebangsaanId())) - dtoBuilder - .kewarganegaraan(KewarganegaraanDto.builder().id(pasien.getKebangsaanId().longValue()).build()); - if (CommonUtil.isNotNullOrEmpty(pasien.getNegaraId())) - dtoBuilder.negara(NegaraDto.builder().id(pasien.getNegaraId().longValue()).build()); - if (CommonUtil.isNotNullOrEmpty(pasien.getAgamaId())) - dtoBuilder.agama(AgamaDto.builder().id(pasien.getAgamaId().longValue()).build()); - { - if (Master.Pendidikan.TIDAK_SEKOLAH.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(TIDAK_SEKOLAH.id()).build()); - if (Master.Pendidikan.SD.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(SD.id()).build()); - if (Master.Pendidikan.SLTP_SEDERAJAT.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTP_SEDERAJAT.id()).build()); - if (Master.Pendidikan.SLTA_SEDERAJAT.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTA_SEDERAJAT.id()).build()); - if (Arrays.asList(Master.Pendidikan.D1_SAMPAI_D3_SEDERAJAT).contains(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(D1_SAMPAI_D3_SEDERAJAT.id()).build()); - if (Master.Pendidikan.D4.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(D4.id()).build()); - if (Master.Pendidikan.S1.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(S1.id()).build()); - if (Master.Pendidikan.S2.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(S2.id()).build()); - if (Master.Pendidikan.S3.equals(pasien.getPendidikanId())) - dtoBuilder.pendidikan(PendidikanDto.builder().id(S3.id()).build()); - } - { - List alamatPasien = listAlamat.stream() - .filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList()); - dtoBuilder.alamat(setAlamat(alamatPasien)); - } - { - Set gawaiDto = new HashSet<>(); - if (NumberUtils.isNumber(pasien.getNoTelepon()) && pasien.getNoTelepon().charAt(0) == '0') - gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + pasien.getNoTelepon())).build()); - if (NumberUtils.isNumber(pasien.getNoHp()) && pasien.getNoHp().charAt(0) == '0') - gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + pasien.getNoHp())).build()); - dtoBuilder.gawai(gawaiDto); - } - { - if (Master.Pekerjaan.TIDAK_BEKERJA.equals(pasien.getPekerjaanId())) - dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TIDAK_BEKERJA.id()).build()); - if (Master.Pekerjaan.PNS.equals(pasien.getPekerjaanId())) - dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PNS.id()).build()); - if (Master.Pekerjaan.TNI_ATAU_POLRI.equals(pasien.getPekerjaanId())) - dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TNI_ATAU_POLRI.id()).build()); - if (Master.Pekerjaan.BUMN.equals(pasien.getPekerjaanId())) - dtoBuilder.pekerjaan(PekerjaanDto.builder().id(BUMN.id()).build()); - if (Arrays.asList(Master.Pekerjaan.PEGAWAI_SWASTA_ATAU_WIRAUSAHA).contains(pasien.getPekerjaanId())) - dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PEGAWAI_SWASTA_ATAU_WIRAUSAHA.id()).build()); - } - { - if (Master.StatusPerkawinan.BELUM_KAWIN.equals(pasien.getStatusPerkawinanId())) - dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(BELUM_KAWIN.id()).build()); - if (Master.StatusPerkawinan.KAWIN.equals(pasien.getStatusPerkawinanId())) - dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(KAWIN.id()).build()); - if (Master.StatusPerkawinan.CERAI_HIDUP.equals(pasien.getStatusPerkawinanId())) - dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_HIDUP.id()).build()); - if (Master.StatusPerkawinan.CERAI_MATI.equals(pasien.getStatusPerkawinanId())) - dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_MATI.id()).build()); - } - { - dtoBuilder.berkas(setBerkas(listDokumenVedika)); - } - { - List pasienAnak = listPasienAnak.stream() - .filter(anak -> pasien.getNoCm().equals(anak.getReportDisplay())).collect(Collectors.toList()); - dtoBuilder.keluarga(setAnak(pasienAnak)); - } - { - List asuransiPasien = listAsuransi.stream() - .filter(asuransi -> pasien.getId().equals(asuransi.getNoCmId())).collect(Collectors.toList()); - dtoBuilder.jaminan(setJaminan(asuransiPasien)); - } - dtoList.add(dtoBuilder.build()); - }); + if (CommonUtil.isNotNullOrEmpty(listPasien)) { + List listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList()); + List listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList()); + List> listCaraMeninggal = pasienDaftarDao + .findPenyebabKematianByPasienIdIn(listIdPasien); + List listAlamat = alamatDao.findByPasienIdIn(listIdPasien); + List listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien); + List listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien); + List listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien); + listPasien.forEach(pasien -> { + PasienDto.PasienDtoBuilder dtoBuilder = PasienDto.builder(); + dtoBuilder.status("AKTIF"); + dtoBuilder.noRekamMedis(Long.parseLong(pasien.getNoCm())); + dtoBuilder.namaLengkap(pasien.getNamaPasien()); + dtoBuilder.namaPanggilan(CommonUtil.isNotNullOrEmpty(pasien.getNamaDepan()) ? pasien.getNamaDepan() + : pasien.getNamaPasien().split(" ")[0]); + dtoBuilder.isKelahiranRS(pasien.getNoCm().equals(pasien.getReportDisplay())); + dtoBuilder.tempatLahir(pasien.getTempatLahir()); + dtoBuilder.caraRegistrasi("INTERNAL"); + if (CommonUtil.isNotNullOrEmpty(pasien.getTglLahir())) + dtoBuilder.tanggalLahir(dateFormat.format(pasien.getTglLahir())); + dtoBuilder.surel(pasien.getEmail()); + if (CommonUtil.isNotNullOrEmpty(pasien.getTitlePasienId())) + dtoBuilder.sapaan(SapaanDto.builder().id(pasien.getTitlePasienId().longValue()).build()); + dtoBuilder.identitas(new HashSet<>(Collections.singletonList( + IdentitasDto.builder().jenisIdentitas(JenisIdentitasDto.builder().id(KTP.id()).build()) + .noIdentitas(pasien.getNoIdentitas()).build()))); + if (CommonUtil.isNotNullOrEmpty(pasien.getJenisKelaminId())) + dtoBuilder + .jenisKelamin(JenisKelaminDto.builder().id(pasien.getJenisKelaminId().longValue()).build()); + if (CommonUtil.isNotNullOrEmpty(pasien.getGolonganDarahId()) && pasien.getGolonganDarahId() != 0) + dtoBuilder.golonganDarah( + GolonganDarahDto.builder().id(pasien.getGolonganDarahId().longValue()).build()); + listCaraMeninggal.stream().filter(c -> pasien.getId().equals(c.get("idPasien"))).findFirst() + .ifPresent(c -> { + if (CommonUtil.isNotNullOrEmpty(c.get("idPenyebabKematian"))) { + if (Master.CaraMeninggal.BAWAH_DAN_48_JAM.equals(c.get("idPenyebabKematian"))) + dtoBuilder.caraMeninggal( + CaraMeninggalDto.builder().id(BAWAH_DAN_48_JAM.id()).build()); + if (Master.CaraMeninggal.ATAS_48_JAM.equals(c.get("idPenyebabKematian"))) + dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_48_JAM.id()).build()); + if (Master.CaraMeninggal.BAWAH_DAN_8_JAM.equals(c.get("idPenyebabKematian"))) + dtoBuilder + .caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_8_JAM.id()).build()); + if (Master.CaraMeninggal.ATAS_8_JAM.equals(c.get("idPenyebabKematian"))) + dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_8_JAM.id()).build()); + if (Master.CaraMeninggal.DOA.equals(c.get("idPenyebabKematian"))) + dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(DOA.id()).build()); + if (Master.CaraMeninggal.BLUECODE.equals(c.get("idPenyebabKematian"))) + dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BLUECODE.id()).build()); + if (Arrays.asList(Master.CaraMeninggal.LAHIR) + .contains(Integer.parseInt(c.get("idPenyebabKematian").toString()))) + dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(LAHIR.id()).build()); + } + }); + if (CommonUtil.isNotNullOrEmpty(pasien.getKebangsaanId())) + dtoBuilder.kewarganegaraan( + KewarganegaraanDto.builder().id(pasien.getKebangsaanId().longValue()).build()); + if (CommonUtil.isNotNullOrEmpty(pasien.getNegaraId())) + dtoBuilder.negara(NegaraDto.builder().id(pasien.getNegaraId().longValue()).build()); + if (CommonUtil.isNotNullOrEmpty(pasien.getAgamaId())) + dtoBuilder.agama(AgamaDto.builder().id(pasien.getAgamaId().longValue()).build()); + { + if (Master.Pendidikan.TIDAK_SEKOLAH.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(TIDAK_SEKOLAH.id()).build()); + if (Master.Pendidikan.SD.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(SD.id()).build()); + if (Master.Pendidikan.SLTP_SEDERAJAT.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTP_SEDERAJAT.id()).build()); + if (Master.Pendidikan.SLTA_SEDERAJAT.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTA_SEDERAJAT.id()).build()); + if (Arrays.asList(Master.Pendidikan.D1_SAMPAI_D3_SEDERAJAT).contains(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(D1_SAMPAI_D3_SEDERAJAT.id()).build()); + if (Master.Pendidikan.D4.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(D4.id()).build()); + if (Master.Pendidikan.S1.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(S1.id()).build()); + if (Master.Pendidikan.S2.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(S2.id()).build()); + if (Master.Pendidikan.S3.equals(pasien.getPendidikanId())) + dtoBuilder.pendidikan(PendidikanDto.builder().id(S3.id()).build()); + } + { + List alamatPasien = listAlamat.stream() + .filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList()); + dtoBuilder.alamat(setAlamat(alamatPasien)); + } + { + Set gawaiDto = new HashSet<>(); + if (NumberUtils.isNumber(pasien.getNoTelepon()) && pasien.getNoTelepon().charAt(0) == '0') + gawaiDto.add( + GawaiDto.builder().noGawai(Long.parseLong("62" + numbersOnly(pasien.getNoTelepon()))) + .jenisGawai(JenisGawaiDto.builder().id(1L).build()).build()); + if (NumberUtils.isNumber(pasien.getNoHp()) && pasien.getNoHp().charAt(0) == '0') + gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + numbersOnly(pasien.getNoHp()))) + .jenisGawai(JenisGawaiDto.builder().id(2L).build()).build()); + dtoBuilder.gawai(gawaiDto); + } + { + if (Master.Pekerjaan.TIDAK_BEKERJA.equals(pasien.getPekerjaanId())) + dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TIDAK_BEKERJA.id()).build()); + if (Master.Pekerjaan.PNS.equals(pasien.getPekerjaanId())) + dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PNS.id()).build()); + if (Master.Pekerjaan.TNI_ATAU_POLRI.equals(pasien.getPekerjaanId())) + dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TNI_ATAU_POLRI.id()).build()); + if (Master.Pekerjaan.BUMN.equals(pasien.getPekerjaanId())) + dtoBuilder.pekerjaan(PekerjaanDto.builder().id(BUMN.id()).build()); + if (Arrays.asList(Master.Pekerjaan.PEGAWAI_SWASTA_ATAU_WIRAUSAHA).contains(pasien.getPekerjaanId())) + dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PEGAWAI_SWASTA_ATAU_WIRAUSAHA.id()).build()); + } + { + if (Master.StatusPerkawinan.KAWIN.equals(pasien.getStatusPerkawinanId())) { + dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(KAWIN.id()).build()); + } else if (Master.StatusPerkawinan.CERAI_HIDUP.equals(pasien.getStatusPerkawinanId())) { + dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_HIDUP.id()).build()); + } else if (Master.StatusPerkawinan.CERAI_MATI.equals(pasien.getStatusPerkawinanId())) { + dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_MATI.id()).build()); + } else { + dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(BELUM_KAWIN.id()).build()); + } + } + { + dtoBuilder.berkas(setBerkas(listDokumenVedika)); + } + { + List pasienAnak = listPasienAnak.stream() + .filter(anak -> pasien.getNoCm().equals(anak.getReportDisplay())) + .collect(Collectors.toList()); + dtoBuilder.keluarga(setAnak(pasienAnak)); + } + { + List asuransiPasien = listAsuransi.stream() + .filter(asuransi -> pasien.getId().equals(asuransi.getNoCmId())) + .collect(Collectors.toList()); + dtoBuilder.jaminan(setJaminan(asuransiPasien)); + } + dtoList.add(dtoBuilder.build()); + }); + } return dtoList; } @@ -218,7 +233,8 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService { { if (Master.JenisAlamat.IDENTITAS.equals(alamat.getJenisAlamatId())) dtoBuilder.jenisAlamat(JenisAlamatDto.builder().id(IDENTITAS.id()).build()); - if (Master.JenisAlamat.DOMISILI.equals(alamat.getJenisAlamatId())) + if (Master.JenisAlamat.DOMISILI.equals(alamat.getJenisAlamatId()) + || Master.JenisAlamat.RUMAH.equals(alamat.getJenisAlamatId())) dtoBuilder.jenisAlamat(JenisAlamatDto.builder().id(DOMISILI.id()).build()); } if (CommonUtil.isNotNullOrEmpty(alamat.getDesaKelurahan()) @@ -237,7 +253,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService { listDokumenVedika.forEach(dokumenVedika -> { BerkasDto.BerkasDtoBuilder dtoBuilder = BerkasDto.builder(); dtoBuilder.judulBerkas(dokumenVedika.getNamaFile()); - dtoBuilder.lokasiBerkas(dokumenVedika.getUrl()); + dtoBuilder.lss(dokumenVedika.getUrl()); if (CommonUtil.isNotNullOrEmpty(dokumenVedika.getJenisBerkasId())) dtoBuilder .jenisBerkas(JenisBerkasDto.builder().id(dokumenVedika.getJenisBerkasId().longValue()).build()); @@ -254,7 +270,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService { dtoBuilder.namaPanggilan(anak.getNamaDepan()); dtoBuilder.surel(anak.getEmail()); if (NumberUtils.isNumber(anak.getNoHp()) && anak.getNoHp().charAt(0) == '0') - dtoBuilder.noGawai(Long.parseLong("62" + anak.getNoHp())); + dtoBuilder.noGawai(Long.parseLong("62" + numbersOnly(anak.getNoHp()))); dtoBuilder.hubunganKeluarga(HubunganKeluargaDto.builder().id(ANAK.id()).build()); dtoList.add(dtoBuilder.build()); }); @@ -265,11 +281,27 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService { Set dtoList = new HashSet<>(); listAsuransiPasien.forEach(asuransi -> { JaminanDto.JaminanDtoBuilder dtoBuilder = JaminanDto.builder(); - dtoBuilder.nomorKartu(asuransi.getNoAsuransi()); - if (CommonUtil.isNotNullOrEmpty(asuransi.getRekanan())) - dtoBuilder.asuransi(AsuransiDto.builder().asuransi(asuransi.getRekanan().getNamaRekanan()).build()); - dtoList.add(dtoBuilder.build()); + if (CommonUtil.isNotNullOrEmpty(asuransi.getNoAsuransi()) && !"-".equals(asuransi.getNoAsuransi())) { + dtoBuilder.nomorKartu(asuransi.getNoAsuransi()); + if (CommonUtil.isNotNullOrEmpty(asuransi.getRekanan())) + dtoBuilder.asuransi(AsuransiDto.builder().asuransi(asuransi.getRekanan().getNamaRekanan()).build()); + dtoList.add(dtoBuilder.build()); + } }); return dtoList; } + + private String numbersOnly(String str) { + return str.replaceAll("\\D", ""); + } + + @Override + public void setStatus(List noRekamMedisList) { + List statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN)).stream() + .map(Enum::toString).collect(Collectors.toList()); + List listMigrasiPasien = migrasiPasienDao.findByStatusMigrasiInAndPasienNoCmIn(statusMigrasiList, + noRekamMedisList); + listMigrasiPasien.forEach(migrasiPasien -> migrasiPasien.setStatusMigrasi(TERKIRIM)); + migrasiPasienDao.save(listMigrasiPasien); + } } diff --git a/jasamedika-config/src/main/resources/jdbc.bridging.properties b/jasamedika-config/src/main/resources/jdbc.bridging.properties index af4e8839..2adbe90e 100644 --- a/jasamedika-config/src/main/resources/jdbc.bridging.properties +++ b/jasamedika-config/src/main/resources/jdbc.bridging.properties @@ -22,4 +22,6 @@ systemDirectory=/mnt/files/ reportDirectory=/home/svradmin/app-back/uploadfile/ urlServiceSarPras=https://smart.rsabhk.co.id:2222/jasamedika-web/ -urlService=https://smart.rsabhk.co.id:2222/simrs_harkit/service/transaksi/ \ No newline at end of file +urlService=https://smart.rsabhk.co.id:2222/simrs_harkit/service/transaksi/ + +app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi diff --git a/jasamedika-config/src/main/resources/jdbc.development.properties b/jasamedika-config/src/main/resources/jdbc.development.properties index 14eb8e0d..621c0e7f 100644 --- a/jasamedika-config/src/main/resources/jdbc.development.properties +++ b/jasamedika-config/src/main/resources/jdbc.development.properties @@ -22,4 +22,6 @@ systemDirectory=/mnt/files/ reportDirectory=/home/svradmin/app-back/uploadfile/ urlServiceSarPras=http://192.168.12.3:8080/jasamedika-web/ -urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/ \ No newline at end of file +urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/ + +app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi diff --git a/jasamedika-config/src/main/resources/jdbc.localhost.properties b/jasamedika-config/src/main/resources/jdbc.localhost.properties index e89e596c..7fc8156e 100644 --- a/jasamedika-config/src/main/resources/jdbc.localhost.properties +++ b/jasamedika-config/src/main/resources/jdbc.localhost.properties @@ -1,7 +1,7 @@ jdbc.driver = org.postgresql.Driver hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect -hibernate.hbm2ddl = update +hibernate.hbm2ddl = none hibernate.format_sql = true hibernate.show_sql = true @@ -22,4 +22,6 @@ systemDirectory=/mnt/files/ reportDirectory=/home/svradmin/app-back/uploadfile/ urlServiceSarPras=http://192.168.12.3:8080/jasamedika-web/ -urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/ \ No newline at end of file +urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/ + +app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/BerkasDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/BerkasDto.java index 5d086823..50142864 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/BerkasDto.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/BerkasDto.java @@ -17,5 +17,5 @@ public class BerkasDto { private UUID id; private JenisBerkasDto jenisBerkas; private String judulBerkas; - private String lokasiBerkas; + private String lss; } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/GawaiDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/GawaiDto.java index 0a713ead..9e8b3d24 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/GawaiDto.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/GawaiDto.java @@ -19,4 +19,5 @@ import java.util.UUID; public class GawaiDto { private UUID id; private Long noGawai; + private JenisGawaiDto jenisGawai; } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/JenisGawaiDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/JenisGawaiDto.java new file mode 100644 index 00000000..3ca48c00 --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/JenisGawaiDto.java @@ -0,0 +1,22 @@ +package com.jasamedika.medifirst2000.etl.pasien.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @author Salman + * @version 1.0.0 + * @since 27/07/2024 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class JenisGawaiDto { + private Long id; + private String jenisGawai; +} diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/PasienDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/PasienDto.java index 639e4c07..10279b4c 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/PasienDto.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/etl/pasien/dto/PasienDto.java @@ -1,8 +1,10 @@ package com.jasamedika.medifirst2000.etl.pasien.dto; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; -import java.time.LocalDateTime; import java.util.Set; import java.util.UUID; @@ -17,15 +19,17 @@ import java.util.UUID; @NoArgsConstructor public class PasienDto { private UUID id; - private String noRekamMedis; + private String status; + private Long noRekamMedis; private String gelarDepan; private String namaLengkap; private String namaPanggilan; private String gelarBelakang; + private Boolean isKelahiranRS; private SapaanDto sapaan; private Set identitas; private String tempatLahir; - private LocalDateTime tanggalLahir; + private String tanggalLahir; private JenisKelaminDto jenisKelamin; private GolonganDarahDto golonganDarah; private GolonganResusDto golonganResus; @@ -46,4 +50,5 @@ public class PasienDto { private Set berkas; private Set keluarga; private Set jaminan; + private String caraRegistrasi; }