From 3da8533a4c16d0d485f5be227b35e0d3026be234 Mon Sep 17 00:00:00 2001 From: asif Date: Sun, 11 May 2025 14:53:54 +0530 Subject: [PATCH] cleaned up, formatted and made the project runnable after decompilation --- .gitignore | 2 + pom.xml | 69 ++++++ src/main/java/com/bean/DataBean.java | 107 ++++++++++ src/main/java/com/main/ResponseMain.java | 15 ++ src/main/java/com/main/Scheduler.java | 35 +++ .../java/com/methods/RequestResponse.java | 201 ++++++++++++++++++ src/main/java/com/methods/Util.java | 17 ++ 7 files changed, 446 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/bean/DataBean.java create mode 100644 src/main/java/com/main/ResponseMain.java create mode 100644 src/main/java/com/main/Scheduler.java create mode 100644 src/main/java/com/methods/RequestResponse.java create mode 100644 src/main/java/com/methods/Util.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ca37d98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +dependency-reduced-pom.xml +target/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fd818b6 --- /dev/null +++ b/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + com.main + RuPayKCCInterface + 1.0 + jar + + UTF-8 + 1.8 + 1.8 + com.main.ResponseMain + + + + + org.json + json + 20140107 + + + log4j + log4j + 1.2.17 + + + com.oracle.database.jdbc + ojdbc8 + 23.5.0.24.07 + + + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + com.main.ResponseMain + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/bean/DataBean.java b/src/main/java/com/bean/DataBean.java new file mode 100644 index 0000000..d837ed4 --- /dev/null +++ b/src/main/java/com/bean/DataBean.java @@ -0,0 +1,107 @@ +package com.bean; + +public class DataBean { + private String mobNum; + + private String mcnNum; + + private String timestamp; + + private String jrnlId; + + private String acctNo; + + private String txnAmt; + + private String txnInd; + + private String narration; + + private String txnCode; + + private String bankcode; + + public String getBankcode() { + return this.bankcode; + } + + public void setBankcode(String bankcode) { + this.bankcode = bankcode; + } + + public String getJrnlId() { + return this.jrnlId; + } + + public void setJrnlId(String jrnlId) { + this.jrnlId = jrnlId; + } + + public String getAcctNo() { + return this.acctNo; + } + + public void setAcctNo(String acctNo) { + this.acctNo = acctNo; + } + + public String getTxnAmt() { + return this.txnAmt; + } + + public void setTxnAmt(String txnAmt) { + this.txnAmt = txnAmt; + } + + public String getTxnInd() { + return this.txnInd; + } + + public void setTxnInd(String txnInd) { + this.txnInd = txnInd; + } + + public String getNarration() { + return this.narration; + } + + public void setNarration(String narration) { + this.narration = narration; + } + + public String getTxnCode() { + return this.txnCode; + } + + public void setTxnCode(String txnCode) { + this.txnCode = txnCode; + } + + public String getMobNum() { + return this.mobNum; + } + + public void setMobNum(String mobNum) { + this.mobNum = mobNum; + } + + public String getMcnNum() { + return this.mcnNum; + } + + public void setMcnNum(String mcnNum) { + this.mcnNum = mcnNum; + } + + public String getTimestamp() { + return this.timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + public String toString() { + return "DataBean [mobNum=" + this.mobNum + ", mcnNum=" + this.mcnNum + ", timestamp=" + this.timestamp + "]"; + } +} diff --git a/src/main/java/com/main/ResponseMain.java b/src/main/java/com/main/ResponseMain.java new file mode 100644 index 0000000..aa3ba1b --- /dev/null +++ b/src/main/java/com/main/ResponseMain.java @@ -0,0 +1,15 @@ +package com.main; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class ResponseMain { + static ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); + + public static void main(String[] args) { + System.out.println("----------------------------------------------------------------------"); + service.scheduleAtFixedRate(new Scheduler(), 0L, 2L, TimeUnit.MINUTES); + } +} + diff --git a/src/main/java/com/main/Scheduler.java b/src/main/java/com/main/Scheduler.java new file mode 100644 index 0000000..a376811 --- /dev/null +++ b/src/main/java/com/main/Scheduler.java @@ -0,0 +1,35 @@ +package com.main; + +import com.methods.RequestResponse; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Properties; + +public class Scheduler implements Runnable { + public static Properties prop = new Properties(); + + public void run() { + Date date = new Date(); + DateFormat sdf = new SimpleDateFormat("ddMMyyyy"); + Calendar cal = Calendar.getInstance(); + String dateToday = sdf.format(cal.getTime()); + System.out.println("Scheduled Run Begins...."); + try { + ArrayList urlList = RequestResponse.getUrl(); + for (int i = 0; i < urlList.size(); i++) { + System.out.println("Iterating for Next Bank API"); + try { + RequestResponse.get_response(urlList.get(i), dateToday); + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("End of Scheduled Run"); + } +} diff --git a/src/main/java/com/methods/RequestResponse.java b/src/main/java/com/methods/RequestResponse.java new file mode 100644 index 0000000..a1d2b6c --- /dev/null +++ b/src/main/java/com/methods/RequestResponse.java @@ -0,0 +1,201 @@ +package com.methods; + +import com.bean.DataBean; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Iterator; +import org.json.JSONArray; +import org.json.JSONObject; + +public class RequestResponse { + static Connection connection = null; + + static ResultSet rs = null; + + static Statement statement = null; + + public static ArrayList get_response(String jsonInputString, String date) throws IOException { + String urlFromDatabase = "https://IPKS.cedgeapiservices.in/IPKSTRAN"; + System.out.println("Req MSG : " + jsonInputString); + ArrayList data = new ArrayList<>(); + URL url = null; + try { + url = new URL(urlFromDatabase); + } catch (MalformedURLException e1) { + e1.printStackTrace(); + } + HttpURLConnection con = null; + try { + con = (HttpURLConnection)url.openConnection(); + con.setRequestMethod("POST"); + con.setRequestProperty("Content-Type", "application/json; utf-8"); + con.setRequestProperty("Accept", "application/json"); + con.setDoOutput(true); + } catch (IOException e2) { + e2.printStackTrace(); + } + try (OutputStream os = con.getOutputStream()) { + byte[] input = jsonInputString.getBytes("utf-8"); + os.write(input, 0, input.length); + } + int responseCode = 0; + try { + responseCode = con.getResponseCode(); + } catch (IOException e1) { + e1.printStackTrace(); + } + System.out.println("Response Code : " + responseCode); + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + StringBuffer response = new StringBuffer(); + response.append("{\"result\":"); + try { + String inputLine; + while ((inputLine = in.readLine()) != null) + response.append(inputLine); + } catch (IOException e1) { + e1.printStackTrace(); + } + try { + in.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + try { + response.append("}"); + if (response.toString().contains("No data found")) { + System.out.println("No Transactions found"); + } else { + JSONObject json = new JSONObject(response.toString()); + JSONArray dataArray = new JSONArray(json.get("result").toString()); + for (int i = 0; i < dataArray.length(); i++) { + String JSonData = dataArray.get(i).toString(); + DataBean databean = new DataBean(); + JSONObject dataD = new JSONObject(JSonData); + databean.setAcctNo(dataD.get("acctno").toString()); + databean.setBankcode(dataD.get("bankcode").toString()); + databean.setTxnCode(dataD.get("trancode").toString()); + databean.setTxnAmt(dataD.get("trnamt").toString()); + databean.setNarration(dataD.get("narration").toString()); + databean.setJrnlId(dataD.get("jrnl").toString()); + databean.setTimestamp(date); + if (Double.parseDouble(dataD.get("trnamt").toString()) > 0.0D) { + databean.setTxnInd("CR"); + } else if (Double.parseDouble(dataD.get("trnamt").toString()) < 0.0D) { + databean.setTxnInd("DR"); + } else { + databean.setTxnInd("NA"); + } + data.add(databean); + } + setDatainDatabase(data, date); + } + } catch (Exception e3) { + e3.printStackTrace(); + } + return data; + } + + public static ArrayList getUrl() { + Date date = new Date(); + DateFormat sdf = new SimpleDateFormat("ddMMyyyy"); + Calendar cal = Calendar.getInstance(); + String dateToday = sdf.format(cal.getTime()); + System.out.println("Date :" + dateToday); + String url = null; + String bankCode = null; + ArrayList finalUrl = new ArrayList<>(); + try { + connection = Util.getDBConnection(); + statement = connection.createStatement(); + rs = statement.executeQuery("select * from rupay_kcc_api_map where status='Y' and API_TYPE='TXN'"); + while (rs.next()) { + url = rs.getString(7); + bankCode = rs.getString(6); + String finUrl = url.replaceAll("dt", dateToday); + finUrl = finUrl.replaceAll("bcode", bankCode); + finalUrl.add(finUrl); + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + try { + if (connection != null) + connection.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + return finalUrl; + } + + public static void setDatainDatabase(ArrayList data, String date) { + Connection connection = null; + ResultSet rs = null; + Statement st = null; + String query = null; + PreparedStatement statement = null; + ArrayList combination = new ArrayList<>(); + try { + try { + connection = Util.getDBConnection(); + st = connection.createStatement(); + rs = st.executeQuery("select l.bankcode,l.jrnl_id,l.txn_date from kcc_api_log l where l.txn_date='" + date + "'"); + while (rs.next()) { + String comb = rs.getString(1) + "|" + rs.getString(2) + "|" + rs.getString(3); + combination.add(comb); + } + } catch (Exception ex) { + System.out.println("No record found"); + } + Iterator iter = data.iterator(); + Statement st2 = connection.createStatement(); + while (iter.hasNext()) { + DataBean d = iter.next(); + if (!d.getTxnCode().equalsIgnoreCase("001057")) { + if (combination.contains(d.getBankcode() + "|" + d.getJrnlId() + "|" + d.getTimestamp()) || d.getJrnlId() == null || d.getJrnlId().equalsIgnoreCase("")) { + System.out.println("RECORD ALREADY PRESENT FOR " + d.getBankcode() + "|" + d.getJrnlId() + "|" + d.getTimestamp()); + continue; + } + query = "insert into kcc_api_log (bankcode, cbsacctno, txncode, txnamt, txnind, narration, jrnl_id, txn_date, post_flag, success_flag, errorlog) values ('" + d.getBankcode() + "','" + d.getAcctNo() + "','" + d.getTxnCode() + "',abs(" + d.getTxnAmt() + "),'"; + query = query + d.getTxnInd() + "','" + d.getNarration() + "','" + d.getJrnlId() + "','" + d.getTimestamp() + "','N','N'," + null + ")"; + System.out.println("SQL Statement :" + query); + st2.addBatch(query); + System.out.println("Added to DB Insert Batch"); + continue; + } + System.out.println("Txncode:" + d.getTxnCode()); + } + st2.executeBatch(); + System.out.println("Insert to DB Completed"); + System.out.println("Posting Txns in IPKS"); + CallableStatement cs = connection.prepareCall("{call kcc_api_txn_post}"); + cs.execute(); + System.out.println("Posting Completed, Check log."); + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + try { + if (connection != null) + connection.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + } +} diff --git a/src/main/java/com/methods/Util.java b/src/main/java/com/methods/Util.java new file mode 100644 index 0000000..0fba5de --- /dev/null +++ b/src/main/java/com/methods/Util.java @@ -0,0 +1,17 @@ +package com.methods; + +import java.sql.Connection; +import java.sql.DriverManager; + +public class Util { + public static Connection getDBConnection() { + Connection dbConnection = null; + try { + Class.forName("oracle.jdbc.driver.OracleDriver"); + dbConnection = DriverManager.getConnection("jdbc:oracle:thin:@ipksprod3.c7q7defafeea.ap-south-1.rds.amazonaws.com:1521:IPKS", "pacs_db", "pacs_db"); + } catch (Exception e) { + e.printStackTrace(); + } + return dbConnection; + } +}