Create service migrasi pasien

Pembuatan fitur pencatatan status migrasi data pasien
This commit is contained in:
Salman Manoe 2023-11-06 15:44:25 +07:00
parent 6c4aaf892e
commit 0d80bf59a9
11 changed files with 179 additions and 17 deletions

View File

@ -0,0 +1,30 @@
package com.jasamedika.medifirst2000.controller;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.jasamedika.medifirst2000.service.MigrasiPasienService;
/**
* @author Salman
* @version 1.0.0
* @since 06/11/2023
*/
@RestController
@RequestMapping("/migrasi/pasien")
public class MigrasiPasienController {
@Autowired
private MigrasiPasienService migrasiPasienService;
@RequestMapping(value = "/init", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Object> initiateMigrasiPasien() {
migrasiPasienService.init();
return new ResponseEntity<>(null, HttpStatus.OK);
}
}

View File

@ -15,7 +15,7 @@
</context-param>
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>bridging</param-value>
<param-value>development</param-value>
</context-param>
<listener>

View File

@ -0,0 +1,12 @@
package com.jasamedika.medifirst2000.dao;
import com.jasamedika.medifirst2000.entities.MigrasiPasien;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author Salman
* @version 1.0.0
* @since 06/11/2023
*/
public interface MigrasiPasienDao extends JpaRepository<MigrasiPasien, String> {
}

View File

@ -2,7 +2,6 @@ package com.jasamedika.medifirst2000.dao;
import com.jasamedika.medifirst2000.entities.Alamat;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
@ -122,5 +121,9 @@ public interface PasienDao extends JpaRepository<Pasien, Integer> {
+ "and ibu.id in (:listIdIbu)")
List<Map<String, Object>> findIdByNoCmOfIbu(@Param("listIdIbu") Set<Integer> listIdIbu);
List<Pasien> findByStatusMigrasi(StatusMigrasi statusMigrasi);
@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)
List<Pasien> find100LatestByNotMigrateYet();
}

View File

@ -0,0 +1,10 @@
package com.jasamedika.medifirst2000.service;
/**
* @author Salman
* @version 1.0.0
* @since 06/11/2023
*/
public interface MigrasiPasienService {
void init();
}

View File

@ -0,0 +1,46 @@
package com.jasamedika.medifirst2000.service.impl;
import com.jasamedika.medifirst2000.dao.MigrasiPasienDao;
import com.jasamedika.medifirst2000.dao.PasienDao;
import com.jasamedika.medifirst2000.entities.MigrasiPasien;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.service.MigrasiPasienService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Salman
* @version 1.0.0
* @since 06/11/2023
*/
@Service
@Transactional
public class MigrasiPasienServiceImpl implements MigrasiPasienService {
@Autowired
private MigrasiPasienDao migrasiPasienDao;
@Autowired
private PasienDao pasienDao;
@Override
public void init() {
List<MigrasiPasien> models = new ArrayList<>();
List<Pasien> oneHundredPasien = pasienDao.find100LatestByNotMigrateYet();
List<Integer> oneHundredIdPasien = oneHundredPasien.stream().map(Pasien::getId).collect(Collectors.toList());
oneHundredIdPasien.forEach(id -> {
MigrasiPasien migrasiPasien = new MigrasiPasien();
Pasien pasien = new Pasien();
pasien.setId(id);
migrasiPasien.setPasien(pasien);
migrasiPasien.setKdProfile((short) 0);
migrasiPasien.setStatusEnabled(true);
models.add(migrasiPasien);
});
migrasiPasienDao.save(models);
}
}

View File

@ -0,0 +1,45 @@
package com.jasamedika.medifirst2000.entities;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.BELUM_KIRIM;
import static javax.persistence.EnumType.STRING;
import static javax.persistence.FetchType.LAZY;
/**
* @author Salman
* @version 1.0.0
* @since 06/11/2023
*/
@Getter
@Setter
@Entity
@Table(name = "migrasipasien_t", uniqueConstraints = @UniqueConstraint(columnNames = "pasienfk"))
public class MigrasiPasien extends BaseTransaction {
private static final long serialVersionUID = 8936798143770665885L;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "pasienfk", nullable = false)
@NotNull(message = "Pasien tidak boleh kosong")
@Caption(value = "Pasien")
private Pasien pasien;
@Column(name = "pasienfk", insertable = false, updatable = false, nullable = false)
private Integer pasienId;
@Column(length = 30, nullable = false, columnDefinition = "varchar(30) default 'BELUM_KIRIM'")
@Enumerated(STRING)
@NotNull(message = "Status migrasi tidak boleh kosong")
@Size(max = 30, message = "Status migrasi maksimal {max} karakter")
@Caption(value = "Status Migrasi")
private StatusMigrasi statusMigrasi = BELUM_KIRIM;
}

View File

@ -2,7 +2,6 @@ package com.jasamedika.medifirst2000.entities;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.jasamedika.medifirst2000.base.BaseMaster;
import com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi;
import com.jasamedika.medifirst2000.helper.Caption;
import com.jasamedika.medifirst2000.listener.MyEventListener;
import lombok.Getter;
@ -10,13 +9,10 @@ import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.BELUM_KIRIM;
import static javax.persistence.EnumType.STRING;
import static javax.persistence.FetchType.LAZY;
import static javax.persistence.GenerationType.SEQUENCE;
@ -211,10 +207,4 @@ public class Pasien extends BaseMaster {
@Column(name = "JamLahir")
@Caption(value = "JamLahir")
private Date jamLahir;
@Column(length = 30, nullable = false, columnDefinition = "varchar(30) default 'BELUM_KIRIM'")
@Enumerated(STRING)
@Size(max = 30)
@Caption(value = "Status Migrasi")
private StatusMigrasi statusMigrasi = BELUM_KIRIM;
}

View File

@ -0,0 +1,28 @@
package com.jasamedika.medifirst2000.vo;
import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO;
import com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi;
import com.jasamedika.medifirst2000.helper.Caption;
import com.jasamedika.medifirst2000.vo.PasienVO;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
/**
* @author Salman
* @version 1.0.0
* @since 06/11/2023
*/
@Getter
@Setter
public class MigrasiPasienVO extends BaseTransactionVO {
@NotNull(message = "Pasien tidak boleh kosong")
@Caption(value = "Pasien")
private PasienVO pasien;
private Integer pasienId;
@Caption(value = "Status Migrasi")
private StatusMigrasi statusMigrasi;
}

View File

@ -1,7 +1,6 @@
package com.jasamedika.medifirst2000.vo;
import com.jasamedika.medifirst2000.base.vo.BaseMasterVO;
import com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi;
import com.jasamedika.medifirst2000.helper.Caption;
import lombok.Getter;
import lombok.Setter;
@ -138,7 +137,4 @@ public class PasienVO extends BaseMasterVO {
@Caption(value = "propinsi")
private PropinsiVO propinsi;
@Caption(value = "Status Migrasi")
private StatusMigrasi statusMigrasi;
}

View File

@ -884,5 +884,7 @@
<mapping class="com.jasamedika.medifirst2000.entities.JumlahDosis" />
<mapping class="com.jasamedika.medifirst2000.entities.KeteranganPakaiObat" />
<mapping class="com.jasamedika.medifirst2000.entities.SatuanDosis" />
<mapping class="com.jasamedika.medifirst2000.entities.MigrasiPasien" />
</session-factory>
</hibernate-configuration>