Commit af8fcd4b authored by steurwadkar's avatar steurwadkar

F17ABAS001 source code commit


git-svn-id: http://15.206.35.175/svn/proteus/business-java/trunk@106683 ce508802-f39f-4f6c-b175-0d175dae99d5
parent 59b55829
package ibase.webitm.ejb.gst;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.rmi.RemoteException;
import java.security.PrivateKey;
import java.sql.Connection;
......@@ -19,12 +26,16 @@ import java.util.UUID;
import javax.annotation.PostConstruct;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.io.IOUtils;
import org.bouncycastle.crypto.digests.SHA256Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.XML;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
......@@ -112,6 +123,9 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
private String clientSecret = "";
String userName = "", gstin = "", periodCode = "", stateCode = "", authToken = "";
byte[] authSEK = null;
private String fileDownloadDir = "";
private String saveFilePath = "";
private String gstDateFormat = "";
AESEncryption aesEncryption = null;
PubKeyEncryption pubKeyEncryption = null;
......@@ -146,6 +160,7 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
InputStream pubKeyInpStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("ibase/webitm/resources/gst/"+gstnPublicKeyName.trim()+".cer");
clientId = finCommon.getFinparams("999999", "GST_CLIENT_ID", conn);
clientSecret = finCommon.getFinparams("999999", "GST_CLIENT_SECRET", conn);
fileDownloadDir = finCommon.getFinparams("999999", "GST_DOWNLOAD_DIR", conn);
aesEncryption = new AESEncryption();
pubKeyEncryption = new PubKeyEncryption(pubKeyInpStream);
ipAddress = sc.next();
......@@ -158,6 +173,8 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
gspSignature = new GSPSignature();
String privateKeyPath = "/ibase/webitm/resources/gst/"+gspPrivateKeyName.trim()+".pem";
aspPrivateKey = gspSignature.loadPrivateKey(Thread.currentThread().getContextClassLoader().getResourceAsStream(privateKeyPath));
gstDateFormat = gstCommonUtil.getGSTDateFormat();
System.out.println("gstDateFormat["+gstDateFormat+"]");
}
catch (Exception e)
{
......@@ -2100,7 +2117,7 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
System.out.println("get GSTR2A ["+action+"] invoices request header["+getGstr2InvoicesReq.getHeaders()+"]");
HttpResponse<JsonNode> getGstr2InvoicesResp = getGstr2InvoicesReq.asJson();
System.out.println(String.format("getGstr2InvoicesResp Request : Status[%s] Response[%s]", getGstr2InvoicesResp.getStatus(), getGstr2InvoicesResp.getBody()));
if (getGstr2InvoicesResp.getStatus() == 200)
......@@ -2120,14 +2137,21 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
JSONObject gstr2InvoiceJsonObj = new JSONObject(new String(respJsonInBytes));
System.out.println("respJsonInBytes["+new String(respJsonInBytes)+"]");
if("B2B".equalsIgnoreCase(action))
{
insertB2BInvoiceData(stateCode, periodCode, siteCode, gstr2InvoiceJsonObj, xtraParams, conn);
}
else if("CDN".equalsIgnoreCase(action))
if(gstr2InvoiceJsonObj.has("est") && gstr2InvoiceJsonObj.has("token"))
{
retString = getDataFromFileServer("4", gstr2InvoiceJsonObj, action, xtraParams, conn);
}
else
{
insertCDNData(stateCode, periodCode, siteCode, gstr2InvoiceJsonObj, xtraParams, conn);
if("B2B".equalsIgnoreCase(action))
{
insertB2BInvoiceData(stateCode, periodCode, siteCode, gstr2InvoiceJsonObj, xtraParams, conn);
}
else if("CDN".equalsIgnoreCase(action))
{
insertCDNData(stateCode, periodCode, siteCode, gstr2InvoiceJsonObj, xtraParams, conn);
}
}
}
else
......@@ -2892,6 +2916,235 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
}
return retString;
}
private String getDataFromFileServer(String recType, JSONObject dataJSONObject, String sectionName, String xtraParams, Connection conn) throws ITMException
{
String retString = null;
String transactionId = "", gspAuthString = "", gspAuthSignature = "";
String siteCode = "", loginCode = "", chgTerm = "", responseId = "", responseJsonStr = "", callStatus = "";
String sep = File.separator;
try
{
siteCode = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginSiteCode");
loginCode = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginCode");
chgTerm = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "chgTerm");
File baseFolder = new File(fileDownloadDir);
if(!baseFolder.exists())
{
boolean isFoldercreated = baseFolder.mkdirs();
System.out.println("isFoldercreated="+isFoldercreated);
}
saveFilePath = baseFolder.getPath();
System.out.println("saveFilePath ["+saveFilePath+"]");
File sectionFolder = new File(saveFilePath + sep + gstin + sep + periodCode + sep +"GSTR2A" + sep + sectionName);
if(!sectionFolder.exists())
{
sectionFolder.mkdirs();
System.out.println("section folder created for ["+sectionName+"]");
}
transactionId = UUID.randomUUID().toString().replaceAll("-", "");
long timeStamp = new Timestamp().getDateTime();
gspAuthString = clientId + ":" + transactionId + ":" + timeStamp + ":" + gstin;
gspAuthSignature = gspSignature.sign(gspAuthString, aspPrivateKey);
HttpRequest fileDetailsReq = Unirest.get(String.format("%s%s", BASE_API_URL, GSTR_RETSTAT_URL))
.queryString("gstin", gstin)
.queryString("ret_period",periodCode)
//.queryString("token",dataJSONObject.getString("token"))//TODO need to change
.queryString("token", "7163714af8a84b62ae6688d8f7a238c1")
.queryString("action","FILEDET")
.header("Content-Type", APPLICATION_JSON)
.header("state-cd", stateCode)
.header("clientid", clientId)
.header("client-secret", clientSecret)
.header("ip-usr", ipAddress)
.header("username", userName)
.header("auth-token", authToken)
.header("txn", transactionId)
.header("ret_period", periodCode)
.header("gstin", gstin)
.header("X-Asp-Auth-Token", gspAuthString)
.header("X-Asp-Auth-Signature", gspAuthSignature)
.getHttpRequest();
System.out.println("download file url["+fileDetailsReq.getUrl()+"]");
System.out.println("download file method["+fileDetailsReq.getHttpMethod()+"]");
System.out.println("download file request header["+fileDetailsReq.getHeaders()+"]");
HttpResponse<JsonNode> fileDetailsResp = fileDetailsReq.asJson();
System.out.println(String.format("fileDetailsResp Request : Status[%s] Response[%s]", fileDetailsResp.getStatus(), fileDetailsResp.getBody()));
if (fileDetailsResp.getStatus() == 200)
{
JSONObject fileGstr1RespObj = fileDetailsResp.getBody().getObject();
if(fileGstr1RespObj.has("data") && fileGstr1RespObj.has("rek"))
{
callStatus = "1";
String fileGstr1Data = fileGstr1RespObj.getString("data");
String fileGstr1Rek = fileGstr1RespObj.getString("rek");
byte[] fileGstr1ApiEK = aesEncryption.decrypt(fileGstr1Rek, authSEK);
String fileGstr1JsoninBase64 = new String(aesEncryption.decrypt(fileGstr1Data, fileGstr1ApiEK));
byte[] fileGstr1JsonInBytes = aesEncryption.decodeBase64StringTOByte(fileGstr1JsoninBase64);
JSONObject filedetailsJsonObj = new JSONObject(new String(fileGstr1JsonInBytes));
if(filedetailsJsonObj.has("urls")&&filedetailsJsonObj.has("ek"))
{
String sessionKey = filedetailsJsonObj.getString("ek");
JSONArray fileDetailsArry = filedetailsJsonObj.getJSONArray("urls");
System.out.println("sessionKey["+sessionKey+"]");
for(int i=0; i<fileDetailsArry.length(); i++)
{
String fileName = "", filePath = "";
JSONObject tempJsonObj = fileDetailsArry.getJSONObject(i);
if(tempJsonObj.has("ul"))
{
String fileUrl = tempJsonObj.getString("ul");
fileUrl = FILEDET_URL + fileUrl;
URL url = new URL(fileUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK)
{
String disposition = connection.getHeaderField("Content-Disposition");
if (disposition != null)
{
int index = disposition.indexOf("filename=");
if (index > 0)
{
fileName = disposition.substring(index + 10, disposition.length() - 1);
}
}
else
{
fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1,fileUrl.lastIndexOf("?"));
}
InputStream inputStream = connection.getInputStream();
filePath = sectionFolder.getPath()+ sep + fileName;
System.out.println("Json file save path["+filePath+"]");
FileOutputStream outputStream = new FileOutputStream(filePath);
int bytesRead = -1;
byte[] buffer = new byte[1024];
while ((bytesRead = inputStream.read(buffer)) != -1)
{
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
}
TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(filePath)));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
BufferedReader br = null;
while (currentEntry != null)
{
br = new BufferedReader(new InputStreamReader(tarInput));
String line;
while ((line = br.readLine()) != null)
{
byte[] decryptEK = aesEncryption.decodeBase64StringTOByte(sessionKey);
String decryptedData = new String(aesEncryption.decrypt(line, decryptEK));
String decodedJson = new String(org.apache.commons.codec.binary.Base64.decodeBase64(decryptedData));
JSONObject insertDataJson = new JSONObject(decodedJson);
if("B2B".equalsIgnoreCase(sectionName))
{
insertB2BInvoiceData(stateCode, periodCode, siteCode, insertDataJson, xtraParams, conn);
}
else if("CDN".equalsIgnoreCase(sectionName))
{
insertCDNData(stateCode, periodCode, siteCode, insertDataJson, xtraParams, conn);
}
}
currentEntry = tarInput.getNextTarEntry();
}
tarInput.close();
}
}
}
}
else
{
String errMsg = "";
callStatus = "2";
JSONObject errorJSON = fileDetailsResp.getBody().getObject();
if(errorJSON.has("error"))
{
JSONObject tempJsonObj = errorJSON.getJSONObject("error");
if(tempJsonObj.has("message"))
{
errMsg = tempJsonObj.getString("message");
retString = "<data_error><![CDATA["+errMsg+"]]></data_error>";
}
}
}
}
else
{
String errMsg = "";
callStatus = "2";
JSONObject errorJSON = fileDetailsResp.getBody().getObject();
if(errorJSON.has("error"))
{
JSONObject tempJsonObj = errorJSON.getJSONObject("error");
if(tempJsonObj.has("message"))
{
errMsg = tempJsonObj.getString("message");
retString = "<data_error><![CDATA["+errMsg+"]]></data_error>";
}
}
}
APICallData apiCallData = new APICallData();
apiCallData.setPeriodCode(periodCode);
apiCallData.setCallDate(new Date());
apiCallData.setSiteCode(siteCode);
apiCallData.setUserId(loginCode);
apiCallData.setCallType("FILEDET");
apiCallData.setRecType(recType);
apiCallData.setNoOfRecords(0);
apiCallData.setCallStatus(callStatus);
apiCallData.setResponseId(responseId);
apiCallData.setResponseJsonStr(responseJsonStr);
apiCallData.setChgUser(loginCode);
apiCallData.setChgDate(new Date());
apiCallData.setChgTerm(chgTerm);
gstCommonUtil.updateAPICallLogHistory(apiCallData, null);
}
catch(Exception e)
{
System.out.println("GSTDataSubmitWizPos.getDataFromFileServer()["+e.getMessage()+"]");
e.printStackTrace();
throw new ITMException(e);
}
System.out.println("final retString["+retString+"]");
return retString;
}
/*private String submitGstr2(String xtraParams,Connection conn) throws ITMException
{
String retString = "";
......@@ -3969,18 +4222,11 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
loginCode = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginCode");
chgTerm = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "chgTerm");
hdrInsSql = " INSERT INTO GST_DATA_HDR (TRAN_ID, TRAN_DATE, TRAN_ID__REF, SITE_CODE, PRD_CODE, REC_TYPE, TRAN_TYPE, CUST_CODE, CUST_NAME,"
+ " SUBMISSION_TYPE, DOC_CHECKSUM, DOC_TYPE, DOC_NO, DOC_DATE, AMOUNT, REVERSE_CHRG, LR_NO, LR_DATE, REAS_CODE, REF_ID__INV,"
+ " REF_DATE__INV, PROV_ASSMNT, ORDER_NO, ORDER_DATE, REMARKS, SUBMIT_STATUS, SUBMIT_DATE, ADD_USER, ADD_DATE, ADD_TERM, CHG_USER,"
+ " CHG_DATE, CHG_TERM, TAX_REG_NO, RECO_STATUS, ECOM_REG_NO, REF_SER, GST_CODE, GST_TYPE, REF_ID)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
hdrInsPstmt = conn.prepareStatement(hdrInsSql);
b2bInvArry = gstr2InvoiceJsonObj.getJSONArray("b2b");
for(int i = 0; i < b2bInvArry.length(); i++)
{
b2bJsonObj = b2bInvArry.getJSONObject(i);
cptyGSTIN = b2bJsonObj.getString("ctin");
......@@ -3988,6 +4234,14 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
for(int j=0; j<b2bInvJsonArry.length(); j++)
{
hdrInsSql = " INSERT INTO GST_DATA_HDR (TRAN_ID, TRAN_DATE, TRAN_ID__REF, SITE_CODE, PRD_CODE, REC_TYPE, TRAN_TYPE, CUST_CODE, CUST_NAME,"
+ " SUBMISSION_TYPE, DOC_CHECKSUM, DOC_TYPE, DOC_NO, DOC_DATE, AMOUNT, REVERSE_CHRG, LR_NO, LR_DATE, REAS_CODE, REF_ID__INV,"
+ " REF_DATE__INV, PROV_ASSMNT, ORDER_NO, ORDER_DATE, REMARKS, SUBMIT_STATUS, SUBMIT_DATE, ADD_USER, ADD_DATE, ADD_TERM, CHG_USER,"
+ " CHG_DATE, CHG_TERM, TAX_REG_NO, RECO_STATUS, ECOM_REG_NO, REF_SER, GST_CODE, GST_TYPE, REF_ID)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
hdrInsPstmt = conn.prepareStatement(hdrInsSql);
b2bInvJsonObj = b2bInvJsonArry.getJSONObject(j);
iNum = b2bInvJsonObj.getString("inum");
......@@ -4102,10 +4356,22 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
rate = tempJSONObj.getDouble("rt");
lineAmt = tempJSONObj.getDouble("txval");
iamt = tempJSONObj.getDouble("iamt");
camt = tempJSONObj.getDouble("camt");
samt = tempJSONObj.getDouble("samt");
csamt = tempJSONObj.getDouble("csamt");
if(tempJSONObj.has("iamt"))
{
iamt = tempJSONObj.getDouble("iamt");
}
if(tempJSONObj.has("camt"))
{
camt = tempJSONObj.getDouble("camt");
}
if(tempJSONObj.has("samt"))
{
samt = tempJSONObj.getDouble("samt");
}
if(tempJSONObj.has("csamt"))
{
csamt = tempJSONObj.getDouble("csamt");
}
if(stateCode.trim().equalsIgnoreCase(pos.trim()))
{
......@@ -4522,18 +4788,11 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
loginCode = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginCode");
chgTerm = e12GenericUtility.getValueFromXTRA_PARAMS(xtraParams, "chgTerm");
hdrInsSql = " INSERT INTO GST_DATA_HDR (TRAN_ID, TRAN_DATE, TRAN_ID__REF, SITE_CODE, PRD_CODE, REC_TYPE, TRAN_TYPE, CUST_CODE, CUST_NAME,"
+ " SUBMISSION_TYPE, DOC_CHECKSUM, DOC_TYPE, DOC_NO, DOC_DATE, AMOUNT, REVERSE_CHRG, LR_NO, LR_DATE, REAS_CODE, REF_ID__INV,"
+ " REF_DATE__INV, PROV_ASSMNT, ORDER_NO, ORDER_DATE, REMARKS, SUBMIT_STATUS, SUBMIT_DATE, ADD_USER, ADD_DATE, ADD_TERM, CHG_USER,"
+ " CHG_DATE, CHG_TERM, TAX_REG_NO, RECO_STATUS, ECOM_REG_NO, REF_SER, GST_CODE, GST_TYPE, REF_ID)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
hdrInsPstmt = conn.prepareStatement(hdrInsSql);
cdnArry = gstr2InvoiceJsonObj.getJSONArray("cdn");
for(int i = 0; i < cdnArry.length(); i++)
{
cdnJsonObj = cdnArry.getJSONObject(i);
cptyGSTIN = cdnJsonObj.getString("ctin");
......@@ -4541,6 +4800,13 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
for(int j=0; j<cdnJsonArry.length(); j++)
{
hdrInsSql = " INSERT INTO GST_DATA_HDR (TRAN_ID, TRAN_DATE, TRAN_ID__REF, SITE_CODE, PRD_CODE, REC_TYPE, TRAN_TYPE, CUST_CODE, CUST_NAME,"
+ " SUBMISSION_TYPE, DOC_CHECKSUM, DOC_TYPE, DOC_NO, DOC_DATE, AMOUNT, REVERSE_CHRG, LR_NO, LR_DATE, REAS_CODE, REF_ID__INV,"
+ " REF_DATE__INV, PROV_ASSMNT, ORDER_NO, ORDER_DATE, REMARKS, SUBMIT_STATUS, SUBMIT_DATE, ADD_USER, ADD_DATE, ADD_TERM, CHG_USER,"
+ " CHG_DATE, CHG_TERM, TAX_REG_NO, RECO_STATUS, ECOM_REG_NO, REF_SER, GST_CODE, GST_TYPE, REF_ID)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
hdrInsPstmt = conn.prepareStatement(hdrInsSql);
cdnDataJsonObj = cdnJsonArry.getJSONObject(j);
creditDebitId = cdnDataJsonObj.getString("nt_num");
......@@ -4633,10 +4899,22 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
rate = tempJSONObj.getDouble("rt");
lineAmt = tempJSONObj.getDouble("txval");
iamt = tempJSONObj.getDouble("iamt");
camt = tempJSONObj.getDouble("camt");
samt = tempJSONObj.getDouble("samt");
csamt = tempJSONObj.getDouble("csamt");
if(tempJSONObj.has("iamt"))
{
iamt = tempJSONObj.getDouble("iamt");
}
if(tempJSONObj.has("camt"))
{
camt = tempJSONObj.getDouble("camt");
}
if(tempJSONObj.has("samt"))
{
samt = tempJSONObj.getDouble("samt");
}
if(tempJSONObj.has("csamt"))
{
csamt = tempJSONObj.getDouble("csamt");
}
if(iamt > 0)
{
......@@ -5997,7 +6275,7 @@ public class GSTDataSubmitWizPos extends ValidatorEJB implements GSTDataSubmitWi
else
{
System.out.println("inside ");
dbDateStr =(new E12GenericUtility()).getValidDateTimeString(dateStr, (new E12GenericUtility()).getApplDateTimeFormat(), (new E12GenericUtility()).getDBDateTimeFormat());
dbDateStr =(new E12GenericUtility()).getValidDateTimeString(dateStr, gstDateFormat, (new E12GenericUtility()).getDBDateTimeFormat());
return java.sql.Timestamp.valueOf(dbDateStr);
}
}
......
......@@ -526,6 +526,22 @@ public class GSTCommonUtil extends ValidatorEJB
System.out.println("GSTCommonUtil.getGSTDateFormat()["+e.getMessage()+"]");
e.printStackTrace();
}
finally
{
try
{
if(conn != null && !conn.isClosed())
{
conn.close();
conn = null;
}
}
catch(SQLException se)
{
System.out.println("GSTCommonUtil.getGSTDateFormat()["+se.getMessage()+"]");
se.printStackTrace();
}
}
return dateFormat;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment