Rev 13479 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.amazonaws.mws.samples;import in.shop2020.model.v1.order.AmazonFCWarehouseLocation;import in.shop2020.model.v1.order.AmazonFbaOrderItem;import in.shop2020.model.v1.order.AmazonHourlySaleSnapshot;import in.shop2020.utils.GmailUtils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.OutputStream;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.TimeZone;import java.util.Map.Entry;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import javax.xml.datatype.DatatypeConfigurationException;import javax.xml.datatype.DatatypeFactory;import javax.xml.datatype.XMLGregorianCalendar;import org.apache.commons.io.IOUtils;import org.apache.thrift.TException;import org.json.JSONException;import com.amazonaws.mws.MarketplaceWebService;import com.amazonaws.mws.MarketplaceWebServiceClient;import com.amazonaws.mws.MarketplaceWebServiceConfig;import com.amazonaws.mws.MarketplaceWebServiceException;import com.amazonaws.mws.model.AmazonEnvelope;import com.amazonaws.mws.model.FulfillmentData;import com.amazonaws.mws.model.GetReportListRequest;import com.amazonaws.mws.model.GetReportRequest;import com.amazonaws.mws.model.IdList;import com.amazonaws.mws.model.Message;import com.amazonaws.mws.model.Order;import com.amazonaws.mws.model.RequestReportRequest;import com.amazonaws.mws.samples.Consumer;public class AmazonOrderData {public final static String accessKeyId = "AKIAII3SGRXBJDPCHSGQ";public final static String secretAccessKey = "B92xTbNBTYygbGs98w01nFQUhbec1pNCkCsKVfpg";public final static String appName = "Test";public final static String appVersion = "1.0";public final static String merchantId = "AF6E3O0VE0X4D";public final static String FILE_PATH = "/tmp/amazon-order-dump.xml";public final static SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");public static List<AmazonFbaOrderItem> sales = new ArrayList<AmazonFbaOrderItem>();public static Date startDate;public static Date endDate;public static void terminate(String msg){String emailFromAddress = "build@shop2020.in";String password = "cafe@nes";String[] sendTo = new String[]{ "kshitij.sood@saholic.com","anikendra.das@shop2020.in"};String emailSubjectTxt = msg;try {GmailUtils mailer = new GmailUtils();mailer.sendSSLMessage(sendTo, emailSubjectTxt, "", emailFromAddress, password,"");}catch (Exception ex) {ex.printStackTrace();}System.exit(1);}public static String invokeServiceRequest() throws InterruptedException{/* Returns request id of the OrderReport */MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();config.setServiceURL("https://mws.amazonservices.in");MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, appName, appVersion, config);IdList marketplaces = new IdList(Arrays.asList("A21TJRUUN4KGV"));RequestReportRequest orderreportrequest = new RequestReportRequest().withMerchant(merchantId).withMarketplaceIdList(marketplaces).withReportType("_GET_XML_ALL_ORDERS_DATA_BY_ORDER_DATE_").withReportOptions("ShowSalesChannel=true");DatatypeFactory df = null;try {df = DatatypeFactory.newInstance();} catch (DatatypeConfigurationException e) {e.printStackTrace();throw new RuntimeException(e);}try {startDate = dateFormatter.parse("2014-11-16");endDate = dateFormatter.parse("2014-11-20");} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}GregorianCalendar ost = new GregorianCalendar();ost.setTimeInMillis(startDate.getTime());XMLGregorianCalendar orderStartDate = df.newXMLGregorianCalendar(ost);ost = new GregorianCalendar();ost.setTimeInMillis(endDate.getTime());XMLGregorianCalendar orderEndDate = df.newXMLGregorianCalendar(ost);orderreportrequest.setStartDate(orderStartDate);orderreportrequest.setEndDate(orderEndDate);System.out.println(orderStartDate);System.out.println(orderEndDate);String orderreportrequestId = null;boolean retry=true;int retryCount =1;while(retry){if(retryCount==10){terminate("Amazon FBA Order Data - Unable to get request id");}try {orderreportrequestId = RequestReportSample.invokeRequestReport(service, orderreportrequest);retry = false;} catch (MarketplaceWebServiceException e1) {e1.printStackTrace();Thread.sleep(60*1000);retryCount++;}}return orderreportrequestId;}public static void writeDataToDisk(String requestId) throws FileNotFoundException, IOException, InterruptedException{/* Write OrderXml file to disk */int retryCount = 1;while(true){GetReportListRequest requestreportlist = new GetReportListRequest();requestreportlist.setMerchant( merchantId );final IdList requestIdList = new IdList(Arrays.asList(requestId));requestreportlist.setReportRequestIdList(requestIdList);MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();config.setServiceURL("https://mws.amazonservices.in");MarketplaceWebService service = new MarketplaceWebServiceClient(accessKeyId, secretAccessKey, appName, appVersion, config);Map<String, String> requestIdreportIdmap = GetReportListSample.invokeGetReportList(service, requestreportlist);if(requestIdreportIdmap.get(requestId)!=null){GetReportRequest requestorderreport = new GetReportRequest();requestorderreport.setMerchant( merchantId );requestorderreport.setReportId( requestIdreportIdmap.get(requestId));OutputStream orderreport=null;try {orderreport = new FileOutputStream( FILE_PATH );} catch (FileNotFoundException e) {e.printStackTrace();}requestorderreport.setReportOutputStream(orderreport);GetReportSample.invokeGetReport(service, requestorderreport);System.out.println("Order Report is ready please check");String toFind = "<AmazonEnvelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"amzn-envelope.xsd\">";String toReplace = "<AmazonEnvelope xmlns=\"http://mws.amazonaws.com/doc/2009-01-01/\">";File orderReportFile = new File(FILE_PATH);String content = "";try {content = IOUtils.toString(new FileInputStream(orderReportFile));} catch (FileNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}content = content.replaceAll(toFind, toReplace);IOUtils.write(content, new FileOutputStream(orderReportFile));break;}else{if (retryCount == 5){terminate("Unable to pull FBA Hourly sales report");}retryCount++;Thread.sleep(60*1000);}}}public static void populateAndCommitSale() throws ParseException{JAXBContext jc = null;Unmarshaller unmarshaller = null;AmazonEnvelope amazonOrderData = null;try {jc = JAXBContext.newInstance(AmazonEnvelope.class);unmarshaller = jc.createUnmarshaller();amazonOrderData = (AmazonEnvelope)unmarshaller.unmarshal(new File(FILE_PATH));} catch (JAXBException e1) {e1.printStackTrace();}List<Message> orderMessageList = amazonOrderData.getMessage();System.out.println("Amazon Order List ... "+orderMessageList.size());for(Message orderMessage : orderMessageList){Order amazonOrder = orderMessage.getOrder();FulfillmentData orderFullfillmentData = amazonOrder.getFulfillmentData();if("Amazon.in".equalsIgnoreCase(amazonOrder.getSalesChannel()) && "Amazon".equalsIgnoreCase(orderFullfillmentData.getFulfillmentChannel())){for (int i= 0 ; i < amazonOrder.getOrderItem().size(); i++){Long itemid;AmazonFCWarehouseLocation fcLocation;if(amazonOrder.getOrderItem().get(i).getSKU().startsWith("FBA")){try{itemid = Long.parseLong(amazonOrder.getOrderItem().get(i).getSKU().replaceAll("FBA",""));}catch(Exception ex){continue;}fcLocation = AmazonFCWarehouseLocation.Mumbai;}else if(amazonOrder.getOrderItem().get(i).getSKU().startsWith("FBB")){try{itemid = Long.parseLong(amazonOrder.getOrderItem().get(i).getSKU().replaceAll("FBB",""));}catch(Exception ex){continue;}fcLocation = AmazonFCWarehouseLocation.Bangalore;}else if(amazonOrder.getOrderItem().get(i).getSKU().startsWith("FBG")){try{itemid = Long.parseLong(amazonOrder.getOrderItem().get(i).getSKU().replaceAll("FBG",""));}catch(Exception ex){continue;}fcLocation = AmazonFCWarehouseLocation.Gurgaon;}else{continue;}Integer qty=0;if(amazonOrder.getOrderItem().get(i).getQuantity()!=0){qty = new Integer(amazonOrder.getOrderItem().get(i).getQuantity());}Float itemSale = null;if(amazonOrder.getOrderItem().get(i).getItemPrice()!=null && amazonOrder.getOrderItem().get(i).getItemPrice().getComponent()!=null && amazonOrder.getOrderItem().get(i).getItemPrice().getComponent().size()>0){if(amazonOrder.getOrderItem().get(i).getItemPrice().getComponent().get(0).getAmount().getValue()!=0){itemSale = new Float(amazonOrder.getOrderItem().get(i).getItemPrice().getComponent().get(0).getAmount().getValue());}else{itemSale = (float) 0;}}else{itemSale = (float) 0;}Float itemDiscount;if(amazonOrder.getOrderItem().get(i).getPromotion()!=null){if(amazonOrder.getOrderItem().get(i).getPromotion().getItemPromotionDiscount()!=null && amazonOrder.getOrderItem().get(i).getPromotion().getItemPromotionDiscount().floatValue()!=0.0f){itemDiscount = amazonOrder.getOrderItem().get(i).getPromotion().getItemPromotionDiscount();}else{itemDiscount = new Float(0);}}else{itemDiscount = new Float(0);}AmazonFbaOrderItem amazonFbaOrderItem = new AmazonFbaOrderItem();amazonFbaOrderItem.setItem_id(itemid);amazonFbaOrderItem.setAmazonOrderId(amazonOrder.getAmazonOrderID());amazonFbaOrderItem.setOrderStatus(amazonOrder.getOrderItem().get(i).getItemStatus());amazonFbaOrderItem.setFcLocation(fcLocation);amazonFbaOrderItem.setTotalAmount(itemSale);amazonFbaOrderItem.setPromotionDiscount(itemDiscount);amazonFbaOrderItem.setQuantity(qty);amazonFbaOrderItem.setPurchaseDate(getPurchaseDate(amazonOrder.getPurchaseDate().toString()));sales.add(amazonFbaOrderItem);}}}boolean result=false;try {result = Consumer.addOrUpdateFbaSales(sales, startDate.getTime(), endDate.getTime());} catch (JSONException e) {terminate("Unable to commit hourly FBA sales data to mongo");}System.out.println("Data Committed ? " + result);if (!result){terminate("Unable to commit hourly FBA sales data to mongo");}}public static long getPurchaseDate(String purchaseDateString) throws ParseException{SimpleDateFormat istFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");istFormatter.setLenient(false);TimeZone zone= TimeZone.getTimeZone("GMT");istFormatter.setTimeZone(zone);Date date = istFormatter.parse(purchaseDateString);return date.getTime();}public static void main (String[] args) throws InterruptedException, FileNotFoundException, IOException, TException, ParseException{String requestId= invokeServiceRequest();writeDataToDisk(requestId);populateAndCommitSale();}}