From 1421ee878f9e90ee004841c72134be83de42aa5e Mon Sep 17 00:00:00 2001 From: Salman Manoe Date: Thu, 10 Aug 2023 08:52:09 +0700 Subject: [PATCH] Update service mapping tindakan Mengganti virtual object menjadi dto produk --- .../medifirst2000/dao/ProdukDao.java | 3 + .../MapProdukPaketToProdukServiceImpl.java | 179 ++++++++++-------- .../entities/MapProdukPaketToProduk.java | 52 +---- .../medifirst2000/entities/ProdukDto.java | 21 ++ .../vo/MapProdukPaketToProdukVO.java | 68 ++----- 5 files changed, 149 insertions(+), 174 deletions(-) create mode 100644 jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/ProdukDto.java diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ProdukDao.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ProdukDao.java index ef1e8cdd..73840e63 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ProdukDao.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/dao/ProdukDao.java @@ -399,4 +399,7 @@ public interface ProdukDao extends PagingAndSortingRepository { + "and mpr.ruanganId = :ruanganId " + "and hnp.statusEnabled is true " + "and mpr.kodeExternal = '2017' " + "and hnp.kodeExternal = '2017' " + "order by prd.namaProduk") List> findDaftarInputTindakanByRuangan(@Param("ruanganId") Integer idRuangan); + + @Query("select produk from Produk produk where produk.id in (:listId)") + List findAllByIds(@Param("listId") List listId); } diff --git a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java index 21abd218..866cf0ae 100644 --- a/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java +++ b/jasamedika-business/src/main/java/com/jasamedika/medifirst2000/service/impl/MapProdukPaketToProdukServiceImpl.java @@ -1,20 +1,25 @@ package com.jasamedika.medifirst2000.service.impl; -import com.jasamedika.medifirst2000.converter.base.BaseVoConverter; -import com.jasamedika.medifirst2000.dao.MapProdukPaketToProdukDao; -import com.jasamedika.medifirst2000.vo.MapProdukPaketToProdukVO; -import com.jasamedika.medifirst2000.entities.MapProdukPaketToProduk; -import com.jasamedika.medifirst2000.entities.Produk; -import com.jasamedika.medifirst2000.exception.ServiceVOException; -import com.jasamedika.medifirst2000.service.MapProdukPaketToProdukService; -import com.jasamedika.medifirst2000.util.CommonUtil; -import com.jasamedika.medifirst2000.vo.ProdukVO; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + 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 com.jasamedika.medifirst2000.converter.base.BaseVoConverter; +import com.jasamedika.medifirst2000.dao.MapProdukPaketToProdukDao; +import com.jasamedika.medifirst2000.dao.ProdukDao; +import com.jasamedika.medifirst2000.entities.MapProdukPaketToProduk; +import com.jasamedika.medifirst2000.entities.Produk; +import com.jasamedika.medifirst2000.entities.ProdukDto; +import com.jasamedika.medifirst2000.exception.ServiceVOException; +import com.jasamedika.medifirst2000.service.MapProdukPaketToProdukService; +import com.jasamedika.medifirst2000.util.CommonUtil; +import com.jasamedika.medifirst2000.vo.MapProdukPaketToProdukVO; /** * @author Salman @@ -28,24 +33,30 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk private BaseVoConverter mapProdukPaketConverter; @Autowired - private BaseVoConverter produkConverter; + private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; @Autowired - private MapProdukPaketToProdukDao mapProdukPaketToProdukDao; + private ProdukDao produkDao; @Override public void save(MapProdukPaketToProdukVO vo) { MapProdukPaketToProduk model = new MapProdukPaketToProduk(); model = mapProdukPaketConverter.transferVOToModel(vo, model); - Produk paket = new Produk(); - paket = produkConverter.transferVOToModel(vo.getPaket(), paket); - model.setPaket(paket); - Produk produkPaket = new Produk(); - produkPaket = produkConverter.transferVOToModel(vo.getProdukPaket(), produkPaket); - model.setProdukPaket(produkPaket); - Produk produk = new Produk(); - produk = produkConverter.transferVOToModel(vo.getProduk(), produk); - model.setProduk(produk); + { + Produk paket = new Produk(); + paket.setId(vo.getPaket().getId()); + model.setPaket(paket); + } + { + Produk produkPaket = new Produk(); + produkPaket.setId(vo.getProdukPaket().getId()); + model.setProdukPaket(produkPaket); + } + { + Produk produk = new Produk(); + produk.setId(vo.getProduk().getId()); + model.setProduk(produk); + } model.setKdProfile((short) 0); mapProdukPaketToProdukDao.save(model); } @@ -53,49 +64,72 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk @Override public List get() { List models = mapProdukPaketToProdukDao.findAll(); - List data = new ArrayList<>(); - models.forEach(m -> { - MapProdukPaketToProdukVO vo = new MapProdukPaketToProdukVO(); - vo = mapProdukPaketConverter.transferModelToVO(m, vo); - ProdukVO paketVO = new ProdukVO(); - Produk paket = m.getPaket(); - paketVO = produkConverter.transferModelToVO(paket, paketVO); - vo.setPaket(paketVO); - ProdukVO produkPaketVO = new ProdukVO(); - Produk produkPaket = m.getProdukPaket(); - produkPaketVO = produkConverter.transferModelToVO(produkPaket, produkPaketVO); - vo.setProdukPaket(produkPaketVO); - ProdukVO produkVO = new ProdukVO(); - Produk produk = m.getProduk(); - produkVO = produkConverter.transferModelToVO(produk, produkVO); - vo.setProduk(produkVO); - data.add(vo); - }); - return data; + if (CommonUtil.isNotNullOrEmpty(models)) { + Set setIdPaket = models.stream().map(MapProdukPaketToProduk::getPaketId) + .collect(Collectors.toSet()); + List listIdPaket = new ArrayList<>(setIdPaket); + List listPaket = produkDao.findAllByIds(listIdPaket); + Set setIdProdukPaket = models.stream().map(MapProdukPaketToProduk::getProdukPaketId) + .collect(Collectors.toSet()); + List listIdProdukPaket = new ArrayList<>(setIdProdukPaket); + List listProdukPaket = produkDao.findAllByIds(listIdProdukPaket); + Set setIdProduk = models.stream().map(MapProdukPaketToProduk::getProdukId) + .collect(Collectors.toSet()); + List listIdProduk = new ArrayList<>(setIdProduk); + List listProduk = produkDao.findAllByIds(listIdProduk); + List result = models.stream() + .map(m -> mapProdukPaketConverter.transferModelToVO(m, new MapProdukPaketToProdukVO())) + .collect(Collectors.toList()); + result.forEach(r -> { + Optional paket = listPaket.stream().filter(p -> p.getId().equals(r.getPaketId())).findFirst(); + paket.ifPresent( + p -> r.setPaket(ProdukDto.builder().id(p.getId()).namaProduk(p.getNamaProduk()).build())); + Optional produkPaket = listProdukPaket.stream() + .filter(p -> p.getId().equals(r.getProdukPaketId())).findFirst(); + produkPaket.ifPresent( + p -> r.setProdukPaket(ProdukDto.builder().id(p.getId()).namaProduk(p.getNamaProduk()).build())); + Optional produk = listProduk.stream().filter(p -> p.getId().equals(r.getProdukId())) + .findFirst(); + produk.ifPresent( + p -> r.setProduk(ProdukDto.builder().id(p.getId()).namaProduk(p.getNamaProduk()).build())); + }); + return result; + } + return new ArrayList<>(); } @Override public List get(Integer paketId) { List models = mapProdukPaketToProdukDao.findAllByPaketId(paketId); - List data = new ArrayList<>(); - models.forEach(m -> { - MapProdukPaketToProdukVO vo = new MapProdukPaketToProdukVO(); - vo = mapProdukPaketConverter.transferModelToVO(m, vo); - ProdukVO paketVO = new ProdukVO(); - Produk paket = m.getPaket(); - paketVO = produkConverter.transferModelToVO(paket, paketVO); - vo.setPaket(paketVO); - ProdukVO produkPaketVO = new ProdukVO(); - Produk produkPaket = m.getProdukPaket(); - produkPaketVO = produkConverter.transferModelToVO(produkPaket, produkPaketVO); - vo.setProdukPaket(produkPaketVO); - ProdukVO produkVO = new ProdukVO(); - Produk produk = m.getProduk(); - produkVO = produkConverter.transferModelToVO(produk, produkVO); - vo.setProduk(produkVO); - data.add(vo); - }); - return data; + if (CommonUtil.isNotNullOrEmpty(models)) { + Set listIdPaket = models.stream().map(MapProdukPaketToProduk::getPaketId) + .collect(Collectors.toSet()); + List listPaket = produkDao.findAllByIds(new ArrayList<>(listIdPaket)); + Set listIdProdukPaket = models.stream().map(MapProdukPaketToProduk::getProdukPaketId) + .collect(Collectors.toSet()); + List listProdukPaket = produkDao.findAllByIds(new ArrayList<>(listIdProdukPaket)); + Set listIdProduk = models.stream().map(MapProdukPaketToProduk::getProdukId) + .collect(Collectors.toSet()); + List listProduk = produkDao.findAllByIds(new ArrayList<>(listIdProduk)); + List result = models.stream() + .map(m -> mapProdukPaketConverter.transferModelToVO(m, new MapProdukPaketToProdukVO())) + .collect(Collectors.toList()); + result.forEach(r -> { + Optional paket = listPaket.stream().filter(p -> p.getId().equals(r.getPaketId())).findFirst(); + paket.ifPresent( + p -> r.setPaket(ProdukDto.builder().id(p.getId()).namaProduk(p.getNamaProduk()).build())); + Optional produkPaket = listProdukPaket.stream() + .filter(p -> p.getId().equals(r.getProdukPaketId())).findFirst(); + produkPaket.ifPresent( + p -> r.setProdukPaket(ProdukDto.builder().id(p.getId()).namaProduk(p.getNamaProduk()).build())); + Optional produk = listProduk.stream().filter(p -> p.getId().equals(r.getProdukId())) + .findFirst(); + produk.ifPresent( + p -> r.setProduk(ProdukDto.builder().id(p.getId()).namaProduk(p.getNamaProduk()).build())); + }); + return result; + } + return new ArrayList<>(); } @Override @@ -103,21 +137,16 @@ public class MapProdukPaketToProdukServiceImpl implements MapProdukPaketToProduk MapProdukPaketToProduk model = mapProdukPaketToProdukDao.findOne(noRec); if (CommonUtil.isNullOrEmpty(model)) return null; - MapProdukPaketToProdukVO data = new MapProdukPaketToProdukVO(); - data = mapProdukPaketConverter.transferModelToVO(model, data); - ProdukVO paketVO = new ProdukVO(); - Produk paket = model.getPaket(); - paketVO = produkConverter.transferModelToVO(paket, paketVO); - data.setPaket(paketVO); - ProdukVO produkPaketVO = new ProdukVO(); - Produk produkPaket = model.getProdukPaket(); - produkPaketVO = produkConverter.transferModelToVO(produkPaket, produkPaketVO); - data.setProdukPaket(produkPaketVO); - ProdukVO produkVO = new ProdukVO(); - Produk produk = model.getProduk(); - produkVO = produkConverter.transferModelToVO(produk, produkVO); - data.setProduk(produkVO); - return data; + MapProdukPaketToProdukVO result = mapProdukPaketConverter.transferModelToVO(model, + new MapProdukPaketToProdukVO()); + Produk paket = produkDao.findById(result.getPaketId()); + result.setPaket(ProdukDto.builder().id(paket.getId()).namaProduk(paket.getNamaProduk()).build()); + Produk produkPaket = produkDao.findById(result.getProdukPaketId()); + result.setProdukPaket( + ProdukDto.builder().id(produkPaket.getId()).namaProduk(produkPaket.getNamaProduk()).build()); + Produk produk = produkDao.findById(result.getProdukId()); + result.setProduk(ProdukDto.builder().id(produk.getId()).namaProduk(produk.getNamaProduk()).build()); + return result; } @Override diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java index f1882702..2fe17dd9 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/MapProdukPaketToProduk.java @@ -2,6 +2,8 @@ package com.jasamedika.medifirst2000.entities; import com.jasamedika.medifirst2000.base.BaseTransaction; import com.jasamedika.medifirst2000.helper.Caption; +import lombok.Getter; +import lombok.Setter; import javax.persistence.*; import javax.validation.constraints.NotNull; @@ -13,6 +15,8 @@ import static javax.persistence.FetchType.LAZY; * @version 1.0.0 * @since 03 Aug 2023 */ +@Getter +@Setter @Entity @Table(name = "mapprodukpakettoproduk_m", uniqueConstraints = @UniqueConstraint(columnNames = { "paketfk", "produkpaketfk", "produkfk" })) @@ -45,52 +49,4 @@ public class MapProdukPaketToProduk extends BaseTransaction { @Column(name = "produkfk", insertable = false, updatable = false, nullable = false) private Integer produkId; - - public Produk getPaket() { - return paket; - } - - public void setPaket(Produk paket) { - this.paket = paket; - } - - public Integer getPaketId() { - return paketId; - } - - public void setPaketId(Integer paketId) { - this.paketId = paketId; - } - - public Produk getProdukPaket() { - return produkPaket; - } - - public void setProdukPaket(Produk produkPaket) { - this.produkPaket = produkPaket; - } - - public Integer getProdukPaketId() { - return produkPaketId; - } - - public void setProdukPaketId(Integer produkPaketId) { - this.produkPaketId = produkPaketId; - } - - public Produk getProduk() { - return produk; - } - - public void setProduk(Produk produk) { - this.produk = produk; - } - - public Integer getProdukId() { - return produkId; - } - - public void setProdukId(Integer produkId) { - this.produkId = produkId; - } } diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/ProdukDto.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/ProdukDto.java new file mode 100644 index 00000000..3189998b --- /dev/null +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/entities/ProdukDto.java @@ -0,0 +1,21 @@ +package com.jasamedika.medifirst2000.entities; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * DTO for {@link Produk} + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdukDto { + + private Integer id; + + private String namaProduk; + +} \ No newline at end of file diff --git a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapProdukPaketToProdukVO.java b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapProdukPaketToProdukVO.java index f46432c4..77b51d1e 100644 --- a/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapProdukPaketToProdukVO.java +++ b/jasamedika-domain/src/main/java/com/jasamedika/medifirst2000/vo/MapProdukPaketToProdukVO.java @@ -3,74 +3,40 @@ package com.jasamedika.medifirst2000.vo; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO; +import com.jasamedika.medifirst2000.entities.ProdukDto; +import com.jasamedika.medifirst2000.helper.Caption; +import lombok.Getter; +import lombok.Setter; import javax.validation.constraints.NotNull; /** * DTO for {@link com.jasamedika.medifirst2000.entities.MapProdukPaketToProduk} */ +@Getter +@Setter @JsonInclude(Include.NON_NULL) public class MapProdukPaketToProdukVO extends BaseTransactionVO { - @NotNull(message = "Paket tidak boleh kosong") - private ProdukVO paket; + @NotNull(message = "Paket tidak boleh kosong") + @Caption(value = "Paket") + private ProdukDto paket; + + @Caption(value = "ID Paket") private Integer paketId; @NotNull(message = "Produk paket tidak boleh kosong") - private ProdukVO produkPaket; + @Caption(value = "Produk Paket") + private ProdukDto produkPaket; + @Caption(value = "ID Produk Paket") private Integer produkPaketId; @NotNull(message = "Produk tidak boleh kosong") - private ProdukVO produk; + @Caption(value = "Produk") + private ProdukDto produk; + @Caption(value = "ID Produk") private Integer produkId; - public ProdukVO getPaket() { - return paket; - } - - public void setPaket(ProdukVO paket) { - this.paket = paket; - } - - public Integer getPaketId() { - return paketId; - } - - public void setPaketId(Integer paketId) { - this.paketId = paketId; - } - - public ProdukVO getProdukPaket() { - return produkPaket; - } - - public void setProdukPaket(ProdukVO produkPaket) { - this.produkPaket = produkPaket; - } - - public Integer getProdukPaketId() { - return produkPaketId; - } - - public void setProdukPaketId(Integer produkPaketId) { - this.produkPaketId = produkPaketId; - } - - public ProdukVO getProduk() { - return produk; - } - - public void setProduk(ProdukVO produk) { - this.produk = produk; - } - - public Integer getProdukId() { - return produkId; - } - - public void setProdukId(Integer produkId) { - this.produkId = produkId; - } } \ No newline at end of file