diff --git a/pom.xml b/pom.xml index 0536c6e..ce75179 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,17 @@ 5.3.9.RELEASE + + com.google.zxing + core + 3.3.0 + + + com.google.zxing + javase + 3.3.0 + + io.jsonwebtoken jjwt diff --git a/src/main/java/com/iconplus/smartproc/controller/PrintController.java b/src/main/java/com/iconplus/smartproc/controller/PrintController.java index a02741a..b99d658 100644 --- a/src/main/java/com/iconplus/smartproc/controller/PrintController.java +++ b/src/main/java/com/iconplus/smartproc/controller/PrintController.java @@ -1,8 +1,11 @@ package com.iconplus.smartproc.controller; +import com.iconplus.smartproc.helper.model.EmptyResponse; import com.iconplus.smartproc.model.request.PrintDrpRequest; import com.iconplus.smartproc.model.request.RolesRequest; import com.iconplus.smartproc.model.response.GetListPrintDrpResponse; +import com.iconplus.smartproc.model.response.PrintDrpResponse; +import com.iconplus.smartproc.service.print.DrpPrintExecutionService; import com.iconplus.smartproc.service.print.GetListPrintDrpService; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -14,9 +17,12 @@ import org.springframework.web.bind.annotation.*; public class PrintController { private final GetListPrintDrpService getListPrintDrpService; + private final DrpPrintExecutionService drpPrintExecutionService; - public PrintController(GetListPrintDrpService getListPrintDrpService) { + public PrintController(GetListPrintDrpService getListPrintDrpService, + DrpPrintExecutionService drpPrintExecutionService) { this.getListPrintDrpService = getListPrintDrpService; + this.drpPrintExecutionService = drpPrintExecutionService; } @@ -33,5 +39,10 @@ public class PrintController { } + @PostMapping("execution") + public EmptyResponse drpPrintExecution(@RequestBody PrintDrpRequest printDrpRequest) throws Exception { + return drpPrintExecutionService.execute(printDrpRequest); + } + } diff --git a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java index 58f5b62..3dc774b 100644 --- a/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java +++ b/src/main/java/com/iconplus/smartproc/helper/service/BaseService.java @@ -8,5 +8,5 @@ import java.io.FileNotFoundException; import java.io.IOException; public interface BaseService { - V execute(T input) throws IOException; + V execute(T input) throws Exception; } diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java index caf7f22..53a9c23 100644 --- a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -47,4 +47,7 @@ public interface DrpApprovalView { String getLevel(); void setLevel(String level); + Long getApproverUserId(); + void setApproverUserId(Long approverUserId); + } diff --git a/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java index ff07db5..da471e8 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/PrintDrpRequest.java @@ -13,5 +13,6 @@ import org.springframework.data.domain.Pageable; @NoArgsConstructor public class PrintDrpRequest extends BaseRequest { + private Long drpId; private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java index 0fbb868..7e28e22 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpApprovalRepository.java @@ -27,23 +27,26 @@ public interface DrpApprovalRepository extends JpaRepository List findByDrpIdAndIsDeleteFalse(Long drpId); @Query(value = "SELECT da.drpId as drpId, " + - "da.isApprove as isApprove, " + - "da.catatan as catatan, " + "da.approverUserId as approverUserId, " + "u.nama as nama, " + - "j.jabatan as jabatan, " + - "da.level as level " + + "j.jabatan as jabatan " + "FROM DrpApproval da " + "JOIN Users u ON u.id = da.approverUserId " + "JOIN Jabatan j ON j.id = u.jabatanId " + "WHERE da.isDelete = false " + - "AND da.isApprove is not null " + "AND da.drpId = :drpId " + - "ORDER BY da.lastUpdate") + "AND da.isApprove = true " + + "ORDER BY da.level desc") List getDrpApproval(Long drpId); Optional findByDrpIdAndLevelAndIsDeleteFalse(Long drpId, String level); + @Query(value = "UPDATE drp_approval " + + "SET is_delete = 1 " + + "WHERE drp_id = :drpId " + + "AND is_delete = 0", nativeQuery = true) + void deleteApprovalByDrpId(Long drpId); + } diff --git a/src/main/java/com/iconplus/smartproc/service/CommonService.java b/src/main/java/com/iconplus/smartproc/service/CommonService.java index bf2d274..9e2b363 100644 --- a/src/main/java/com/iconplus/smartproc/service/CommonService.java +++ b/src/main/java/com/iconplus/smartproc/service/CommonService.java @@ -1,5 +1,9 @@ package com.iconplus.smartproc.service; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.request.UsersRequest; @@ -11,6 +15,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.awt.image.BufferedImage; import java.sql.Timestamp; import java.time.Instant; @@ -105,4 +110,12 @@ public class CommonService { } } + + public BufferedImage generateQRCodeImage(String barcodeText) throws Exception { + QRCodeWriter barcodeWriter = new QRCodeWriter(); + BitMatrix bitMatrix = + barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 200, 200); + + return MatrixToImageWriter.toBufferedImage(bitMatrix); + } } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java index 64094f0..6a25e05 100644 --- a/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java +++ b/src/main/java/com/iconplus/smartproc/service/approval/PostDrpApprovalExecutionService.java @@ -52,6 +52,9 @@ public class PostDrpApprovalExecutionService implements BaseService drpApprovalHistoryList = new ArrayList<>(); var listDrpApproval = drpApprovalRepository.findByDrpIdAndIsDeleteFalse(input.getDrpId()); @@ -64,23 +67,28 @@ public class PostDrpApprovalExecutionService implements BaseService { + + private final CommonService commonService; + private final DrpApprovalRepository drpApprovalRepository; + public DrpPrintExecutionService(CommonService commonService, + DrpApprovalRepository drpApprovalRepository) { + this.commonService = commonService; + this.drpApprovalRepository = drpApprovalRepository; + } + + @Override + public EmptyResponse execute(PrintDrpRequest input) throws Exception { + + var drpApprovalViews = drpApprovalRepository.getDrpApproval(input.getDrpId()); + + int size = drpApprovalViews.size(); + + List bufferedImageList = new ArrayList<>(); + + for (DrpApprovalView drpApprovalView : drpApprovalViews) { + String barcodeText = drpApprovalView.getApproverUserId().toString() + " - " + drpApprovalView.getNama() + " - " + drpApprovalView.getJabatan(); + var bufferedImage = commonService.generateQRCodeImage(barcodeText); + bufferedImageList.add(bufferedImage); + } + + return new EmptyResponse(); + } +} diff --git a/src/main/resources/template/drp-approval.jrxml b/src/main/resources/template/drp-approval.jrxml new file mode 100644 index 0000000..e69de29