Rev 15223 | Rev 15634 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020;import in.shop2020.model.v1.catalog.Item;import in.shop2020.model.v1.catalog.SnapdealItemDetails;import in.shop2020.model.v1.catalog.status;import in.shop2020.model.v1.inventory.InventoryType;import in.shop2020.model.v1.inventory.ItemInventory;import in.shop2020.model.v1.inventory.SnapdealInventoryItem;import in.shop2020.model.v1.inventory.Warehouse;import in.shop2020.model.v1.inventory.WarehouseLocation;import in.shop2020.model.v1.inventory.WarehouseType;import in.shop2020.serving.services.SnapdealSessionCookie;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.thrift.clients.InventoryClient;import in.shop2020.thrift.clients.TransactionClient;import in.shop2020.utils.GmailUtils;import inventory.Inventory;import inventory.InventoryHistory;import inventory.InventoryHistoryItems;import inventory.InventoryItems;import inventory.PendingOrderInventoryHistory;import inventory.SnapdealItemForInventory;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import javax.mail.MessagingException;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.content.ContentBody;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;import org.json.JSONException;import org.json.JSONObject;import com.google.gson.Gson;public class UpdateSDInventoryUsingPanelNew {private static final boolean PANEL = true;private static long time = System.currentTimeMillis();private static String SNAPDEAL_INVENTORY_SHEET;private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();private static ArrayList<Inventory> currentInventoryItemList;static Map<Long,Long> itemIdpendingOrdersMap;private static Map<String,InventoryHistory> inventoryhistoryItemMap;private static DefaultHttpClient client = new DefaultHttpClient();static Map<String,SnapdealItemDetails> snapdealItemMap = new HashMap<String,SnapdealItemDetails>();static Map<Long,SnapdealItemDetails> itemSnapdealMap = new HashMap<Long,SnapdealItemDetails>();static Map<String,PendingOrderInventoryHistory> PendingOrdersInventoryHistoryMap = new HashMap<String,PendingOrderInventoryHistory>();static long lastUpdatedInventoryTime = 0;static java.text.SimpleDateFormat sdf;static String emailFromAddress;static String password;static GmailUtils mailer;static String sendTo[];static StringBuffer notMappedItems=null;static Map<String, String> headers = new HashMap<String, String>();static {headers.put("User-agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11");headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");headers.put("Accept-Language", "en-US,en;q=0.8");headers.put("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");}public static void initilaize() {sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");emailFromAddress = "build@shop2020.in";password = "cafe@nes";mailer = new GmailUtils();//sendTo = new String[]{"vikram.raghav@shop2020.in"};sendTo = new String[]{ "anikendra.das@shop2020.in","sandeep.sachdeva@shop2020.in", "vikram.raghav@shop2020.in", "rajneesh.arora@shop2020.in","khushal.bhatia@shop2020.in","manoj.kumar@saholic.com","chaitnaya.vats@saholic.com","yukti.jain@shop2020.in","manisha.sharma@shop2020.in","chandan.kumar@shop2020.in","ankush.dhingra@shop2020.in"};itemIdpendingOrdersMap = new HashMap<Long,Long>();CatalogClient catalogServiceClient = null;try {catalogServiceClient = new CatalogClient();} catch (TTransportException e1) {e1.printStackTrace();}in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();List<SnapdealItemDetails> allSnapdealItems = null;try {allSnapdealItems = catalogClient.getAllSnapdealItems();} catch (TException e) {e.printStackTrace();}for(SnapdealItemDetails snapdealItem:allSnapdealItems){snapdealItemMap.put(snapdealItem.getSkuAtSnapdeal(),snapdealItem);itemSnapdealMap.put(snapdealItem.getItem_id(), snapdealItem);//System.out.println("Creating Item and Snapdeal Map " + snapdealItem.getItem_id() + " " + snapdealItem.getSkuAtSnapdeal());}in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;try {transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();lastUpdatedInventoryTime = transactionClient.getSourceDetail(7).getLastUpdatedOn();//System.out.println("Time is " + lastUpdatedInventoryTime);} catch (Exception e) {try {transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();lastUpdatedInventoryTime = transactionClient.getSourceDetail(7).getLastUpdatedOn();} catch (Exception ex) {ex.printStackTrace();}}}private static void calculateinventory(){CatalogClient catalogServiceClient = null;Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();try {catalogServiceClient = new CatalogClient();} catch (TTransportException e) {e.printStackTrace();}in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();try {List<Item> aliveItems = catalogClient.getAllAliveItems();Map<Long,Item> aliveItemsMap = new HashMap<Long,Item>();for(in.shop2020.model.v1.catalog.Item thriftItem:aliveItems){aliveItemsMap.put(thriftItem.getId(), thriftItem);}InventoryClient inventoryServiceClient=null;try {inventoryServiceClient = new InventoryClient("inventory_service_server_host","inventory_service_server_port");} catch (TTransportException e) {e.printStackTrace();}in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();SNAPDEAL_INVENTORY_SHEET = "/home/snapdeal/snapdeal-inventory-"+time+".xls";availability = inventoryClient.getInventorySnapshot(0);List<Warehouse> allwarehouses = inventoryClient.getWarehouses(null,null,0,0,0);Map<Long,Warehouse> allWarehousesMap = new HashMap<Long,Warehouse>();for(Warehouse warehouse:allwarehouses){allWarehousesMap.put(warehouse.getId(),warehouse);}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());}for (Warehouse warehouse:ours_warehouses){oursGoodWarehouse.add(warehouse.getId());}long available=0;long reserve=0;long total_warehouse_held=0;long heldForSource=0;long total_held=0;double nlc=0;double maxnlc=0;Item thriftItem;long sku = 0;for(Inventory inventoryItem:currentInventoryItemList){if(snapdealItemMap.containsKey(inventoryItem.getSellerSku())){sku = snapdealItemMap.get(inventoryItem.getSellerSku()).getItem_id();}else{continue;}if(aliveItemsMap.get(sku) != null){thriftItem = aliveItemsMap.get(sku);}else{continue;}available=0;reserve=0;total_warehouse_held=0;heldForSource=0;total_held=0;nlc=0;List<Warehouse> vendor_warehouses=null;SnapdealItemForInventory item;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){//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);vendor_warehouses.addAll(ours_warehouses);for (Warehouse warehouse:vendor_warehouses){if(warehouse.getBillingWarehouseId()!=7){System.out.println("Item is "+thriftItem.getId());System.out.println("Warehouse is "+warehouse.getId());System.out.println("Warehouse Loc "+warehouse.getLogisticsLocation());System.out.println("Warehouse Type "+warehouse.getWarehouseType());System.out.println("Vendor "+warehouse.getVendor().getId());if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){}else{continue;}}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)){try{nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());}catch(TTransportException e){inventoryClient = inventoryServiceClient.getClient();nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());}maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );if(nlc !=0 && (maxnlc >= nlc)){total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);available = available + itemavailability.get(warehouse.getId());total_held = total_held + total_warehouse_held;//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);}else if(maxnlc==0){total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);available = available + itemavailability.get(warehouse.getId());total_held = total_held + total_warehouse_held;//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);}}}}else{for (Map.Entry<Long,Long> entry : itemavailability.entrySet()) {if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){if(allWarehousesMap.get(entry.getKey()).getLogisticsLocation().equals(WarehouseLocation.Delhi) && allWarehousesMap.get(entry.getKey()).getWarehouseType().equals(WarehouseType.THIRD_PARTY) && allWarehousesMap.get(entry.getKey()).getVendor().getId()!=1){}else{continue;}}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)){nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());try{maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();}catch(TTransportException e){catalogClient = catalogServiceClient.getClient();maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();}//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );if(nlc !=0 && (maxnlc >= nlc)){total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);available = available + entry.getValue();total_held = total_held + total_warehouse_held;//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);}else if(maxnlc==0){total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);available = available + itemavailability.get(entry.getKey());total_held = total_held + total_warehouse_held;//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);}}}}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){if(warehouse.getBillingWarehouseId()!=7){if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){}else{continue;}}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())){nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );if(nlc !=0 && (maxnlc >= nlc)){reserve = reserve + itemreserve.get(warehouse.getId());//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);}else if(maxnlc==0){reserve = reserve + itemreserve.get(warehouse.getId());//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);}}}}else{for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){if(allWarehousesMap.get(entry.getKey()).getLogisticsLocation().equals(WarehouseLocation.Delhi) && allWarehousesMap.get(entry.getKey()).getWarehouseType().equals(WarehouseType.THIRD_PARTY) && allWarehousesMap.get(entry.getKey()).getVendor().getId()!=1){}else{continue;}}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)){nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );if(nlc !=0 && (maxnlc >= nlc)){reserve = reserve + entry.getValue();//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);}else if(maxnlc==0){reserve = reserve + entry.getValue();//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);}}else{//System.out.println("skipping inventory for warehouse id " + entry.getKey());}}}item= new SnapdealItemForInventory(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),total_held,thriftItem.isRisky(),thriftItem.getItemStatus());//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());}else{item = new SnapdealItemForInventory(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),0,thriftItem.isRisky(),thriftItem.getItemStatus());//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());}//System.out.println(" Item details are " + thriftItem.getId() +" " + available + " " + reserve + " " + thriftItem.getHoldInventory() + " "+ thriftItem.getDefaultInventory() + " " + thriftItem.isRisky());//System.out.println("+++++++++++++++++++++++");allItemsInventoryMap.put(thriftItem.getId(),item);}} catch (TException e) {e.printStackTrace();}}private static void fetchinventoryhistoryfromsnapdeal() throws Exception{int i = 1;Gson gson = new Gson();inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();boolean exitfetchinghistory = true;System.out.println("Fetching history inventory");HttpGet get;HttpResponse response = null;BufferedReader rd = null;SnapdealSessionCookie sdSessionCookie = new SnapdealSessionCookie();String cookies = "";JSONObject cookieObject = null;while(exitfetchinghistory){System.out.println("Fetching inventory history page " +i);get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=history&_search=false&nd="+time+"&rows=30&page="+i+"&sidx=&sord=dsc");cookies = sdSessionCookie.getCookies();cookieObject = new JSONObject(cookies);for(String key:headers.keySet())get.addHeader(key, headers.get(key));get.addHeader("Cookie","SERVERID="+cookieObject.get("SERVERID")+";sfJSESSIONID="+cookieObject.get("sfJSESSIONID")+";");try {response = client.execute(get);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}InventoryHistoryItems inventoryhistoryitems = (InventoryHistoryItems) gson.fromJson(rd, InventoryHistoryItems.class);if(inventoryhistoryitems.getRows().size()!=0){//System.out.println("Parsing page " + i);for(InventoryHistory inventoryhistory : inventoryhistoryitems.getRows()){//System.out.println("Inventory History " + inventoryhistory.getSellerSku() +" "+ inventoryhistory.getSupc());if(inventoryhistory.getUpdateTime() > lastUpdatedInventoryTime){if(inventoryhistoryItemMap.containsKey(inventoryhistory.getSellerSku())){if(inventoryhistoryItemMap.get(inventoryhistory.getSellerSku()).getUpdateTime() < inventoryhistory.getUpdateTime()){inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);}}else{inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);}}else{exitfetchinghistory = false;}}}else{exitfetchinghistory = false;}i++;}InventoryClient inventoryServiceClient = new InventoryClient("inventory_service_server_host","inventory_service_server_port");in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();List<SnapdealInventoryItem> snapdealInventoryItemHistoryList = inventoryClient.getSnapdealInventorySnapshot();if(snapdealInventoryItemHistoryList.size()>0){for(SnapdealInventoryItem snapdealInventoryItem:snapdealInventoryItemHistoryList){if(itemSnapdealMap.containsKey(snapdealInventoryItem.getItem_id())){PendingOrderInventoryHistory pendingOrdersInventoryHistory = new PendingOrderInventoryHistory();pendingOrdersInventoryHistory.setPendingOrders(snapdealInventoryItem.getPendingOrders());pendingOrdersInventoryHistory.setInventoryHistory(snapdealInventoryItem.getAvailability());pendingOrdersInventoryHistory.setLastUpdatedTimestamp(snapdealInventoryItem.getLastUpdatedOnSnapdeal());PendingOrdersInventoryHistoryMap.put(itemSnapdealMap.get(snapdealInventoryItem.getItem_id()).getSkuAtSnapdeal(), pendingOrdersInventoryHistory);}}}//PendingOrderInventoryHistory pendingOrdersInventoryHistory;/*for(Entry<String, InventoryHistory> inventoryHistoryItem :inventoryhistoryItemMap.entrySet()){if(PendingOrdersInventoryHistoryMap.containsKey(inventoryHistoryItem.getValue().getSellerSku())){pendingOrdersInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventoryHistoryItem.getValue().getSellerSku());pendingOrdersInventoryHistory.setInventoryHistory(Long.parseLong(inventoryHistoryItem.getValue().getNewValue()));pendingOrdersInventoryHistory.setLastUpdatedTimestamp(inventoryHistoryItem.getValue().getUpdateTime());PendingOrdersInventoryHistoryMap.put(inventoryHistoryItem.getValue().getSellerSku(),pendingOrdersInventoryHistory);}else{pendingOrdersInventoryHistory = new PendingOrderInventoryHistory();pendingOrdersInventoryHistory.setInventoryHistory(Long.parseLong(inventoryHistoryItem.getValue().getNewValue()));pendingOrdersInventoryHistory.setLastUpdatedTimestamp(inventoryHistoryItem.getValue().getUpdateTime());pendingOrdersInventoryHistory.setPendingOrders(0);PendingOrdersInventoryHistoryMap.put(inventoryHistoryItem.getValue().getSellerSku(),pendingOrdersInventoryHistory);}}*/}private static void fetchcurrentinventoryfromsnapdeal() throws Exception{int i = 1;int items=0;Gson gson = new Gson();in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;currentInventoryItemList = new ArrayList<Inventory>();HttpGet get;HttpResponse response = null;BufferedReader rd= null;System.out.println("Fetching current inventory ");notMappedItems = new StringBuffer();SnapdealSessionCookie sdSessionCookie = new SnapdealSessionCookie();String cookies = "";JSONObject cookieObject = null;while(true){//System.out.println("Fetching current inventory page " +i);get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");cookies = sdSessionCookie.getCookies();cookieObject = new JSONObject(cookies);for(String key:headers.keySet())get.addHeader(key, headers.get(key));get.addHeader("Cookie","SERVERID="+cookieObject.get("SERVERID")+";sfJSESSIONID="+cookieObject.get("sfJSESSIONID")+";");try {response = client.execute(get);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);if(inventoryitems.getRows().size()!=0){for(Inventory inventory : inventoryitems.getRows()){if(snapdealItemMap.containsKey(inventory.getSellerSku())){currentInventoryItemList.add(inventory);}else{notMappedItems.append("<tr>"+ "<td>" + inventory.getProductName() +"</td>"+"<td>" + inventory.getSellerSku() + "</td>"+"<td>" + inventory.getSupc() + "</td>"+"</tr>");}items++;}}else{System.out.println("Fetched " + items);break;}i++;}if(currentInventoryItemList.size()==0){try {mailer.sendSSLMessage(sendTo,"Snapdeal : Unable to fetch current inventory "+ sdf.format(System.currentTimeMillis()),"Error : Unable to fetch current inventory ", emailFromAddress, password, new ArrayList<File>());} catch (MessagingException e) {e.printStackTrace();}System.exit(0);}in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;SnapdealItemDetails snapdealitem = null;long sku = 0;long created_orders;long pending_orders;Map<Long, Long> itemIdCreatedOrdersMap = null;try {transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();System.out.println("Last Updated on Time is " + lastUpdatedInventoryTime);if(lastUpdatedInventoryTime > 0){itemIdCreatedOrdersMap = transactionClient.getOrdersCreatedAfterTimestampForSource(lastUpdatedInventoryTime, 7);System.out.println("Item id orders created map size "+ itemIdCreatedOrdersMap.entrySet().size());}} catch (TTransportException e1) {e1.printStackTrace();}try {catalogServiceClient = new CatalogClient().getClient();} catch (TTransportException e1) {e1.printStackTrace();}for(Inventory inventory:currentInventoryItemList){created_orders = 0;pending_orders = 0;snapdealitem = snapdealItemMap.get(inventory.getSellerSku());if(snapdealitem==null){System.out.println("Not Mapped " + inventory.getSellerSku());continue;}sku = snapdealitem.getItem_id();if(sku!=0){if(itemIdCreatedOrdersMap!=null && itemIdCreatedOrdersMap.containsKey(sku)){created_orders = itemIdCreatedOrdersMap.get(sku);}System.out.println("Created orders for " + sku +" " + created_orders);}else{continue;}if(PendingOrdersInventoryHistoryMap.containsKey(inventory.getSellerSku())){System.out.println("Calculating Pending Orders for " + inventory.getSellerSku());System.out.println("Current Inventory "+inventory.getAvailableInventory());System.out.println("History Inventory "+PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getInventoryHistory());System.out.println("Created Orders "+created_orders);System.out.println("Old Pending Orders "+ PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders());//if(PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getLastUpdatedTimestamp() > lastUpdatedInventoryTime){pending_orders = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders() + PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getInventoryHistory() - inventory.getAvailableInventory() - created_orders;//}/*else{pending_orders = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders() - created_orders;}*/System.out.println("New Pending Orders "+pending_orders);PendingOrderInventoryHistory pendingOrderInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku());pendingOrderInventoryHistory.setPendingOrders(pending_orders);PendingOrdersInventoryHistoryMap.put(inventory.getSellerSku(),pendingOrderInventoryHistory);}else{System.out.print("Could not calculate pending orders " + inventory.getSellerSku() +"\n");PendingOrderInventoryHistory pendingOrderInventoryHistory = new PendingOrderInventoryHistory();pendingOrderInventoryHistory.setPendingOrders(pending_orders);pendingOrderInventoryHistory.setInventoryHistory(inventory.getAvailableInventory());pendingOrderInventoryHistory.setLastUpdatedTimestamp(System.currentTimeMillis());PendingOrdersInventoryHistoryMap.put(inventory.getSellerSku(),pendingOrderInventoryHistory);}itemIdpendingOrdersMap.put(sku, pending_orders);}}@SuppressWarnings("deprecation")public static void sendsnapdealinventory (){initilaize();try {fetchinventoryhistoryfromsnapdeal();} catch (UnsupportedEncodingException e2) {System.out.println("History Inventory Fetch failed");e2.printStackTrace();} catch (TException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}try {fetchcurrentinventoryfromsnapdeal();} catch (UnsupportedEncodingException e2) {System.out.println("Current Inventory Fetch failed");e2.printStackTrace();} catch (TException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}calculateinventory();FileInputStream fis = null;Workbook hwb = null;Sheet sheet = null;SnapdealSessionCookie sdSessionCookie = new SnapdealSessionCookie();String cookies = "";JSONObject cookieObject = null;if(!PANEL){try {fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");} catch (FileNotFoundException e) {System.out.println("Template File not found");e.printStackTrace();}try {hwb = new HSSFWorkbook(fis);} catch (IOException e) {System.out.println("Could not created workbook I/O Problem");e.printStackTrace();}sheet = hwb.getSheetAt(0);}Row row = null;int iterator=1;long available,reserve,defaultinventory,holdinventory,heldorders=0,sent_inventory = 0,totalheld,heldforsource,allocable;SnapdealItemForInventory inventoryItem;StringBuffer outOfStockItems =new StringBuffer();StringBuffer backInStockItems =new StringBuffer();StringBuffer inventoryChangeItems =new StringBuffer();StringBuffer heldMoreThanAvailable =new StringBuffer();long sku = 0;SnapdealItemDetails snapdealitem;long lastSentInventoryTime = System.currentTimeMillis();List<SnapdealInventoryItem> snapdealInventoryItemList = new ArrayList<SnapdealInventoryItem>();;for(Inventory inventory:currentInventoryItemList){//System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));if(snapdealItemMap.containsKey(inventory.getSellerSku())){snapdealitem = snapdealItemMap.get(inventory.getSellerSku());sku = snapdealitem.getItem_id();}else{continue;}if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){inventoryItem = allItemsInventoryMap.get(sku);if(inventoryItem==null){continue;}available = inventoryItem.getAvailability();reserve = inventoryItem.getReserve();defaultinventory = inventoryItem.getDefaultInventory();holdinventory = inventoryItem.getHoldInventory();totalheld = inventoryItem.getTotalHeldInventory();heldforsource = inventoryItem.getHeldForSource();if(itemIdpendingOrdersMap.containsKey(sku)){heldorders = itemIdpendingOrdersMap.get(sku);if(heldorders < 0){heldorders = 0;}}System.out.println("itemId: " + inventoryItem.getId() + "\trisky: " + inventoryItem.getRisky()+"\tavailable: " + available + "\treserve: " + reserve + "\theldForSource:" + heldforsource +"\twebsite_hold: " + holdinventory + "\ttotal_held: " +totalheld +"\tdefault_inv: "+ defaultinventory + "\theldorders " + heldorders);if(!PANEL){row = sheet.getRow((short) iterator);}if(!inventoryItem.getStatus().equals(status.PAUSED)){System.out.println("Not Paused");if(inventoryItem.getRisky()){if((available - reserve) < totalheld && totalheld!=0){sent_inventory = (long) Math.floor(((available - reserve)*heldforsource/totalheld)) - heldorders;heldMoreThanAvailable.append("<tr>"+ "<td>" + inventory.getProductName() +"</td>"+"<td>" + sku + "</td>"+"<td>" + (available - reserve) + "</td>"+"<td>" + totalheld + "</td>"+"</tr>");}else{allocable = available - reserve - totalheld - holdinventory;if(allocable < 0){allocable = 0;}sent_inventory = Math.round(allocable*2/3) + heldforsource - heldorders ;}if(sent_inventory < 0){sent_inventory = 0;}}else{allocable = available - reserve - totalheld;if(allocable < 0){allocable = 0;}if((allocable + heldforsource ) > defaultinventory){sent_inventory = Math.round(allocable*2/3) + heldforsource - heldorders;//System.out.println("actual" + allocable + "\t2/3actual" + Math.round(allocable*2/3) + "\theld for source" + heldforsource + "\theldorders" + heldorders + "\tFinal Value is : " + (Math.round(allocable*2/3) + heldforsource - heldorders));if(sent_inventory < 0){sent_inventory = 0;}}else{if(defaultinventory > heldorders){sent_inventory = defaultinventory - heldorders;}else{sent_inventory = 0;}}}}else{sent_inventory = 0;}SnapdealInventoryItem snapdealInventoryItem;snapdealInventoryItem = new SnapdealInventoryItem();PendingOrderInventoryHistory pendingOrderInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku());if(snapdealItemMap.containsKey(inventory.getSellerSku())){System.out.println("Found in snapdeal items map)");System.out.println("++++++++++++++++++++++++++++++++++++++++");System.out.println("Updating snapdeal inventory snapshot Item ID :"+snapdealItemMap.get(inventory.getSellerSku()).getItem_id());System.out.println("++++++++++++++++++++++++++++++++++++++++");snapdealInventoryItem.setItem_id(snapdealItemMap.get(inventory.getSellerSku()).getItem_id());snapdealInventoryItem.setPendingOrders(pendingOrderInventoryHistory.getPendingOrders());snapdealInventoryItem.setAvailability(sent_inventory);snapdealInventoryItem.setLastUpdatedOnSnapdeal(lastSentInventoryTime);if(sent_inventory > 0){snapdealInventoryItem.setIs_oos(false);}else{snapdealInventoryItem.setIs_oos(true);}snapdealInventoryItemList.add(snapdealInventoryItem);}System.out.println("Before incremental check");System.out.println("Before incremental available "+inventory.getAvailableInventory());System.out.println("To send "+sent_inventory);if(inventory.getAvailableInventory()!= sent_inventory){System.out.println("Incremental check success");if(!PANEL){row.getCell((short) 0).setCellValue(inventory.getSupc());row.getCell((short) 1).setCellValue(inventory.getSellerSku());row.getCell((short) 2).setCellValue(inventory.getProductName());row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());row.getCell((short) 4).setCellValue(sent_inventory);if(inventory.isLive()){row.getCell((short) 5).setCellValue("Yes");}else{row.getCell((short) 5).setCellValue("No");}}else{System.out.println("Incremental check success");try {HttpPost post = new HttpPost("http://seller.snapdeal.com/inventory/update");try {cookies = sdSessionCookie.getCookies();} catch (Exception e) {e.printStackTrace();}try {cookieObject = new JSONObject(cookies);} catch (JSONException e) {e.printStackTrace();}for(String key:headers.keySet())post.addHeader(key, headers.get(key));try {post.addHeader("Cookie","SERVERID="+cookieObject.get("SERVERID")+";sfJSESSIONID="+cookieObject.get("sfJSESSIONID")+";");} catch (JSONException e) {e.printStackTrace();}List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();System.out.println("Calling update inventory: Supc: "+inventory.getSupc()+ " to be update stock: "+ sent_inventory);nameValuePairs.add(new BasicNameValuePair("changedField","inventory"));nameValuePairs.add(new BasicNameValuePair("changedValue",String.valueOf(sent_inventory)));nameValuePairs.add(new BasicNameValuePair("supc",inventory.getSupc()));post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));HttpResponse response = client.execute(post);BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));String line = "";while ((line = rd.readLine()) != null) {System.out.println("Response of Inventory Update: "+line);}Thread.sleep(2000);} catch (ClientProtocolException e) {System.out.println("Could not login and update inventory");e.printStackTrace();continue;} catch (IOException e) {System.out.println("Could not login and update inventory I/O");e.printStackTrace();continue;} catch (InterruptedException e) {System.out.println("Could not login and update inventory I/O");e.printStackTrace();continue;}}if(inventory.getAvailableInventory()!=0 && sent_inventory==0){outOfStockItems.append("<tr>"+ "<td>" + inventory.getProductName() +"</td>"+"<td>" + sku + "</td>"+"<td>" + inventory.getAvailableInventory() + "</td>"+"<td>" + sent_inventory + "</td>"+"</tr>");}else if(inventory.getAvailableInventory()==0 && sent_inventory!=0){backInStockItems.append("<tr>"+ "<td>" + inventory.getProductName() +"</td>"+"<td>" + sku + "</td>"+"<td>" + inventory.getAvailableInventory() + "</td>"+"<td>" + sent_inventory + "</td>"+"</tr>");}else{inventoryChangeItems.append("<tr>"+ "<td>" + inventory.getProductName() +"</td>"+"<td>" + sku + "</td>"+"<td>" + inventory.getAvailableInventory() + "</td>"+"<td>" + sent_inventory + "</td>"+"</tr>");}iterator++;}}else{continue;}}if(iterator > 1){FileOutputStream fileOut = null;if(!PANEL){try {fis.close();} catch (IOException e2) {e2.printStackTrace();}try {System.out.println("Before writing file ");fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);} catch (FileNotFoundException e) {e.printStackTrace();}try {hwb.write(fileOut);} catch (IOException e) {e.printStackTrace();}HttpPost post = new HttpPost("http://seller.snapdeal.com/inventory/upload");File file = new File(SNAPDEAL_INVENTORY_SHEET);MultipartEntity mpEntity = new MultipartEntity();ContentBody cbFile = new FileBody(file,"application/vnd.ms-excel");mpEntity.addPart("file", cbFile);post.setEntity(mpEntity);System.out.println("Before posting file");HttpResponse response=null;try {response = client.execute(post);} catch (ClientProtocolException e2) {System.out.println("Error While Posting Inventory File");e2.printStackTrace();} catch (IOException e2) {System.out.println("I/O Error While Posting Inventory File");e2.printStackTrace();}BufferedReader rd = null;try {rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));} catch (IllegalStateException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}String line = "";String feedresponse = null;try {while ((line = rd.readLine()) != null) {System.out.println(line);feedresponse = line;}} catch (IOException e) {e.printStackTrace();}System.out.println("posting response" + feedresponse);}int retry = 24;boolean feedsuccess =false;while(retry>0){try {Thread.sleep(1*60*1000);} catch (InterruptedException e) {e.printStackTrace();}try {lastUpdatedInventoryTime = lastSentInventoryTime;fetchinventoryhistoryfromsnapdeal();} catch (UnsupportedEncodingException e1) {System.out.println("Error while fetching inventory update result");e1.printStackTrace();} catch (TException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}if(inventoryhistoryItemMap.entrySet().size()==iterator -1){feedsuccess = true;break;}retry --;}String PANEL_TEXT_MAIL = "";if(PANEL){PANEL_TEXT_MAIL = " (Using Panel)";}String emailSubjectTxt;String text;String tableHeader;if(feedsuccess){in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;try {transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();transactionClient.updateSourceDetailTimestamp(7, lastSentInventoryTime);} catch (Exception e) {try {transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();transactionClient.updateSourceDetailTimestamp(7, lastSentInventoryTime);} catch (Exception ex) {ex.printStackTrace();}}if(snapdealInventoryItemList.size() > 0){in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = null;try {System.out.println("Before updating to database");for(SnapdealInventoryItem item:snapdealInventoryItemList){System.out.println("Item ID " + item.getItem_id());System.out.println("Availability " + item.getAvailability());System.out.println("Updated time " + sdf.format(item.getLastUpdatedOnSnapdeal()));System.out.println("Pending Orders " + item.getPendingOrders());}System.out.println("Snapdeal inventory list size" + snapdealInventoryItemList.size());inventoryClient = new InventoryClient().getClient();inventoryClient.addOrUpdateAllSnapdealInventory(snapdealInventoryItemList);} catch (TException e) {e.printStackTrace();try {inventoryClient = new InventoryClient().getClient();} catch (TTransportException e2) {e2.printStackTrace();}try {inventoryClient.addOrUpdateAllSnapdealInventory(snapdealInventoryItemList);} catch (TException e1) {e1.printStackTrace();}}}emailSubjectTxt = "Products back in stock on Snapdeal "+sdf.format(lastSentInventoryTime) + PANEL_TEXT_MAIL;tableHeader = "<tr>"+ "<td>" + "Product Name" +"</td>"+"<td>" + "Item ID" + "</td>"+"<td>" + "Old Inventory" + "</td>"+"<td>" + "New Inventory" + "</td>"+"</tr>";if(backInStockItems.length() > 0){text = "<html><table border=\"1\" align=\"center\">"+tableHeader+backInStockItems.toString()+"</table></html>";try {mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);//mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());} catch (Exception e) {e.printStackTrace();}}emailSubjectTxt = "Products out of stock on Snapdeal "+sdf.format(lastSentInventoryTime) + PANEL_TEXT_MAIL;if(outOfStockItems.length() > 0){text = "<html><table border=\"1\" align=\"center\">"+tableHeader+outOfStockItems.toString()+"</table></html>";try {mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);//mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());} catch (Exception e) {e.printStackTrace();}}emailSubjectTxt = "Snapdeal Inventory Updated for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis())+PANEL_TEXT_MAIL;if(inventoryChangeItems.length() > 0){text = "<html><table border=\"1\" align=\"center\">"+tableHeader+inventoryChangeItems.toString()+"</table></html>";try {mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);} catch (Exception e) {e.printStackTrace();}}}else{emailSubjectTxt = "Snapdeal Inventory Could not be updated "+PANEL_TEXT_MAIL+" " +sdf.format(System.currentTimeMillis());try {mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password,"Please contact Engg ");} catch (Exception e) {e.printStackTrace();}}tableHeader = "<tr>"+ "<td>" + "Product Name" +"</td>"+"<td>" + "Item ID" + "</td>"+"<td>" + "Available - Reserve" + "</td>"+"<td>" + "Total Held" + "</td>"+"</tr>";emailSubjectTxt = "Items with (Total Held > Net Available) Inventory "+ sdf.format(System.currentTimeMillis());if(heldMoreThanAvailable.length() > 0){text = "<html><table border=\"1\" align=\"center\">"+tableHeader+heldMoreThanAvailable.toString()+"</table></html>";try {mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);//mailer.sendSSLMessage(sendTo,"Snapdeal Inventory Updates sent for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis()),inventoryChangeItems.toString(), emailFromAddress, password, new ArrayList<File>());} catch (Exception e) {e.printStackTrace();}}try {System.out.println("++++++++++++++++++++++++++++++");System.out.println("Thread Sleeping for 30 minutes");System.out.println("++++++++++++++++++++++++++++++");Thread.sleep(30*60*1000);} catch (InterruptedException e) {e.printStackTrace();}}else{try {mailer.sendSSLMessage(sendTo,"No changes in Snapdeal inventory to update "+ sdf.format(System.currentTimeMillis()),"No change in Snapdeal Inventory to be updated ", emailFromAddress, password, new ArrayList<File>());} catch (Exception e) {e.printStackTrace();}try {System.out.println("++++++++++++++++++++++++++++++");System.out.println("Thread Sleeping for 30 minutes");System.out.println("++++++++++++++++++++++++++++++");Thread.sleep(30*60*1000);} catch (InterruptedException e) {e.printStackTrace();}}String tableHeader = "<tr>"+ "<td>" + "Product Name" +"</td>"+"<td>" + "SKU at Snapdeal" + "</td>"+"<td>" + "SUPC" + "</td>"+"</tr>";String text;if(notMappedItems.length() >0){text = "<html><table border=\"1\" align=\"center\">"+tableHeader+notMappedItems.toString()+"</table></html>";try {mailer.sendSSLMessage(sendTo,"Please create Warehouse ID and Item ID mapping", emailFromAddress, password, text);} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args){while(true){sendsnapdealinventory();}}}