Subversion Repositories SmartDukaan

Rev

Rev 12891 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
12459 kshitij.so 1
package com.amazonaws.mws.samples;
2
 
3
import com.amazonaws.mws.*;
4
import com.amazonaws.mws.model.GetFeedSubmissionResultRequest;
5
import com.amazonaws.mws.model.GetFeedSubmissionResultResponse;
6
import com.amazonaws.mws.samples.ProcessFeed;
7
 
8
import in.shop2020.logistics.LogisticsServiceException;
9
import in.shop2020.logistics.Provider;
10
import in.shop2020.model.v1.catalog.CatalogService.Client;
11
import in.shop2020.model.v1.order.AmazonOrder;
12
import in.shop2020.model.v1.order.LineItem;
13
import in.shop2020.model.v1.order.Order;
14
import in.shop2020.thrift.clients.CatalogClient;
15
import in.shop2020.thrift.clients.HelperClient;
16
import in.shop2020.thrift.clients.LogisticsClient;
17
import in.shop2020.thrift.clients.TransactionClient;
18
import in.shop2020.thrift.clients.UserClient;
19
import in.shop2020.utils.GmailUtils;
20
import in.shop2020.utils.HelperServiceException;
21
 
22
import java.io.*;
23
import java.math.BigInteger;
24
import java.util.ArrayList;
25
import java.util.Arrays;
26
import java.util.HashMap;
27
import java.util.List;
28
import java.util.Map;
29
import java.util.Map.Entry;
30
 
31
import javax.xml.parsers.*;
32
 
33
import org.apache.commons.lang.StringUtils;
34
import org.apache.thrift.TException;
35
import org.apache.thrift.transport.TTransportException;
36
import org.w3c.dom.*;
37
import org.xml.sax.SAXException;
38
 
39
// Referenced classes of package com.amazonaws.mws.samples:
40
//            ProcessFeed
41
 
