Subversion Repositories SmartDukaan

Rev

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

package com.amazonaws.mws.samples;

import com.amazonaws.mws.*;
import com.amazonaws.mws.model.GetFeedSubmissionResultRequest;
import com.amazonaws.mws.model.GetFeedSubmissionResultResponse;
import com.amazonaws.mws.samples.ProcessFeed;

import in.shop2020.logistics.LogisticsServiceException;
import in.shop2020.logistics.Provider;
import in.shop2020.model.v1.catalog.CatalogService.Client;
import in.shop2020.model.v1.order.AmazonOrder;
import in.shop2020.model.v1.order.LineItem;
import in.shop2020.model.v1.order.Order;
import in.shop2020.thrift.clients.CatalogClient;
import in.shop2020.thrift.clients.HelperClient;
import in.shop2020.thrift.clients.LogisticsClient;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.thrift.clients.UserClient;
import in.shop2020.utils.GmailUtils;
import in.shop2020.utils.HelperServiceException;

import java.io.*;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.xml.parsers.*;

import org.apache.commons.lang.StringUtils;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;

// Referenced classes of package com.amazonaws.mws.samples:
//            ProcessFeed

public class CheckFeedSubmission
{

        public ProcessFeed getResult(String feedSubmissionId, String feedType, long timestamp,List<Long> itemIds) throws ParserConfigurationException, SAXException, IOException
        {  
                Map<Long,String> courierIdPhoneMap = new HashMap<Long,String>();
                courierIdPhoneMap.put(1L,"18602331234");
                courierIdPhoneMap.put(6L,"1800-123-2400");
                courierIdPhoneMap.put(3L, "+91 (124) 4718900");
                courierIdPhoneMap.put(7L, "1800 209 6161 / 1800 22 6161 MTNL & BSNL");
                String accessKeyId = "AKIAII3SGRXBJDPCHSGQ";
                String secretAccessKey = "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";
                String appName = "Test";
                String appVersion = "1.0";
                int processed = 0;
                int success = 0;
                int error = 0;
                int warn = 0;
                MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
                config.setServiceURL("https://mws.amazonservices.in");
                MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, appName, appVersion, config);
                GetFeedSubmissionResultRequest request = new GetFeedSubmissionResultRequest();
                request.setMerchant("AF6E3O0VE0X4D");
                request.setFeedSubmissionId(feedSubmissionId);
                OutputStream processingResult = null;
                try
                {
                        processingResult = new FileOutputStream( "/home/amazon/feedSubmission"+feedType+"Result.xml" );
                }
                catch(FileNotFoundException e)
                {
                        e.printStackTrace();
                }
                request.setFeedSubmissionResultOutputStream(processingResult);
                try {
                        GetFeedSubmissionResultResponse response = service.getFeedSubmissionResult(request);
                } catch (MarketplaceWebServiceException e) {
                        e.printStackTrace();
                        return null;

                }
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse("/home/amazon/feedSubmission"+feedType+"Result.xml");
                doc.getDocumentElement().normalize();
                System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
                ProcessFeed feed = new ProcessFeed();
                NodeList nodes = doc.getElementsByTagName("ProcessingSummary");
                for (int temp = 0; temp < nodes.getLength(); temp++) {

                        Node n = nodes.item(temp);

                        System.out.println("\nCurrent Element :" + n.getNodeName());

                        if (n.getNodeType() == Node.ELEMENT_NODE) {

                                Element eElement = (Element) n;
                                System.out.println((new StringBuilder()).append("MessagesProcessed: ").append(eElement.getElementsByTagName("MessagesProcessed").item(0).getTextContent()).toString());
                                feed.setProcessed(eElement.getElementsByTagName("MessagesProcessed").item(0).getTextContent());
                                processed = Integer.parseInt(eElement.getElementsByTagName("MessagesProcessed").item(0).getTextContent());
                                System.out.println((new StringBuilder()).append("MessagesSuccessful : ").append(eElement.getElementsByTagName("MessagesSuccessful").item(0).getTextContent()).toString());
                                feed.setSuccess(eElement.getElementsByTagName("MessagesSuccessful").item(0).getTextContent());
                                success = Integer.parseInt(eElement.getElementsByTagName("MessagesSuccessful").item(0).getTextContent());
                                feed.setError(eElement.getElementsByTagName("MessagesWithError").item(0).getTextContent());
                                System.out.println((new StringBuilder()).append("MessageWithError : ").append(eElement.getElementsByTagName("MessagesWithError").item(0).getTextContent()).toString());
                                error = Integer.parseInt(eElement.getElementsByTagName("MessagesWithError").item(0).getTextContent());
                                feed.setWarn(eElement.getElementsByTagName("MessagesWithWarning").item(0).getTextContent());
                                System.out.println((new StringBuilder()).append("MessagesWithWarning : ").append(eElement.getElementsByTagName("MessagesWithWarning").item(0).getTextContent()).toString());
                                warn = Integer.parseInt(eElement.getElementsByTagName("MessagesWithWarning").item(0).getTextContent());
                        }
                }
                if(feedType.equals("FulfillmentFeed")){
                        NodeList nodesFail = doc.getElementsByTagName("Result");
                        String failedOrderId = "";
                        for (int temp = 0; temp < nodesFail.getLength(); temp++) {

                                Node n = nodesFail.item(temp);
                                if (n.getNodeType() == Node.ELEMENT_NODE) {
                                        Element eElement = (Element) n;
                                        String messageID = eElement.getElementsByTagName("MessageID").item(0).getTextContent();
                                        failedOrderId+=" "+SubmitFulfillmentFeedAndFetchResults.messageIdOrderMap.get(messageID).toString()+"\n";
                                        SubmitFulfillmentFeedAndFetchResults.messageIdOrderMap.remove(BigInteger.valueOf(Long.parseLong(messageID)));
                                }

                        }
                        in.shop2020.model.v1.order.TransactionService.Client tcl;
                        in.shop2020.utils.HelperService.Client hcl;
                        in.shop2020.logistics.LogisticsService.Client lcl;
                        AmazonOrder amazonOrder;
                        LineItem lineItem;
                        Provider provider;
                        String emailBody = null;
                        String emailIdFrom = "help@saholic.com";
                        for (Entry<BigInteger, Order> entry : SubmitFulfillmentFeedAndFetchResults.messageIdOrderMap.entrySet()){
                                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
                                try {
                                        lineItem = entry.getValue().getLineitems().get(0);
                                        tcl = new TransactionClient().getClient();
                                        tcl.updateAmazonOrderStatus(entry.getValue().getId(),"Order-Fulfillment-Sent");
                                        lcl = new LogisticsClient().getClient();
                                        try {
                                                provider = lcl.getProvider(entry.getValue().getLogistics_provider_id());
                                        } catch (LogisticsServiceException e1) {
                                                e1.printStackTrace();
                                                continue;
                                        }
                                        amazonOrder = tcl.getAmazonOrder(entry.getValue().getId());
                                        hcl = new HelperClient("helper_service_server_host_prod", "helper_service_server_port_prod").getClient();
                                        emailBody = "Dear Customer ,<br><br>"+

                                        "We are pleased to inform that we have shipped the Amazon Order ID : " +amazonOrder.getAmazonOrderCode()+ " for your product " + (getVaildName(lineItem.getBrand())+" "+getVaildName(lineItem.getModel_name())+" "+getVaildName(lineItem.getModel_number())+" "+getVaildName(lineItem.getColor())) + 
                                        " on " +(new java.util.Date(entry.getValue().getShipping_timestamp()).toLocaleString())+ "." +
                                        "The shipment will be delivered to you via " + provider.getName() + " Courier Service" + " AWB# : " + entry.getValue().getAirwaybill_no() +".<br><br>"+

                                        "Expected delivery date for your order is " +(new java.util.Date(entry.getValue().getExpected_delivery_time()).toLocaleString()) +".<br><br>"+ 

                                        "For scheduling the delivery of your product at some specific timings, we recommend you to contact the helpline for " +provider.getName() +" with your "+
                                        
                                        "complete AWB# On "+ courierIdPhoneMap.get(entry.getValue().getLogistics_provider_id())+".<br><br>"+

                                        "Warm Regards, <br>"+
                                        "Saholic Team";
                                        try {
                                                //hcl.saveUserEmailForSending(Arrays.asList(new String[] {"vikram.raghav@saholic.com"}), emailIdFrom, "Shipping Details for Order ID: " + amazonOrder.getAmazonOrderCode(), emailBody, "Amazon MFN", "Amazon Order Shipping Confirmation", null, Arrays.asList(new String[] {"vikram.raghav@shop2020.in"}), 1);
                                                hcl.saveUserEmailForSending(Arrays.asList(new String[] {entry.getValue().getCustomer_email()}), emailIdFrom, "Shipping Details for Order ID: " + amazonOrder.getAmazonOrderCode(), emailBody, "Amazon MFN", "Amazon Order Shipping Confirmation", null, new ArrayList<String>(), 1);
                                        } catch (HelperServiceException e) {
                                                e.printStackTrace();
                                                continue;
                                        }
                                } catch (TTransportException e) {
                                        e.printStackTrace();
                                } catch (TException e) {
                                        e.printStackTrace();
                                }
                        }
                        if(!failedOrderId.isEmpty()){
                                String[] sendTo = { "eng@shop2020.in" };
                                String emailSubjectTxt = "Fulfillment Feed for amazon Failure";
                                String emailFromAddress = "build@shop2020.in";
                                String password = "cafe@nes";
                                GmailUtils mailer = new GmailUtils();
                                try {
                                        mailer.sendSSLMessage(sendTo, emailSubjectTxt, " Failed to Send Fulfillment for these Order IDs : "+"\n"+failedOrderId, emailFromAddress, password, "/home/amazon/feedSubmissionOrderAcknowledgementResult.xml");
                                }
                                catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                }
                if(feedType.equals("OrderAcknowledgement")){
                        NodeList nodesFail = doc.getElementsByTagName("Result");
                        String failedamazonOrderId = "";
                        for (int temp = 0; temp < nodesFail.getLength(); temp++) {

                                Node n = nodesFail.item(temp);
                                if (n.getNodeType() == Node.ELEMENT_NODE) {
                                        Element eElement = (Element) n;
                                        String messageID = eElement.getElementsByTagName("MessageID").item(0).getTextContent();
                                        failedamazonOrderId+=" "+CreateandSubmitOrderAcknowledgementFeed.messageIdamazonOrderIdMap.get(messageID).toString()+"\n";
                                        CreateandSubmitOrderAcknowledgementFeed.messageIdamazonOrderIdMap.remove(BigInteger.valueOf(Long.parseLong(messageID)));
                                }

                        }
                        in.shop2020.model.v1.order.TransactionService.Client tcl;
                        for (Map.Entry<BigInteger, String> entry : CreateandSubmitOrderAcknowledgementFeed.messageIdamazonOrderIdMap.entrySet()){
                                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
                                try {
                                        tcl = new TransactionClient().getClient();
                                        tcl.changeAmazonOrderStatus(entry.getValue(),"Order-Cancellation-Sent");
                                } catch (TTransportException e) {
                                        e.printStackTrace();
                                } catch (TException e) {
                                        e.printStackTrace();
                                }
                        }
                        if(!failedamazonOrderId.isEmpty()){
                                String[] sendTo = { "eng@shop2020.in" };
                                String emailSubjectTxt = "Acknowledgement Feed Failure for Amazon";
                                String emailFromAddress = "build@shop2020.in";
                                String password = "cafe@nes";
                                GmailUtils mailer = new GmailUtils();
                                try {
                                        mailer.sendSSLMessage(sendTo, emailSubjectTxt, " Failed to Send Acknowledgement for these Amazon Order IDs : "+"\n"+failedamazonOrderId, emailFromAddress, password, "/home/amazon/feedSubmissionOrderAcknowledgementResult.xml");
                                }
                                catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                }
                if(StringUtils.equals(feedType, "FbaListingFeed") || StringUtils.equals(feedType,"NonFbaListingFeed") || StringUtils.equals(feedType, "FbbListingFeed") || StringUtils.equals(feedType, "FbgListingFeed")){
                        ArrayList<Long> skuList = new ArrayList<Long>();
                        NodeList nodesFail = doc.getElementsByTagName("AdditionalInfo");
                        for (int temp = 0; temp < nodesFail.getLength(); temp++) {
                                Node n = nodesFail.item(temp);
                                if (n.getNodeType() == Node.ELEMENT_NODE) {

                                        Element eElement = (Element) n;
                                        if (StringUtils.equals(feedType, "FbaListingFeed")){
                                                System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]);
                                                skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]));
                                        }
                                        if (StringUtils.equals(feedType, "FbgListingFeed")){
                        System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]);
                        skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]));
                    }
                                        if (StringUtils.equals(feedType, "FbbListingFeed")){
                                                System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]);
                                                skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]));
                                        }
                                        else {
                                                System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent());
                                                skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent()));
                                        }
                                }
                        }
                        Client CatalogClient = null;
                        try {
                                CatalogClient = new CatalogClient().getClient();
                        } catch (TTransportException e) {
                                e.printStackTrace();
                        }
                        try {
                                itemIds.removeAll(skuList);
                                CatalogClient.updateTimestampForAmazonFeeds(feedType, itemIds,System.currentTimeMillis());
                        } catch (TException e) {
                                e.printStackTrace();
                        }

                }

                if (timestamp != 0){
                        ArrayList<Long> skuList = new ArrayList<Long>();
                        NodeList nodesFail = doc.getElementsByTagName("AdditionalInfo");
                        for (int temp = 0; temp < nodesFail.getLength(); temp++) {

                                Node n = nodesFail.item(temp);
                                if (n.getNodeType() == Node.ELEMENT_NODE) {

                                        Element eElement = (Element) n;
                                        if (StringUtils.equals(feedType, "FbaPricing") || StringUtils.equals(feedType, "FullFbaPricing")){
                                                System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]);
                                                skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]));
                                        }
                                        else if (StringUtils.equals(feedType, "FbbPricing")){
                                                System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]);
                                                skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]));
                                        }
                                        else if (StringUtils.equals(feedType, "FbgPricing")){
                        System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]);
                        skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]));
                    }
                                        else{
                                                System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent());
                                                skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent()));
                                        }
                                }
                        }

                        Client CatalogClient = null;
                        try {
                                CatalogClient = new CatalogClient().getClient();
                        } catch (TTransportException e) {
                                e.printStackTrace();
                        }
                        try {
                                itemIds.removeAll(skuList);
                                CatalogClient.updateTimestampForAmazonFeeds(feedType, itemIds, timestamp);
                        } catch (TException e) {
                                e.printStackTrace();
                        }
                }
                if(success == processed)
                        feed.setResult("true");
                else
                        feed.setResult("false");
                return feed;
        }

        public static void main(String args[])
        throws ParserConfigurationException, SAXException, IOException
        {
                CheckFeedSubmission service = new CheckFeedSubmission();
                ArrayList<Long> itemIdsToUpdate = new ArrayList<Long>();
                ProcessFeed result = service.getResult("10360586988", "PromoFeed",412500,itemIdsToUpdate);
        }
        public String getVaildName(String name){
                return name!=null?name:"";
        }


}