Subversion Repositories SmartDukaan

Rev

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

package in.shop2020;

import in.shop2020.model.v1.order.OrderSource;
import in.shop2020.model.v1.order.OrderStatus;
import in.shop2020.thrift.clients.TransactionClient;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
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.http.HttpResponse;
import org.apache.http.NameValuePair;
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.LoggerFactory;
import org.slf4j.Logger;



public class SnapdealOrderStatusReconciliation{
        private static Logger logger;

        public static void main(String[] args) throws UnsupportedEncodingException{
                logger = LoggerFactory.getLogger(SnapdealOrderStatusReconciliation.class);
                /*List<OrderStatus> statuses = new ArrayList<OrderStatus>();
                statuses.add(OrderStatus.SHIPPED_FROM_WH);
                statuses.add(OrderStatus.SHIPPED_TO_LOGST);*/

                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(System.currentTimeMillis()));
                logger.info("Snapdeal Order Recon End Date .. "+endDate);
                //endDate = endDate.replace("-", "%2F");


                HttpClient client = new DefaultHttpClient();
                HttpPost post = new HttpPost("http://shipping.snapdeal.com/login_security_check?spring-security-redirect=http://shipping.snapdeal.com/vendor/product-shipment/shippingDashboard&");
                HttpGet get;
                BufferedReader rd= null;

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("j_username",
                "saholic-snapdeal@saholic.com"));
                nameValuePairs.add(new BasicNameValuePair("j_password",
                "d73eaa39"));
                post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
                HttpResponse response = null;
                try {
                        response = client.execute(post);
                } catch (Exception e) {
                        logger.error("Unable to get Http Response for snapdeal seller portal login", e);
                }
                try {
                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                } 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);
                }

                JSONObject jsonDataObj = null;
                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/?startDate="+startDate+"&endDate="+endDate+"&specialPanelAccess=&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0&sCode=COURIER_DELIVERED";
                        logger.info("Drop Ship Url "+dropshipUrl);

                        get = new HttpGet(dropshipUrl);

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

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


                        try {
                                jsonDataObj = new JSONObject(rd.readLine());
                                jsonDataShip = new JSONArray(jsonDataObj.get("jsonDataString").toString());
                        } 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){
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceCode");
                                                        String deliveryDate =(String) jsonObj.get("deliveredOn");
                                                        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);
                                        }
                                }
                        }
                        
                        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+"&specialPanelAccess=&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0&sCode=COURIER_DELIVERED";
                        logger.info("One Ship Url "+oneShipUrl);

                        get = new HttpGet(oneShipUrl);  

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

                        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);
                        }
                        
                        try {
                                jsonDataObj = new JSONObject(rd.readLine());
                                jsonDataShip = new JSONArray(jsonDataObj.get("jsonDataString").toString());
                        } 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){
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceCode");
                                                        String deliveryDate =(String) jsonObj.get("deliveredOn");
                                                        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);
                                        }
                                }
                        }
                        
                        
                        logger.info("Getting Information for Cancelled DropShip Snapdeal Orders");
                        String dropshipCancelUrl = "http://shipping.snapdeal.com/vendor/DROPSHIP/product-shipment/shippedData/fetch/?statusCode=CLD&dispatchCategoryId=0&startDate="+startDate+"&endDate="+endDate+"&statusColumn=cancelledOn";
                        logger.info("Drop Ship Cancel Url "+dropshipCancelUrl);

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

                        try {
                                rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        } catch (Exception e) {
                                logger.error("Unable to read Http Response for snapdeal dropship cancelled orders", e);
                        }
                        
                        try {
                                jsonDataObj = new JSONObject(rd.readLine());
                                jsonDataShip = new JSONArray(jsonDataObj.get("jsonDataString").toString());
                        } 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){
                                                        String subOrderCode =(String) jsonObj.get("suborderCode");
                                                        String referenceNumber =(String) jsonObj.get("referenceCode");
                                                        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);
                                        }
                                }
                        }
                        
                        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);
                        
                        get = new HttpGet(oneShipCancelUrl);
                        
                        try {
                                response = client.execute(get);
                        } catch (Exception e) {
                                logger.error("Unable to get Http Response for snapdeal oneship cancelled orders", e);
                        } 

                        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);
                        }
                        
                        try {
                                jsonDataObj = new JSONObject(rd.readLine());
                                jsonDataShip = new JSONArray(jsonDataObj.get("jsonDataString").toString());
                        } 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){
                                                        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);
                                        }
                                }
                        }
                        
                        
                        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);
                        }
                }

        }
}