150 lines
6.0 KiB
Kotlin
150 lines
6.0 KiB
Kotlin
package net.ipksindia.dao
|
|
|
|
import net.ipksindia.ItemNotFoundException
|
|
import net.ipksindia.model.TransactionRequest
|
|
import java.sql.Date
|
|
import java.sql.ResultSet
|
|
import java.sql.SQLException
|
|
|
|
class TransactionDao {
|
|
|
|
private val singleTransactionRequestQuery = """
|
|
SELECT
|
|
txn_no,
|
|
TRIM(src_ac_no) AS src_ac_no,
|
|
TRIM(dest_ac_no) AS dest_ac_no,
|
|
ifsc_code,
|
|
txn_amt,
|
|
txn_date,
|
|
t.teller_id,
|
|
CASE
|
|
WHEN t.ifsc_code LIKE 'WBSC%' THEN 'FAILED'
|
|
ELSE 'RECEIVED'
|
|
END AS status,
|
|
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(UPPER(beneficiary_name), '[^A-Z0-9 ]', ''), ' {2,}', ' '), 1, 35) AS beneficiary_name,
|
|
beneficiary_add,
|
|
t.pacs_id,
|
|
comm_txn_no,
|
|
comm_txn_amt,
|
|
dccb_code,
|
|
TO_NUMBER(t.cbs_br_code) AS br_code,
|
|
SUBSTR(REGEXP_REPLACE(REGEXP_REPLACE(UPPER(remm_name), '[^A-Z0-9 ]', ''), ' {2,}', ' '),1,35) AS remitter_name,
|
|
ipks_accno AS pacs_acc_no,
|
|
da.link_accno AS cbs_sb_acc_no,
|
|
'pacs_db' AS db_name,
|
|
kh.mobile_no,
|
|
kh.address_1 || kh.address_2 AS remitter_address,
|
|
if.idi_bank_name AS beneficiary_bank_name,
|
|
if.idi_branch_name AS beneficiary_branch_name
|
|
FROM neft_rtgs_txn t
|
|
JOIN dep_account da ON t.ipks_accno = da.key_1
|
|
JOIN kyc_hdr kh ON da.customer_no = kh.cif_no
|
|
JOIN idi_ifsc_dir_info if ON if.idi_ifsc_code = t.ifsc_code
|
|
WHERE
|
|
t.txn_no = ?
|
|
""".trimIndent()
|
|
|
|
private val transactionUpdateQuery = """
|
|
INSERT INTO neft_rtgs_txn_queue (
|
|
txn_no,
|
|
src_ac_no,
|
|
dest_ac_no,
|
|
ifsc_code,
|
|
txn_amt,
|
|
txn_date,
|
|
teller_id,
|
|
status,
|
|
beneficiary_name,
|
|
beneficiary_add,
|
|
pacs_id,
|
|
comm_txn_no,
|
|
comm_txn_amt,
|
|
dccb_code,
|
|
br_code,
|
|
remitter_name,
|
|
cbs_queue_no,
|
|
pacs_acc_no,
|
|
cbs_queue_no2
|
|
) VALUES (
|
|
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
|
|
)
|
|
""".trimIndent()
|
|
|
|
fun updateSuccessTransaction(request: TransactionRequest, transferQueueNumber: String, neftQueueNumber: String) {
|
|
try {
|
|
DatabaseFactory.instance.getConnection().use { connection ->
|
|
connection.prepareStatement(transactionUpdateQuery).also {
|
|
it.setString(1, request.transactionNumber)
|
|
it.setString(2, request.pacsCurrentAccountNumber)
|
|
it.setString(3, request.neftBeneficiaryAccountNumber)
|
|
it.setString(4, request.ifscCode)
|
|
it.setString(5, request.amount)
|
|
it.setDate(6, Date.valueOf(request.date))
|
|
it.setString(7, request.tellerId)
|
|
it.setString(8, "PROCESSED")
|
|
it.setString(9, request.beneficiaryName)
|
|
it.setString(10, request.beneficiaryAddress)
|
|
it.setString(11, request.pacsId)
|
|
it.setString(12, request.commissionTransactionNumber)
|
|
it.setString(13, request.commissionAmount)
|
|
it.setString(14, request.dccbCode)
|
|
it.setString(15, request.branchCode)
|
|
it.setString(16, request.remitterName)
|
|
it.setString(17, transferQueueNumber)
|
|
it.setString(18, request.pacsAccountNumber)
|
|
it.setString(19, neftQueueNumber)
|
|
}.use { it.executeUpdate() }
|
|
}
|
|
} catch (e: ExceptionInInitializerError) {
|
|
throw SQLException("Failed to connect to the database ${e.message}")
|
|
}
|
|
}
|
|
|
|
fun getTransactionRequest(transactionNumber: String): TransactionRequest {
|
|
return try {
|
|
DatabaseFactory.instance.getConnection().use { connection ->
|
|
connection.prepareStatement(singleTransactionRequestQuery).apply { setString(1, transactionNumber) }
|
|
.executeQuery()
|
|
.use { mapToObject(it) ?: throw ItemNotFoundException("Transaction Number", transactionNumber) }
|
|
}
|
|
} catch (e: ExceptionInInitializerError) {
|
|
throw SQLException("Failed to connect to the database: ${e.message}")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private fun mapToObject(rs: ResultSet): TransactionRequest? {
|
|
|
|
if (rs.next()) {
|
|
return TransactionRequest(
|
|
transactionNumber = rs.getString("txn_no"),
|
|
pacsCurrentAccountNumber = rs.getString("src_ac_no"),
|
|
neftBeneficiaryAccountNumber = rs.getString("dest_ac_no"),
|
|
ifscCode = rs.getString("ifsc_code"),
|
|
amount = rs.getString("txn_amt"),
|
|
date = rs.getDate("txn_date").toLocalDate(),
|
|
tellerId = rs.getString("teller_id"),
|
|
status = rs.getString("status"),
|
|
beneficiaryName = rs.getString("beneficiary_name") ?: "UNKNOWN",
|
|
beneficiaryAddress = rs.getString("beneficiary_add") ?: "UNKNOWN",
|
|
pacsId = rs.getString("pacs_id"),
|
|
commissionTransactionNumber = rs.getString("comm_txn_no"),
|
|
commissionAmount = rs.getString("comm_txn_amt"),
|
|
dccbCode = rs.getString("dccb_code"),
|
|
branchCode = rs.getString("br_Code"),
|
|
remitterName = rs.getString("remitter_name"),
|
|
pacsAccountNumber = rs.getString("pacs_acc_no"),
|
|
linkedCBSAccountNumber = rs.getString("cbs_sb_acc_no"),
|
|
mobileNumber = rs.getString("mobile_no") ?: "999999999",
|
|
remitterAddress = rs.getString("remitter_address"),
|
|
beneficiaryBankName = rs.getString("beneficiary_bank_name"),
|
|
beneficiaryBranchName = rs.getString("beneficiary_branch_name"),
|
|
senderAcctType = "10", //for savings as shared by c-edge
|
|
beneficiaryAcctType = "10" //for savings as shared by c-edge
|
|
)
|
|
}
|
|
return null
|
|
}
|
|
|