QR Settlement is optimized and History was also resolved

This commit is contained in:
kizzy 2025-12-23 01:39:47 +07:00
parent ee037a1101
commit c96d68ff2f
11 changed files with 109 additions and 52 deletions

File diff suppressed because one or more lines are too long

View File

@ -22,6 +22,7 @@ import com.denzcoskun.imageslider.constants.ScaleTypes;
import com.denzcoskun.imageslider.models.SlideModel; import com.denzcoskun.imageslider.models.SlideModel;
import com.pos.connection.bridge.binder.ECRConstant; import com.pos.connection.bridge.binder.ECRConstant;
import com.utsmm.kbz.util.MockData;
import com.utsmyanmar.baselib.emv.EmvParamOperation; import com.utsmyanmar.baselib.emv.EmvParamOperation;
import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.fragment.DataBindingFragment;
@ -35,6 +36,7 @@ import com.utsmyanmar.ecr.data.ResultOf;
import com.utsmyanmar.ecr.data.model.Transactions; import com.utsmyanmar.ecr.data.model.Transactions;
import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.print.PrintHelper; import com.utsmyanmar.paylibs.print.PrintHelper;
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt; import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
import com.utsmyanmar.paylibs.utils.POSUtil; import com.utsmyanmar.paylibs.utils.POSUtil;
@ -75,6 +77,7 @@ import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint; import dagger.hilt.android.AndroidEntryPoint;
import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.params.Params;
@AndroidEntryPoint @AndroidEntryPoint
public class MainFragment extends DataBindingFragment { public class MainFragment extends DataBindingFragment {
@ -123,9 +126,9 @@ public class MainFragment extends DataBindingFragment {
setNavBarIconWithTitle(getResourceString(R.string.menu_dashboard)); setNavBarIconWithTitle(getResourceString(R.string.menu_dashboard));
// logcat is resetting cuz of this setup , because it is using serial port // logcat is resetting cuz of this setup , because it is using serial port
if(SystemParamsOperation.getInstance().getECRStatus()){ // if(SystemParamsOperation.getInstance().getECRStatus()){
// setUpECR(); // setUpECR();
} // }
sharedViewModel.isEcrFinished.postValue(true); sharedViewModel.isEcrFinished.postValue(true);
sharedViewModel.isEcr.postValue(false); sharedViewModel.isEcr.postValue(false);
@ -210,6 +213,8 @@ public class MainFragment extends DataBindingFragment {
} }
sharedViewModel.setManualEntryStatus(SystemParamsOperation.getInstance().getManualEntryStatus()); sharedViewModel.setManualEntryStatus(SystemParamsOperation.getInstance().getManualEntryStatus());
// generateMockQR();
} }
/* /*
@ -796,10 +801,10 @@ public class MainFragment extends DataBindingFragment {
} }
// private void generateMockPreAuth() { // private void generateMockQR() {
// String transDate = "01/03/24"; // String transDate = "23/12/25";
// String transTime = "12:27:30"; // String transTime = "12:06:30";
// TradeData tradeData = MockData.getInstance().generateMockDataWithTime(TransactionsType.PRE_AUTH_SALE, AidlConstantsV2.CardType.IC.getValue(),transDate,transTime); // TradeData tradeData = MockData.getInstance().generateMockDataWithTime(TransactionsType.MMQR, 1,transDate,transTime);
// PayDetail payDetail = tradeData.getPayDetail(); // PayDetail payDetail = tradeData.getPayDetail();
// sharedViewModel.insertPayDetail(payDetail); // sharedViewModel.insertPayDetail(payDetail);
// LogUtil.d(TAG,"------------------- Inserted Mocked Data ------------------"); // LogUtil.d(TAG,"------------------- Inserted Mocked Data ------------------");

View File

@ -269,6 +269,8 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
cardReadViewModel.cardTypeData.postValue(cardType.value); cardReadViewModel.cardTypeData.postValue(cardType.value);
cardReadViewModel.setCardTransactionType(CardTransactionType.EMV); cardReadViewModel.setCardTransactionType(CardTransactionType.EMV);
} }
// cardReadViewModel.cardTypeData.postValue(cardType.value);
// cardReadViewModel.setCardTransactionType(CardTransactionType.EMV);
} }
delayFunctionCall(()->{ delayFunctionCall(()->{
routeId = R.id.action_cardWaitingFragment_to_processingCardFragment; routeId = R.id.action_cardWaitingFragment_to_processingCardFragment;

View File

@ -163,17 +163,17 @@ public class TransactionResultFragment extends DataBindingFragment implements Da
TransactionsType transactionType = sharedViewModel.transactionsType.getValue(); TransactionsType transactionType = sharedViewModel.transactionsType.getValue();
if (isNonApprovedTrade(payDetail) && isNonWavepayTransaction(transactionType)) { if (isNonApprovedTrade(payDetail) && isNonQRPayTransaction(transactionType)) {
startPrintProcess(false); startPrintProcess(false);
isCardInside(); isCardInside();
} else if (transactionType == TransactionsType.SETTLEMENT || transactionType == TransactionsType.MMQR_SETTLEMENT) { } else if (transactionType == TransactionsType.SETTLEMENT || transactionType == TransactionsType.MMQR_SETTLEMENT) {
handleSettlementTransaction(siriusReq); handleSettlementTransaction(siriusReq);
} else if (isWavePayNonSuccessTransaction(transactionType, payDetail)) { } else if (isQRPayNonSuccessTransaction(transactionType, payDetail)) {
// startPrintProcess(false); // startPrintProcess(false);
showDeclineDialog("QR Payment Failed!"); showDeclineDialog("QR Payment Failed!");
navigateToMainScreen(); navigateToMainScreen();
} else if (isWavePaySuccessTransaction(transactionType, payDetail)) { } else if (isQRPaySuccessTransaction(transactionType, payDetail)) {
handleWavePaySuccessTransaction(payDetail, siriusReq); handleQRPaySuccessTransaction(payDetail, siriusReq);
} else { } else {
handleDefaultTransaction(payDetail, siriusReq); handleDefaultTransaction(payDetail, siriusReq);
} }
@ -187,19 +187,19 @@ public class TransactionResultFragment extends DataBindingFragment implements Da
!payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT); !payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT);
} }
private boolean isNonWavepayTransaction(TransactionsType transactionType) { private boolean isNonQRPayTransaction(TransactionsType transactionType) {
return transactionType != TransactionsType.MMQR && return transactionType != TransactionsType.MMQR &&
transactionType != TransactionsType.MMQR_INQUIRY_STATUS && transactionType != TransactionsType.MMQR_INQUIRY_STATUS &&
transactionType != TransactionsType.MMQR_REFUND; transactionType != TransactionsType.MMQR_REFUND;
} }
private boolean isWavePayNonSuccessTransaction(TransactionsType transactionType, PayDetail payDetail) { private boolean isQRPayNonSuccessTransaction(TransactionsType transactionType, PayDetail payDetail) {
return (transactionType == TransactionsType.MMQR && payDetail.getQrTransStatus() != 1) || return (transactionType == TransactionsType.MMQR && payDetail.getQrTransStatus() != 1) ||
(transactionType == TransactionsType.MMQR_INQUIRY_STATUS && payDetail.getQrTransStatus() != 1) || (transactionType == TransactionsType.MMQR_INQUIRY_STATUS && payDetail.getQrTransStatus() != 1) ||
(transactionType == TransactionsType.MMQR_REFUND && payDetail.getQrTransStatus() != 1); (transactionType == TransactionsType.MMQR_REFUND && payDetail.getQrTransStatus() != 1);
} }
private boolean isWavePaySuccessTransaction(TransactionsType transactionType, PayDetail payDetail) { private boolean isQRPaySuccessTransaction(TransactionsType transactionType, PayDetail payDetail) {
return (transactionType == TransactionsType.MMQR || transactionType == TransactionsType.MMQR_REFUND) && return (transactionType == TransactionsType.MMQR || transactionType == TransactionsType.MMQR_REFUND) &&
payDetail.getQrTransStatus() == 1; payDetail.getQrTransStatus() == 1;
@ -212,7 +212,7 @@ public class TransactionResultFragment extends DataBindingFragment implements Da
navigateToMainScreen(); navigateToMainScreen();
} }
private void handleWavePaySuccessTransaction(PayDetail payDetail, SiriusRequest siriusReq) { private void handleQRPaySuccessTransaction(PayDetail payDetail, SiriusRequest siriusReq) {
SystemParamsOperation.getInstance().setLastSuccessTrnx(payDetail.getVoucherNo()); SystemParamsOperation.getInstance().setLastSuccessTrnx(payDetail.getVoucherNo());
downloadParameters(siriusReq, TMSUpdate.CHECK); downloadParameters(siriusReq, TMSUpdate.CHECK);
navigateToPrintScreen(); navigateToPrintScreen();

View File

@ -296,8 +296,8 @@ public class ReprintAnyTransactionFragment extends DataBindingFragment {
// LogUtil.d(TAG,"Transaction settlement config : "+pay.isSettlementEnabled()); // LogUtil.d(TAG,"Transaction settlement config : "+pay.isSettlementEnabled());
// LogUtil.d(TAG,"Transaction batch : "+pay.getBatchNo()); // LogUtil.d(TAG,"Transaction batch : "+pay.getBatchNo());
// LogUtil.d(TAG,"Current batch : "+SystemParamsOperation.getInstance().getCurrentBatchNum()); // LogUtil.d(TAG,"Current batch : "+SystemParamsOperation.getInstance().getCurrentBatchNum());
//
// LogUtil.d(TAG,"----------------------------------------------------------"); LogUtil.d(TAG,"----------------------------------------------------------");
if(sharedViewModel.transactionsType.getValue() != null && sharedViewModel.transactionsType.getValue() == TransactionsType.MMQR_HISTORY) { if(sharedViewModel.transactionsType.getValue() != null && sharedViewModel.transactionsType.getValue() == TransactionsType.MMQR_HISTORY) {
// Wave Inquiry Status:: // Wave Inquiry Status::

View File

@ -15,8 +15,10 @@ import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.SettleData; import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.model.TradeData; import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.POSUtil; import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings;
import com.utsmyanmar.paylibs.utils.enums.HostType; import com.utsmyanmar.paylibs.utils.enums.HostType;
import com.utsmyanmar.paylibs.utils.enums.TransMenu; import com.utsmyanmar.paylibs.utils.enums.TransMenu;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType; import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
@ -33,16 +35,22 @@ import java.util.List;
public class QRSettlementTransactionFragment extends DataBindingFragment implements DataBindingFragment.BackPressCallback { public class QRSettlementTransactionFragment extends DataBindingFragment implements DataBindingFragment.BackPressCallback {
private static final String TAG = QRSettlementTransactionFragment.class.getSimpleName();
private SharedViewModel sharedViewModel; private SharedViewModel sharedViewModel;
private ManagementViewModel managementViewModel; private ManagementViewModel managementViewModel;
private SettlementViewModel settlementViewModel; private SettlementViewModel settlementViewModel;
ArrayList<PayDetail> qrTransactionsList = new ArrayList<>(); ArrayList<PayDetail> qrTransactionsList = new ArrayList<>();
ArrayList<PayDetail> qrTransListAll = new ArrayList<>();
SettleData settleData;
private int routeId; private int routeId;
private int count = 0; private int count = 0;
private long totalAmount = 0; private long totalAmount = 0;
@Override @Override
protected void initViewModel() { protected void initViewModel() {
@ -105,6 +113,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
} }
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
@ -143,6 +152,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
managementViewModel.getTransactionHistory().observe(getViewLifecycleOwner(), payDetailList -> { managementViewModel.getTransactionHistory().observe(getViewLifecycleOwner(), payDetailList -> {
if (payDetailList != null) { if (payDetailList != null) {
qrTransactionsList.clear(); qrTransactionsList.clear();
qrTransListAll.clear();
count = 0; count = 0;
totalAmount = 0; totalAmount = 0;
@ -151,8 +161,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
// Filter for QR transactions only // Filter for QR transactions only
if ((payDetail.getTransactionType() == TransactionsType.MMQR.value if ((payDetail.getTransactionType() == TransactionsType.MMQR.value
|| payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value)
&& payDetail.getQrTransStatus() == 1 && payDetail.getQrTransStatus() == 1) {
&& POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1) {
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value; boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value;
qrTransactionsList.add(payDetail); qrTransactionsList.add(payDetail);
@ -163,10 +172,13 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
totalAmount += payDetail.getAmount(); totalAmount += payDetail.getAmount();
} }
} }
else if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
qrTransListAll.add(payDetail);
}
} }
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
// Handle cursor window size exceeded error LogUtil.e(TAG,"QRSettlement : Database cursor error - likely due to large data size:"+ e);
android.util.Log.e("QRSettlement", "Database cursor error - likely due to large data size", e);
showEmptyDataView(); showEmptyDataView();
settlementViewModel.isNoData.setValue(true); settlementViewModel.isNoData.setValue(true);
return; return;
@ -194,6 +206,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
List<PayDetail> payDetailList = managementViewModel.payDetails.getValue(); List<PayDetail> payDetailList = managementViewModel.payDetails.getValue();
if( payDetailList != null) { if( payDetailList != null) {
qrTransactionsList.clear(); qrTransactionsList.clear();
qrTransListAll.clear();
count = 0; count = 0;
totalAmount = 0; totalAmount = 0;
@ -216,8 +229,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
} }
} }
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
// Handle cursor window size exceeded error LogUtil.e(TAG,"QRSettlement : Database cursor error in last settlement - likely due to large data size:"+ e);
android.util.Log.e("QRSettlement", "Database cursor error in last settlement - likely due to large data size", e);
showEmptyDataView(); showEmptyDataView();
settlementViewModel.isNoData.setValue(true); settlementViewModel.isNoData.setValue(true);
return; return;
@ -248,7 +260,8 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
int qrRefundCount = 0; int qrRefundCount = 0;
long qrRefundAmount = 0; long qrRefundAmount = 0;
long totalAmount = 0; totalAmount = 0;
for (PayDetail payDetail : qrTransactionsList) { for (PayDetail payDetail : qrTransactionsList) {
if (payDetail.getTransactionType() == TransactionsType.MMQR.value) { if (payDetail.getTransactionType() == TransactionsType.MMQR.value) {
@ -272,24 +285,8 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
managementViewModel.trnxCountDR.setValue(String.valueOf(count)); managementViewModel.trnxCountDR.setValue(String.valueOf(count));
// Create settlement data for transaction result // Create settlement data for transaction result
SettleData settleData = new SettleData(qrSaleCount, qrSaleAmount, 0, 0L, qrRefundCount, qrRefundAmount, 0, 0L); settleData = new SettleData(qrSaleCount, qrSaleAmount, 0, 0L, qrRefundCount, qrRefundAmount, 0, 0L);
TradeData tradeData = Params.newTrade(false);
PayDetail payDetail = tradeData.getPayDetail();
payDetail.setSettleDataObj(settleData);
payDetail.setTransactionType(TransactionsType.MMQR_SETTLEMENT.value);
payDetail.setTransType(TransactionsType.MMQR_SETTLEMENT.name);
payDetail.setAmount(totalAmount);
payDetail.setTradeAnswerCode("000");
if(sharedViewModel.getTransMenu().getValue() != TransMenu.LAST_SETTLEMENT) {
sharedViewModel.insertPayDetail(payDetail);
}
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(totalAmount));
sharedViewModel.payDetails.setValue(qrTransactionsList);
sharedViewModel.payDetail.setValue(payDetail);
} }
@ -307,6 +304,34 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
} }
private void processData() {
TradeData tradeData = Params.newTrade(false);
PayDetail payDetail = tradeData.getPayDetail();
payDetail.setSettleDataObj(settleData);
payDetail.setTransactionType(TransactionsType.MMQR_SETTLEMENT.value);
payDetail.setTransType(TransactionsType.MMQR_SETTLEMENT.name);
payDetail.setAmount(totalAmount);
payDetail.setTradeAnswerCode("000");
payDetail.setBatchNo(SystemParamsOperation.getInstance().getCurrentBatchNum());
if(sharedViewModel.getTransMenu().getValue() != TransMenu.LAST_SETTLEMENT) {
sharedViewModel.insertPayDetail(payDetail);
}
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(totalAmount));
sharedViewModel.payDetails.setValue(qrTransactionsList);
sharedViewModel.payDetail.setValue(payDetail);
for (PayDetail pay : qrTransactionsList) {
settlementViewModel.deletePayDetail(pay);
}
for (PayDetail pay : qrTransListAll) {
settlementViewModel.deletePayDetail(pay);
}
}
private void updateData() { private void updateData() {
EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue()); EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());
sharedViewModel.pushReceipt(request); sharedViewModel.pushReceipt(request);
@ -343,11 +368,9 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
if(sharedViewModel.getTransMenu().getValue() == TransMenu.SETTLEMENT) { if(sharedViewModel.getTransMenu().getValue() == TransMenu.SETTLEMENT) {
if (!qrTransactionsList.isEmpty()) { if (!qrTransactionsList.isEmpty()) {
for (PayDetail payDetail : qrTransactionsList) { SystemParamsOperation.getInstance().getIncrementBatchNo();
settlementViewModel.deletePayDetail(payDetail);
}
processData();
updateData(); updateData();
navigateToResult(); navigateToResult();

View File

@ -7,6 +7,7 @@ import com.utsmyanmar.paylibs.model.ICCardInfo;
import com.utsmyanmar.paylibs.model.MAGCardInfo; import com.utsmyanmar.paylibs.model.MAGCardInfo;
import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.TradeData; import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.model.enums.TransCVM;
import com.utsmyanmar.paylibs.system.SystemDateTime; import com.utsmyanmar.paylibs.system.SystemDateTime;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType; import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
@ -151,6 +152,7 @@ public class MockData {
payDetail.setOriginalTransDate(SystemDateTime.getMMDD()+SystemDateTime.getYYYY()); payDetail.setOriginalTransDate(SystemDateTime.getMMDD()+SystemDateTime.getYYYY());
payDetail.setTransCVM(TransCVM.NO_CVM);
if(transType == TransactionsType.MMQR) { if(transType == TransactionsType.MMQR) {
payDetail.setCardType(cardInputType); payDetail.setCardType(cardInputType);
payDetail.setTransType(transType.name); payDetail.setTransType(transType.name);
@ -158,7 +160,13 @@ public class MockData {
payDetail.setCardHolderName(mockCardData.getCardHolderName()); payDetail.setCardHolderName(mockCardData.getCardHolderName());
payDetail.setAccountType(mockCardData.getCardScheme()); payDetail.setAccountType(mockCardData.getCardScheme());
payDetail.setCustomerMobile(mockCardData.getPhoneNo()); payDetail.setCustomerMobile(mockCardData.getPhoneNo());
payDetail.setCustomerMobile("kbzpay");
payDetail.setOriginalTransDate("2024-09-16 15:57:10");
payDetail.setQrTransId("12345678");
payDetail.setQrTransStatus(1);
payDetail.setQrReferNo("123456789012");
payDetail.setReferNo("123456789012");
payDetail.setApprovalCode("12345678");
} else { } else {
payDetail.setCardType(cardInputType); payDetail.setCardType(cardInputType);
@ -197,7 +205,7 @@ public class MockData {
// payDetail.setTransDate(strTransDate); // payDetail.setTransDate(strTransDate);
// payDetail.setTransTime(strTransTime); // payDetail.setTransTime(strTransTime);
payDetail.setAmount(10000); payDetail.setAmount(100000);
payDetail.setTransactionType(transType.value); payDetail.setTransactionType(transType.value);
tradeData.setPayDetail(payDetail); tradeData.setPayDetail(payDetail);

View File

@ -29,6 +29,7 @@ import com.utsmyanmar.checkxread.sdk.SunmiSDK;
import com.utsmyanmar.paylibs.PayLibNex; import com.utsmyanmar.paylibs.PayLibNex;
import com.utsmyanmar.paylibs.PayLibsUtils; import com.utsmyanmar.paylibs.PayLibsUtils;
import com.utsmyanmar.paylibs.network.ISOSocket; import com.utsmyanmar.paylibs.network.ISOSocket;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
@ -101,21 +102,21 @@ public class BaseApplication extends Application {
TerminalKeyUtil.initNexKey(); TerminalKeyUtil.initNexKey();
emvParamOperation.loadAidRids(); emvParamOperation.loadAidRids();
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
android.util.Log.e("BaseApplication", "Failed to initialize NexGo SDK due to missing native library: " + e.getMessage()); LogUtil.e("BaseApplication", "Failed to initialize NexGo SDK due to missing native library: " + e.getMessage());
} catch (Exception e) { } catch (Exception e) {
android.util.Log.e("BaseApplication", "Failed to initialize NexGo SDK: " + e.getMessage()); LogUtil.e("BaseApplication", "Failed to initialize NexGo SDK: " + e.getMessage());
} }
} }
private void initFallbackMode() { private void initFallbackMode() {
android.util.Log.w("BaseApplication", "Running in fallback mode without NexGo SDK"); LogUtil.w("BaseApplication", "Running in fallback mode without NexGo SDK");
try { try {
if (emvParamOperation != null) { if (emvParamOperation != null) {
emvParamOperation.loadAidRids(); emvParamOperation.loadAidRids();
} }
} catch (Exception e) { } catch (Exception e) {
android.util.Log.e("BaseApplication", "Failed to load EMV parameters in fallback mode: " + e.getMessage()); LogUtil.e("BaseApplication", "Failed to load EMV parameters in fallback mode: " + e.getMessage());
} }
} }

View File

@ -36,6 +36,7 @@ import com.nexgo.oaf.apiv3.emv.EmvTransConfigurationEntity;
import com.nexgo.oaf.apiv3.emv.OnEmvProcessListener2; import com.nexgo.oaf.apiv3.emv.OnEmvProcessListener2;
import com.nexgo.oaf.apiv3.emv.PromptEnum; import com.nexgo.oaf.apiv3.emv.PromptEnum;
import com.nexgo.oaf.apiv3.emv.UnionPayTransDataEntity; import com.nexgo.oaf.apiv3.emv.UnionPayTransDataEntity;
import com.nexgo.oaf.apiv3.emv.VisaTransDataEntity;
import com.sunmi.pay.hardware.aidl.bean.CardInfo; import com.sunmi.pay.hardware.aidl.bean.CardInfo;
import com.sunmi.pay.hardware.aidlv2.bean.EMVCandidateV2; import com.sunmi.pay.hardware.aidlv2.bean.EMVCandidateV2;
import com.sunmi.pay.hardware.aidlv2.bean.PinPadDataV2; import com.sunmi.pay.hardware.aidlv2.bean.PinPadDataV2;
@ -244,6 +245,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
} }
//for UPI //for UPI
UnionPayTransDataEntity unionPayTransDataEntity = new UnionPayTransDataEntity(); UnionPayTransDataEntity unionPayTransDataEntity = new UnionPayTransDataEntity();
unionPayTransDataEntity.setQpbocForGlobal(true); unionPayTransDataEntity.setQpbocForGlobal(true);

View File

@ -27,7 +27,11 @@ object ECRHelper {
var onECRReceive: (bytes: ByteArray) -> Unit = { } var onECRReceive: (bytes: ByteArray) -> Unit = { }
fun connect(bundle: Bundle) { fun connect(bundle: Bundle) {
call { anyExecute(ecrService) { connect(bundle, ecrConnection) } } call {
anyExecute(ecrService) {
connect(bundle, ecrConnection)
}
}
} }
fun disconnect() { fun disconnect() {

View File

@ -931,6 +931,12 @@ public abstract class BaseXPrint {
LogUtil.d(TAG, "Start printing :" + retCode); LogUtil.d(TAG, "Start printing :" + retCode);
if (retCode == 0) {
callbackStatus.onSuccess();
} else {
callbackStatus.onFailure();
}
} }
}); });
} }