upload dokumen

This commit is contained in:
dirgantarasiahaan 2023-05-30 11:12:25 +07:00
parent 746d7ec4ae
commit 06058d279e
14 changed files with 381 additions and 47 deletions

View File

@ -1,18 +1,17 @@
package com.iconplus.smartproc.controller;
import com.iconplus.smartproc.helper.model.EmptyResponse;
import com.iconplus.smartproc.model.request.DrpDokumenRequest;
import com.iconplus.smartproc.model.request.DrpPengadaanRequest;
import com.iconplus.smartproc.model.request.DrpRequest;
import com.iconplus.smartproc.model.response.DrpPengadaanResponse;
import com.iconplus.smartproc.model.response.DrpResponse;
import com.iconplus.smartproc.model.response.GetListDrpResponse;
import com.iconplus.smartproc.service.drp.GetDrpService;
import com.iconplus.smartproc.service.drp.GetListDrpService;
import com.iconplus.smartproc.service.drp.PostCreateDrpPengadaanService;
import com.iconplus.smartproc.service.drp.PostCreateDrpService;
import com.iconplus.smartproc.model.response.*;
import com.iconplus.smartproc.service.drp.*;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@CrossOrigin(origins = "${fe.server}", allowCredentials = "true")
@RestController
@ -23,15 +22,27 @@ public class DrpController {
private final GetListDrpService getListDrpService;
private final PostCreateDrpService postCreateDrpService;
private final PostCreateDrpPengadaanService postCreateDrpPengadaanService;
private final GetListDrpPengadaanService getListDrpPengadaanService;
private final PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService;
private final PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService;
private final PostCreateTahunDrpService postCreateTahunDrpService;
public DrpController(GetDrpService getDrpService,
GetListDrpService getListDrpService,
PostCreateDrpService postCreateDrpService,
PostCreateDrpPengadaanService postCreateDrpPengadaanService) {
PostCreateDrpPengadaanService postCreateDrpPengadaanService,
GetListDrpPengadaanService getListDrpPengadaanService,
PostDrpUploadDokumenRKAPService postDrpUploadDokumenRKAPService,
PostCreateTahunDrpService postCreateTahunDrpService,
PostDrpUploadDokumenPendukungService postDrpUploadDokumenPendukungService) {
this.getDrpService = getDrpService;
this.getListDrpService = getListDrpService;
this.postCreateDrpService = postCreateDrpService;
this.postCreateDrpPengadaanService = postCreateDrpPengadaanService;
this.getListDrpPengadaanService = getListDrpPengadaanService;
this.postDrpUploadDokumenRKAPService = postDrpUploadDokumenRKAPService;
this.postDrpUploadDokumenPendukungService = postDrpUploadDokumenPendukungService;
this.postCreateTahunDrpService = postCreateTahunDrpService;
}
@GetMapping
@ -48,19 +59,33 @@ public class DrpController {
return getListDrpService.execute(drpRequest);
}
@GetMapping("/{id}")
public DrpResponse getDrp(@PathVariable Long id) {
return getDrpService.execute(DrpRequest.builder()
.id(id)
@PostMapping("/tahun")
public DrpResponse createTahunDrp(@RequestBody DrpRequest drpRequest) {
return postCreateTahunDrpService.execute(drpRequest);
}
@PostMapping("/upload/rkap")
public DrpDokumenResponse uploadDokumenRkap(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId,
@RequestParam(name = "keterangan") String keterangan,
@RequestParam(name = "file") MultipartFile file) throws IOException {
return postDrpUploadDokumenRKAPService.execute(DrpDokumenRequest.builder()
.jenisDokumenId(jenisDokumenId)
.keterangan(keterangan)
.file(file)
.build());
}
@GetMapping("/tahun/{id}")
public EmptyResponse getExistDrp(@PathVariable(name = "id") Integer tahun) {
postCreateDrpService.validateTahunDrp(DrpRequest.builder()
.tahun(tahun)
@PostMapping("/upload/pendukung")
public DrpDokumenResponse uploadDokumenPendukung(@RequestParam(name = "jenisDokumenId") Long jenisDokumenId,
@RequestParam(name = "keterangan") String keterangan,
@RequestParam(name = "file") MultipartFile file) throws IOException {
return postDrpUploadDokumenPendukungService.execute(DrpDokumenRequest.builder()
.jenisDokumenId(jenisDokumenId)
.keterangan(keterangan)
.file(file)
.build());
return new EmptyResponse();
}
@PostMapping
@ -68,14 +93,27 @@ public class DrpController {
return postCreateDrpService.execute(drpRequest);
}
@GetMapping("/{id}")
public DrpResponse getDrp(@PathVariable Long id) {
return getDrpService.execute(DrpRequest.builder()
.id(id)
.build());
}
@PostMapping("/pengadaan")
public DrpPengadaanResponse createDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) {
return postCreateDrpPengadaanService.execute(drpPengadaanRequest);
}
@GetMapping("/pengadaan")
public DrpPengadaanResponse getDrpPengadaan(@RequestBody DrpPengadaanRequest drpPengadaanRequest) {
return null;
public GetListDrpPengadaanResponse getDrpPengadaan(@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "size", defaultValue = "5") Integer size){
Pageable pageable = PageRequest.of((page - 1), size);
DrpPengadaanRequest drpPengadaanRequest = DrpPengadaanRequest.builder()
.pageable(pageable)
.build();
return getListDrpPengadaanService.execute(drpPengadaanRequest);
}
}

View File

@ -4,6 +4,9 @@ package com.iconplus.smartproc.helper.service;
import com.iconplus.smartproc.helper.base.BaseRequest;
import com.iconplus.smartproc.helper.base.BaseResponse;
import java.io.FileNotFoundException;
import java.io.IOException;
public interface BaseService<T extends BaseRequest, V extends BaseResponse> {
V execute(T input);
V execute(T input) throws IOException;
}

View File

@ -20,12 +20,21 @@ public interface DrpPengadaanView {
Long getLokasiId();
void setLokasiId(Long lokasiId);
String getLokasi();
void setLokasi(String lokasi);
Long getJenisPengadaanId();
void setJenisPengadaanId(Long jenisPengadaanId);
String getJenisPengadaan();
void setJenisPengadaan(String jenisPengadaan);
Long getUnitInisiatorId();
void setUnitInisiatorId(Long unitInisiatorId);
String getUnitInisiator();
void setUnitInisiator(String unitInisiator);
BigDecimal getHpe();
void setHpe(BigDecimal hpe);
@ -35,21 +44,39 @@ public interface DrpPengadaanView {
Long getSumberDanaId();
void setSumberDanaId(Long sumberDanaId);
String getSumberDana();
void setSumberDana(String sumberDana);
Long getMetodePengadaanId();
void setMetodePengadaanId(Long metodePengadaanId);
Long getSupplyPositioningMatrix();
void setSupplyPositioningMatrix(Long supplyPositioningMatrix);
String getMetodePengadaan();
void setMetodePengadaan(String metodePengadaan);
Long getSupplyPositioningMatrixId();
void setSupplyPositioningMatrixId(Long supplyPositioningMatrixId);
String getSupplyPositioningMatrix();
void setSupplyPositioningMatrix(String supplyPositioningMatrix);
Long getMetodePenyampaianId();
void setMetodePenyampaianId(Long metodePenyampaianId);
String getMetodePenyampaian();
void setMetodePenyampaian(String metodePenyampaian);
Long getJenisKontrakId();
void setJenisKontrakId(Long jenisKontrakId);
String getJenisKontrak();
void setJenisKontrak(String jenisKontrak);
Long getStrategiPengadaanId();
void setStrategiPengadaanId(Long strategiPengadaanId);
String getStrategiPengadaan();
void setStrategiPengadaan(String strategiPengadaan);
Date getRencanaTanggal();
void setRencanaTanggal(Date rencanaTanggal);

View File

@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;
@Data
@Builder
@ -12,8 +13,10 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
public class DrpDokumenRequest extends BaseRequest {
private Long drpId;
private Long jenisDokumenId;
private String filename;
private String keterangan;
private MultipartFile file;
private Boolean isDelete;
}

View File

@ -20,16 +20,35 @@ public class DrpPengadaanResponse extends BaseResponse {
private Long drpId;
private String nomor;
private String namaPengadaan;
private Long lokasiId;
private Long jenisPengadaanId;
private Long unitInisiatorId;
private BigDecimal pagu;
private Long lokasiId;
private String lokasi;
private Long jenisPengadaanId;
private String jenisPengadaan;
private Long unitInisiatorId;
private String unitInisiator;
private Long sumberDanaId;
private String sumberDana;
private Long supplyPositioningMatrixId;
private String supplyPositioningMatrix;
private Long metodePengadaanId;
private String metodePengadaan;
private Long metodePenyampaianId;
private String metodePenyampaian;
private Long jenisKontrakId;
private String jenisKontrak;
private Long strategiPengadaanId;
private String strategiPengadaan;
private Date rencanaTanggal;
private Date targetTanggal;
private BigDecimal hpe;

View File

@ -0,0 +1,19 @@
package com.iconplus.smartproc.model.response;
import com.iconplus.smartproc.helper.base.BaseResponse;
import com.iconplus.smartproc.helper.model.Pagination;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GetListDrpPengadaanResponse extends BaseResponse {
private List<DrpPengadaanResponse> data;
private Pagination pagination;
}

View File

@ -1,7 +1,9 @@
package com.iconplus.smartproc.repository;
import com.iconplus.smartproc.model.entity.DrpPengadaan;
import com.iconplus.smartproc.model.projection.DrpPengadaanView;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@ -9,5 +11,45 @@ import org.springframework.stereotype.Repository;
@Repository
public interface DrpPengadaanRepository extends JpaRepository<DrpPengadaan, Long> {
@Query(value = "SELECT dp.id as id, " +
"dp.nomor as nomor, " +
"dp.drpId as drpId, " +
"dp.namaPengadaan as namaPengadaan, " +
"dp.hpe as hpe, " +
"dp.pagu as pagu, " +
"dp.isActive as isActive, " +
"dp.rencanaTanggal as rencanaTanggal, " +
"dp.targetTanggal as targetTanggal, " +
"dp.jenisKontrakId as jenisKontrakId, " +
"jk.jenisKontrak as jenisKontrak, " +
"dp.jenisPengadaanId as jenisPengadaanId, " +
"jp.jenisPengadaan as jenisPengadaan, " +
"dp.lokasiId as lokasiId, " +
"l.lokasi as lokasi, " +
"dp.metodePengadaanId as metodePengadaanId, " +
"mp.metodePengadaan as metodePengadaan, " +
"dp.metodePenyampaianId as metodePenyampaianId, " +
"mpi.metodePenyampaian as metodePenyampaian, " +
"dp.strategiPengadaanId as strategiPengadaanId, " +
"sp.strategiPengadaan as strategiPengadaan, " +
"dp.sumberDanaId as sumberDanaId, " +
"sd.sumberDana as sumberDana, " +
"dp.supplyPositioningMatrixId as supplyPositioningMatrixId, " +
"spm.supplyPositioningMatrix as supplyPositioningMatrix, " +
"dp.unitInisiatorId as unitInisiatorId, " +
"ui.unitInisiator as unitInisiator " +
"FROM DrpPengadaan dp " +
"JOIN JenisKontrak jk ON jk.id = dp.jenisKontrakId " +
"JOIN JenisPengadaan jp ON jp.id = dp.jenisPengadaanId " +
"JOIN Lokasi l ON l.id = dp.lokasiId " +
"JOIN MetodePengadaan mp ON mp.id = dp.metodePengadaanId " +
"JOIN MetodePenyampaian mpi ON mpi.id = dp.metodePenyampaianId " +
"JOIN StrategiPengadaan sp ON sp.id = dp.strategiPengadaanId " +
"JOIN SumberDana sd ON sd.id = dp.sumberDanaId " +
"JOIN SupplyPositioningMatrix spm ON spm.id = dp.supplyPositioningMatrixId " +
"JOIN UnitInisiator ui ON ui.id = dp.unitInisiatorId " +
"WHERE dp.isDelete = false")
Page<DrpPengadaanView> getListDrpPengadaan(Pageable pageable);
}

View File

@ -1,13 +1,19 @@
package com.iconplus.smartproc.service.drp;
import com.iconplus.smartproc.helper.model.Pagination;
import com.iconplus.smartproc.helper.service.BaseService;
import com.iconplus.smartproc.model.projection.DrpPengadaanView;
import com.iconplus.smartproc.model.request.DrpPengadaanRequest;
import com.iconplus.smartproc.model.response.DrpPengadaanResponse;
import com.iconplus.smartproc.model.response.GetListDrpPengadaanResponse;
import com.iconplus.smartproc.repository.DrpPengadaanRepository;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class GetListDrpPengadaanService implements BaseService<DrpPengadaanRequest, DrpPengadaanResponse> {
public class GetListDrpPengadaanService implements BaseService<DrpPengadaanRequest, GetListDrpPengadaanResponse> {
private final DrpPengadaanRepository drpPengadaanRepository;
@ -16,8 +22,54 @@ public class GetListDrpPengadaanService implements BaseService<DrpPengadaanReque
}
@Override
public DrpPengadaanResponse execute(DrpPengadaanRequest input) {
public GetListDrpPengadaanResponse execute(DrpPengadaanRequest input) {
return null;
List<DrpPengadaanResponse> drpPengadaanResponseList = new ArrayList<>();
var drpPengadaanViews = drpPengadaanRepository.getListDrpPengadaan(input.getPageable());
for (DrpPengadaanView drpPengadaanView : drpPengadaanViews) {
DrpPengadaanResponse drpPengadaanResponse = DrpPengadaanResponse.builder()
.id(drpPengadaanView.getId())
.drpId(drpPengadaanView.getDrpId())
.namaPengadaan(drpPengadaanView.getNamaPengadaan())
.nomor(drpPengadaanView.getNomor())
.hpe(drpPengadaanView.getHpe())
.isActive(drpPengadaanView.getIsActive())
.pagu(drpPengadaanView.getPagu())
.rencanaTanggal(drpPengadaanView.getRencanaTanggal())
.targetTanggal(drpPengadaanView.getTargetTanggal())
.jenisPengadaanId(drpPengadaanView.getJenisPengadaanId())
.jenisPengadaan(drpPengadaanView.getJenisPengadaan())
.jenisKontrakId(drpPengadaanView.getJenisKontrakId())
.jenisKontrak(drpPengadaanView.getJenisKontrak())
.metodePengadaanId(drpPengadaanView.getMetodePengadaanId())
.metodePengadaan(drpPengadaanView.getMetodePengadaan())
.lokasiId(drpPengadaanView.getLokasiId())
.lokasi(drpPengadaanView.getLokasi())
.metodePenyampaianId(drpPengadaanView.getMetodePenyampaianId())
.metodePenyampaian(drpPengadaanView.getMetodePenyampaian())
.unitInisiatorId(drpPengadaanView.getUnitInisiatorId())
.unitInisiator(drpPengadaanView.getUnitInisiator())
.strategiPengadaanId(drpPengadaanView.getStrategiPengadaanId())
.strategiPengadaan(drpPengadaanView.getStrategiPengadaan())
.supplyPositioningMatrixId(drpPengadaanView.getSupplyPositioningMatrixId())
.supplyPositioningMatrix(drpPengadaanView.getSupplyPositioningMatrix())
.sumberDanaId(drpPengadaanView.getSumberDanaId())
.sumberDana(drpPengadaanView.getSumberDana())
.build();
drpPengadaanResponseList.add(drpPengadaanResponse);
}
return GetListDrpPengadaanResponse.builder()
.data(drpPengadaanResponseList)
.pagination(Pagination.builder()
.pageSize(input.getPageable().getPageSize())
.currentPage(input.getPageable().getPageNumber())
.totalPages(drpPengadaanViews.getTotalPages())
.totalRecords(drpPengadaanViews.getTotalElements())
.isFirstPage(drpPengadaanViews.isFirst())
.isLastPage(drpPengadaanViews.isLast())
.build())
.build();
}
}

View File

@ -38,14 +38,13 @@ public class PostCreateDrpService implements BaseService<DrpRequest, DrpResponse
@Override
public DrpResponse execute(DrpRequest input) {
validateTahunDrp(input);
var drp = drpRepository.findByIdAndIsDeleteFalse(input.getId())
.orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10001,
Constants.ERR_TTL_10001,
String.format(Constants.ERR_MSG_10001, "DRP", input.getId())));
Drp drp = Drp.builder()
.tahun(input.getTahun())
.approveStatus(input.getApproveStatus())
.isActive(input.getIsActive())
.isDelete(false)
.build();
drp.setApproveStatus(input.getApproveStatus());
drp.setIsActive(input.getIsActive());
var drpSaved = drpRepository.save(drp);
@ -85,13 +84,4 @@ public class PostCreateDrpService implements BaseService<DrpRequest, DrpResponse
.id(drpSaved.getId())
.build();
}
public void validateTahunDrp(DrpRequest input) {
Optional<Drp> drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun());
if (drpOptional.isPresent()) {
throw new BusinessException(Constants.ERR_CODE_10010,
Constants.ERR_TTL_10010,
Constants.ERR_MSG_10010);
}
}
}

View File

@ -0,0 +1,45 @@
package com.iconplus.smartproc.service.drp;
import com.iconplus.smartproc.exception.BusinessException;
import com.iconplus.smartproc.helper.service.BaseService;
import com.iconplus.smartproc.model.entity.Drp;
import com.iconplus.smartproc.model.request.DrpRequest;
import com.iconplus.smartproc.model.response.DrpResponse;
import com.iconplus.smartproc.repository.DrpRepository;
import com.iconplus.smartproc.util.Constants;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class PostCreateTahunDrpService implements BaseService<DrpRequest, DrpResponse> {
private DrpRepository drpRepository;
public PostCreateTahunDrpService(DrpRepository drpRepository) {
this.drpRepository = drpRepository;
}
@Override
public DrpResponse execute(DrpRequest input) {
validateTahunDrp(input);
Drp drp = Drp.builder()
.tahun(input.getTahun())
.isDelete(false)
.build();
var result = drpRepository.save(drp);
return DrpResponse.builder()
.id(result.getId())
.build();
}
private void validateTahunDrp(DrpRequest input) {
Optional<Drp> drpOptional = drpRepository.findByTahunAndIsDeleteFalse(input.getTahun());
if (drpOptional.isPresent()) {
throw new BusinessException(Constants.ERR_CODE_10010,
Constants.ERR_TTL_10010,
Constants.ERR_MSG_10010);
}
}
}

View File

@ -0,0 +1,47 @@
package com.iconplus.smartproc.service.drp;
import com.iconplus.smartproc.helper.model.EmptyResponse;
import com.iconplus.smartproc.helper.service.BaseService;
import com.iconplus.smartproc.model.entity.DrpDokumen;
import com.iconplus.smartproc.model.request.DrpDokumenRequest;
import com.iconplus.smartproc.model.response.DrpDokumenResponse;
import com.iconplus.smartproc.repository.DrpDokumenRepository;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@Service
public class PostDrpUploadDokumenPendukungService implements BaseService<DrpDokumenRequest, DrpDokumenResponse> {
@Value("${config.file-upload.pendukung}")
private String pathFileUploadPendukung;
private final DrpDokumenRepository drpDokumenRepository;
public PostDrpUploadDokumenPendukungService(DrpDokumenRepository drpDokumenRepository) {
this.drpDokumenRepository = drpDokumenRepository;
}
@Override
public DrpDokumenResponse execute(DrpDokumenRequest input) throws IOException {
MultipartFile file = input.getFile();
String fileName = file.getOriginalFilename();
File path = new File(pathFileUploadPendukung + fileName);
path.createNewFile();
FileOutputStream output = new FileOutputStream(path);
output.write(file.getBytes());
output.close();
return DrpDokumenResponse.builder()
.jenisDokumenId(input.getJenisDokumenId())
.filename(fileName)
.keterangan(input.getKeterangan())
.build();
}
}

View File

@ -0,0 +1,46 @@
package com.iconplus.smartproc.service.drp;
import com.iconplus.smartproc.helper.model.EmptyResponse;
import com.iconplus.smartproc.helper.service.BaseService;
import com.iconplus.smartproc.model.entity.DrpDokumen;
import com.iconplus.smartproc.model.request.DrpDokumenRequest;
import com.iconplus.smartproc.model.response.DrpDokumenResponse;
import com.iconplus.smartproc.repository.DrpDokumenRepository;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@Service
public class PostDrpUploadDokumenRKAPService implements BaseService<DrpDokumenRequest, DrpDokumenResponse> {
@Value("${config.file-upload.rkap}")
private String pathFileUploadRkap;
private final DrpDokumenRepository drpDokumenRepository;
public PostDrpUploadDokumenRKAPService(DrpDokumenRepository drpDokumenRepository) {
this.drpDokumenRepository = drpDokumenRepository;
}
@Override
public DrpDokumenResponse execute(DrpDokumenRequest input) throws IOException {
MultipartFile file = input.getFile();
String fileName = file.getOriginalFilename();
File path = new File(pathFileUploadRkap + fileName);
path.createNewFile();
FileOutputStream output = new FileOutputStream(path);
output.write(file.getBytes());
output.close();
return DrpDokumenResponse.builder()
.jenisDokumenId(input.getJenisDokumenId())
.filename(fileName)
.build();
}
}

View File

@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
@Service
public class PostCreateUserService implements BaseService<UsersRequest, UsersResponse> {
@Value("${config.password.default-password:plgg123}")
@Value("${config.password.default-password:plngg123}")
private String defaultPassword;
private UsersRepository usersRepository;

View File

@ -8,11 +8,14 @@ jwt:
config:
password:
default-password : plgg123
default-password : plngg123
private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCRyUePQWkg+IH5dAvQ/+YlVR1htFdhL2+NJtWWXNW15mBUOEr+yvJsOYAzY9KfxmVqRRr1uQEAaaKjNpxwNEnHkMn8LzSEhRxCd4Mqpa5jquCdPfMqGO3cwdkrQjZVfm3tCBYd2HkOeL8PTwlbBORucf6qHPxZvjGVXQeiRAHTlgHTR1647T1+vlDDcaOBJIrwcD566hqOCKMxtE+5F4DieSYEuHJMyvJf/WH2+LxbP2t4Z6IV0tksQKtwyZstEXd3yIL8chKoFh2p3KO8aFfMa7X0aiDVC3z+o2Hh8+YHQt7cSl+NGRxasuqLbY3twZEC9qAIkkDOpBUp7lLZ9NVHAgMBAAECggEACd0GXGjehf6KPKhfTEqj9Y6mqD+dUdP1xiUEemHZi68EgW41lLuCX1Qcml18mJbBscjvJATaTn7XJBfDycuf2kKvh8Jh2T1wRgbz9uSywceD3t+cHhMFtNPgr46RQoOFSG4toONOfW4p7w034tKX6ekIg9XmNOQrUqGyrIXRYdFADB68HaLxlgS0zKrkhp14+wH/krihfS3H7Z+wBVozWSgyHCVbov68l764w3UWZYEEe2mFl31HqhD5KEo8QXODWuemUTROaXKF/iOsPEMC8Qz4Jdqme+iAlV4b2LNaSTEP/NG/kFIE443RlyFo9YfVNw7/osgAksXAPdOZd8qt8QKBgQDYHLX2HVaGj9zvAlqSKjf6VuuxgdRUYW4rqQjm97YmAJNp4udjKLUgD7yDuImYh/E/IWjDxf1Hf3fTjcc98iPMsvP3lkXxdOxMLLlnMv0Ewxof8gATQndU/w+/XuuAZ9cy3vtheo59i4rFpik8XFAH6kPk/gWI9DAE/IbXuOSNUwKBgQCssaxMwfrB9nwQ9eDXv2z+Ce4sZbtZEJYD3a29OGshLw8AH//z/BxPzZRTFy63IfmmIyYSGaC7ZdkrakLhlBXrhi/P0wafp7xEsONb8uNYWDDWoDewH75GX/SPhx7bX0GSeiX6X5XAUg97j0xlfYllIieMLCw4rLU+97ge5xalvQKBgQDXJjYtEGYczsqYFBLRI0DZdIFvFZ6qZtkElGMtdf0b9kTMDL5pZJR1l9UImcY6WVRekkc3aDvQW2GS9rodvJvRZXMm0K9PRCUfbQMjb4qfnBC9LvLOOcSNlOQ7lCcGjdqbZYyELjv/VtXQEa1Jz2lJh/sR1abzAo9v12vzBbpbywKBgQCkdEZKimeLknivhhbqHgdjHH3NlcuFk3/oipBLI5ERdsjoK5EI/crQTEu1nNwF1brx9YLptbIVA3Z+G6E5RFZjhdO+K42hOJDXMUQyaekKVmGb4dNmS7RdPD+e9uPxsJK3NM850RDApuTLm7j65UOUJaRXnjE2f3HSVwDlnNc6WQKBgQCccgyIJx5HnxdkYYFJBnuwo1aDNo2TOqiy9wPXHzxuR8TsvqmbbYoxT0kJkqOjkbQII08nLyHJ3KL7XK3dCEGmdRArHjo0PCLMzKqBZdhtfxN413HxmwXIF5zM6mhS4g8XrDyNW7EhLp/putnpmE6XI9VnEFx/LxAd8nJ9tUd39A==
public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkclHj0FpIPiB+XQL0P/mJVUdYbRXYS9vjSbVllzVteZgVDhK/srybDmAM2PSn8ZlakUa9bkBAGmiozaccDRJx5DJ/C80hIUcQneDKqWuY6rgnT3zKhjt3MHZK0I2VX5t7QgWHdh5Dni/D08JWwTkbnH+qhz8Wb4xlV0HokQB05YB00deuO09fr5Qw3GjgSSK8HA+euoajgijMbRPuReA4nkmBLhyTMryX/1h9vi8Wz9reGeiFdLZLECrcMmbLRF3d8iC/HISqBYdqdyjvGhXzGu19Gog1Qt8/qNh4fPmB0Le3EpfjRkcWrLqi22N7cGRAvagCJJAzqQVKe5S2fTVRwIDAQAB
forgot-password:
expired-time: 1440
file-upload:
rkap : /Users/macbook/smartproc/rkap/
pendukung: /Users/macbook/smartproc/pendukung/
spring:
datasource: