add bulk upload pengadaan
This commit is contained in:
parent
2415c7cc7c
commit
a2d9f5e8b5
12
pom.xml
12
pom.xml
@ -135,6 +135,18 @@
|
|||||||
<artifactId>spring-security-test</artifactId>
|
<artifactId>spring-security-test</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi</artifactId>
|
||||||
|
<version>5.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-ooxml</artifactId>
|
||||||
|
<version>5.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -25,6 +25,7 @@ public class DrpPengadaanController {
|
|||||||
private final EditUploadDrpPengadaanService editUploadDrpPengadaanService;
|
private final EditUploadDrpPengadaanService editUploadDrpPengadaanService;
|
||||||
private final GetDrpPengadaanService getDrpPengadaanService;
|
private final GetDrpPengadaanService getDrpPengadaanService;
|
||||||
private final PutDrpPengadaanService putDrpPengadaanService;
|
private final PutDrpPengadaanService putDrpPengadaanService;
|
||||||
|
private final UploadBulkUploadPengadaanService uploadBulkUploadPengadaanService;
|
||||||
|
|
||||||
public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService,
|
public DrpPengadaanController(PostCreateDrpPengadaanService postCreateDrpPengadaanService,
|
||||||
GetListDrpPengadaanService getListDrpPengadaanService,
|
GetListDrpPengadaanService getListDrpPengadaanService,
|
||||||
@ -33,7 +34,8 @@ public class DrpPengadaanController {
|
|||||||
DeleteDokumenPendukungService deleteDokumenPendukungService,
|
DeleteDokumenPendukungService deleteDokumenPendukungService,
|
||||||
EditUploadDrpPengadaanService editUploadDrpPengadaanService,
|
EditUploadDrpPengadaanService editUploadDrpPengadaanService,
|
||||||
GetDrpPengadaanService getDrpPengadaanService,
|
GetDrpPengadaanService getDrpPengadaanService,
|
||||||
PutDrpPengadaanService putDrpPengadaanService) {
|
PutDrpPengadaanService putDrpPengadaanService,
|
||||||
|
UploadBulkUploadPengadaanService uploadBulkUploadPengadaanService) {
|
||||||
this.postCreateDrpPengadaanService = postCreateDrpPengadaanService;
|
this.postCreateDrpPengadaanService = postCreateDrpPengadaanService;
|
||||||
this.getListDrpPengadaanService = getListDrpPengadaanService;
|
this.getListDrpPengadaanService = getListDrpPengadaanService;
|
||||||
this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService;
|
this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService;
|
||||||
@ -42,6 +44,7 @@ public class DrpPengadaanController {
|
|||||||
this.editUploadDrpPengadaanService = editUploadDrpPengadaanService;
|
this.editUploadDrpPengadaanService = editUploadDrpPengadaanService;
|
||||||
this.getDrpPengadaanService = getDrpPengadaanService;
|
this.getDrpPengadaanService = getDrpPengadaanService;
|
||||||
this.putDrpPengadaanService = putDrpPengadaanService;
|
this.putDrpPengadaanService = putDrpPengadaanService;
|
||||||
|
this.uploadBulkUploadPengadaanService = uploadBulkUploadPengadaanService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/list/{id}")
|
@GetMapping("/list/{id}")
|
||||||
@ -110,4 +113,11 @@ public class DrpPengadaanController {
|
|||||||
return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest);
|
return deleteDokumenPendukungService.execute(drpPengadaanDokumenRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/bulk/upload")
|
||||||
|
public EmptyResponse bulkUploadPengadaan(@RequestParam(name = "file") MultipartFile file) throws IOException {
|
||||||
|
return uploadBulkUploadPengadaanService.execute(DrpPengadaanRequest.builder()
|
||||||
|
.file(file)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import lombok.Builder;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
@ -20,18 +21,28 @@ public class DrpPengadaanRequest extends BaseRequest {
|
|||||||
|
|
||||||
private Long id;
|
private Long id;
|
||||||
private Long drpId;
|
private Long drpId;
|
||||||
|
private Integer tahun;
|
||||||
private String nomor;
|
private String nomor;
|
||||||
private String namaPengadaan;
|
private String namaPengadaan;
|
||||||
private Long lokasiId;
|
private Long lokasiId;
|
||||||
|
private String lokasi;
|
||||||
private Long jenisPengadaanId;
|
private Long jenisPengadaanId;
|
||||||
|
private String jenisPengadaan;
|
||||||
private Long unitInisiatorId;
|
private Long unitInisiatorId;
|
||||||
|
private String unitInisiator;
|
||||||
private BigDecimal pagu;
|
private BigDecimal pagu;
|
||||||
private Long sumberDanaId;
|
private Long sumberDanaId;
|
||||||
|
private String sumberDana;
|
||||||
private Long supplyPositioningMatrixId;
|
private Long supplyPositioningMatrixId;
|
||||||
|
private String supplyPositioningMatrix;
|
||||||
private Long metodePengadaanId;
|
private Long metodePengadaanId;
|
||||||
|
private String metodePengadaan;
|
||||||
private Long metodePenyampaianId;
|
private Long metodePenyampaianId;
|
||||||
|
private String metodePenyampaian;
|
||||||
private Long jenisKontrakId;
|
private Long jenisKontrakId;
|
||||||
|
private String jenisKontrak;
|
||||||
private Long strategiPengadaanId;
|
private Long strategiPengadaanId;
|
||||||
|
private String strategiPengadaan;
|
||||||
private Date rencanaTanggal;
|
private Date rencanaTanggal;
|
||||||
private Date targetTanggal;
|
private Date targetTanggal;
|
||||||
private BigDecimal hpe;
|
private BigDecimal hpe;
|
||||||
@ -42,4 +53,6 @@ public class DrpPengadaanRequest extends BaseRequest {
|
|||||||
|
|
||||||
private transient Pageable pageable;
|
private transient Pageable pageable;
|
||||||
|
|
||||||
|
private MultipartFile file;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -98,5 +99,11 @@ public interface DrpPengadaanRepository extends JpaRepository<DrpPengadaan, Long
|
|||||||
|
|
||||||
Optional<DrpPengadaan> findByIdAndIsDeleteFalse(Long id);
|
Optional<DrpPengadaan> findByIdAndIsDeleteFalse(Long id);
|
||||||
|
|
||||||
|
@Query(value = "SELECT dp " +
|
||||||
|
"FROM DrpPengadaan dp " +
|
||||||
|
"WHERE dp.namaPengadaan in (:namaPengadaan) " +
|
||||||
|
"AND dp.isDelete = false")
|
||||||
|
List<DrpPengadaan> getDrpPengadaanByListNamaPengadaan(List<String> namaPengadaan);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,8 +47,6 @@ public interface DrpRepository extends JpaRepository<Drp, Long> {
|
|||||||
"WHERE d.isDelete = false")
|
"WHERE d.isDelete = false")
|
||||||
Page<DrpApprovalView> getListApprovalDrp(Pageable pageable);
|
Page<DrpApprovalView> getListApprovalDrp(Pageable pageable);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Query(value = "SELECT d.id as id, " +
|
@Query(value = "SELECT d.id as id, " +
|
||||||
"d.tahun as tahun, " +
|
"d.tahun as tahun, " +
|
||||||
"d.isPrint as isPrint, " +
|
"d.isPrint as isPrint, " +
|
||||||
@ -57,4 +55,10 @@ public interface DrpRepository extends JpaRepository<Drp, Long> {
|
|||||||
"WHERE d.isDelete = false")
|
"WHERE d.isDelete = false")
|
||||||
Page<DrpView> getListPrintDrp(Pageable pageable);
|
Page<DrpView> getListPrintDrp(Pageable pageable);
|
||||||
|
|
||||||
|
@Query(value = "SELECT d " +
|
||||||
|
"FROM Drp d " +
|
||||||
|
"WHERE d.isDelete = false " +
|
||||||
|
"AND d.tahun in (:tahun)")
|
||||||
|
List<Drp> getListDrpByList(List<Integer> tahun);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -29,4 +30,10 @@ public interface JenisKontrakRepository extends JpaRepository<JenisKontrak, Long
|
|||||||
|
|
||||||
Optional<JenisKontrak> findByJenisKontrakAndIsDeleteFalse(String jenisKontrak);
|
Optional<JenisKontrak> findByJenisKontrakAndIsDeleteFalse(String jenisKontrak);
|
||||||
|
|
||||||
|
@Query("SELECT jk " +
|
||||||
|
"FROM JenisKontrak jk " +
|
||||||
|
"WHERE jk.isDelete = false " +
|
||||||
|
"AND jk.jenisKontrak in (:listJenisKontrak)")
|
||||||
|
List<JenisKontrak> getListJenisKontrakByList(List<String> listJenisKontrak);
|
||||||
|
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -26,4 +27,10 @@ public interface JenisPengadaanRepository extends JpaRepository<JenisPengadaan,
|
|||||||
"ORDER BY jp.id")
|
"ORDER BY jp.id")
|
||||||
Page<JenisPengadaanView> getListJenisPengadaan(String search, Pageable pageable);
|
Page<JenisPengadaanView> getListJenisPengadaan(String search, Pageable pageable);
|
||||||
|
|
||||||
|
@Query(value = "SELECT jp " +
|
||||||
|
"FROM JenisPengadaan jp " +
|
||||||
|
"WHERE jp.jenisPengadaan in (:jenisPengadaan) " +
|
||||||
|
"AND jp.isDelete = false ")
|
||||||
|
List<JenisPengadaan> getListPengadaan(List<String> jenisPengadaan);
|
||||||
|
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -29,4 +30,10 @@ public interface LokasiRepository extends JpaRepository<Lokasi, Long> {
|
|||||||
|
|
||||||
Optional<Lokasi> findByLokasiAndIsDeleteFalse(String lokasi);
|
Optional<Lokasi> findByLokasiAndIsDeleteFalse(String lokasi);
|
||||||
|
|
||||||
|
@Query(value = "SELECT l " +
|
||||||
|
"FROM Lokasi l " +
|
||||||
|
"WHERE l.lokasi in (:lokasi) " +
|
||||||
|
"AND l.isDelete = false")
|
||||||
|
List<Lokasi> getListLokasi(List<String> lokasi);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -29,4 +30,10 @@ public interface MetodePengadaanRepository extends JpaRepository<MetodePengadaan
|
|||||||
|
|
||||||
Optional<MetodePengadaan> findByMetodePengadaanAndIsDeleteFalse(String metodePengadaan);
|
Optional<MetodePengadaan> findByMetodePengadaanAndIsDeleteFalse(String metodePengadaan);
|
||||||
|
|
||||||
|
@Query(value = "SELECT mp " +
|
||||||
|
"FROM MetodePengadaan mp " +
|
||||||
|
"WHERE mp.isDelete = false " +
|
||||||
|
"AND mp.metodePengadaan in (:metodePengadaan)")
|
||||||
|
List<MetodePengadaan> getListMetodePengadaanByList(List<String> metodePengadaan);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -29,4 +30,10 @@ public interface MetodePenyampaianRepository extends JpaRepository<MetodePenyamp
|
|||||||
|
|
||||||
Optional<MetodePenyampaian> findByMetodePenyampaianAndIsDeleteFalse(String metodePenyampaian);
|
Optional<MetodePenyampaian> findByMetodePenyampaianAndIsDeleteFalse(String metodePenyampaian);
|
||||||
|
|
||||||
|
@Query(value = "SELECT mp " +
|
||||||
|
"FROM MetodePenyampaian mp " +
|
||||||
|
"WHERE mp.isDelete = false " +
|
||||||
|
"AND mp.metodePenyampaian in (:metodePenyampaians)")
|
||||||
|
List<MetodePenyampaian> getListMetodePenyampaianByList(List<String> metodePenyampaians);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -29,4 +30,10 @@ public interface StrategiPengadaanRepository extends JpaRepository<StrategiPenga
|
|||||||
|
|
||||||
Optional<StrategiPengadaan> findByStrategiPengadaanAndIsDeleteFalse(String strategiPengadaan);
|
Optional<StrategiPengadaan> findByStrategiPengadaanAndIsDeleteFalse(String strategiPengadaan);
|
||||||
|
|
||||||
|
@Query(value = "SELECT sp " +
|
||||||
|
"FROM StrategiPengadaan sp " +
|
||||||
|
"WHERE sp.isDelete = false " +
|
||||||
|
"AND sp.strategiPengadaan in (:listStrategiPengadaan)")
|
||||||
|
List<StrategiPengadaan> getListStrategiPengadaanByList(List<String> listStrategiPengadaan);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -26,5 +27,11 @@ public interface SumberDanaRepository extends JpaRepository<SumberDana, Long> {
|
|||||||
"ORDER BY sd.id")
|
"ORDER BY sd.id")
|
||||||
Page<SumberDanaView> getListSumberDana(String search, Pageable pageable);
|
Page<SumberDanaView> getListSumberDana(String search, Pageable pageable);
|
||||||
|
|
||||||
|
@Query(value = "SELECT sd " +
|
||||||
|
"FROM SumberDana sd " +
|
||||||
|
"WHERE sd.isDelete = false " +
|
||||||
|
"AND sd.sumberDana in (:sumberDanas)")
|
||||||
|
List<SumberDana> getListSumberDanaByList(List<String> sumberDanas);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix;
|
import com.iconplus.smartproc.model.entity.SupplyPositioningMatrix;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -29,4 +30,9 @@ public interface SupplyPositioningMatrixRepository extends JpaRepository<SupplyP
|
|||||||
|
|
||||||
Optional<SupplyPositioningMatrix> findBySupplyPositioningMatrixAndIsDeleteFalse(String supplyPositioningMatrix);
|
Optional<SupplyPositioningMatrix> findBySupplyPositioningMatrixAndIsDeleteFalse(String supplyPositioningMatrix);
|
||||||
|
|
||||||
|
@Query(value = "SELECT spm " +
|
||||||
|
"FROM SupplyPositioningMatrix spm " +
|
||||||
|
"WHERE spm.supplyPositioningMatrix in (:supplyPositioningMatrix)")
|
||||||
|
List<SupplyPositioningMatrix> getListSupplyPositioningMatrix(List<String> supplyPositioningMatrix);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.springframework.data.jpa.repository.Query;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
import com.iconplus.smartproc.model.entity.UnitInisiator;
|
import com.iconplus.smartproc.model.entity.UnitInisiator;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
@ -26,5 +27,11 @@ public interface UnitInisiatorRepository extends JpaRepository<UnitInisiator, Lo
|
|||||||
"ORDER BY ui.id")
|
"ORDER BY ui.id")
|
||||||
Page<UnitInisiatorView> getListUnitInisiator(String search, Pageable pageable);
|
Page<UnitInisiatorView> getListUnitInisiator(String search, Pageable pageable);
|
||||||
|
|
||||||
|
@Query(value = "SELECT ui " +
|
||||||
|
"FROM UnitInisiator ui " +
|
||||||
|
"WHERE ui.isDelete = false " +
|
||||||
|
"AND ui.unitInisiator in (:unitInisiators)")
|
||||||
|
List<UnitInisiator> getListUnitInisiatorByList(List<String> unitInisiators);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
@ -118,4 +119,9 @@ public class CommonService {
|
|||||||
|
|
||||||
return MatrixToImageWriter.toBufferedImage(bitMatrix);
|
return MatrixToImageWriter.toBufferedImage(bitMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasExcelFormat(MultipartFile file) {
|
||||||
|
String type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||||
|
return type.equals(file.getContentType());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,350 @@
|
|||||||
|
package com.iconplus.smartproc.service.drppengadaan;
|
||||||
|
|
||||||
|
import com.iconplus.smartproc.exception.BusinessException;
|
||||||
|
import com.iconplus.smartproc.helper.model.EmptyResponse;
|
||||||
|
import com.iconplus.smartproc.helper.service.BaseService;
|
||||||
|
import com.iconplus.smartproc.model.entity.*;
|
||||||
|
import com.iconplus.smartproc.model.request.DrpPengadaanRequest;
|
||||||
|
import com.iconplus.smartproc.repository.*;
|
||||||
|
import com.iconplus.smartproc.service.CommonService;
|
||||||
|
import com.iconplus.smartproc.util.Constants;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Date;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class UploadBulkUploadPengadaanService implements BaseService<DrpPengadaanRequest, EmptyResponse> {
|
||||||
|
|
||||||
|
private final DrpPengadaanRepository drpPengadaanRepository;
|
||||||
|
private final CommonService commonService;
|
||||||
|
private final LokasiRepository lokasiRepository;
|
||||||
|
private final JenisPengadaanRepository jenisPengadaanRepository;
|
||||||
|
private final UnitInisiatorRepository unitInisiatorRepository;
|
||||||
|
private final SumberDanaRepository sumberDanaRepository;
|
||||||
|
private final SupplyPositioningMatrixRepository supplyPositioningMatrixRepository;
|
||||||
|
private final MetodePengadaanRepository metodePengadaanRepository;
|
||||||
|
private final MetodePenyampaianRepository metodePenyampaianRepository;
|
||||||
|
private final JenisKontrakRepository jenisKontrakRepository;
|
||||||
|
private final StrategiPengadaanRepository strategiPengadaanRepository;
|
||||||
|
private final DrpRepository drpRepository;
|
||||||
|
|
||||||
|
public UploadBulkUploadPengadaanService(DrpPengadaanRepository drpPengadaanRepository,
|
||||||
|
CommonService commonService,
|
||||||
|
LokasiRepository lokasiRepository,
|
||||||
|
JenisPengadaanRepository jenisPengadaanRepository,
|
||||||
|
UnitInisiatorRepository unitInisiatorRepository,
|
||||||
|
SumberDanaRepository sumberDanaRepository,
|
||||||
|
SupplyPositioningMatrixRepository supplyPositioningMatrixRepository,
|
||||||
|
MetodePengadaanRepository metodePengadaanRepository,
|
||||||
|
MetodePenyampaianRepository metodePenyampaianRepository,
|
||||||
|
JenisKontrakRepository jenisKontrakRepository,
|
||||||
|
StrategiPengadaanRepository strategiPengadaanRepository,
|
||||||
|
DrpRepository drpRepository) {
|
||||||
|
this.drpPengadaanRepository = drpPengadaanRepository;
|
||||||
|
this.commonService = commonService;
|
||||||
|
this.lokasiRepository = lokasiRepository;
|
||||||
|
this.jenisPengadaanRepository = jenisPengadaanRepository;
|
||||||
|
this.unitInisiatorRepository = unitInisiatorRepository;
|
||||||
|
this.sumberDanaRepository = sumberDanaRepository;
|
||||||
|
this.supplyPositioningMatrixRepository = supplyPositioningMatrixRepository;
|
||||||
|
this.metodePengadaanRepository = metodePengadaanRepository;
|
||||||
|
this.metodePenyampaianRepository = metodePenyampaianRepository;
|
||||||
|
this.jenisKontrakRepository = jenisKontrakRepository;
|
||||||
|
this.strategiPengadaanRepository = strategiPengadaanRepository;
|
||||||
|
this.drpRepository = drpRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmptyResponse execute(DrpPengadaanRequest input) throws IOException {
|
||||||
|
|
||||||
|
var isExcelFormat = commonService.hasExcelFormat(input.getFile());
|
||||||
|
if (!isExcelFormat) {
|
||||||
|
throw new BusinessException(Constants.ERR_CODE_10014,
|
||||||
|
Constants.ERR_TTL_10014,
|
||||||
|
Constants.ERR_MSG_10014);
|
||||||
|
}
|
||||||
|
|
||||||
|
var listDataExcel = transformFile(input);
|
||||||
|
validateDrpRequest(listDataExcel);
|
||||||
|
|
||||||
|
List<DrpPengadaan> drpPengadaanList = new ArrayList<>();
|
||||||
|
|
||||||
|
List<Lokasi> lokasiList = getListLokasi(listDataExcel);
|
||||||
|
List<JenisPengadaan> jenisPengadaanList = getJenisPengadaans(listDataExcel);
|
||||||
|
List<UnitInisiator> unitInisiatorList = getUnitInisiators(listDataExcel);
|
||||||
|
List<SumberDana> sumberDanaList = getSumberDanas(listDataExcel);
|
||||||
|
List<SupplyPositioningMatrix> supplyPositioningMatrixList = getSupplyPositioningMatrices(listDataExcel);
|
||||||
|
List<MetodePengadaan> metodePengadaanList = getMetodePengadaans(listDataExcel);
|
||||||
|
List<MetodePenyampaian> metodePenyampaianList = getMetodePenyampaians(listDataExcel);
|
||||||
|
List<JenisKontrak> jenisKontrakList = getJenisKontraks(listDataExcel);
|
||||||
|
List<StrategiPengadaan> strategiPengadaanList = getStrategiPengadaans(listDataExcel);
|
||||||
|
List<Integer> listDrp = listDataExcel.stream().map(DrpPengadaanRequest::getTahun).collect(Collectors.toList());
|
||||||
|
List<Drp> drpList = drpRepository.getListDrpByList(listDrp);
|
||||||
|
|
||||||
|
|
||||||
|
for (DrpPengadaanRequest drpPengadaanRequest : listDataExcel) {
|
||||||
|
|
||||||
|
DrpPengadaan drpPengadaanEntity = DrpPengadaan.builder()
|
||||||
|
.namaPengadaan(drpPengadaanRequest.getNamaPengadaan())
|
||||||
|
.nomor(drpPengadaanRequest.getNomor())
|
||||||
|
.pagu(drpPengadaanRequest.getPagu())
|
||||||
|
.rencanaTanggal(drpPengadaanRequest.getRencanaTanggal())
|
||||||
|
.targetTanggal(drpPengadaanRequest.getTargetTanggal())
|
||||||
|
.hpe(drpPengadaanRequest.getHpe())
|
||||||
|
.isDelete(false)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
lokasiList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getLokasi(), drpPengadaanRequest.getLokasi())) {
|
||||||
|
drpPengadaanEntity.setLokasiId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jenisPengadaanList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getJenisPengadaan(), drpPengadaanRequest.getJenisPengadaan())) {
|
||||||
|
drpPengadaanEntity.setJenisPengadaanId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
unitInisiatorList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getUnitInisiator(), drpPengadaanRequest.getUnitInisiator())) {
|
||||||
|
drpPengadaanEntity.setUnitInisiatorId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
sumberDanaList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getSumberDana(), drpPengadaanRequest.getSumberDana())) {
|
||||||
|
drpPengadaanEntity.setSumberDanaId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
supplyPositioningMatrixList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getSupplyPositioningMatrix(), drpPengadaanRequest.getSupplyPositioningMatrix())) {
|
||||||
|
drpPengadaanEntity.setSupplyPositioningMatrixId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metodePengadaanList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getMetodePengadaan(), drpPengadaanRequest.getMetodePengadaan())) {
|
||||||
|
drpPengadaanEntity.setMetodePengadaanId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metodePenyampaianList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getMetodePenyampaian(), drpPengadaanRequest.getMetodePenyampaian())) {
|
||||||
|
drpPengadaanEntity.setMetodePenyampaianId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jenisKontrakList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getJenisKontrak(), drpPengadaanRequest.getJenisKontrak())) {
|
||||||
|
drpPengadaanEntity.setJenisKontrakId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
strategiPengadaanList.forEach(c-> {
|
||||||
|
if (StringUtils.equalsIgnoreCase(c.getStrategiPengadaan(), drpPengadaanRequest.getStrategiPengadaan())) {
|
||||||
|
drpPengadaanEntity.setStrategiPengadaanId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
drpList.forEach(c-> {
|
||||||
|
if (c.getTahun().equals(drpPengadaanRequest.getTahun())) {
|
||||||
|
drpPengadaanEntity.setDrpId(c.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
drpPengadaanList.add(drpPengadaanEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
drpPengadaanRepository.saveAll(drpPengadaanList);
|
||||||
|
|
||||||
|
return new EmptyResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateDrpRequest(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var drpPengadaan = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getNamaPengadaan)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<DrpPengadaan> drpPengadaans = drpPengadaanRepository.getDrpPengadaanByListNamaPengadaan(drpPengadaan);
|
||||||
|
if (ObjectUtils.isNotEmpty(drpPengadaans)) {
|
||||||
|
List<String> existDrpPengadaan = drpPengadaans.stream().map(DrpPengadaan::getNamaPengadaan).collect(Collectors.toList());
|
||||||
|
throw new BusinessException(Constants.ERR_CODE_10015,
|
||||||
|
Constants.ERR_TTL_10015,
|
||||||
|
String.format(Constants.ERR_MSG_10015, existDrpPengadaan));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<StrategiPengadaan> getStrategiPengadaans(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listStrategiPengadaan = listDataExcel.stream().map(DrpPengadaanRequest::getStrategiPengadaan).collect(Collectors.toList());
|
||||||
|
return strategiPengadaanRepository.getListStrategiPengadaanByList(listStrategiPengadaan);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<JenisKontrak> getJenisKontraks(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var jenisKontraks = listDataExcel.stream().map(DrpPengadaanRequest::getJenisKontrak).collect(Collectors.toList());
|
||||||
|
return jenisKontrakRepository.getListJenisKontrakByList(jenisKontraks);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MetodePenyampaian> getMetodePenyampaians(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listMetodePenyampaian = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getMetodePenyampaian)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return metodePenyampaianRepository.getListMetodePenyampaianByList(listMetodePenyampaian);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MetodePengadaan> getMetodePengadaans(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listMetodePengadaan = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getMetodePengadaan)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return metodePengadaanRepository.getListMetodePengadaanByList(listMetodePengadaan);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SupplyPositioningMatrix> getSupplyPositioningMatrices(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listSupplyPositioningMatrix = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getSupplyPositioningMatrix)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return supplyPositioningMatrixRepository.getListSupplyPositioningMatrix(listSupplyPositioningMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SumberDana> getSumberDanas(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listSumberDana = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getSumberDana)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return sumberDanaRepository.getListSumberDanaByList(listSumberDana);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<UnitInisiator> getUnitInisiators(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listUnitInisiator = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getUnitInisiator)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return unitInisiatorRepository.getListUnitInisiatorByList(listUnitInisiator);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<JenisPengadaan> getJenisPengadaans(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listJenisPengadaan = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getJenisPengadaan)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return jenisPengadaanRepository.getListPengadaan(listJenisPengadaan);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Lokasi> getListLokasi(List<DrpPengadaanRequest> listDataExcel) {
|
||||||
|
var listLokasi = listDataExcel.stream()
|
||||||
|
.map(DrpPengadaanRequest::getLokasi)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return lokasiRepository.getListLokasi(listLokasi);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<DrpPengadaanRequest> transformFile(DrpPengadaanRequest input) throws IOException {
|
||||||
|
try {
|
||||||
|
Workbook workbook = new XSSFWorkbook(input.getFile().getInputStream());
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
|
||||||
|
List<DrpPengadaanRequest> drpPengadaanRequestList = new ArrayList<>();
|
||||||
|
Iterator<Row> rows = sheet.iterator();
|
||||||
|
|
||||||
|
int rowNumber = 0;
|
||||||
|
while (rows.hasNext()) {
|
||||||
|
Row currentRow = rows.next();
|
||||||
|
|
||||||
|
// skip header
|
||||||
|
if (rowNumber <= 7) {
|
||||||
|
rowNumber++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Iterator<Cell> cellsInRow = currentRow.iterator();
|
||||||
|
DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder().build();
|
||||||
|
|
||||||
|
int cellIdx = 0;
|
||||||
|
while (cellsInRow.hasNext()) {
|
||||||
|
Cell currentCell = cellsInRow.next();
|
||||||
|
|
||||||
|
switch (cellIdx) {
|
||||||
|
case 0:
|
||||||
|
drpPengadaanRequest.setId((long) currentCell.getNumericCellValue());
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
drpPengadaanRequest.setNamaPengadaan(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
drpPengadaanRequest.setLokasi(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
drpPengadaanRequest.setJenisPengadaan(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
drpPengadaanRequest.setUnitInisiator(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
drpPengadaanRequest.setNomor(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
drpPengadaanRequest.setPagu(BigDecimal.valueOf(currentCell.getNumericCellValue()));
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
drpPengadaanRequest.setSumberDana(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
drpPengadaanRequest.setSupplyPositioningMatrix(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
drpPengadaanRequest.setMetodePengadaan(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
drpPengadaanRequest.setMetodePenyampaian(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
drpPengadaanRequest.setJenisKontrak(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
drpPengadaanRequest.setStrategiPengadaan(currentCell.getStringCellValue());
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
drpPengadaanRequest.setRencanaTanggal(new Date(currentCell.getDateCellValue().getTime()));
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
drpPengadaanRequest.setTargetTanggal(new Date(currentCell.getDateCellValue().getTime()));
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
drpPengadaanRequest.setHpe(BigDecimal.valueOf(currentCell.getNumericCellValue()));
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
drpPengadaanRequest.setTahun((int) currentCell.getNumericCellValue());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cellIdx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (drpPengadaanRequest.getId() == null || drpPengadaanRequest.getId() != 0) {
|
||||||
|
drpPengadaanRequestList.add(drpPengadaanRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
workbook.close();
|
||||||
|
return drpPengadaanRequestList;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new BusinessException(Constants.ERR_CODE_10016,
|
||||||
|
Constants.ERR_TTL_10016,
|
||||||
|
String.format(Constants.ERR_MSG_10016, e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -56,6 +56,18 @@ public class Constants {
|
|||||||
public static final String ERR_TTL_10013 = "Gagal Approve";
|
public static final String ERR_TTL_10013 = "Gagal Approve";
|
||||||
public static final String ERR_MSG_10013 = "Silahkan menunggu appoval %s terlebih dahulu";
|
public static final String ERR_MSG_10013 = "Silahkan menunggu appoval %s terlebih dahulu";
|
||||||
|
|
||||||
|
public static final String ERR_CODE_10014 = "10014";
|
||||||
|
public static final String ERR_TTL_10014 = "Failed Import";
|
||||||
|
public static final String ERR_MSG_10014 = "Silahkan upload format document excel";
|
||||||
|
|
||||||
|
public static final String ERR_CODE_10015 = "10015";
|
||||||
|
public static final String ERR_TTL_10015 = "Failed Import";
|
||||||
|
public static final String ERR_MSG_10015 = "Nama DRP Pengadaan sudah tersedia : %s";
|
||||||
|
|
||||||
|
public static final String ERR_CODE_10016 = "10016";
|
||||||
|
public static final String ERR_TTL_10016 = "Failed Import";
|
||||||
|
public static final String ERR_MSG_10016 = "fail to parse Excel file: %s";
|
||||||
|
|
||||||
public static final String ERR_CODE_40041 = "40041";
|
public static final String ERR_CODE_40041 = "40041";
|
||||||
public static final String ERR_TTL_40041 = "Terjadi Gangguan";
|
public static final String ERR_TTL_40041 = "Terjadi Gangguan";
|
||||||
public static final String ERR_MSG_40041 = "Masalah Koneksi System";
|
public static final String ERR_MSG_40041 = "Masalah Koneksi System";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user