Merge branch 'dev/etl/pasien' into prod/base
This commit is contained in:
commit
a4db6562b9
@ -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<Object> initiateMigrasiPasien() {
|
||||
migrasiPasienService.init();
|
||||
migrasiPasienService.newMigrate();
|
||||
return new ResponseEntity<>(null, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/extraction/transformation", method = GET, produces = APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<Object> extractAndTransform() {
|
||||
List<PasienDto> dto = migrasiPasienService.extractAndTransform();
|
||||
return new ResponseEntity<>(dto, HttpStatus.OK);
|
||||
public ResponseEntity<List<PasienDto>> extractAndTransform() {
|
||||
List<PasienDto> result = migrasiPasienService.extractAndTransform();
|
||||
return new ResponseEntity<>(result, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/status", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
|
||||
public ResponseEntity<Object> setStatus(@RequestBody List<String> noRekamMedisList) {
|
||||
try {
|
||||
migrasiPasienService.setStatus(noRekamMedisList);
|
||||
return new ResponseEntity<>(null, HttpStatus.ACCEPTED);
|
||||
} catch (Exception e) {
|
||||
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<Object> entity = new HttpEntity<>(null, getHttpHeaders());
|
||||
ResponseEntity<Object> exchange = restTemplate.exchange(uri, GET, entity, Object.class);
|
||||
if (CommonUtil.isNotNullOrEmpty(exchange.getBody())) {
|
||||
Map<String, Object> dto = objectMapper.convertValue(exchange.getBody(), HashMap.class);
|
||||
if (CommonUtil.isNotNullOrEmpty(dto) && CommonUtil.isNotNullOrEmpty(dto.get("response"))) {
|
||||
List<String> noRekamMedisList = objectMapper.convertValue(dto.get("response"), List.class);
|
||||
migrasiPasienService.setStatus(noRekamMedisList);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -15,7 +15,7 @@
|
||||
</context-param>
|
||||
<context-param>
|
||||
<param-name>spring.profiles.default</param-name>
|
||||
<param-value>bridging</param-value>
|
||||
<param-value>localhost</param-value>
|
||||
</context-param>
|
||||
|
||||
<listener>
|
||||
|
||||
@ -15,6 +15,14 @@ import java.util.List;
|
||||
* @since 06/11/2023
|
||||
*/
|
||||
public interface MigrasiPasienDao extends JpaRepository<MigrasiPasien, String> {
|
||||
@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<Pasien> findPasienByStatusMigrasiIn(@Param("listStatusMigrasi") List<StatusMigrasi> 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<MigrasiPasien> findByStatusMigrasiInAndPasienNoCmIn(@Param("listStatusMigrasi") List<String> statusMigrasiList,
|
||||
@Param("listNoRekamMedis") List<String> noRekamMedisList);
|
||||
}
|
||||
|
||||
@ -127,7 +127,8 @@ public interface PasienDao extends JpaRepository<Pasien, Integer> {
|
||||
|
||||
@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<Pasien> find100LatestByNotMigrateYet();
|
||||
}
|
||||
|
||||
@ -10,7 +10,9 @@ import java.util.List;
|
||||
* @since 06/11/2023
|
||||
*/
|
||||
public interface MigrasiPasienService {
|
||||
void init();
|
||||
void newMigrate();
|
||||
|
||||
List<PasienDto> extractAndTransform();
|
||||
|
||||
void setStatus(List<String> noRekamMedisList);
|
||||
}
|
||||
|
||||
@ -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<MigrasiPasien> models = new ArrayList<>();
|
||||
List<Pasien> oneHundredPasien = pasienDao.find100LatestByNotMigrateYet();
|
||||
List<Integer> oneHundredIdPasien = oneHundredPasien.stream().map(Pasien::getId).collect(Collectors.toList());
|
||||
@ -72,133 +71,149 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
|
||||
|
||||
@Override
|
||||
public List<PasienDto> extractAndTransform() {
|
||||
List<PasienDto> dtoList = new ArrayList<>();
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
|
||||
List<StatusMigrasi> statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN));
|
||||
List<Pasien> listPasien = migrasiPasienDao.findPasienByStatusMigrasiIn(statusMigrasiList);
|
||||
List<Integer> listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList());
|
||||
List<String> listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList());
|
||||
List<Map<String, Object>> listCaraMeninggal = pasienDaftarDao.findPenyebabKematianByPasienIdIn(listIdPasien);
|
||||
List<Alamat> listAlamat = alamatDao.findByPasienIdIn(listIdPasien);
|
||||
List<DokumenVedika> listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien);
|
||||
List<Pasien> listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien);
|
||||
List<AsuransiPasien> listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien);
|
||||
List<PasienDto> 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<Alamat> alamatPasien = listAlamat.stream()
|
||||
.filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList());
|
||||
dtoBuilder.alamat(setAlamat(alamatPasien));
|
||||
}
|
||||
{
|
||||
Set<GawaiDto> 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<Pasien> pasienAnak = listPasienAnak.stream()
|
||||
.filter(anak -> pasien.getNoCm().equals(anak.getReportDisplay())).collect(Collectors.toList());
|
||||
dtoBuilder.keluarga(setAnak(pasienAnak));
|
||||
}
|
||||
{
|
||||
List<AsuransiPasien> 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<Integer> listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList());
|
||||
List<String> listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList());
|
||||
List<Map<String, Object>> listCaraMeninggal = pasienDaftarDao
|
||||
.findPenyebabKematianByPasienIdIn(listIdPasien);
|
||||
List<Alamat> listAlamat = alamatDao.findByPasienIdIn(listIdPasien);
|
||||
List<DokumenVedika> listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien);
|
||||
List<Pasien> listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien);
|
||||
List<AsuransiPasien> 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<Alamat> alamatPasien = listAlamat.stream()
|
||||
.filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList());
|
||||
dtoBuilder.alamat(setAlamat(alamatPasien));
|
||||
}
|
||||
{
|
||||
Set<GawaiDto> 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<Pasien> pasienAnak = listPasienAnak.stream()
|
||||
.filter(anak -> pasien.getNoCm().equals(anak.getReportDisplay()))
|
||||
.collect(Collectors.toList());
|
||||
dtoBuilder.keluarga(setAnak(pasienAnak));
|
||||
}
|
||||
{
|
||||
List<AsuransiPasien> 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<JaminanDto> 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<String> noRekamMedisList) {
|
||||
List<String> statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN)).stream()
|
||||
.map(Enum::toString).collect(Collectors.toList());
|
||||
List<MigrasiPasien> listMigrasiPasien = migrasiPasienDao.findByStatusMigrasiInAndPasienNoCmIn(statusMigrasiList,
|
||||
noRekamMedisList);
|
||||
listMigrasiPasien.forEach(migrasiPasien -> migrasiPasien.setStatusMigrasi(TERKIRIM));
|
||||
migrasiPasienDao.save(listMigrasiPasien);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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/
|
||||
urlService=https://smart.rsabhk.co.id:2222/simrs_harkit/service/transaksi/
|
||||
|
||||
app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi
|
||||
|
||||
@ -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/
|
||||
urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/
|
||||
|
||||
app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi
|
||||
|
||||
@ -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/
|
||||
urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/
|
||||
|
||||
app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi
|
||||
|
||||
@ -17,5 +17,5 @@ public class BerkasDto {
|
||||
private UUID id;
|
||||
private JenisBerkasDto jenisBerkas;
|
||||
private String judulBerkas;
|
||||
private String lokasiBerkas;
|
||||
private String lss;
|
||||
}
|
||||
|
||||
@ -19,4 +19,5 @@ import java.util.UUID;
|
||||
public class GawaiDto {
|
||||
private UUID id;
|
||||
private Long noGawai;
|
||||
private JenisGawaiDto jenisGawai;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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<IdentitasDto> 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<BerkasDto> berkas;
|
||||
private Set<KeluargaDto> keluarga;
|
||||
private Set<JaminanDto> jaminan;
|
||||
private String caraRegistrasi;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user