From 58d8329dbd192ca1d740b87fed73cff5cf7910f7 Mon Sep 17 00:00:00 2001 From: Bishwajeet Kumar Rajak Date: Wed, 22 Apr 2026 01:34:12 +0530 Subject: [PATCH] neft_outward --- __pycache__/config.cpython-314.pyc | Bin 0 -> 2025 bytes __pycache__/db.cpython-314.pyc | Bin 0 -> 2554 bytes __pycache__/logging_config.cpython-314.pyc | Bin 0 -> 655 bytes api_client.py | 18 ++++++ config.py | 22 ++++++++ db.py | 38 +++++++++++++ logging_config.py | 10 ++++ main.py | 27 +++++++++ processor.py | 62 +++++++++++++++++++++ repository.py | 49 ++++++++++++++++ requirements.txt | 2 + schedular.py | 23 ++++++++ 12 files changed, 251 insertions(+) create mode 100644 __pycache__/config.cpython-314.pyc create mode 100644 __pycache__/db.cpython-314.pyc create mode 100644 __pycache__/logging_config.cpython-314.pyc create mode 100644 api_client.py create mode 100644 config.py create mode 100644 db.py create mode 100644 logging_config.py create mode 100644 main.py create mode 100644 processor.py create mode 100644 repository.py create mode 100644 requirements.txt create mode 100644 schedular.py diff --git a/__pycache__/config.cpython-314.pyc b/__pycache__/config.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1525439e7404cd0bce363c2e7976665b470f9847 GIT binary patch literal 2025 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 literal 0 HcmV?d00001 diff --git a/__pycache__/logging_config.cpython-314.pyc b/__pycache__/logging_config.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c946e28a6d20b224cca3bda97570b1f8284b241f GIT binary patch literal 655 zcmah`K}#D!6rS0gq}A0_EhSI_#)L=~QH!Lc)Kbu>pvXp+s0Y`EbvrIgH`y?=Db!Q0 zJ@wkZ(0^0nAu{GxsPtBvLa%)@*%WVmFyFj+-}~O1d9#w4okn2m{kz~h?BC>JVp`&i zo`TauZ;*}mQH*RYi(+i+fSQeq$Rs~xqU9y&YD)p?utqjO4>>9*;b>CzUj(70`#iZv zB(4petBGzA`a@6sYNJ$kxfcg5YV!P9sT|VxG;F)_c%Cnn$6kIF+!p2B^&xI*BBjzq z`Z8iIH?~Y&JP0G-58A#kE?gdXwWxg=_=4= TRUNC(SYSDATE) + AND q.TXN_DATE < TRUNC(SYSDATE) + 1 + """ + return self.db.fetch_all(sql) + + def insert_outward_log(self, d): + sql = """ + INSERT INTO outward_neft_api_log ( + BANKCODE, TXNCODE, TXNIND, + JRNL_ID, REF_NO, TRAN_DATE, + TXN_AMT, RECVR_ACCT_NO, SENDER_ACCT_NO, + RECIEVER_IFSC, SENDER_IFSC, + SENDER_NAME, RECIEVER_NAME, + BENEFICIARY_ADDRESS, + SENDER_TO_RECIVER_INFO, + MSG_TYPE + ) VALUES ( + :bankcode, 'OUTWARD NEFT', 'DR', + :jrnl_id, :ref_no, :tran_date, + :txn_amt, :recv_ac, :send_ac, + :ifsc, ' ', + :sender_name, :receiver_name, + :beneficiary_address, + :sender_info, + 'N06' + ) + """ + self.db.execute(sql, d) + + def mark_processed(self, txn_no): + self.db.execute( + "UPDATE NEFT_RTGS_TXN_RRN SET MARK_TYPE='Y' WHERE TXN_NO=:txn", + {"txn": txn_no} + ) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0e3667f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +oracledb==2.0.0 +requests \ No newline at end of file diff --git a/schedular.py b/schedular.py new file mode 100644 index 0000000..42ed6e9 --- /dev/null +++ b/schedular.py @@ -0,0 +1,23 @@ +import time +from logging_config import get_logger + +logger = get_logger(__name__) + +class Scheduler: + def __init__(self, processor, config): + self.processor = processor + self.config = config + + def run(self): + logger.info("Scheduler started") + while True: + try: + self.processor.process() + except Exception: + logger.exception("Processing cycle failed") + + logger.info( + "Sleeping for %s minutes", self.config.poll_interval_minutes + ) + time.sleep(self.config.poll_interval_minutes * 60) +`` \ No newline at end of file