11 changed files with 425 additions and 57 deletions
-
112src/main/java/com/gcc/erppostdata/common/MySchduler.java
-
6src/main/java/com/gcc/erppostdata/communityhall/CmhQueryBank.java
-
18src/main/java/com/gcc/erppostdata/config/AppConfig.java
-
53src/main/java/com/gcc/erppostdata/config/DatabaseConfig.java
-
2src/main/java/com/gcc/erppostdata/repo/CoworkLogRepo.java
-
64src/main/java/com/gcc/erppostdata/repo/SwimLogRepo.java
-
174src/main/java/com/gcc/erppostdata/swimmingpool/SWPostData.java
-
41src/main/java/com/gcc/erppostdata/swimmingpool/SwimQueryBank.java
-
2src/main/resources/application-dev.properties
-
2src/main/resources/application-prod.properties
-
2src/main/resources/application.properties
@ -0,0 +1,64 @@ |
|||
package com.gcc.erppostdata.repo; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.stereotype.Repository; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@Repository |
|||
public class SwimLogRepo { |
|||
|
|||
@Autowired |
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlerpPostData") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
public int insert(Map<String, Object> data) { |
|||
String sql = "INSERT INTO swimming_post_data (" + |
|||
"mobile, assessment_no, collection_type, mstr_code_one, split_amount_one, " + |
|||
"total_transaction_amount, total_transaction_code, transaction_date, " + |
|||
"transaction_no, transaction_ref_no, unique_receipt_id, booking_id, " + |
|||
"user_name, status, response) " + |
|||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
|||
|
|||
return jdbcTemplate.update(sql, |
|||
data.get("PARTYMOBILE"), |
|||
data.get("ASSESSMENTNO"), |
|||
data.get("COLLECTION_TYPE"), |
|||
data.get("MSTRCODEONE"), |
|||
data.get("SPLITAMOUNTONE"), |
|||
data.get("TOTALTRANSACTIONAMOUNT"), |
|||
data.get("TOTALTRANSACTIONCODE"), |
|||
data.get("TRANSACTIONDATE"), |
|||
data.get("TRANSACTIONNO"), |
|||
data.get("TRANSACTIONREFNO"), |
|||
data.get("UNIQUERECEIPTID"), |
|||
data.get("UNIQUERECEIPTID"), |
|||
data.get("PARTYNAME"), |
|||
data.get("status"), |
|||
data.get("response") |
|||
); |
|||
} |
|||
|
|||
public int updateLog(String status, String response, String id) { |
|||
String sql = "UPDATE swimming_post_data SET status = ?, response = ? WHERE id = ?"; |
|||
return jdbcTemplate.update(sql, status, response, id); |
|||
} |
|||
|
|||
public List<Map<String, Object>> getDataByStatus(String status) { |
|||
String sql = "SELECT * FROM swimming_post_data WHERE status = ?"; |
|||
return jdbcTemplate.queryForList(sql, status); |
|||
} |
|||
|
|||
public int getLastBookingIdInserted() { |
|||
String sql = "SELECT unique_receipt_id FROM swimming_post_data ORDER BY unique_receipt_id DESC LIMIT 1"; |
|||
return jdbcTemplate.queryForObject(sql, Integer.class); |
|||
} |
|||
} |
|||
@ -0,0 +1,174 @@ |
|||
package com.gcc.erppostdata.swimmingpool; |
|||
|
|||
import com.fasterxml.jackson.core.JsonProcessingException; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import com.gcc.erppostdata.config.AppConfig; |
|||
import com.gcc.erppostdata.repo.SwimLogRepo; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.beans.factory.annotation.Qualifier; |
|||
import org.springframework.jdbc.core.JdbcTemplate; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.sql.DataSource; |
|||
import java.io.BufferedReader; |
|||
import java.io.InputStreamReader; |
|||
import java.net.HttpURLConnection; |
|||
import java.net.URL; |
|||
import java.net.URLEncoder; |
|||
import java.time.LocalDate; |
|||
import java.util.*; |
|||
|
|||
@Component |
|||
public class SWPostData { |
|||
|
|||
@Autowired |
|||
private AppConfig appConfig; |
|||
|
|||
@Autowired |
|||
private SwimLogRepo swimLogRepo; |
|||
|
|||
@Autowired |
|||
public void setDataSource(@Qualifier("mysqlSwimmingPoolDataSource") DataSource dataSource) { |
|||
this.jdbcTemplate = new JdbcTemplate(dataSource); |
|||
} |
|||
|
|||
private JdbcTemplate jdbcTemplate; |
|||
|
|||
public void fetchSwimData(String sql, String id) { |
|||
System.out.println("SQL: " + sql); |
|||
|
|||
List<Map<String, Object>> results = jdbcTemplate.queryForList(sql); |
|||
List<Map<String, Object>> swimDataList = new ArrayList<>(); |
|||
|
|||
System.out.println("Records fetched: " + results.size()); |
|||
|
|||
for (Map<String, Object> row : results) { |
|||
try { |
|||
Map<String, Object> data = new TreeMap<>(); |
|||
|
|||
// Safe value extraction |
|||
String bookingId = row.get("bookingid") != null ? row.get("bookingid").toString() : ""; |
|||
String paymentId = row.get("payment_id") != null ? row.get("payment_id").toString() : ""; |
|||
String paymentDate = row.get("paymentdate") != null ? row.get("paymentdate").toString() : ""; |
|||
String name = row.get("name") != null ? row.get("name").toString() : ""; |
|||
String mobile = row.get("mobile_no") != null ? row.get("mobile_no").toString() : ""; |
|||
String amountStr = row.get("amount") != null ? row.get("amount").toString() : "0"; |
|||
String orderid = row.get("orderid") != null ? row.get("orderid").toString() : ""; |
|||
|
|||
double amount = 0; |
|||
try { |
|||
amount = Double.parseDouble(amountStr); |
|||
} catch (NumberFormatException e) { |
|||
System.err.println("Invalid amount for bookingId: " + bookingId); |
|||
} |
|||
|
|||
String assessmentNo = LocalDate.now().getYear() + "/SWIM/" + bookingId; |
|||
|
|||
data.put("serviceId", "getOtherCollection"); |
|||
data.put("COLLECTION_TYPE", "Swimming Pool"); |
|||
data.put("TOTALTRANSACTIONCODE", "450310000"); |
|||
data.put("ASSESSMENTNO", assessmentNo); |
|||
data.put("UNIQUERECEIPTID", bookingId); |
|||
data.put("TRANSACTIONNO", orderid); |
|||
data.put("TRANSACTIONREFNO", paymentId); |
|||
data.put("TRANSACTIONDATE", paymentDate); |
|||
data.put("TOTALTRANSACTIONAMOUNT", amount); |
|||
data.put("MSTRCODEONE", "020"); |
|||
data.put("SPLITAMOUNTONE", amountStr); |
|||
data.put("PARTYNAME", name); |
|||
data.put("PARTYMOBILE", mobile); |
|||
data.put("PARTYADDRESS", "NA"); |
|||
data.put("bookingId", bookingId); |
|||
|
|||
postDataToERP(data, id); |
|||
|
|||
} catch (Exception e) { |
|||
System.err.println("Error processing row: " + row); |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
private void postDataToERP(Map<String, Object> data, String id) { |
|||
try { |
|||
StringBuilder encodedUrl = new StringBuilder(appConfig.getErpUrl()); |
|||
boolean firstParam = true; |
|||
|
|||
for (Map.Entry<String, Object> entry : data.entrySet()) { |
|||
if (!firstParam) encodedUrl.append("&"); |
|||
firstParam = false; |
|||
String key = URLEncoder.encode(entry.getKey(), "UTF-8"); |
|||
String value = URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8"); |
|||
encodedUrl.append(key).append("=").append(value); |
|||
} |
|||
|
|||
String finalUrl = encodedUrl.toString(); |
|||
System.out.println("Final Encoded URL: " + finalUrl); |
|||
|
|||
HttpURLConnection connection = (HttpURLConnection) new URL(finalUrl).openConnection(); |
|||
connection.setRequestMethod("GET"); |
|||
int responseCode = connection.getResponseCode(); |
|||
System.out.println("Response Code: " + responseCode); |
|||
|
|||
StringBuilder response = new StringBuilder(); |
|||
BufferedReader in = new BufferedReader(new InputStreamReader( |
|||
responseCode == 200 ? connection.getInputStream() : connection.getErrorStream() |
|||
)); |
|||
String inputLine; |
|||
while ((inputLine = in.readLine()) != null) response.append(inputLine); |
|||
in.close(); |
|||
|
|||
System.out.println("ERP Response: " + response); |
|||
|
|||
if (id != null) { |
|||
updateLog(data, response, id); |
|||
} else { |
|||
saveLog(data, response); |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
private void saveLog(Map<String, Object> map, StringBuilder response) throws JsonProcessingException { |
|||
logToRepo(map, response); |
|||
} |
|||
|
|||
private void updateLog(Map<String, Object> map, StringBuilder response, String id) throws JsonProcessingException { |
|||
logToRepo(map, response, id); |
|||
} |
|||
|
|||
private void logToRepo(Map<String, Object> map, StringBuilder response) throws JsonProcessingException { |
|||
logToRepo(map, response, null); |
|||
} |
|||
|
|||
private void logToRepo(Map<String, Object> map, StringBuilder response, String id) throws JsonProcessingException { |
|||
String statusCode = "0"; |
|||
if (response != null) { |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
Map<String, Object> res = objectMapper.readValue(response.toString(), Map.class); |
|||
String msg = String.valueOf(res.get("Message")); |
|||
String status = String.valueOf(res.getOrDefault("ResultStatus", "")); |
|||
|
|||
if ("Connection Failure".equals(msg)) { |
|||
statusCode = "2"; |
|||
} else if ("Already Updated this collection".equals(msg) && "false".equals(status)) { |
|||
statusCode = "1"; |
|||
} else if ("Failure".equals(msg) && "false".equals(status)) { |
|||
statusCode = "2"; |
|||
} else if ("true".equals(status)) { |
|||
statusCode = "1"; |
|||
} |
|||
} |
|||
|
|||
map.put("status", statusCode); |
|||
map.put("response", response.toString()); |
|||
|
|||
if (id != null) { |
|||
swimLogRepo.updateLog(statusCode, response.toString(), id); |
|||
} else { |
|||
swimLogRepo.insert(map); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.gcc.erppostdata.swimmingpool; |
|||
|
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
@Service |
|||
public class SwimQueryBank { |
|||
|
|||
@Autowired |
|||
private SWPostData swPostData; |
|||
|
|||
public void PushAllData() { |
|||
String sql = "SELECT bd.id AS bookingid,bd.orderid AS orderid, bd.name, p.amount, " + |
|||
"DATE_FORMAT(p.paymentdate, '%d/%m/%Y') AS paymentdate, " + |
|||
"p.payment_id, p.payment_status, bd.mobile_no " + |
|||
"FROM booking_details bd " + |
|||
"JOIN payment p ON bd.orderid = p.order_id " + |
|||
"WHERE p.payment_status = 'paid'"; |
|||
swPostData.fetchSwimData(sql, null); |
|||
} |
|||
|
|||
public void hourlyPushData(int lastId) { |
|||
String sql = "SELECT bd.id AS bookingid,bd.orderid AS orderid, bd.name, p.amount, " + |
|||
"DATE_FORMAT(p.paymentdate, '%d/%m/%Y') AS paymentdate, " + |
|||
"p.payment_id, p.payment_status, bd.mobile_no " + |
|||
"FROM booking_details bd " + |
|||
"JOIN payment p ON bd.orderid = p.order_id " + |
|||
"WHERE p.payment_status = 'paid' AND bd.id > " + lastId + " LIMIT 1000"; |
|||
swPostData.fetchSwimData(sql, null); |
|||
} |
|||
|
|||
public void resendPushData(String uniqueId, String id) { |
|||
String sql = "SELECT bd.id AS bookingid,bd.orderid AS orderid, bd.name, p.amount, " + |
|||
"DATE_FORMAT(p.paymentdate, '%d/%m/%Y') AS paymentdate, " + |
|||
"p.payment_id, p.payment_status, bd.mobile_no " + |
|||
"FROM booking_details bd " + |
|||
"JOIN payment p ON bd.orderid = p.order_id " + |
|||
"WHERE p.payment_status = 'paid' AND bd.id = " + uniqueId; |
|||
swPostData.fetchSwimData(sql, id); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue