Subversion Repositories SmartDukaan

Rev

Rev 9425 | Rev 9458 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020;

import in.shop2020.model.v1.catalog.CatalogService;
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.thrift.clients.CatalogClient;
import in.shop2020.thrift.clients.InventoryClient;
import in.shop2020.thrift.clients.TransactionClient;
import inventory.Inventory;
import inventory.InventoryHistory;
import inventory.InventoryHistoryItems;
import inventory.InventoryItems;
import inventory.SnapdealItemForInventory;

import java.io.BufferedReader;
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.HashMap;
import java.util.List;
import java.util.Map;

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.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 com.google.gson.Gson;

public class CreateSnapDealInventoryFeed {
        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> inventoryItemList;
        static Map<Long,Long> itemIdpendingOrdersMap = new HashMap<Long,Long>();
        static Map<String,Long> skuitemidMap = new HashMap<String,Long>();
        private static Map<String,InventoryHistory> inventoryhistoryItemMap;
        private static DefaultHttpClient client = new DefaultHttpClient();
        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 block
                        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();
                        } 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_held=0;
                        long heldForSource=0;
                        double nlc=0;
                        double maxnlc=0;
                        Item thriftItem;
                        long sku = 0;
                        for(Inventory inventoryItem:inventoryItemList){
                                try{
                                        sku = Long.parseLong(inventoryItem.getSellerSku());
                                }
                                catch(NumberFormatException nfe){
                                        System.out.println(inventoryItem.getSellerSku());
                                        if(skuitemidMap.get(inventoryItem.getSellerSku())!=null){
                                                sku = skuitemidMap.get(inventoryItem.getSellerSku());
                                        }
                                        else{
                                                continue;
                                        }
                                }
                                if(aliveItemsMap.get(sku) != null){
                                        thriftItem = aliveItemsMap.get(sku);    
                                }
                                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){
                                                        if(warehouse.getBillingWarehouseId()!=7){
                                                                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_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;
                                                                        System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
                                                                }
                                                                else if(maxnlc==0){
                                                                        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;
                                                                        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){
                                                                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();
                                                                }
                                                                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;
                                                                }
                                                                else if(maxnlc==0){
                                                                        total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
                                                                        heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
                                                                        available = available + itemavailability.get(entry.getKey()) - 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());
                                                vendor_warehouses.addAll(ours_warehouses);
                                                for (Warehouse warehouse:vendor_warehouses){
                                                        if(warehouse.getBillingWarehouseId()!=7){
                                                                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();
                                                                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){
                                                                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();
                                                                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(),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(),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) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }
        private static void fetchinventoryhistoryfromsnapdeal() throws UnsupportedEncodingException, TException{
                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 block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                try {
                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                } catch (IllegalStateException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                String line = "";
                try {
                        while ((line = rd.readLine()) != null) {
                                System.out.println(line);
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                int i = 1;
                Gson gson = new Gson();
                inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();
                Client inventoryClient = null;
                boolean exitfetchinghistory = true;
                long lastUpdatedInventoryTime = 0;
                try {
                        inventoryClient = new InventoryClient().getClient();
                        lastUpdatedInventoryTime = inventoryClient.getLastUpdatedTimeForSnapdealInventory();
                } catch (TTransportException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

                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");
                        try {
                                response = client.execute(get);
                        } catch (ClientProtocolException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        try {
                                rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        } catch (IllegalStateException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                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()){
                                        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++;
                }
        }

        private static void fetchinventoryfromsnapdeal() throws UnsupportedEncodingException{
                /*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;
                try {
                        response = client.execute(post);
                } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                try {
                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                } catch (IllegalStateException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                String line = "";
                try {
                        while ((line = rd.readLine()) != null) {
                                System.out.println(line);
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }*/
                int i = 1;
                int items=0;
                Gson gson = new Gson();
                in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
                inventoryItemList = new ArrayList<Inventory>();
                HttpGet get;
                HttpResponse response = null;
                BufferedReader rd= 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");
                        try {
                                response = client.execute(get);
                        } catch (ClientProtocolException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        try {
                                rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        } catch (IllegalStateException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
                        if(inventoryitems.getRows().size()!=0){
                                for(Inventory inventory : inventoryitems.getRows()){
                                        inventoryItemList.add(inventory);
                                        items++;
                                }
                        }
                        else{
                                System.out.println("Fetched  " + items);
                                break;
                        }
                        i++;
                }
                in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
                SnapdealItem snapdealitem = null;
                long sku = 0;
                long created_orders;
                long pending_orders;
                try {
                        transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
                } catch (TTransportException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                try {
                        catalogServiceClient = new CatalogClient().getClient();
                } catch (TTransportException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                List<String> notMappedItems = new ArrayList<String>();
                for(Inventory inventory:inventoryItemList){
                        created_orders = 0;
                        pending_orders = 0;
                        if(inventoryhistoryItemMap.get(inventory.getSellerSku())!=null && inventory.getAvailableInventory()!=Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue())){
                                        try {
                                                try{
                                                        sku = Long.parseLong(inventory.getSellerSku());
                                                }
                                                catch(NumberFormatException nfe){
                                                        try {
                                                                snapdealitem = catalogServiceClient.getSnapdealItembySkuAtSnapdeal(inventory.getSellerSku());
                                                                if(snapdealitem.getItem_id()!=0){
                                                                        sku = snapdealitem.getItem_id();
                                                                        skuitemidMap.put(inventory.getSellerSku(),sku);
                                                                }
                                                                else{
                                                                        notMappedItems.add("inventory.getSellerSku() "+inventory.getProductName());
                                                                        System.out.println();
                                                                }
                                                        } catch (TTransportException e) {
                                                                // TODO Auto-generated catch block
                                                                e.printStackTrace();
                                                        }
                                                }
                                                if(sku!=0){
                                                        System.out.println("Fetching created orders for " + sku);
                                                        created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventoryhistoryItemMap.get(inventory.getSellerSku()).getUpdateTime(), 7, sku);
                                                }
                                                else{
                                                        continue;
                                                }
                                        } catch (NumberFormatException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        } catch (TException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                        pending_orders = (inventory.getAvailableInventory() - Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue()) - created_orders);
                        }
                        itemIdpendingOrdersMap.put(sku, pending_orders);
                }
        }

        @SuppressWarnings("deprecation")
        public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException {
                fetchinventoryhistoryfromsnapdeal();
                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 block
                        e.printStackTrace();
                }
                Client inventoryClient = new InventoryClient().getClient();
                FileInputStream fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
                Workbook hwb = new HSSFWorkbook(fis);
                Sheet sheet = hwb.getSheetAt(0);
                Row row;
                int iterator=1;
                long availability,reserve,defaultinventory,holdinventory,actualavailability,heldorders=0,sent_inventory;
                SnapdealItemForInventory  inventoryItem;
                StringBuffer outOfStockItems =new StringBuffer();
                StringBuffer backInStockItems =new StringBuffer();
                long sku = 0;
                for(Inventory inventory:inventoryItemList){
                        //System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
                        try{
                                try{
                                        sku = Long.parseLong(inventory.getSellerSku());
                                }
                                catch(NumberFormatException nfe){
                                        if(skuitemidMap.containsKey(inventory.getSellerSku())){
                                                sku = skuitemidMap.get(inventory.getSellerSku()); 
                                        }
                                        else{
                                                continue;
                                        }
                                }
                                snapdealitem = catalogServiceClient.getSnapdealItem(sku);
                        }
                        catch(TTransportException e){
                                catalogServiceClient = new CatalogClient().getClient();
                                snapdealitem = catalogServiceClient.getSnapdealItem(sku);
                        }
                        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;
                                if(itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()))!=null){
                                        heldorders = itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()));
                                }
                                System.out.println("itemId:" + inventoryItem.getId() + "\tavailable: " + inventoryItem.getAvailability() + "\treserve" + inventoryItem.getReserve() + "\theldForSource:" + inventoryItem.getHeldForSource() + "\twebsite_hold:" + inventoryItem.getHoldInventory() + "\tdefault_inv:" +inventoryItem.getDefaultInventory() + "\theldorders" + heldorders);
                                row =   sheet.getRow((short) iterator);
                                long inventoryForRiskyItem = actualavailability - holdinventory;
                                if(inventoryItem.getRisky()){
                                        if(inventoryForRiskyItem > 0){
                                                if((Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource()) > 0){
                                                        sent_inventory = Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource();
                                                }
                                                else{
                                                        sent_inventory = 0;
                                                }
                                        }
                                        else{
                                                sent_inventory = 0;
                                        }
                                }
                                else{
                                        if(actualavailability > defaultinventory){
                                                if((Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource()) > heldorders){
                                                        System.out.println("actual" + actualavailability + "\t2/3actual" + Math.round(actualavailability*2/3) +  "\theld for source" + inventoryItem.getHeldForSource() + "\theldorders" +  heldorders + "\tFinal Value is : " + (Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders));
                                                        sent_inventory = Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders;
                                                }
                                                else{
                                                        sent_inventory = 0;
                                                }
                                        }
                                        else{
                                                if(defaultinventory > heldorders){
                                                        sent_inventory = defaultinventory - heldorders;
                                                }
                                                else{
                                                        sent_inventory = 0;
                                                }
                                        }
                                }
                                if(inventory.getAvailableInventory()!= sent_inventory){
                                        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.getAvailableInventory()!=0 && sent_inventory==0){
                                                outOfStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory);
                                        }
                                        if(inventory.getAvailableInventory()==0 && sent_inventory!=0){
                                                backInStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory);
                                        }
                                        if(inventory.isLive()){
                                                row.getCell((short) 5).setCellValue("Yes");
                                        }
                                        else{
                                                row.getCell((short) 5).setCellValue("No");
                                        }
                                        SnapdealInventoryItem snapdealinventoryitem = new SnapdealInventoryItem();
                                        snapdealinventoryitem.setAvailability(sent_inventory);
                                        snapdealinventoryitem.setItem_id(Long.parseLong(inventory.getSellerSku()));
                                        System.out.println("Updating inventory snapshot " + inventory.getSellerSku());
                                        snapdealinventoryitem.setLastUpdatedOnSnapdeal(time);
                                        try{
                                                inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
                                        }
                                        catch(TTransportException e){
                                                inventoryClient = new InventoryClient().getClient();
                                                inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
                                        }
                                        iterator++;
                                }
                        }
                        else{
                                continue;
                        }
                }
                FileOutputStream fileOut = null;
                fis.close();
                try {
                        System.out.println("Before writing file ");
                        fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                try {
                        
                        hwb.write(fileOut);
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.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 block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.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 block
                        e1.printStackTrace();
                } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                line = "";
                try {
                        while ((line = rd.readLine()) != null) {
                                System.out.println(line);
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                 */
        }

}