Rev 8641 | Blame | Last modification | View Log | RSS feed
package in.shop2020;import in.shop2020.logistics.DeliveryType;import in.shop2020.logistics.LogisticsInfo;import in.shop2020.logistics.LogisticsServiceException;import in.shop2020.model.v1.catalog.Item;import in.shop2020.model.v1.catalog.CatalogService.Client;import in.shop2020.model.v1.inventory.InventoryType;import in.shop2020.model.v1.inventory.ItemInventory;import in.shop2020.model.v1.inventory.Warehouse;import in.shop2020.model.v1.inventory.WarehouseType;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.thrift.clients.InventoryClient;import in.shop2020.thrift.clients.LogisticsClient;import in.shop2020.utils.GmailUtils;import java.io.File;import java.io.PrintWriter;import java.io.StringWriter;import java.text.DateFormat;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 java.util.Random;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;import utilities.ScpService;import inventory.SaholicAPI;import inventory.SaholicAPI.Inventory;;public class CreateSnapDealInventoryFeed {private static final String SNAPDEAL_INVENTORY_XML = "/home/snapdeal-inventory.xml";public static void main(String... args){CatalogClient catalogServiceClient = null;Map<Long,Long> itemInventoryMap = new HashMap<Long,Long>();try {catalogServiceClient = new CatalogClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}Client catalogClient = catalogServiceClient.getClient();try {List<Item> items = catalogClient.getAllSnapdealListedActiveItems();File file = new File(SNAPDEAL_INVENTORY_XML);JAXBContext context;Marshaller m=null;try {context = JAXBContext.newInstance(SaholicAPI.class);m = context.createMarshaller();} catch (JAXBException e1) {e1.printStackTrace();}SaholicAPI saholicAPI = new SaholicAPI();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date();saholicAPI.setCreateDate(dateFormat.format(date));saholicAPI.setFeedIdentifier(date.getTime());List<Inventory> inventoryList = saholicAPI.getInventory();InventoryClient inventoryServiceClient = null;try {inventoryServiceClient = new InventoryClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();Map<Long, ItemInventory> availability = inventoryClient.getInventorySnapshot(0);List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);List<Long> thirdpartywarehouseids = new ArrayList<Long>();List<Long> oursGoodWarehouse = new ArrayList<Long>();for(Warehouse warehouse:warehouses){thirdpartywarehouseids.add(warehouse.getId());//System.out.println("Warehouse id is " + warehouse.getId());}for (Warehouse warehouse:ours_warehouses){oursGoodWarehouse.add(warehouse.getId());}for(in.shop2020.model.v1.catalog.Item thriftItem:items){long available=0;long reserve=0;List<Warehouse> vendor_warehouses=null;if(availability.get(thriftItem.getId())!=null){ItemInventory iteminventory = availability.get(thriftItem.getId());Map<Long,Long> itemavailability = new HashMap<Long,Long>();itemavailability = iteminventory.getAvailability();if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);vendor_warehouses.addAll(ours_warehouses);for (Warehouse warehouse:vendor_warehouses){in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();ignoredItem.setItemId(thriftItem.getId());ignoredItem.setWarehouseId(warehouse.getId());if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem))available = available + itemavailability.get(warehouse.getId());}}else{for (Map.Entry<Long,Long> entry : itemavailability.entrySet()) {in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();ignoredItem.setItemId(thriftItem.getId());ignoredItem.setWarehouseId(entry.getKey());if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){available = available + entry.getValue();}}}Map<Long,Long> itemreserve = new HashMap<Long,Long>();itemreserve = iteminventory.getReserved();if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());for (Warehouse warehouse:vendor_warehouses){in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();ignoredItem.setItemId(thriftItem.getId());ignoredItem.setWarehouseId(warehouse.getId());if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId()))reserve = reserve + itemreserve.get(warehouse.getId());}}else{for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();ignoredItem.setItemId(thriftItem.getId());ignoredItem.setWarehouseId(entry.getKey());if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){reserve = reserve + entry.getValue();}else{System.out.println("skipping inventory for warehouse id " + entry.getKey());}}}itemInventoryMap.put(thriftItem.getId(), available);}else{itemInventoryMap.put(thriftItem.getId(),(long) 0);}}if(!itemInventoryMap.isEmpty()){in.shop2020.logistics.LogisticsService.Client logisticsClient=null;LogisticsClient logisticsServiceClient = null;try {logisticsServiceClient = new LogisticsClient("logistics_service_prod_server_host","logistics_service_prod_server_port");logisticsClient = logisticsServiceClient.getClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}for (Map.Entry<Long, Long> entry : itemInventoryMap.entrySet()) {LogisticsInfo logisticinfo=new LogisticsInfo();boolean ex=true;int logisticCheck=0;while(ex){try {System.out.println("Fetching Logistics estimation for Item Id " + " " + entry.getKey());try {logisticinfo = logisticsClient.getLogisticsEstimation(entry.getKey(),"110001",DeliveryType.COD);} catch (LogisticsServiceException e) {// TODO Auto-generated catch blocke.printStackTrace();}ex=false;} catch (TTransportException e) {// TODO Auto-generated catch locklogisticsServiceClient = new LogisticsClient("logistics_service_prod_server_host","logistics_service_prod_server_port");logisticsClient = logisticsServiceClient.getClient();ex =true;e.printStackTrace();if (++logisticCheck==10){StringWriter errors = new StringWriter();e.printStackTrace(new PrintWriter(errors));String text = errors.toString();String[] sendTo = { "eng@shop2020.in" };String emailSubjectTxt = "Unable To Send Non FBA Inventory Feed ";String emailFromAddress = "build@shop2020.in";String password = "cafe@nes";GmailUtils mailer = new GmailUtils();try {mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());}catch (Exception exc) {exc.printStackTrace();}System.exit(1);}}}Inventory inventory = new Inventory();inventory.setSKU(entry.getKey());inventory.setFulfillmentLatency(logisticinfo.getShippingTime());if(entry.getValue() >=0){inventory.setQuantity(entry.getValue());}else{inventory.setQuantity((long) 0);}inventoryList.add(inventory);}try {m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);m.marshal(saholicAPI, file);m.marshal(saholicAPI, System.out);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{System.out.println("No Snapdeal listed Active items");}ScpService scpService = new ScpService();scpService.scpFile("/var/www/static.saholic.com/partners",SNAPDEAL_INVENTORY_XML);} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}