From c8f0da379e24f2355d0388f9081836bdf18438c0 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Wed, 3 Jun 2026 21:36:16 +0630 Subject: [PATCH] saved signature --- .../kbz/ui/core_ui/SignatureFragment.java | 4 +- .../ui/core_viewmodel/SharedViewModel.java | 4 ++ .../utsmyanmar/baselib/db/AppDatabase.java | 2 +- .../baselib/db/dao/PayDetailDao.java | 3 ++ .../utsmyanmar/baselib/di/DatabaseModule.java | 9 ++++ .../utsmyanmar/baselib/repo/Repository.java | 4 ++ .../utsmyanmar/paylibs/model/PayDetail.java | 41 +++++++++++++++---- .../utils/print_utils/BitmapUtils.java | 8 ++++ 8 files changed, 65 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java index 8a618d5..546754d 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java @@ -134,8 +134,10 @@ public class SignatureFragment extends DataBindingFragment { private void updateData() { PayDetail payDetail = sharedViewModel.payDetail.getValue(); - payDetail.setESignHexData(BitmapUtils.bitmapToHexString(mSignaturePad.getSignatureBitmap())); + byte[] blob = BitmapUtils.bitmapToBytes(mSignaturePad.getSignatureBitmap()); + payDetail.setESignBlob(blob); sharedViewModel.payDetail.setValue(payDetail); + sharedViewModel.updateESignBlob(payDetail.voucherNo, blob); } public class ClickEvent { diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java index c3a47ab..5509804 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java @@ -485,6 +485,10 @@ public class SharedViewModel extends ViewModel { repository.updatePayDetail(payDetail); } + public void updateESignBlob(String voucherNo, byte[] blob) { + repository.updateESignBlob(voucherNo, blob); + } + public void insertPayDetail(PayDetail payDetail) { repository.insertPayDetail(payDetail); } diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/db/AppDatabase.java b/baselib/src/main/java/com/utsmyanmar/baselib/db/AppDatabase.java index 6d4c80b..2ca81fd 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/db/AppDatabase.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/db/AppDatabase.java @@ -45,7 +45,7 @@ import com.utsmyanmar.paylibs.model.PayDetail; MPUCtlsEntity.class, BinEntity.class }, - version = 13, + version = 14, exportSchema = false ) @TypeConverters({SettleDataConverter.class, TransCVMConverter.class, CardSchemeConverter.class, QRSettleDataConverter.class, CardSettleDataConverter.class}) diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java b/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java index a351fb1..20bd2f1 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java @@ -137,6 +137,9 @@ public interface PayDetailDao { @Query(("SELECT * FROM paydetail WHERE isCanceled = 0 AND referNo IN(:referNo)")) Maybe searchPayByRefNum(String referNo); + @Query("UPDATE paydetail SET eSignBlob = :blob WHERE voucherNo = :voucherNo") + void updateESignBlob(String voucherNo, byte[] blob); + @Query(("UPDATE paydetail SET customerMobile =:appName, qrTransId =:transId, approvalCode =:transId WHERE referNo =:refNum AND transactionType = 34")) Completable updateUnfinishedQRTrans(String appName,String transId,String refNum); diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/di/DatabaseModule.java b/baselib/src/main/java/com/utsmyanmar/baselib/di/DatabaseModule.java index 8bdfc41..77a9efa 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/di/DatabaseModule.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/di/DatabaseModule.java @@ -327,6 +327,14 @@ public class DatabaseModule { } }; + static final Migration MIGRATION_13_14 = new Migration(14, 15) { + @Override + public void migrate(SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE paydetail " + + " ADD COLUMN eSignBlob BLOB"); + } + }; + @Provides @Singleton @@ -339,6 +347,7 @@ public class DatabaseModule { .addMigrations(MIGRATION_10_11) .addMigrations(MIGRATION_11_12) .addMigrations(MIGRATION_12_13) + .addMigrations(MIGRATION_13_14) .allowMainThreadQueries() .addCallback(new RoomDatabase.Callback() { @Override diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java b/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java index 011203c..b715bd3 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java @@ -145,6 +145,10 @@ public class Repository { public void updatePayDetail(PayDetail payDetail){payDetailDao.update(payDetail);} + public void updateESignBlob(String voucherNo, byte[] blob) { + payDetailDao.updateESignBlob(voucherNo, blob); + } + public LiveData getReversalTransaction(String voucherNo) { return payDetailDao.getReversalTransaction(voucherNo);} public LiveData getLastReversalTransaction() { return payDetailDao.getLastReversalTransactionLive();} public LiveData> getAllReversalTransactions() { return payDetailDao.getAllReversalTransactionsLive();} diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/model/PayDetail.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/model/PayDetail.java index e9ea89c..04f2539 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/model/PayDetail.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/model/PayDetail.java @@ -77,6 +77,8 @@ public class PayDetail implements Serializable { public String cardOrgCode = ""; // International credit card company code (domain 63.1) public String reference = ""; // Remarks public String eSignHexData = ""; // Electronic signature hexadecimal data + public String eSignBase64 = ""; + public byte[] eSignBlob; public int transPlatform; // Supported trading platforms: 0: bank card 1: Alipay 2: WeChat 3: UnionPay wallet public int transactionType; // 1: Consumption 2: Consumption cancellation; 3: Return 4. Pre-authorization 5. Pre-authorization cancellation 6. Pre-authorization completed 7. Pre-authorization completed cancellation 8. Settlement 9. Sign-in 10. Sign-out 11. Transaction query @@ -166,7 +168,6 @@ public class PayDetail implements Serializable { public List cardSettleData; - @Embedded public CardInfo cardInfo; @@ -188,7 +189,9 @@ public class PayDetail implements Serializable { boolean isPrinted, boolean eSignIsUploaded, boolean isFreePWD, boolean isFreeSign, String tempKSN, String tempMerchantNo, String tempMerchantName, String tempTerminalNo, long transNum, String customOrderNo, String approvalCode, boolean isSettle, String settleData, String settleList, String otherCardNo, String tradeDateAndTime, String tradeDateTime, String hostName, - String transDate, String transTime, String invoiceNo, String transId, String qrReferNo, String customerMobile, SettleData settleDataObj,boolean isSettlementEnabled,TransCVM transCVM,List qrSettleData,List cardSettleData) { + String transDate, String transTime, String invoiceNo, String transId, String qrReferNo, String customerMobile, + SettleData settleDataObj, boolean isSettlementEnabled, TransCVM transCVM, List qrSettleData, + List cardSettleData, String eSignBase64) { this.PID = PID; this.sendBag = sendBag; this.receiverBag = receiverBag; @@ -239,6 +242,7 @@ public class PayDetail implements Serializable { this.cardOrgCode = cardOrgCode; this.reference = reference; this.eSignHexData = eSignHexData; + this.eSignBase64 = eSignBase64; this.transPlatform = transPlatform; this.transactionType = transactionType; this.qrCodeScanModel = qrCodeScanModel; @@ -286,7 +290,7 @@ public class PayDetail implements Serializable { this.tempTerminalNo = tempTerminalNo; this.transNum = transNum; this.customOrderNo = customOrderNo; - this.approvalCode= approvalCode; + this.approvalCode = approvalCode; this.isSettle = isSettle; this.settleData = settleData; this.settleList = settleList; @@ -333,9 +337,13 @@ public class PayDetail implements Serializable { public PayDetail() { } - public boolean isSettlementEnabled() { return isSettlementEnabled; } + public boolean isSettlementEnabled() { + return isSettlementEnabled; + } - public void setSettlementEnabled(boolean settlementEnabled) { this.isSettlementEnabled = settlementEnabled; } + public void setSettlementEnabled(boolean settlementEnabled) { + this.isSettlementEnabled = settlementEnabled; + } public String getOtherCardNo() { return otherCardNo; @@ -706,7 +714,6 @@ public class PayDetail implements Serializable { } - public long getAmount() { return this.amount; } @@ -1231,7 +1238,7 @@ public class PayDetail implements Serializable { public void seteSignHexData(String eSignHexData) { this.eSignHexData = eSignHexData; } - + public boolean isNeedReversal() { return isNeedReversal; } @@ -1343,6 +1350,22 @@ public class PayDetail implements Serializable { public void setESignHexData(String eSignHexData) { this.eSignHexData = eSignHexData; } + + public String getESignBase64(){ + return eSignBase64; + } + + public void setESignBase64(String eSignBase64){ + this.eSignBase64 = eSignBase64; + } + + public byte[] getESignBlob() { + return eSignBlob; + } + + public void setESignBlob(byte[] eSignBlob) { + this.eSignBlob = eSignBlob; + } public boolean getIsReversal() { return this.isReversal; @@ -1376,7 +1399,9 @@ public class PayDetail implements Serializable { this.qrSettleData = qrSettleData; } - public List getCardSettleData() {return cardSettleData;} + public List getCardSettleData() { + return cardSettleData; + } public void setCardSettleData(List cardSettleData) { this.cardSettleData = cardSettleData; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/print_utils/BitmapUtils.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/print_utils/BitmapUtils.java index 157ea03..9fd5938 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/print_utils/BitmapUtils.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/print_utils/BitmapUtils.java @@ -5,6 +5,7 @@ import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Rect; +import android.util.Base64; import android.util.Log; import java.io.ByteArrayOutputStream; @@ -248,4 +249,11 @@ public class BitmapUtils { // Decode byte array to bitmap return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); } + + public static byte[] bitmapToBytes(Bitmap bitmap) { + if (bitmap == null) return null; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); + return outputStream.toByteArray(); + } }