Subversion Repositories SmartDukaan

Rev

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

package in.shop2020;

import in.shop2020.model.v1.order.Order;
import in.shop2020.model.v1.order.OrderSource;
import in.shop2020.thrift.clients.TransactionClient;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SnapdealOrderStatusReconciliation{
        private static Logger logger;

        public static void main(String[] args){
                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();
                TransactionClient tsc = null;
                try {
                        tsc = new TransactionClient();
                        minCreationDate = tsc.getClient().getMinCreatedTimeStampUndeliveredOrdersForSource(OrderSource.SNAPDEAL.getValue());
                        /*minCreationDate = 1383291412000l;*/
                } catch (Exception e) {
                        logger.error("Unable to establish connection to the transaction service while getting Minimum Order Created Timstamp for Undelivered Orders ", e);
                }//Dec 14, 2013 12:00:00 AM  1383291412000l

                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(currentTime));
                logger.info("Snapdeal Order Recon End Date .. "+endDate);
                /*endDate = endDate.replace("-", "%2F");*/
                
                
                HttpClient newClient = new HttpClient();
                PostMethod postMethod = new PostMethod("http://shipping.snapdeal.com/login_security_check?spring-security-redirect=http://shipping.snapdeal.com/vendor/product-shipment/shippingDashboard&");
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new NameValuePair("j_username",
                "khushal.bhatia@saholic.com"));
                nameValuePairs.add(new NameValuePair("j_password",
                "s@h0l1c"));
                NameValuePair[] nameValuePairArray = new NameValuePair[nameValuePairs.size()];
                nameValuePairArray = nameValuePairs.toArray(nameValuePairArray);
                postMethod.addParameters(nameValuePairArray);
                BufferedReader rd = null;
                int statusCode = 0;
                
                try{
                        statusCode = newClient.executeMethod(postMethod);
                }catch(Exception e){
                        logger.error("Unable to get Http Response for snapdeal seller portal login", e);
                }
                
                try {
                        rd = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(postMethod.getResponseBody())));
                } catch (Exception e1) {
                        logger.error("Unable to read Http Response for snapdeal seller portal login", e1);
                } 

                String line = "";
                try {
                        while ((line = rd.readLine()) != null) {
                                System.out.println(line);
                        }
                } catch (Exception e) {
                        logger.error("Unable to extract Http Response for snapdeal seller portal login", e);
                }
                
                
                JSONArray jsonDataShip = null;
                String line1 = "";

                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));
                        startDate = startDate.replace("-", "%2F");
                        endDate = snapdealDateFormat.format(new Date(end));
                        endDate = endDate.replace("-", "%2F");
                        
                        logger.info("==== Start Date.."+startDate+"\n");
                        logger.info("==== End Date.."+endDate+"\n");

                        logger.info("Getting Delivery Information for DropShip Snapdeal Orders");
                        String dropshipUrl = "http://shipping.snapdeal.com/vendor/DROPSHIP/product-shipment/shippedData/fetch/?shippedStartDate="+startDate+"&shippedEndDate="+endDate+"&specialPanelAccess=&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0&sCode=COURIER_DELIVERED";
                        logger.info("Drop Ship Url "+dropshipUrl);
                
                        GetMethod getMethod = new GetMethod(dropshipUrl);
                        
                        
                        try {
                                statusCode = newClient.executeMethod(getMethod);
                        } catch (Exception e) {
                                logger.error("Unable to get Http Response for snapdeal dropship delivered orders", e);
                        } 

                        try {
                                rd = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(getMethod.getResponseBody())));
                        } catch (Exception e) {
                                logger.error("Unable to read Http Response for snapdeal dropship delivered orders", e);
                        } 


                        try {
                                while ((line1 = rd.readLine()) != null) {
                                        if(line1.contains("jsonString")){
                                                String jsonString = line1.substring(line1.indexOf("["), line1.indexOf("'/>"));
                                                logger.info("Response get from SnapDeal DropShip.. ");
                                                jsonDataShip = new JSONArray(jsonString);
                                                break;
                                        }
                                }
                        } catch (Exception e) {
                                logger.error("Unable to extract Http Response for snapdeal dropship delivered orders", e);
                        } 

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

                                                if(jsonObj!=null){
                                                        //System.out.println(jsonObj);
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceNumber");
                                                        String deliveryDate =(String) jsonObj.get("deliveredOn");
                                                        //System.out.println("Snapdeal Dropship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                        logger.info("Snapdeal Dropship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                        deliveryDate = ourDBDateFormat.format(gotSnapdealDateFormat.parse(deliveryDate).getTime());
                                                        List<String> deliveredOrdelList = new ArrayList<String>();
                                                        deliveredOrdelList.add(referenceNumber);
                                                        deliveredOrdelList.add(subOrderCode);
                                                        deliveredOrdelList.add(deliveryDate);
                                                        deliveredOrderDataList.add(deliveredOrdelList);
                                                }
                                        } catch (Exception e) {
                                                logger.error("Unable to add delivered order details for updation regarding snapdeal dropship delivered orders", e);
                                        }
                                }
                        }
                        
                        getMethod.releaseConnection();
                        
                        
                        logger.info("Getting Delivery Information for OneShip Snapdeal Orders");
                        String oneShipUrl = "http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch/?shippedStartDate="+startDate+"&shippedEndDate="+endDate+"&specialPanelAccess=&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0&sCode=COURIER_DELIVERED";
                        logger.info("One Ship Url "+oneShipUrl);
                        
                        getMethod = new GetMethod(oneShipUrl);
                        
                        try {
                                statusCode = newClient.executeMethod(getMethod);
                        } catch (Exception e) {
                                logger.error("Unable to get Http Response for snapdeal oneship delivered orders", e);
                        } 

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

                        try {
                                while ((line1 = rd.readLine()) != null) {
                                        if(line1.contains("jsonString")){
                                                String jsonString = line1.substring(line1.indexOf("["), line1.indexOf("'/>"));
                                                logger.info("Response get from SnapDeal OneShip.. ");
                                                jsonDataShip = new JSONArray(jsonString);
                                                break;
                                        }
                                }
                        } catch (Exception e) {
                                logger.error("Unable to extract Http Response for snapdeal oneship delivered orders", e);
                        } 

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

                                                if(jsonObj!=null){
                                                        //System.out.println(jsonObj);
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceNumber");
                                                        String deliveryDate =(String) jsonObj.get("deliveredOn");
                                                        //System.out.println("Snapdeal Oneship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                        logger.info("Snapdeal Oneship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                        deliveryDate = ourDBDateFormat.format(gotSnapdealDateFormat.parse(deliveryDate).getTime());
                                                        List<String> deliveredOrdelList = new ArrayList<String>();
                                                        deliveredOrdelList.add(referenceNumber);
                                                        deliveredOrdelList.add(subOrderCode);
                                                        deliveredOrdelList.add(deliveryDate);

                                                        deliveredOrderDataList.add(deliveredOrdelList);
                                                }
                                        } catch (Exception e) {
                                                logger.error("Unable to add delivered order details for updation regarding snapdeal oneship delivered orders", e);
                                        }
                                }
                        }
                        
                        getMethod.releaseConnection();
                        
                        logger.info("Getting Information for Cancelled DropShip Snapdeal Orders");
                        String dropshipCancelUrl = "http://shipping.snapdeal.com/vendor/DROPSHIP/product-shipment/shippedData/fetch/?shippedStartDate="+startDate+"&shippedEndDate="+endDate+"&specialPanelAccess=&statusCode=CANCELLATION_COMPLETE&statusColumn=cancelledOn&dispatchCategoryId=0&sCode=CANCELLATION_COMPLETE";
                        logger.info("Drop Ship Cancel Url "+dropshipCancelUrl);

                        getMethod = new GetMethod(dropshipCancelUrl);

                        try {
                                statusCode = newClient.executeMethod(getMethod);
                        } catch (Exception e) {
                                logger.error("Unable to get Http Response for snapdeal dropship cancelled orders", e);
                        } 

                        try {
                                rd = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(getMethod.getResponseBody())));
                        } catch (Exception e) {
                                logger.error("Unable to read Http Response for snapdeal dropship cancelled orders", e);
                        }

                        try {
                                while ((line1 = rd.readLine()) != null) {
                                        if(line1.contains("jsonString")){
                                                String jsonString = line1.substring(line1.indexOf("["), line1.indexOf("'/>"));
                                                logger.info("Response get from SnapDeal DropShip Cancelled Orders.. ");
                                                jsonDataShip = new JSONArray(jsonString);
                                                break;
                                        }
                                }
                        } catch (Exception e) {
                                logger.error("Unable to extract Http Response for snapdeal dropship cancelled orders", e);
                        } 

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

                                                if(jsonObj!=null){
                                                        //System.out.println(jsonObj);
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceNumber");
                                                        //System.out.println("Snapdeal Dropship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber);
                                                        logger.info("Snapdeal Dropship 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 dropship orders", e);
                                        }
                                }
                        }

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

                        getMethod = new GetMethod(oneShipCancelUrl);

                        try {
                                statusCode = newClient.executeMethod(getMethod);
                        } catch (Exception e) {
                                logger.error("Unable to get Http Response for snapdeal oneship cancelled orders", e);
                        } 

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

                        try {
                                while ((line1 = rd.readLine()) != null) {
                                        if(line1.contains("jsonString")){
                                                String jsonString = line1.substring(line1.indexOf("["), line1.indexOf("'/>"));
                                                logger.info("Response get from SnapDeal OneShip Cancelled Orders.. ");
                                                jsonDataShip = new JSONArray(jsonString);
                                                break;
                                        }
                                }
                        } catch (Exception e) {
                                logger.error("Unable to extract Http Response for snapdeal oneship cancelled orders", e);
                        } 

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

                                                if(jsonObj!=null){
                                                        //System.out.println(jsonObj);
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceNumber");
                                                        //System.out.println("Snapdeal OneShip Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber);
                                                        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);
                                        }
                                }
                        }
                        
                        getMethod.releaseConnection();

                        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);
                        }
                }

        }
}