42
public class CheckFeedSubmission
43
{
44
 
45
	public ProcessFeed getResult(String feedSubmissionId, String feedType, long timestamp,List<Long> itemIds) throws ParserConfigurationException, SAXException, IOException
46
	{  
47
		Map<Long,String> courierIdPhoneMap = new HashMap<Long,String>();
48
		courierIdPhoneMap.put(1L,"18602331234");
49
		courierIdPhoneMap.put(6L,"1800-123-2400");
50
		courierIdPhoneMap.put(3L, "+91 (124) 4718900");
51
		courierIdPhoneMap.put(7L, "1800 209 6161 / 1800 22 6161 MTNL & BSNL");
52
		String accessKeyId = "AKIAII3SGRXBJDPCHSGQ";
53
		String secretAccessKey = "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";
54
		String appName = "Test";
55
		String appVersion = "1.0";
56
		int processed = 0;
57
		int success = 0;
58
		int error = 0;
59
		int warn = 0;
60
		MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
61
		config.setServiceURL("https://mws.amazonservices.in");
62
		MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, appName, appVersion, config);
63
		GetFeedSubmissionResultRequest request = new GetFeedSubmissionResultRequest();
64
		request.setMerchant("AF6E3O0VE0X4D");
65
		request.setFeedSubmissionId(feedSubmissionId);
66
		OutputStream processingResult = null;
67
		try
68
		{
69
			processingResult = new FileOutputStream( "/home/amazon/feedSubmission"+feedType+"Result.xml" );
70
		}
71
		catch(FileNotFoundException e)
72
		{
73
			e.printStackTrace();
74
		}
75
		request.setFeedSubmissionResultOutputStream(processingResult);
76
		try {
77
			GetFeedSubmissionResultResponse response = service.getFeedSubmissionResult(request);
78
		} catch (MarketplaceWebServiceException e) {
79
			e.printStackTrace();
80
			return null;
81
 
82
		}
83
		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
84
		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
85
		Document doc = dBuilder.parse("/home/amazon/feedSubmission"+feedType+"Result.xml");
86
		doc.getDocumentElement().normalize();
87
		System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
88
		ProcessFeed feed = new ProcessFeed();
89
		NodeList nodes = doc.getElementsByTagName("ProcessingSummary");
90
		for (int temp = 0; temp < nodes.getLength(); temp++) {
91
 
92
			Node n = nodes.item(temp);
93
 
94
			System.out.println("\nCurrent Element :" + n.getNodeName());
95
 
96
			if (n.getNodeType() == Node.ELEMENT_NODE) {
97
 
98
				Element eElement = (Element) n;
99
				System.out.println((new StringBuilder()).append("MessagesProcessed: ").append(eElement.getElementsByTagName("MessagesProcessed").item(0).getTextContent()).toString());
100
				feed.setProcessed(eElement.getElementsByTagName("MessagesProcessed").item(0).getTextContent());
101
				processed = Integer.parseInt(eElement.getElementsByTagName("MessagesProcessed").item(0).getTextContent());
102
				System.out.println((new StringBuilder()).append("MessagesSuccessful : ").append(eElement.getElementsByTagName("MessagesSuccessful").item(0).getTextContent()).toString());
103
				feed.setSuccess(eElement.getElementsByTagName("MessagesSuccessful").item(0).getTextContent());
104
				success = Integer.parseInt(eElement.getElementsByTagName("MessagesSuccessful").item(0).getTextContent());
105
				feed.setError(eElement.getElementsByTagName("MessagesWithError").item(0).getTextContent());
106
				System.out.println((new StringBuilder()).append("MessageWithError : ").append(eElement.getElementsByTagName("MessagesWithError").item(0).getTextContent()).toString());
107
				error = Integer.parseInt(eElement.getElementsByTagName("MessagesWithError").item(0).getTextContent());
108
				feed.setWarn(eElement.getElementsByTagName("MessagesWithWarning").item(0).getTextContent());
109
				System.out.println((new StringBuilder()).append("MessagesWithWarning : ").append(eElement.getElementsByTagName("MessagesWithWarning").item(0).getTextContent()).toString());
110
				warn = Integer.parseInt(eElement.getElementsByTagName("MessagesWithWarning").item(0).getTextContent());
111
			}
112
		}
113
		if(feedType.equals("FulfillmentFeed")){
114
			NodeList nodesFail = doc.getElementsByTagName("Result");
115
			String failedOrderId = "";
116
			for (int temp = 0; temp < nodesFail.getLength(); temp++) {
117
 
118
				Node n = nodesFail.item(temp);
119
				if (n.getNodeType() == Node.ELEMENT_NODE) {
120
					Element eElement = (Element) n;
121
					String messageID = eElement.getElementsByTagName("MessageID").item(0).getTextContent();
122
					failedOrderId+=" "+SubmitFulfillmentFeedAndFetchResults.messageIdOrderMap.get(messageID).toString()+"\n";
123
					SubmitFulfillmentFeedAndFetchResults.messageIdOrderMap.remove(BigInteger.valueOf(Long.parseLong(messageID)));
124
				}
125
 
126
			}
127
			in.shop2020.model.v1.order.TransactionService.Client tcl;
128
			in.shop2020.utils.HelperService.Client hcl;
129
			in.shop2020.logistics.LogisticsService.Client lcl;
130
			AmazonOrder amazonOrder;
131
			LineItem lineItem;
132
			Provider provider;
133
			String emailBody = null;
134
			String emailIdFrom = "help@saholic.com";
135
			for (Entry<BigInteger, Order> entry : SubmitFulfillmentFeedAndFetchResults.messageIdOrderMap.entrySet()){
136
				System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
137
				try {
138
					lineItem = entry.getValue().getLineitems().get(0);
139
					tcl = new TransactionClient().getClient();
140
					tcl.updateAmazonOrderStatus(entry.getValue().getId(),"Order-Fulfillment-Sent");
141
					lcl = new LogisticsClient().getClient();
142
					try {
143
						provider = lcl.getProvider(entry.getValue().getLogistics_provider_id());
144
					} catch (LogisticsServiceException e1) {
145
						e1.printStackTrace();
146
						continue;
147
					}
148
					amazonOrder = tcl.getAmazonOrder(entry.getValue().getId());
149
					hcl = new HelperClient("helper_service_server_host_prod", "helper_service_server_port_prod").getClient();
150
					emailBody = "Dear Customer ,<br><br>"+
151
 
152
					"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())) + 
153
					" on " +(new java.util.Date(entry.getValue().getShipping_timestamp()).toLocaleString())+ "." +
154
					"The shipment will be delivered to you via " + provider.getName() + " Courier Service" + " AWB# : " + entry.getValue().getAirwaybill_no() +".<br><br>"+
155
 
156
					"Expected delivery date for your order is " +(new java.util.Date(entry.getValue().getExpected_delivery_time()).toLocaleString()) +".<br><br>"+ 
157
 
158
					"For scheduling the delivery of your product at some specific timings, we recommend you to contact the helpline for " +provider.getName() +" with your "+
159
 
160
					"complete AWB# On "+ courierIdPhoneMap.get(entry.getValue().getLogistics_provider_id())+".<br><br>"+
161
 
162
					"Warm Regards, <br>"+
163
					"Saholic Team";
164
					try {
165
						//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);
166
						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);
167
					} catch (HelperServiceException e) {
168
						e.printStackTrace();
169
						continue;
170
					}
171
				} catch (TTransportException e) {
172
					e.printStackTrace();
173
				} catch (TException e) {
174
					e.printStackTrace();
175
				}
176
			}
177
			if(!failedOrderId.isEmpty()){
178
				String[] sendTo = { "eng@shop2020.in" };
179
				String emailSubjectTxt = "Fulfillment Feed for amazon Failure";
180
				String emailFromAddress = "build@shop2020.in";
181
				String password = "cafe@nes";
182
				GmailUtils mailer = new GmailUtils();
183
				try {
184
					mailer.sendSSLMessage(sendTo, emailSubjectTxt, " Failed to Send Fulfillment for these Order IDs : "+"\n"+failedOrderId, emailFromAddress, password, "/home/amazon/feedSubmissionOrderAcknowledgementResult.xml");
185
				}
186
				catch (Exception e) {
187
					e.printStackTrace();
188
				}
189
			}
190
		}
