Rev 9405 | 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.SnapdealItem;import in.shop2020.model.v1.inventory.InventoryService.Client;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.WarehouseType;import in.shop2020.serving.model.OrderItems;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.thrift.clients.InventoryClient;import in.shop2020.thrift.clients.TransactionClient;import inventory.Inventory;import inventory.InventoryItems;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.math.BigInteger;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;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.FileEntity;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.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;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 com.google.gson.Gson;public class CreateSnapDealInventoryFeed {private static long time = System.currentTimeMillis();private static final String SNAPDEAL_INVENTORY_SHEET = "/home/vikram/snapdeal-inventory-"+time+".xls";private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();private static ArrayList<Inventory> inventoryItemList;static Map<Long,Long> itemIdpendingOrdersMap = new HashMap<Long,Long>();private static void calculateinventory(){CatalogClient catalogServiceClient = null;Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();try {catalogServiceClient = new CatalogClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.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();} 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();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());}for (Warehouse warehouse:ours_warehouses){oursGoodWarehouse.add(warehouse.getId());}long available=0;long reserve=0;long total_held=0;long heldForSource=0;double nlc=0;double maxnlc=0;Item thriftItem;for(Inventory inventoryItem:inventoryItemList){if(aliveItemsMap.get(Long.parseLong(inventoryItem.getSellerSku())) != null){thriftItem = aliveItemsMap.get(Long.parseLong(inventoryItem.getSellerSku()));}else{continue;}available=0;reserve=0;total_held=0;heldForSource=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){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();if(nlc !=0 && (maxnlc >= nlc)){total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);available = available + itemavailability.get(warehouse.getId()) - total_held;}else{}}}}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)){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();}if(nlc !=0 && (maxnlc >= nlc)){total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);available = available + entry.getValue() - total_held;}}}}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())){nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();if(nlc !=0 && (maxnlc >= nlc)){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)){nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();if(nlc !=0 && (maxnlc >= nlc)){reserve = reserve + entry.getValue();}}else{//System.out.println("skipping inventory for warehouse id " + entry.getKey());}}}item= new SnapdealItemForInventory(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),thriftItem.isRisky(),thriftItem.getItemStatus());}else{item = new SnapdealItemForInventory(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),thriftItem.isRisky(),thriftItem.getItemStatus());}//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) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void fetchinventoryfromsnapdeal() throws UnsupportedEncodingException{HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");HttpGet get;BufferedReader rd= null;List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();nameValuePairs.add(new BasicNameValuePair("j_username","khushal.bhatia@saholic.com"));nameValuePairs.add(new BasicNameValuePair("j_password","sonline"));post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));HttpResponse response = null;try {response = client.execute(post);} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));} catch (IllegalStateException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String line = "";try {while ((line = rd.readLine()) != null) {System.out.println(line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}int i = 1;int items=0;long time = System.currentTimeMillis();Gson gson = new Gson();Client inventoryClient = null;try {inventoryClient = new InventoryClient().getClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;try {transactionClient = new TransactionClient().getClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}SnapdealInventoryItem inventory_item = null;long created_orders = 0;long pending_orders;inventoryItemList = new ArrayList<Inventory>();while(true){time = System.currentTimeMillis();get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");try {response = client.execute(get);} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);if(inventoryitems.getRows().size()!=0){for(Inventory inventory : inventoryitems.getRows()){/*System.out.println("SUPC " + inventory.getSupc());System.out.println("SKU " + inventory.getSellerSku());System.out.println("Product Name " + inventory.getProductName());System.out.println("Quantity " + inventory.getAvailableInventory());System.out.println("Pending " + inventory.getPendingAvailableInventory());System.out.println("Status " + inventory.isPendingUpdate());*/pending_orders=0;try{inventory_item = inventoryClient.getSnapdealInventoryForItem(Long.parseLong(inventory.getSellerSku()));}catch(NumberFormatException nfe){continue;} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(inventory_item.getItem_id()!=0){if(inventory.getAvailableInventory()!=inventory_item.getAvailability()){try {created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventory_item.getLastUpdatedOnSnapdeal(), 7, Long.parseLong(inventory.getSellerSku()));} catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(created_orders == (inventory_item.getAvailability() - inventory.getAvailableInventory())){}else{pending_orders = (inventory_item.getAvailability() - inventory.getAvailableInventory() - created_orders);}}itemIdpendingOrdersMap.put(Long.parseLong(inventory.getSellerSku()),pending_orders);inventoryItemList.add(inventory);items++;}}else{System.out.println("Fetched " + items);break;}i++;}}@SuppressWarnings("deprecation")public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException {fetchinventoryfromsnapdeal();calculateinventory();in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;SnapdealItem snapdealitem = null;try {catalogServiceClient = new CatalogClient().getClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}Client inventoryClient = new InventoryClient().getClient();FileInputStream fis = new FileInputStream("/home/vikram/Desktop/SellerInventory.xls");Workbook hwb = new HSSFWorkbook(fis);Sheet sheet = hwb.getSheetAt(0);Row row;int iterator=1;long availability,reserve,defaultinventory,holdinventory,actualavailability,heldorders;SnapdealItemForInventory inventoryItem;for(Inventory inventory:inventoryItemList){System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));try{snapdealitem = catalogServiceClient.getSnapdealItem(Long.parseLong(inventory.getSellerSku()));}catch(TTransportException e){catalogServiceClient = new CatalogClient().getClient();snapdealitem = catalogServiceClient.getSnapdealItem(Long.parseLong(inventory.getSellerSku()));}if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){inventoryItem = allItemsInventoryMap.get(Long.parseLong(inventory.getSellerSku()));if(inventoryItem==null){continue;}availability = inventoryItem.getAvailability();reserve = inventoryItem.getReserve();defaultinventory = inventoryItem.getDefaultInventory();holdinventory = inventoryItem.getHoldInventory();actualavailability = availability - reserve;heldorders = itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()));row = sheet.getRow((short) iterator);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());long inventoryForRiskyItem = actualavailability - holdinventory;if(inventoryItem.getRisky()){if(inventoryForRiskyItem > 0){if((Math.round(2/3*inventoryForRiskyItem) - heldorders + inventoryItem.getHeldForSource()) > 0){row.getCell((short) 4).setCellValue(Math.round(2/3*inventoryForRiskyItem) - heldorders + inventoryItem.getHeldForSource());}else{row.getCell((short) 4).setCellValue(0);}}else{row.getCell((short) 4).setCellValue(0);}}else{if(actualavailability > defaultinventory){if((Math.round(2/3*actualavailability) + inventoryItem.getHeldForSource()) > heldorders){row.getCell((short) 4).setCellValue(Math.round(2/3*actualavailability) + inventoryItem.getHeldForSource() - heldorders);}else{row.getCell((short) 4).setCellValue(0);}}else{if(defaultinventory > heldorders){row.getCell((short) 4).setCellValue(defaultinventory - heldorders);}else{row.getCell((short) 4).setCellValue(0);}}}if(inventory.isLive()){row.getCell((short) 5).setCellValue("Yes");}else{row.getCell((short) 5).setCellValue("No");}iterator++;}else{continue;}}FileOutputStream fileOut = null;fis.close();try {fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {hwb.write(fileOut);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");BufferedReader rd= null;/*List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();nameValuePairs.add(new BasicNameValuePair("j_username","khushal.bhatia@saholic.com"));nameValuePairs.add(new BasicNameValuePair("j_password","sonline"));post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));*/HttpResponse response = null;String line;/* try {response = client.execute(post);rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));while ((line = rd.readLine()) != null) {System.out.println(line);}} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}*/ post = new HttpPost("http://seller.snapdeal.com/inventory/upload");File file = new File("/home/vikram/snapdeal-inventory-1389608325312.xls");MultipartEntity mpEntity = new MultipartEntity();ContentBody cbFile = new FileBody(file,"application/vnd.ms-excel");mpEntity.addPart("file", cbFile);post.setEntity(mpEntity);response = client.execute(post);try {rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));} catch (IllegalStateException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}line = "";try {while ((line = rd.readLine()) != null) {System.out.println(line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}