Untitled
plain_text
23 days ago
17 kB
4
Indexable
Never
package com.dwidasa.engine.service.impl.view; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.dwidasa.engine.dao.TransactionDao; import com.dwidasa.engine.model.Teller; import com.dwidasa.engine.model.Transaction; import com.dwidasa.engine.model.view.BaseView; import com.dwidasa.engine.model.view.KeyValueView; import com.dwidasa.engine.model.view.MpnPaymentView; import com.dwidasa.engine.service.CacheManager; import com.dwidasa.engine.service.TellerService; import com.dwidasa.engine.service.view.MessageCustomizer; import com.dwidasa.engine.service.view.MpnPaymentViewService; import com.dwidasa.engine.util.RandomGenerator; @Service("mpnPaymentViewService") public class MpnPaymentViewServiceImpl extends PaymentViewServiceImpl implements MpnPaymentViewService { @Autowired private CacheManager cacheManager; @Autowired private TransactionDao transactionDao; @Autowired protected TellerService tellerService; public MpnPaymentViewServiceImpl() { super(); setInquiryMessageCustomizer(new InquiryMessageCustomizer()); setTransactionMessageCustomizer(new TransactionMessageCustomizer()); setTransactionTimeoutMessageCustomizer(new TransactionTimeoutMessageCustomizer()); } @Override public void composeReprint(BaseView view, Transaction transaction, Transaction ot) { MpnPaymentView tv = (MpnPaymentView) view; transaction.setFreeData1(tv.getBit48()); transaction.setFreeData5(tv.getCustomerReference()); if (tv.getBit120() == null) { tv.setBit120(""); } transaction.setFreeData4("BILLER.MPN2.REINQ"); transaction.setFreeData2(tv.getBit120());//bit 120 dipakai untuk kirim user teller transaction.setValueDate(tv.getSettlementDate()); transaction.setStan(new BigDecimal(tv.getStan())); transaction.setReferenceNumber(tv.getReferenceNumber()); transaction.setFreeData6(tv.getBit63()); transaction.setFreeData7(tv.getNamaBranch()); transaction.setTglBit12(tv.getTransactionDate()); } @Override public Boolean decomposeReprint(BaseView view, Transaction transaction) { MpnPaymentView tv = (MpnPaymentView) view; getInquiryMessageCustomizer().decompose(view, transaction); String bit48 = transaction.getFreeData1(); if (tv.getCustomerReference().startsWith("0") || tv.getCustomerReference().startsWith("1") || tv.getCustomerReference().startsWith("2") || tv.getCustomerReference().startsWith("3")) { //DJP int bit48Length = bit48.length(); tv.setNtpn(bit48.substring(241, bit48Length).trim()); } else if (tv.getCustomerReference().startsWith("4") || tv.getCustomerReference().startsWith("5") || tv.getCustomerReference().startsWith("6")) { //DJBC tv.setNtpn(bit48.substring(118,134).trim()); } else if (tv.getCustomerReference().startsWith("7") || tv.getCustomerReference().startsWith("8") || tv.getCustomerReference().startsWith("9")) { //DJA tv.setNtpn(bit48.substring(61,77).trim()); } tv.setStan(transaction.getStan().toString()); tv.setResponseCode(transaction.getResponseCode()); tv.setReferenceNumber(transaction.getReferenceNumber()); transaction.setApprovalNumber(tv.getNtpn()); return Boolean.TRUE; } private class InquiryMessageCustomizer implements MessageCustomizer { private InquiryMessageCustomizer() { } public void compose(BaseView view, Transaction transaction) { MpnPaymentView tv = (MpnPaymentView) view; transaction.setFreeData5(tv.getCustomerReference()); if (tv.getBit120() == null) { tv.setBit120(""); } transaction.setFreeData2(tv.getBit120());//bit 120 dipakai untuk kirim user teller transaction.setFreeData4("BILLER.MPN2.INQ"); if (tv.getBit56().equals("BILLER.MPN2.REINQ")) transaction.setFreeData4("BILLER.MPN2.REINQ"); //save settlement date String cutOffMpn = cacheManager.getParameterValue("MPN_CUT_OFF"); int hh = Integer.parseInt(cutOffMpn.substring(0, cutOffMpn.indexOf(":"))); int mm = Integer.parseInt(cutOffMpn.substring(cutOffMpn.indexOf(":") + 1)); DateTime cutOff = new DateTime().withTime(hh, mm, 0, 0); DateTime tanggalBuku = new DateTime().withTime(0, 0, 0, 0); Calendar calendar = Calendar.getInstance(); //hari senin-jumat String[] strDays = new String[]{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thusday", "Friday", "Saturday" }; //Day_OF_WEEK starts from 1 while array index starts from 0 System.out.println("Current day is : " +strDays[calendar.get(Calendar.DAY_OF_WEEK) - 1]); System.out.println("current cut off is : "+cutOff.toDate()); if (transaction.getTransactionDate().after(cutOff.toDate())) { if(strDays[calendar.get(Calendar.DAY_OF_WEEK) - 1].equals("Friday")){ tanggalBuku = tanggalBuku.plusDays(3); } else if(strDays[calendar.get(Calendar.DAY_OF_WEEK) - 1].equals("Saturday")){ tanggalBuku = tanggalBuku.plusDays(2); } else{ tanggalBuku = tanggalBuku.plusDays(1); } } tv.setSettlementDate(tanggalBuku.toDate()); transaction.setValueDate(tanggalBuku.toDate()); transaction.setFreeData6(tv.getKodeBranch()); transaction.setFreeData7(tv.getNamaBranch()); System.out.println("ini tes coba accountType = "+tv.getAccountType()); if(tv.getAccountType().equals("10")) { transaction.setMerchantType("7012");//pembayaran mpn cash }else if(tv.getAccountType().equals("40")) { transaction.setMerchantType("7016");//pembayaran mpn overbook } String referenceNumber = RandomGenerator.generateRrnMpn(12); transaction.setReferenceNumber(referenceNumber); // tv.setReferenceNumber(referenceNumber); System.out.println("refNumber : "+transaction.getReferenceNumber()); } public Boolean decompose(Object view, Transaction transaction) { MpnPaymentView tv = (MpnPaymentView) view; String bit48 = transaction.getFreeData1(); tv.setBit48(bit48); tv.setAmount(transaction.getTransactionAmount()); List<KeyValueView> inquiryList = new ArrayList<KeyValueView>(); tv.setInquiryList(inquiryList); if (tv.getCustomerReference().startsWith("0") || tv.getCustomerReference().startsWith("1") || tv.getCustomerReference().startsWith("2") || tv.getCustomerReference().startsWith("3")) { //DJP inquiryList.add(new KeyValueView("npwp", bit48.substring(0,16).trim())); inquiryList.add(new KeyValueView("namaWajibPajak", bit48.substring(16,141).trim())); inquiryList.add(new KeyValueView("alamatWajibPajak", bit48.substring(141,191).trim())); inquiryList.add(new KeyValueView("jumlahDetail", bit48.substring(191,193).trim())); // inquiryList.add(new KeyValueView("kodeJenisSetoran", bit48.substring(121,124).trim())); // inquiryList.add(new KeyValueView("masaPajak", bit48.substring(124,132).trim())); // inquiryList.add(new KeyValueView("nomorSk", bit48.substring(132,147).trim())); // inquiryList.add(new KeyValueView("nop", bit48.substring(147,165).trim())); } else if (tv.getCustomerReference().startsWith("4") || tv.getCustomerReference().startsWith("5") || tv.getCustomerReference().startsWith("6")) { //DJBC inquiryList.add(new KeyValueView("namaWajibBayar", bit48.substring(0,50).trim())); inquiryList.add(new KeyValueView("idWajibBayar", bit48.substring(50,70).trim())); inquiryList.add(new KeyValueView("jenisDokumen", bit48.substring(70,72).trim())); inquiryList.add(new KeyValueView("nomorDokumen", bit48.substring(72,102).trim())); inquiryList.add(new KeyValueView("tanggalDokumen", bit48.substring(102,112).trim())); inquiryList.add(new KeyValueView("kodeKppbc", bit48.substring(112,118).trim())); } else if (tv.getCustomerReference().startsWith("7") || tv.getCustomerReference().startsWith("8") || tv.getCustomerReference().startsWith("9")) { //DJA inquiryList.add(new KeyValueView("namaWajibBayar", bit48.substring(0,50).trim())); inquiryList.add(new KeyValueView("kl", bit48.substring(50,53).trim())); inquiryList.add(new KeyValueView("unitEselonI", bit48.substring(53,55).trim())); inquiryList.add(new KeyValueView("kodeSatker", bit48.substring(55,61).trim())); } tv.setTotal(tv.getAmount().add(tv.getFee())); //tv.setKodeBranch(transaction.getFreeData6()); tv.setReferenceNumber(transaction.getReferenceNumber()); System.out.println("refNumber dec:"+tv.getReferenceNumber()); return Boolean.TRUE; } } private class TransactionMessageCustomizer implements MessageCustomizer { private TransactionMessageCustomizer() { } public void compose(BaseView view, Transaction transaction) { MpnPaymentView tv = (MpnPaymentView) view; transaction.setFreeData1(tv.getBit48()); transaction.setFreeData5(tv.getCustomerReference()); transaction.setTransactionAmount(tv.getTotal());//set amount di bit4 transaction.setTransactionAmountBit5(tv.getTotal());//set amount di bit5 if (tv.getBit120() == null) { tv.setBit120(""); } System.out.print("++++++++++++++++++++++++++ "+ tv.getUserTeller() +" +++++++++++++++++++++++++\n"); Teller teller = tellerService.get(tv.getUserTeller()); transaction.setFreeData1(tv.getBit48()); // transaction.setFreeData2(tv.getBit120());//bit 120 dipakai untuk kirim user teller transaction.setFreeData2(StringUtils.rightPad(teller.getUsername(), 10) + StringUtils.rightPad(teller.getPassword(), 15)+ StringUtils.rightPad(teller.getBranchCode(), 11)); transaction.setFreeData4("BILLER.MPN2.POS"); //save settlement date String cutOffMpn = cacheManager.getParameterValue("MPN_CUT_OFF"); int hh = Integer.parseInt(cutOffMpn.substring(0, cutOffMpn.indexOf(":"))); int mm = Integer.parseInt(cutOffMpn.substring(cutOffMpn.indexOf(":") + 1)); DateTime cutOff = new DateTime().withTime(hh, mm, 0, 0); DateTime tanggalBuku = new DateTime().withTime(0, 0, 0, 0); Calendar calendar = Calendar.getInstance(); //hari senin-jumat String[] strDays = new String[]{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thusday", "Friday", "Saturday" }; //Day_OF_WEEK starts from 1 while array index starts from 0 System.out.println("Current day is : " +strDays[calendar.get(Calendar.DAY_OF_WEEK) - 1]); if (transaction.getTransactionDate().after(cutOff.toDate())) { if(strDays[calendar.get(Calendar.DAY_OF_WEEK) - 1].equals("Friday")){ tanggalBuku = tanggalBuku.plusDays(3); } else if(strDays[calendar.get(Calendar.DAY_OF_WEEK) - 1].equals("Saturday")){ tanggalBuku = tanggalBuku.plusDays(2); } else{ tanggalBuku = tanggalBuku.plusDays(1); } } tv.setSettlementDate(tanggalBuku.toDate()); transaction.setValueDate(tanggalBuku.toDate()); transaction.setFreeData6(tv.getKodeBranch()); transaction.setFreeData7(tv.getNamaBranch()); if(tv.getAccountType().equals("10")) {//pembayaran mpn cash transaction.setMerchantType("7012"); }else if(tv.getAccountType().equals("40")) {//pembayaran mpn overbook transaction.setMerchantType("7016"); } String referenceNumber = RandomGenerator.generateRrnMpn(12); transaction.setReferenceNumber(referenceNumber); tv.setReferenceNumber(referenceNumber); } public Boolean decompose(Object view, Transaction transaction) { MpnPaymentView tv = (MpnPaymentView) view; getInquiryMessageCustomizer().decompose(view, transaction); String bit48 = transaction.getFreeData1(); //String bit63 = transaction.getFreeData6(); if (tv.getCustomerReference().startsWith("0") || tv.getCustomerReference().startsWith("1") || tv.getCustomerReference().startsWith("2") || tv.getCustomerReference().startsWith("3")) { //DJP int bit48Length = bit48.length(); tv.setNtpn(bit48.substring(241, bit48Length).trim()); } else if (tv.getCustomerReference().startsWith("4") || tv.getCustomerReference().startsWith("5") || tv.getCustomerReference().startsWith("6")) { //DJBC tv.setNtpn(bit48.substring(118,134).trim()); } else if (tv.getCustomerReference().startsWith("7") || tv.getCustomerReference().startsWith("8") || tv.getCustomerReference().startsWith("9")) { //DJA tv.setNtpn(bit48.substring(61,77).trim()); } tv.setStan(transaction.getStan().toString()); tv.setResponseCode(transaction.getResponseCode()); tv.setReferenceNumber(transaction.getReferenceNumber()); tv.setNoArsipCore(transaction.getFreeData4()); //tv.setKodeBranch(bit63.toString().trim()); //save settlement date // String cutOffMpn = cacheManager.getParameterValue("MPN_CUT_OFF"); // int hh = Integer.parseInt(cutOffMpn.substring(0, cutOffMpn.indexOf(":"))); // int mm = Integer.parseInt(cutOffMpn.substring(cutOffMpn.indexOf(":") + 1)); // DateTime cutOff = new DateTime().withTime(hh, mm, 0, 0); // DateTime tanggalBuku = new DateTime().withTime(0, 0, 0, 0); // if (transaction.getTransactionDate().after(cutOff.toDate())) { // tanggalBuku = tanggalBuku.plusDays(1); // } // tv.setSettlementDate(tanggalBuku.toDate()); // transaction.setValueDate(tanggalBuku.toDate()); // transaction.setApprovalNumber(tv.getNtpn()); tv.setSettlementDate(transaction.getValueDate()); transaction.setApprovalNumber(tv.getNtpn()); return Boolean.TRUE; } } private class TransactionTimeoutMessageCustomizer implements MessageCustomizer { @Override public void compose(BaseView view, Transaction transaction) { // TODO Auto-generated method stub } @Override public Boolean decompose(Object view, Transaction transaction) { MpnPaymentView tv = (MpnPaymentView) view; tv.setStan(transaction.getStan().toString()); tv.setNoArsipCore(transaction.getFreeData4()); return null; } } }