Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12592 amit.gupta 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 JungleeCheckFeedSubmission
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 = "AKIAJBFVIU6DHLMNZ2GA";
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("A116PWEHC4HP0W");
65
		request.setFeedSubmissionId(feedSubmissionId);
66
		OutputStream processingResult = null;
67
		try
68
		{
69
			processingResult = new FileOutputStream( "/home/junglee/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 Junglee 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 junglee 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
		}
231
		if(StringUtils.equals(feedType, "FbaListingFeed") || StringUtils.equals(feedType,"NonFbaListingFeed") || StringUtils.equals(feedType, "FbbListingFeed")){
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
					}
243
					if (StringUtils.equals(feedType, "FbbListingFeed")){
244
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]);
245
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]));
246
					}
247
					else {
248
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent());
249
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent()));
250
					}
251
				}
252
			}
253
			Client CatalogClient = null;
254
			try {
255
				CatalogClient = new CatalogClient().getClient();
256
			} catch (TTransportException e) {
257
				e.printStackTrace();
258
			}
259
			try {
260
				itemIds.removeAll(skuList);
261
				CatalogClient.updateTimestampForAmazonFeeds(feedType, itemIds,System.currentTimeMillis());
262
			} catch (TException e) {
263
				e.printStackTrace();
264
			}
265
 
266
		}
267
 
268
		if (timestamp != 0){
269
			ArrayList<Long> skuList = new ArrayList<Long>();
270
			NodeList nodesFail = doc.getElementsByTagName("AdditionalInfo");
271
			for (int temp = 0; temp < nodesFail.getLength(); temp++) {
272
 
273
				Node n = nodesFail.item(temp);
274
				if (n.getNodeType() == Node.ELEMENT_NODE) {
275
 
276
					Element eElement = (Element) n;
277
					if (StringUtils.equals(feedType, "FbaPricing") || StringUtils.equals(feedType, "FullFbaPricing")){
278
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]);
279
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBA")[1]));
280
					}
281
					else if (StringUtils.equals(feedType, "FbbPricing")){
282
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]);
283
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent().split("FBB")[1]));
284
					}
285
					else{
286
						System.out.println(eElement.getElementsByTagName("SKU").item(0).getTextContent());
287
						skuList.add(Long.valueOf(eElement.getElementsByTagName("SKU").item(0).getTextContent()));
288
					}
289
				}
290
			}
291
 
292
			Client CatalogClient = null;
293
			try {
294
				CatalogClient = new CatalogClient().getClient();
295
			} catch (TTransportException e) {
296
				e.printStackTrace();
297
			}
298
			try {
299
				itemIds.removeAll(skuList);
300
				CatalogClient.updateTimestampForAmazonFeeds(feedType, itemIds, timestamp);
301
			} catch (TException e) {
302
				e.printStackTrace();
303
			}
304
		}
305
		if(success == processed)
306
			feed.setResult("true");
307
		else
308
			feed.setResult("false");
309
		return feed;
310
	}
311
 
312
	public static void main(String args[]) throws ParserConfigurationException, SAXException, IOException
313
	{
314
		JungleeCheckFeedSubmission service = new JungleeCheckFeedSubmission();
315
		//ProcessFeed result = service.getResult("5598618360", "NonFbaPricing",412500);
316
	}
317
	public String getVaildName(String name){
318
		return name!=null?name:"";
319
	}
320
}