191
		if(feedType.equals("OrderAcknowledgement")){
192
			NodeList nodesFail = doc.getElementsByTagName("Result");
193
			String failedamazonOrderId = "";
194
			for (int temp = 0; temp < nodesFail.getLength(); temp++) {
195
 
196
				Node n = nodesFail.item(temp);
197
				if (n.getNodeType() == Node.ELEMENT_NODE) {
198
					Element eElement = (Element) n;
199
					String messageID = eElement.getElementsByTagName("MessageID").item(0).getTextContent();
200
					failedamazonOrderId+=" "+CreateandSubmitOrderAcknowledgementFeed.messageIdamazonOrderIdMap.get(messageID).toString()+"\n";
201
					CreateandSubmitOrderAcknowledgementFeed.messageIdamazonOrderIdMap.remove(BigInteger.valueOf(Long.parseLong(messageID)));
202
				}
203
 
204
			}
205
			in.shop2020.model.v1.order.TransactionService.Client tcl;
206
			for (Map.Entry<BigInteger, String> entry : CreateandSubmitOrderAcknowledgementFeed.messageIdamazonOrderIdMap.entrySet()){
207
				System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
208
				try {
209
					tcl = new TransactionClient().getClient();
210
					tcl.changeAmazonOrderStatus(entry.getValue(),"Order-Cancellation-Sent");
211
				} catch (TTransportException e) {
212
					e.printStackTrace();
213
				} catch (TException e) {
214
					e.printStackTrace();
215
				}
216
			}
217
			if(!failedamazonOrderId.isEmpty()){
218
				String[] sendTo = { "eng@shop2020.in" };
219
				String emailSubjectTxt = "Acknowledgement Feed Failure for Amazon";
220
				String emailFromAddress = "build@shop2020.in";
221
				String password = "cafe@nes";
222
				GmailUtils mailer = new GmailUtils();
223
				try {
224
					mailer.sendSSLMessage(sendTo, emailSubjectTxt, " Failed to Send Acknowledgement for these Amazon Order IDs : "+"\n"+failedamazonOrderId, emailFromAddress, password, "/home/amazon/feedSubmissionOrderAcknowledgementResult.xml");
225
				}
226
				catch (Exception e) {
227
					e.printStackTrace();
228
				}
229
			}
230
		}
