Untitled
unknown
plain_text
a year ago
22 kB
9
Indexable
package com.muf.integrasi_ppd_java.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.muf.integrasi_ppd_java.dto.ContractDTO; import com.muf.integrasi_ppd_java.dto.LogidDTO; import com.muf.integrasi_ppd_java.dto.ParamOutDTO; import com.muf.integrasi_ppd_java.helper.HelpersAM; import com.muf.integrasi_ppd_java.helper.NullValueHelper; import com.muf.integrasi_ppd_java.model.mufam.FlaggingIntegration; import com.muf.integrasi_ppd_java.repository.mufam.ContractMasterRepository; import com.muf.integrasi_ppd_java.repository.mufam.FlaggingIntegrationRepository; import com.muf.integrasi_ppd_java.repository.mufam.MstDomainDtlRepository; import com.muf.integrasi_ppd_java.repository.procedure.CallingProcedureRepository; import com.muf.integrasi_ppd_java.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @Service @Slf4j public class Consumer { @Autowired private ContractBufferCashService contractBufferCashService; @Autowired private ApplicationsService applicationsService; @Autowired private ApplicationSalesForceInfoService applicationSalesForceInfoService; @Autowired private ApplicationSurveyService applicationSurveyService; @Autowired private ConfirmationLetterService confirmationLetterService; @Autowired private ContractInsuranceAdditionService contractInsuranceAdditionService; @Autowired private ContractInsuranceFeeService contractInsuranceFeeService; @Autowired private ContractLoanFeeService contractLoanFeeService; @Autowired private ContractLoanStructureService contractLoanStructureService; @Autowired private ContractLoanRefundService contractLoanRefundService; @Autowired private ContractLoanSubsidyService contractLoanSubsidyService; @Autowired private ContractMasterService contractMasterService; @Autowired private ContractObjectService contractObjectService; @Autowired private ContractProcessTimeService contractProcessTimeService; @Autowired private CustomerAddressDetailService customerAddressDetailService; @Autowired private CustomerCreditCardService customerCreditCardService; @Autowired private CustomerGuarantorService customerGuarantorService; @Autowired private CustomerMasterService customerMasterService; @Autowired private CustomerPersonalEmployeesService customerPersonalEmployeesService; @Autowired private CustomerPersonalProfessionalService customerPersonalProfessionalService; @Autowired private CustomerPersonalService customerPersonalService; @Autowired private CustomerPropertyDetailService customerPropertyDetailService; @Autowired private PurchaseOrderService purchaseOrderService; @Autowired private CustomerBankAccount2Service customerBankAccountService; @Autowired private CustomerPersonalEnterpriseService customerPersonalEnterpriseService; @Autowired private FlaggingIntegrationRepository flaggingIntegrationRepository; @Autowired private CustomerPersonalFamilyService customerPersonalFamilyService; @Autowired private ContractMasterRepository contractMasterRepository; @Autowired private CustomerPersonalOccupationService customerPersonalOccupationService; @Autowired private ContractAmortizeService contractAmortizeService; @Autowired private ContractDisburseFeeService contractDisburseFeeService; @Autowired private ContractObjectExtendedService contractObjectExtendedService; @Autowired private AmBastkInvoiceService amBastkInvoiceService; @Autowired private CallingProcedure callingProcedure; @Autowired private MstDomainDtlRepository domainDtlRepository; @Autowired private CallingProcedureRepository callingProcedureRepository; @Autowired private ApplicationDeviasiService applicationDeviasiService; @Autowired private ApplicationVertelHeaderService applicationVertelHeaderService; @Autowired private ApplicationVertelHistoryService applicationVertelHistoryService; @Autowired private ApplicationVertelOtsService applicationVertelOtsService; @Autowired private DocReceiveHeaderService docReceiveHeaderService; @Autowired private ApplicationApprovalReturnService applicationApprovalReturnService; @Autowired private ApplicationScoringService applicationScoringService; @Autowired private ApplicationScoringDetailService applicationScoringDetailService; @Autowired private CreditApprovalHeaderService creditApprovalHeaderService; public static final Integer FLAG_INITIAL = 0; public static final Integer FLAG_SUCCESS = 1; public static final Integer FLAG_FAILURE = 2; public static final Integer FLAG_RETRY = 5; public static final Integer FLAG_MAPPING = 4; //private ExecutorService executor = Executors.newSingleThreadExecutor(); @KafkaListener(topics = "${spring.kafka.consumer.topic}", groupId = "${spring.kafka.consumer.group-id}") @Transactional public void consume(String param) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map<String, Object> json_data = mapper.readValue(param, Map.class); String contractNo = HelpersAM.parsingContractNo(json_data); saveToFlaggingTable(contractNo, FLAG_INITIAL, FLAG_INITIAL, "INITIAL", "INTEGRASI", new Date()); Map<String, Object> detail = (Map<String, Object>) json_data.get("detail"); Map<String, Object> dataEntryCompletion = (Map<String, Object>) detail.get("data_entry_completion"); Map<String, Object> verificationData = (Map<String, Object>) detail.get("verification_data"); Map<String, Object> prePpd = (Map<String, Object>) verificationData.get("pre_ppd"); String createdBy = NullValueHelper.resultStrFromJson(dataEntryCompletion, "confirmed_by"); Date createdDate = NullValueHelper.resultDateFromJson(dataEntryCompletion, "confirmed_date"); String branchCode = NullValueHelper.resultStrFromJson(json_data, "branch_code"); String tanggalCutOff = domainDtlRepository.findTanggalCutoff("PPD01", "INTEGRASI"); String datePrePpd = NullValueHelper.resultStrFromJson(prePpd, "confirmation_date"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); Date tanggalCutOffConvert = dateFormat.parse(tanggalCutOff); Date tanggalPrePpd = dateFormat.parse(datePrePpd); LogidDTO logidDTO = callingProcedureRepository.generateLogid(); if (tanggalCutOffConvert.before(tanggalPrePpd) || tanggalCutOffConvert.equals(tanggalPrePpd)) { try { System.out.println(logidDTO.getLogid()); asyncHandleKafkaIntegration(contractNo, json_data, createdBy, createdDate, logidDTO); } catch (Exception e) { log.error("Error reading value from Kafka: {}", e.getMessage(), e); return; } } callingProcedure.insertLogs(logidDTO.getLogid(), createdBy, "INTEGRASI", "1", branchCode); } //@Async @Transactional public void asyncHandleKafkaIntegration(String contractNo, Map<String, Object> data, String createdBy, Date createdDate, LogidDTO logidDTO) throws Exception { try { handleKafkaIntegration(contractNo, data, createdBy, createdDate, logidDTO); } catch (Exception e) { log.error("Transaksi gagal di kafka integrasi: " + e.getMessage(), e); throw e; // pastikan exception dilempar kembali } } @Transactional public void handleKafkaIntegration(String contractNo, Map<String, Object> data, String createdBy, Date createdDate, LogidDTO logidDTO) throws Exception { try { //bridging data processKafkaIntegrasi(contractNo, data, createdBy, createdDate, logidDTO); //update data mapping param processKafkaParam(contractNo, data, createdBy, createdDate, logidDTO); // pembentukan jurnal & kp processKafkaJournal(contractNo, createdBy, createdDate); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw e; } } @Transactional public void processKafkaIntegrasi(String contractNo, Map<String, Object> data, String createdBy, Date createdDate, LogidDTO logidDTO) throws Exception { try { String result = performCombinedInsertion(data, logidDTO.getLogid()); System.out.println("message error: " + result); if ("Success".equals(result)) { log.info("Transaksi berhasil di bridging"); saveToFlaggingTable(contractNo, FLAG_MAPPING, FLAG_INITIAL, "BERHASIL INTEGRASI", createdBy, createdDate); } else { log.error("process Kafka Integrasi - Kondisi ELSE Ditemukan: " + result); //saveToFlaggingTable(contractNo, FLAG_FAILURE, FLAG_INITIAL, result, createdBy, createdDate); //throw new Exception(result); //System.out.println("contract no: " + contractNo); //FlaggingIntegration dataLogs = flaggingIntegrationRepository.getByContractNo(contractNo).orElse(FlaggingIntegration.builder().logs("kosong data").build()); //System.out.println("data logs: " + dataLogs); } } catch (Exception e) { //log.error("Transaksi gagal di bridging: " + e.getMessage(), e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); saveToFlaggingTable(contractNo, FLAG_FAILURE, FLAG_INITIAL, e.getMessage(), createdBy, createdDate); throw e; } } @Transactional public void processKafkaParam(String contractNo, Map<String, Object> data, String createdBy, Date createdDate, LogidDTO logidDTO) { try { String statusIntegrasi = cekStatusIntegrasi(contractNo); if (statusIntegrasi.equals("4")) { //String logid = contractMasterRepository.findLogidByContractNo(contractNo).orElse(null); ContractDTO contractDTO = contractMasterRepository.findByContractNo(contractNo).orElse(ContractDTO.builder().build()); ParamOutDTO paramOutDTO = callingProcedureRepository.updateParam(contractDTO.getContractId()); if (paramOutDTO.getPOut() == null) { try { switch (paramOutDTO.getPTypeId()) { case "01": customerPersonalProfessionalService.insertData(data, paramOutDTO.getPEconomicSector(), logidDTO.getLogid()); break; case "02": customerPersonalEnterpriseService.insertData(data, paramOutDTO.getPEconomicSector(), logidDTO.getLogid()); break; default: customerPersonalEmployeesService.insertData(data, paramOutDTO.getPEconomicSector(), logidDTO.getLogid()); break; } saveToFlaggingTable(contractNo, FLAG_SUCCESS, FLAG_INITIAL, "BERHASIL INTEGRASI DAN MAPPING PARAMETER", createdBy, createdDate); log.info("Transaksi berhasil di update param"); } catch (Exception e) { saveToFlaggingTable(contractNo, FLAG_MAPPING, FLAG_INITIAL, e.getMessage(), createdBy, createdDate); throw new Exception(e); } } else { saveToFlaggingTable(contractNo, FLAG_MAPPING, FLAG_INITIAL, paramOutDTO.getPOut(), createdBy, createdDate); throw new Exception(paramOutDTO.getPOut()); } } } catch (Exception e) { log.error("Transaksi gagal di mapping parameter: " + e.getMessage(), e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } @Transactional(rollbackFor = Exception.class) public void processKafkaJournal(String contractNo, String createdBy, Date createdDate) { try { String statusIntegrasi = cekStatusIntegrasi(contractNo); String statusJurnalKp = cekStatusJurnalKp(contractNo); if ("1".equals(statusIntegrasi) && "0".equals(statusJurnalKp)) { String validasi = callingProcedureRepository.journalPpd(contractNo); if (validasi == null || validasi.isEmpty()) { saveToFlaggingTable(contractNo, FLAG_SUCCESS, FLAG_SUCCESS, "BERHASIL PEMBENTUKAN JURNAL KP", createdBy, createdDate); } else { saveToFlaggingTable(contractNo, FLAG_SUCCESS, FLAG_FAILURE, validasi, createdBy, createdDate); throw new RuntimeException(validasi); } } } catch (Exception e) { log.error("Transaksi gagal pembentukan jurnal KP: " + e.getMessage(), e); throw e; } } @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = Exception.class) public void saveToFlaggingTable(String contractNo, Integer statusIntegrasi, Integer statusJurnalKp, String logs, String createdBy, Date createdDate) { FlaggingIntegration request = flaggingIntegrationRepository.getByContractNo(contractNo) .orElse(FlaggingIntegration.builder() .contractNo(contractNo) .createdBy(createdBy) .build()); request.setStatusIntegrasi(statusIntegrasi); request.setStatusJurnalKp(statusJurnalKp); if (request.getCreatedDate() == null) { request.setUpdatedDate(null); request.setUpdatedBy(null); request.setCreatedDate(createdDate); } else { request.setUpdatedBy(createdBy); request.setUpdatedDate(new Date()); } if (logs.length() > 250) { logs = logs.substring(0, 250); } request.setLogs(logs); flaggingIntegrationRepository.save(request); } public String cekStatusIntegrasi(String contractNo) { return flaggingIntegrationRepository.getStatusIntegrasi(contractNo); } public String cekStatusJurnalKp(String contractNo) { return flaggingIntegrationRepository.getStatusJurnalKp(contractNo); } @Transactional public String performCombinedInsertion(Map<String, Object> json_data, String logsId) throws Exception { //try { try { System.out.println(json_data); String contractNo = HelpersAM.parsingContractNo(json_data); ContractDTO contractMaster = contractMasterRepository.findByContractNo(contractNo).orElse(null); //--------------------TABLE EXISTING-------------------- applicationsService.updateData(json_data, contractMaster, logsId); //update applicationSurveyService.insertData(json_data, contractMaster, logsId); contractMasterService.updateData(json_data, contractMaster, logsId); //update contractObjectService.updateDate(json_data, contractMaster, logsId); //update contractInsuranceAdditionService.insertData(json_data, contractMaster); contractInsuranceFeeService.updateData(json_data, contractMaster, logsId); //update contractLoanFeeService.insertData(json_data, contractMaster, logsId); contractLoanRefundService.insertData(json_data, contractMaster, logsId); contractLoanStructureService.updateData(json_data, contractMaster, logsId); //update contractLoanSubsidyService.insertData(json_data, contractMaster, logsId); customerMasterService.updateDate(json_data, contractMaster); //update //customerCompanyService.insertData(json_data, contractMaster); //--SKIP (table untuk kebutuhan company / badan usaha) customerPersonalService.insertData(json_data, contractMaster); customerAddressDetailService.insertData(json_data, contractMaster); customerBankAccountService.insertData(json_data, contractMaster, logsId); //customerDocDetailService.insertData(json_data, contractMaster); //--SKIP (table untuk kebutuhan company / badan usaha) //customerShareholderService.insertData(json_data, contractMaster); //--SKIP (table untuk kebutuhan company / badan usaha) customerGuarantorService.insertData(json_data, contractMaster); //addressGuarantorService.insertData(json_data, contractMaster); //jadi satu dengan java customer address detail karena mengacu ke table yang sama customerPropertyDetailService.insertData(json_data, contractMaster); customerPersonalFamilyService.insertDataV2(json_data, contractMaster); customerCreditCardService.insertData(json_data, contractMaster); purchaseOrderService.updateData(json_data, contractMaster, logsId); //update confirmationLetterService.updateData(json_data, contractMaster, logsId); //update applicationSalesForceInfoService.insertData(json_data, contractMaster, logsId); //--SKIP TIDAK ADA SALES FORCE ID DI JSON (APPL SALES FORCE ID SEQUENCE DI ACQ) contractBufferCashService.insertData(json_data, contractMaster); contractProcessTimeService.insertData(json_data, contractMaster, logsId); //applicationLapKeuService.insertData(json_data, contractMaster); //--SKIP (table untuk kebutuhan company / badan usaha) customerPersonalService.saveDataMapping(json_data, contractMaster); // function untuk menyimpan data2 ke table staging param amBastkInvoiceService.insertData(json_data, contractMaster, logsId); //--------------------TABLE EXISTING-------------------- //--------------------TABLE BARU------------------------ // customerPersonalOccupationService.insertData(json_data, contractMaster, logsId); // contractAmortizeService.insertData(json_data, contractMaster, logsId); // contractDisburseFeeService.updateData(json_data, contractMaster, logsId); // contractObjectExtendedService.updateData(json_data, contractMaster, logsId); // applicationDeviasiService.insertData(json_data, contractMaster, logsId); // applicationVertelHeaderService.insertData(json_data, contractMaster, logsId); // applicationVertelHistoryService.insertData(json_data, contractMaster, logsId); // applicationVertelOtsService.insertData(json_data, contractMaster, logsId); // docReceiveHeaderService.insertData(json_data, contractMaster, logsId); // applicationApprovalReturnService.insertData(json_data, contractMaster, logsId); // applicationScoringService.insertData(json_data, contractMaster, logsId); // applicationScoringDetailService.insertData(json_data, contractMaster, logsId); // creditApprovalHeaderService.insertData(json_data, contractMaster, logsId); //--------------------TABLE BARU------------------------- return "Success"; } catch (Exception e) { //String errorMessage = "Error Proses Bridging Pada Bagian: " + e.getMessage() + " Pada Nomor Kontrak: " + HelpersAM.parsingContractNo(json_data); //String errorMessage = e.getMessage(); //log.error(errorMessage, e); //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); e.printStackTrace(); return String.valueOf(e); } //return "Success"; // return null; // } catch (Exception e) { //// log.error("Error Proses Bridging Pada Bagian: " + e.getMessage() + " Pada Nomor Kontrak: " + HelpersAM.parsingContractNo(json_data), e); //// return "Error: " + e.getMessage() + " on Contract Number: " + HelpersAM.parsingContractNo(json_data); // //String errorMessage = e.getMessage(); // //log.error(errorMessage, e); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // return e.getMessage(); // } } }
Editor is loading...
Leave a Comment