Subversion Repositories SmartDukaan

Rev

Rev 15223 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020;

import in.shop2020.serving.services.SnapdealSessionCookie;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.utils.GmailUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.mail.MessagingException;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



public class SnapdealOrderStatusReconciliation{
        private static Logger logger;
        
        static String emailFromAddress;
        static String password;
        static GmailUtils mailer;
        static String sendTo[];
        
        private static Map<String, String> headers = new HashMap<String, String>();
        
        static {
                emailFromAddress = "build-staging@shop2020.in";
                password = "shop2020";
                mailer = new GmailUtils();
                sendTo = new String[] { "kshitij.sood@shop2020.in", "manish.sharma@shop2020.in", "amit.gupta@shop2020.in" };
                headers.put("User-agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11");
                headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                headers.put("Accept-Language", "en-US,en;q=0.8");
                headers.put("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
        }

        public static void main(String[] args) throws UnsupportedEncodingException, MessagingException{
                try{
                        logger = LoggerFactory.getLogger(SnapdealOrderStatusReconciliation.class);

                        Map<String,List<List<String>>> orderDataMap = new HashMap<String,List<List<String>>>();
                        List<List<String>> deliveredOrderDataList = new ArrayList<List<String>>();
                        List<List<String>> cancelledOrderDataList = new ArrayList<List<String>>();
                        long minCreationDate = 0l;
                        long currentTime = System.currentTimeMillis();
                        
                        SnapdealSessionCookie sdSessionCookie = new SnapdealSessionCookie();
                        String cookies = sdSessionCookie.getCookies();
                        JSONObject cookieObject = new JSONObject(cookies);

                        Calendar cal = Calendar.getInstance();
                        cal.add(Calendar.DAY_OF_MONTH, -60);
                        minCreationDate = cal.getTimeInMillis();
                        
                        SimpleDateFormat snapdealDateFormat = new SimpleDateFormat("yyyy/MM/dd");
                        SimpleDateFormat gotSnapdealDateFormat = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss aaa");
                        SimpleDateFormat ourDBDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String startDate= "";
                        Date start_date = new Date(minCreationDate);
                        Date end_date = new Date(currentTime);
                        if(minCreationDate > 0l){
                                startDate = snapdealDateFormat.format(new Date(minCreationDate));
                        }
                        else{
                                startDate = snapdealDateFormat.format(new Date(currentTime));
                        }
                        logger.info("Snapdeal Order Recon Start Date .. "+startDate);
                        //startDate = startDate.replace("-", "%2F");

                        String endDate = snapdealDateFormat.format(new Date(System.currentTimeMillis()));
                        logger.info("Snapdeal Order Recon End Date .. "+endDate);
                        //endDate = endDate.replace("-", "%2F");


                        HttpClient client = new DefaultHttpClient();

                        HttpResponse response = null;
                        BufferedReader rd = null;
                        String line = "";
                        
                        HttpGet get = new HttpGet("http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/pendingOrders/40?fulfillmentModelCode=ONESHIP");
                        for(String key:headers.keySet())
                                get.addHeader(key, headers.get(key));
                        get.addHeader("Cookie","AWSELB="+cookieObject.get("AWSELB")+";JSESSIONID="+cookieObject.get("JSESSIONID")+";");
                        
                        try {
                                response = client.execute(get);
                        } catch (ClientProtocolException e) {
                                e.printStackTrace();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }

                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        
                        while((line=rd.readLine())!=null){
                        }
                        
                        

                        JSONArray jsonDataObj = null;
                        JSONArray jsonDataShip = null;
                        
                        for(long start = start_date.getTime(); start < end_date.getTime();){
                                long end = start + 604800000l;
                                if(end > end_date.getTime()){
                                        end = end_date.getTime();
                                }
                                startDate = snapdealDateFormat.format(new Date(start));
                                endDate = snapdealDateFormat.format(new Date(end));

                                logger.info("==== Start Date.."+startDate+"\n");
                                logger.info("==== End Date.."+endDate+"\n");
                                
                                int i;

                                logger.info("Getting Delivery Information for OneShip Snapdeal Orders");
                                //statusCode=CLD&dispatchCategoryId=0&startDate=2013%2F11%2F01&endDate=2013%2F11%2F07&statusColumn=cancelledOn
                                String oneShipUrl = "http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch/?startDate="+startDate+"&endDate="+endDate+"&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0";
                                logger.info("One Ship Url "+oneShipUrl);
                                
                                HttpPost post = new HttpPost("http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch");
                                cookies = sdSessionCookie.getCookies();
                                cookieObject = new JSONObject(cookies);
                                for(String key:headers.keySet())
                                        post.addHeader(key, headers.get(key));
                                post.addHeader("Cookie","AWSELB="+cookieObject.get("AWSELB")+";JSESSIONID="+cookieObject.get("JSESSIONID")+";");                                
                                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("startDate",startDate));
                                nameValuePairs.add(new BasicNameValuePair("endDate",endDate));
                                nameValuePairs.add(new BasicNameValuePair("statusColumn","deliveredOn"));
                                nameValuePairs.add(new BasicNameValuePair("queryType","CREATED"));
                                nameValuePairs.add(new BasicNameValuePair("statusCode","COURIER_DELIVERED"));
                                post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
                                

                                try {
                                        response = client.execute(post);
                                } catch (Exception e) {
                                        logger.error("Unable to get Http Response for snapdeal oneship delivered orders", e);
                                        throw new Exception("Unable to get Http Response for snapdeal oneship delivered orders");
                                } 

                                try {
                                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                } catch (Exception e) {
                                        logger.error("Unable to read Http Response for snapdeal oneship delivered orders", e);
                                        throw new Exception("Unable to read Http Response for snapdeal oneship delivered orders");
                                }

                                try {
                                        String resP;
                                        while((resP=rd.readLine())!=null){
                                                if(resP!=null && !resP.isEmpty()){
                                                        System.out.println("Response... "+resP);
                                                        jsonDataObj = new JSONArray("["+resP+"]");
                                                        JSONObject j1 = (JSONObject)jsonDataObj.get(0);
                                                        jsonDataShip = new JSONArray(j1.get("shippedDataDTOs").toString());
                                                }
                                        }
                                } catch (Exception e) {
                                        logger.error("Unable to extract Http Response for snapdeal oneship delivered orders", e);
                                        throw new Exception("Unable to extract Http Response for snapdeal oneship delivered orders");
                                }

                                if(jsonDataShip!=null && jsonDataShip.length()>0){
                                        for(i=0; i< jsonDataShip.length(); i++){
                                                JSONObject jsonObj = null;
                                                try {
                                                        jsonObj = jsonDataShip.getJSONObject(i);

                                                        if(jsonObj!=null){
                                                                String subOrderCode =(String) jsonObj.get("suborderCode");
                                                                String referenceNumber =(String) jsonObj.get("referenceCode");
                                                                if(!jsonObj.get("deliveredOn").toString().equalsIgnoreCase("null")){
                                                                        Long deliveryDate =(Long) jsonObj.get("deliveredOn");
                                                                        logger.info("Snapdeal Oneship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                                        String deliveryDateStr = ourDBDateFormat.format(new Date(deliveryDate));
                                                                        List<String> deliveredOrdelList = new ArrayList<String>();
                                                                        deliveredOrdelList.add(referenceNumber);
                                                                        deliveredOrdelList.add(subOrderCode);
                                                                        deliveredOrdelList.add(deliveryDateStr);
        
                                                                        deliveredOrderDataList.add(deliveredOrdelList);
                                                                }
                                                        }
                                                } catch (Exception e) {
                                                        logger.error("Unable to add delivered order details for updation regarding snapdeal oneship delivered orders", e);
                                                        throw new Exception("Unable to add delivered order details for updation regarding snapdeal oneship delivered orders");
                                                }
                                        }
                                }

                                logger.info("Getting Information for OneShip Snapdeal Cancelled Orders");
                                String oneShipCancelUrl = "http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch/?statusCode=CLD&dispatchCategoryId=0&startDate="+startDate+"&endDate="+endDate+"&statusColumn=cancelledOn";
                                logger.info("One Ship Cancel Url "+oneShipCancelUrl);

                                post = new HttpPost("http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch");
                                cookies = sdSessionCookie.getCookies();
                                cookieObject = new JSONObject(cookies);
                                for(String key:headers.keySet())
                                        post.addHeader(key, headers.get(key));
                                post.addHeader("Cookie","AWSELB="+cookieObject.get("AWSELB")+";JSESSIONID="+cookieObject.get("JSESSIONID")+";");
                                nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("startDate",startDate));
                                nameValuePairs.add(new BasicNameValuePair("endDate",endDate));
                                nameValuePairs.add(new BasicNameValuePair("statusColumn","cancelledOn"));
                                nameValuePairs.add(new BasicNameValuePair("queryType","CREATED"));
                                nameValuePairs.add(new BasicNameValuePair("statusCode","CLD"));
                                post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));

                                try {
                                        response = client.execute(post);
                                } catch (Exception e) {
                                        logger.error("Unable to get Http Response for snapdeal oneship cancelled orders", e);
                                        throw new Exception("Unable to get Http Response for snapdeal oneship cancelled orders");
                                } 

                                try {
                                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                } catch (Exception e) {
                                        logger.error("Unable to read Http Response for snapdeal oneship cancelled orders", e);
                                        throw new Exception("Unable to read Http Response for snapdeal oneship cancelled orders");
                                }

                                try {
                                        String resP;
                                        while((resP=rd.readLine())!=null){
                                                if(resP!=null && !resP.isEmpty()){
                                                        jsonDataObj = new JSONArray("["+resP+"]");
                                                        JSONObject j1 = (JSONObject)jsonDataObj.get(0);
                                                        jsonDataShip = new JSONArray(j1.get("shippedDataDTOs").toString());
                                                }
                                        }
                                } catch (Exception e) {
                                        logger.error("Unable to extract Http Response for snapdeal oneship cancelled orders", e);
                                        throw new Exception("Unable to extract Http Response for snapdeal oneship cancelled orders");
                                } 

                                if(jsonDataShip!=null && jsonDataShip.length()>0){
                                        for(i=0; i< jsonDataShip.length(); i++){
                                                JSONObject jsonObj = null;
                                                try {
                                                        jsonObj = jsonDataShip.getJSONObject(i);

                                                        if(jsonObj!=null){
                                                                String subOrderCode =(String) jsonObj.get("suborderCode");
                                                                String referenceNumber =(String) jsonObj.get("referenceCode");
                                                                logger.info("Snapdeal OneShip Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber);
                                                                List<String> cancelledOrdelList = new ArrayList<String>();
                                                                cancelledOrdelList.add(referenceNumber);
                                                                cancelledOrdelList.add(subOrderCode);
                                                                cancelledOrderDataList.add(cancelledOrdelList);
                                                        }
                                                } catch (Exception e) {
                                                        logger.error("Unable to add cancelled order details for updation regarding snapdeal oneship orders", e);
                                                        throw new Exception("Unable to add cancelled order details for updation regarding snapdeal oneship orders");
                                                }
                                        }
                                }


                                start = end + 86400000l;
                        }

                        if(deliveredOrderDataList!=null && deliveredOrderDataList.size()>0){
                                logger.info("Delivered Orders Size .. "+deliveredOrderDataList.size());
                                orderDataMap.put("Delivered", deliveredOrderDataList);
                        }

                        if(cancelledOrderDataList!=null && cancelledOrderDataList.size()>0){
                                logger.info("Cancelled Orders Size .. "+cancelledOrderDataList.size());
                                orderDataMap.put("Cancelled", cancelledOrderDataList);
                        }

                        if(orderDataMap!=null && orderDataMap.size()>0){
                                try{
                                        new TransactionClient().getClient().updateSnapdealOrdersStatus(orderDataMap);
                                } catch(Exception e){
                                        logger.error("Unable to update delivery information for snapdeal orders", e);
                                        throw new Exception("Unable to update delivery information for snapdeal orders");
                                }
                        }

                }
                catch(Exception e){
                        e.printStackTrace();
                        mailer.sendSSLMessage(sendTo, "Error in Snapdeal Order Status Recon", emailFromAddress, password, "<html><body><p>Please check log</p></body></html>");
                }
        }
}