15702 kshitij.so 231
		if(StringUtils.equals(feedType, "FbaListingFeed") || StringUtils.equals(feedType,"NonFbaListingFeed") || StringUtils.equals(feedType, "FbbListingFeed") || StringUtils.equals(feedType, "FbgListingFeed") || StringUtils.equals(feedType, "FbdListingFeed")){
12459 kshitij.so 232
			ArrayList<Long> skuList = new ArrayList<Long>();
233
			NodeList nodesFail = doc.getElementsByTagName("AdditionalInfo");
234
			for (int temp = 0; temp < nodesFail.getLength(); temp++) {
235
				Node n = nodesFail.item(temp);
236
				if (n.getNodeType() == Node.ELEMENT_NODE) {
237
 
238
					Element eElement = (Element) n;
239
					if (StringUtils.equals(feedType, "FbaListingFeed")){
240
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]);
241
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]));
242
					}
15702 kshitij.so 243
					else if (StringUtils.equals(feedType, "FbgListingFeed")){
12888 kshitij.so 244
                        System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]);
245
                        skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]));
246
                    }
15702 kshitij.so 247
					else if (StringUtils.equals(feedType, "FbbListingFeed")){
12459 kshitij.so 248
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]);
249
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]));
250
					}
15702 kshitij.so 251
					else if (StringUtils.equals(feedType, "FbdListingFeed")){
252
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBD")[1]);
253
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBD")[1]));
254
					} 
12459 kshitij.so 255
					else {
256
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent());
257
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent()));
258
					}
259
				}
260
			}
261
			Client CatalogClient = null;
262
			try {
263
				CatalogClient = new CatalogClient().getClient();
264
			} catch (TTransportException e) {
265
				e.printStackTrace();
266
			}
267
			try {
268
				itemIds.removeAll(skuList);
269
				CatalogClient.updateTimestampForAmazonFeeds(feedType, itemIds,System.currentTimeMillis());
270
			} catch (TException e) {
271
				e.printStackTrace();
272
			}
273
 
274
		}
275
 
276
		if (timestamp != 0){
277
			ArrayList<Long> skuList = new ArrayList<Long>();
278
			NodeList nodesFail = doc.getElementsByTagName("AdditionalInfo");
279
			for (int temp = 0; temp < nodesFail.getLength(); temp++) {
280
 
281
				Node n = nodesFail.item(temp);
282
				if (n.getNodeType() == Node.ELEMENT_NODE) {
283
 
284
					Element eElement = (Element) n;
285
					if (StringUtils.equals(feedType, "FbaPricing") || StringUtils.equals(feedType, "FullFbaPricing")){
286
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]);
287
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]));
288
					}
289
					else if (StringUtils.equals(feedType, "FbbPricing")){
290
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]);
291
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]));
292
					}
12888 kshitij.so 293
					else if (StringUtils.equals(feedType, "FbgPricing")){
294
                        System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]);
295
                        skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBG")[1]));
296
                    }
12459 kshitij.so 297
					else{
298
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent());
299
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent()));
300
					}
301
				}
302
			}
303
 
304
			Client CatalogClient = null;
305
			try {
306
				CatalogClient = new CatalogClient().getClient();
307
			} catch (TTransportException e) {
308
				e.printStackTrace();
309
			}
310
			try {
311
				itemIds.removeAll(skuList);
312
				CatalogClient.updateTimestampForAmazonFeeds(feedType, itemIds, timestamp);
313
			} catch (TException e) {
314
				e.printStackTrace();
315
			}
316
		}
317
		if(success == processed)
318
			feed.setResult("true");
319
		else
320
			feed.setResult("false");
321
		return feed;
322
	}
323
 
324
	public static void main(String args[])
325
	throws ParserConfigurationException, SAXException, IOException
326
	{
327
		CheckFeedSubmission service = new CheckFeedSubmission();
12888 kshitij.so 328
		ArrayList<Long> itemIdsToUpdate = new ArrayList<Long>();
329
		ProcessFeed result = service.getResult("10360586988", "PromoFeed",412500,itemIdsToUpdate);
12459 kshitij.so 330
	}
331
	public String getVaildName(String name){
332
		return name!=null?name:"";
333
	}
334
 
335
 
336
}