Subversion Repositories SmartDukaan

Rev

Rev 9425 | Rev 9458 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9425 Rev 9456
Line 1... Line 1...
1
package in.shop2020;
1
package in.shop2020;
2
 
2
 
-
 
3
import in.shop2020.model.v1.catalog.CatalogService;
3
import in.shop2020.model.v1.catalog.Item;
4
import in.shop2020.model.v1.catalog.Item;
4
import in.shop2020.model.v1.catalog.SnapdealItem;
5
import in.shop2020.model.v1.catalog.SnapdealItem;
5
import in.shop2020.model.v1.inventory.InventoryService.Client;
6
import in.shop2020.model.v1.inventory.InventoryService.Client;
6
import in.shop2020.model.v1.inventory.InventoryType;
7
import in.shop2020.model.v1.inventory.InventoryType;
7
import in.shop2020.model.v1.inventory.ItemInventory;
8
import in.shop2020.model.v1.inventory.ItemInventory;
8
import in.shop2020.model.v1.inventory.SnapdealInventoryItem;
9
import in.shop2020.model.v1.inventory.SnapdealInventoryItem;
9
import in.shop2020.model.v1.inventory.Warehouse;
10
import in.shop2020.model.v1.inventory.Warehouse;
10
import in.shop2020.model.v1.inventory.WarehouseType;
11
import in.shop2020.model.v1.inventory.WarehouseType;
11
import in.shop2020.serving.model.OrderItems;
-
 
12
import in.shop2020.thrift.clients.CatalogClient;
12
import in.shop2020.thrift.clients.CatalogClient;
13
import in.shop2020.thrift.clients.InventoryClient;
13
import in.shop2020.thrift.clients.InventoryClient;
14
import in.shop2020.thrift.clients.TransactionClient;
14
import in.shop2020.thrift.clients.TransactionClient;
15
import inventory.Inventory;
15
import inventory.Inventory;
-
 
16
import inventory.InventoryHistory;
-
 
17
import inventory.InventoryHistoryItems;
16
import inventory.InventoryItems;
18
import inventory.InventoryItems;
17
import inventory.SnapdealItemForInventory;
19
import inventory.SnapdealItemForInventory;
18
 
20
 
19
import java.io.BufferedReader;
21
import java.io.BufferedReader;
20
import java.io.File;
-
 
21
import java.io.FileInputStream;
22
import java.io.FileInputStream;
22
import java.io.FileNotFoundException;
23
import java.io.FileNotFoundException;
23
import java.io.FileOutputStream;
24
import java.io.FileOutputStream;
24
import java.io.IOException;
25
import java.io.IOException;
25
import java.io.InputStreamReader;
26
import java.io.InputStreamReader;
26
import java.io.UnsupportedEncodingException;
27
import java.io.UnsupportedEncodingException;
27
import java.math.BigInteger;
-
 
28
import java.util.ArrayList;
28
import java.util.ArrayList;
29
import java.util.HashMap;
29
import java.util.HashMap;
30
import java.util.List;
30
import java.util.List;
31
import java.util.Map;
31
import java.util.Map;
32
 
32
 
33
import org.apache.http.HttpEntity;
-
 
34
import org.apache.http.HttpResponse;
33
import org.apache.http.HttpResponse;
35
import org.apache.http.NameValuePair;
34
import org.apache.http.NameValuePair;
36
import org.apache.http.client.ClientProtocolException;
35
import org.apache.http.client.ClientProtocolException;
37
import org.apache.http.client.HttpClient;
36
import org.apache.http.client.HttpClient;
38
import org.apache.http.client.entity.UrlEncodedFormEntity;
37
import org.apache.http.client.entity.UrlEncodedFormEntity;
39
import org.apache.http.client.methods.HttpGet;
38
import org.apache.http.client.methods.HttpGet;
40
import org.apache.http.client.methods.HttpPost;
39
import org.apache.http.client.methods.HttpPost;
41
import org.apache.http.entity.FileEntity;
-
 
42
import org.apache.http.entity.mime.MultipartEntity;
-
 
43
import org.apache.http.entity.mime.content.ContentBody;
-
 
44
import org.apache.http.entity.mime.content.FileBody;
-
 
45
import org.apache.http.impl.client.DefaultHttpClient;
40
import org.apache.http.impl.client.DefaultHttpClient;
46
import org.apache.http.message.BasicNameValuePair;
41
import org.apache.http.message.BasicNameValuePair;
47
import org.apache.poi.hssf.usermodel.HSSFCell;
-
 
48
import org.apache.poi.hssf.usermodel.HSSFRow;
-
 
49
import org.apache.poi.hssf.usermodel.HSSFSheet;
-
 
50
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
42
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
51
import org.apache.poi.ss.usermodel.Row;
43
import org.apache.poi.ss.usermodel.Row;
52
import org.apache.poi.ss.usermodel.Sheet;
44
import org.apache.poi.ss.usermodel.Sheet;
53
import org.apache.poi.ss.usermodel.Workbook;
45
import org.apache.poi.ss.usermodel.Workbook;
54
import org.apache.thrift.TException;
46
import org.apache.thrift.TException;
55
import org.apache.thrift.transport.TTransportException;
47
import org.apache.thrift.transport.TTransportException;
-
 
48
 
56
import com.google.gson.Gson;
49
import com.google.gson.Gson;
57
 
50
 
58
public class CreateSnapDealInventoryFeed {
51
public class CreateSnapDealInventoryFeed {
59
	private static long time;
52
	private static long time = System.currentTimeMillis();
60
	private static String SNAPDEAL_INVENTORY_SHEET;
53
	private static String SNAPDEAL_INVENTORY_SHEET;
61
	private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();
54
	private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();
62
	private static ArrayList<Inventory> inventoryItemList;
55
	private static ArrayList<Inventory> inventoryItemList;
63
	static Map<Long,Long> itemIdpendingOrdersMap = new HashMap<Long,Long>();
56
	static Map<Long,Long> itemIdpendingOrdersMap = new HashMap<Long,Long>();
-
 
57
	static Map<String,Long> skuitemidMap = new HashMap<String,Long>();
-
 
58
	private static Map<String,InventoryHistory> inventoryhistoryItemMap;
-
 
59
	private static DefaultHttpClient client = new DefaultHttpClient();
64
	private static void calculateinventory(){
60
	private static void calculateinventory(){
65
 
-
 
66
		CatalogClient catalogServiceClient = null;
61
		CatalogClient catalogServiceClient = null;
67
		Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();
62
		Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();
68
		try {
63
		try {
69
			catalogServiceClient = new CatalogClient();
64
			catalogServiceClient = new CatalogClient();
70
		} catch (TTransportException e) {
65
		} catch (TTransportException e) {
Line 85... Line 80...
85
			} catch (TTransportException e) {
80
			} catch (TTransportException e) {
86
				e.printStackTrace();
81
				e.printStackTrace();
87
			}
82
			}
88
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
83
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
89
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
84
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
90
			time = System.currentTimeMillis();
-
 
91
			SNAPDEAL_INVENTORY_SHEET = "/home/snapdeal/snapdeal-inventory-"+time+".xls";
85
			SNAPDEAL_INVENTORY_SHEET = "/home/snapdeal/snapdeal-inventory-"+time+".xls";
92
			availability = inventoryClient.getInventorySnapshot(0);
86
			availability = inventoryClient.getInventorySnapshot(0);
-
 
87
			List<Warehouse> allwarehouses = inventoryClient.getWarehouses(null,null,0,0,0);
-
 
88
			Map<Long,Warehouse> allWarehousesMap = new HashMap<Long,Warehouse>();
-
 
89
			for(Warehouse warehouse:allwarehouses){
-
 
90
				allWarehousesMap.put(warehouse.getId(),warehouse);
-
 
91
			}
93
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
92
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
94
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
93
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
95
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
94
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
96
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
95
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
97
			for(Warehouse warehouse:warehouses){
96
			for(Warehouse warehouse:warehouses){
Line 105... Line 104...
105
			long total_held=0;
104
			long total_held=0;
106
			long heldForSource=0;
105
			long heldForSource=0;
107
			double nlc=0;
106
			double nlc=0;
108
			double maxnlc=0;
107
			double maxnlc=0;
109
			Item thriftItem;
108
			Item thriftItem;
-
 
109
			long sku = 0;
110
			for(Inventory inventoryItem:inventoryItemList){
110
			for(Inventory inventoryItem:inventoryItemList){
-
 
111
				try{
-
 
112
					sku = Long.parseLong(inventoryItem.getSellerSku());
-
 
113
				}
-
 
114
				catch(NumberFormatException nfe){
-
 
115
					System.out.println(inventoryItem.getSellerSku());
111
				if(aliveItemsMap.get(Long.parseLong(inventoryItem.getSellerSku())) != null){
116
					if(skuitemidMap.get(inventoryItem.getSellerSku())!=null){
112
					thriftItem = aliveItemsMap.get(Long.parseLong(inventoryItem.getSellerSku()));	
117
						sku = skuitemidMap.get(inventoryItem.getSellerSku());
-
 
118
					}
-
 
119
					else{
-
 
120
						continue;
-
 
121
					}
-
 
122
				}
-
 
123
				if(aliveItemsMap.get(sku) != null){
-
 
124
					thriftItem = aliveItemsMap.get(sku);	
113
				}
125
				}
114
				else{
126
				else{
115
					continue;
127
					continue;
116
				}
128
				}
117
				available=0;
129
				available=0;
Line 128... Line 140...
128
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
140
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
129
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());						
141
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());						
130
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
142
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
131
						vendor_warehouses.addAll(ours_warehouses);
143
						vendor_warehouses.addAll(ours_warehouses);
132
						for (Warehouse warehouse:vendor_warehouses){
144
						for (Warehouse warehouse:vendor_warehouses){
-
 
145
							if(warehouse.getBillingWarehouseId()!=7){
-
 
146
								continue;
-
 
147
							}
133
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
148
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
134
							ignoredItem.setItemId(thriftItem.getId());
149
							ignoredItem.setItemId(thriftItem.getId());
135
							ignoredItem.setWarehouseId(warehouse.getId());
150
							ignoredItem.setWarehouseId(warehouse.getId());
136
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem)){
151
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem)){
137
								try{
152
								try{
Line 158... Line 173...
158
							}
173
							}
159
						}
174
						}
160
					}
175
					}
161
					else{
176
					else{
162
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
177
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
-
 
178
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
-
 
179
								continue;
-
 
180
							}
163
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
181
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
164
							ignoredItem.setItemId(thriftItem.getId());
182
							ignoredItem.setItemId(thriftItem.getId());
165
							ignoredItem.setWarehouseId(entry.getKey());
183
							ignoredItem.setWarehouseId(entry.getKey());
166
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
184
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
167
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
185
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
Line 188... Line 206...
188
					}
206
					}
189
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
207
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
190
					itemreserve = iteminventory.getReserved();
208
					itemreserve = iteminventory.getReserved();
191
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
209
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
192
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
210
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
-
 
211
						vendor_warehouses.addAll(ours_warehouses);
193
						for (Warehouse warehouse:vendor_warehouses){
212
						for (Warehouse warehouse:vendor_warehouses){
-
 
213
							if(warehouse.getBillingWarehouseId()!=7){
-
 
214
								continue;
-
 
215
							}
194
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
216
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
195
							ignoredItem.setItemId(thriftItem.getId());
217
							ignoredItem.setItemId(thriftItem.getId());
196
							ignoredItem.setWarehouseId(warehouse.getId());
218
							ignoredItem.setWarehouseId(warehouse.getId());
197
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
219
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
198
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
220
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
Line 208... Line 230...
208
 
230
 
209
							}
231
							}
210
						}
232
						}
211
					}else{
233
					}else{
212
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
234
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
-
 
235
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
-
 
236
								continue;
-
 
237
							}
213
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
238
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
214
							ignoredItem.setItemId(thriftItem.getId());
239
							ignoredItem.setItemId(thriftItem.getId());
215
							ignoredItem.setWarehouseId(entry.getKey());
240
							ignoredItem.setWarehouseId(entry.getKey());
216
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
241
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
217
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
242
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
Line 250... Line 275...
250
			// TODO Auto-generated catch block
275
			// TODO Auto-generated catch block
251
			e.printStackTrace();
276
			e.printStackTrace();
252
		}
277
		}
253
 
278
 
254
	}
279
	}
255
	private static void fetchinventoryfromsnapdeal() throws UnsupportedEncodingException{
280
	private static void fetchinventoryhistoryfromsnapdeal() throws UnsupportedEncodingException, TException{
256
		HttpClient client = new DefaultHttpClient();
-
 
257
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
281
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
258
		HttpGet get; 
282
		HttpGet get; 
259
		BufferedReader rd= null;
283
		BufferedReader rd= null;
260
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
284
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
261
		nameValuePairs.add(new BasicNameValuePair("j_username",
285
		nameValuePairs.add(new BasicNameValuePair("j_username",
Line 290... Line 314...
290
		} catch (IOException e) {
314
		} catch (IOException e) {
291
			// TODO Auto-generated catch block
315
			// TODO Auto-generated catch block
292
			e.printStackTrace();
316
			e.printStackTrace();
293
		}
317
		}
294
		int i = 1;
318
		int i = 1;
295
		int items=0;
-
 
296
		long time = System.currentTimeMillis();
-
 
297
		Gson gson = new Gson();
319
		Gson gson = new Gson();
-
 
320
		inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();
298
		Client inventoryClient = null;
321
		Client inventoryClient = null;
-
 
322
		boolean exitfetchinghistory = true;
-
 
323
		long lastUpdatedInventoryTime = 0;
299
		try {
324
		try {
300
			inventoryClient = new InventoryClient().getClient();
325
			inventoryClient = new InventoryClient().getClient();
-
 
326
			lastUpdatedInventoryTime = inventoryClient.getLastUpdatedTimeForSnapdealInventory();
301
		} catch (TTransportException e) {
327
		} catch (TTransportException e) {
302
			// TODO Auto-generated catch block
328
			// TODO Auto-generated catch block
303
			e.printStackTrace();
329
			e.printStackTrace();
304
		}
330
		}
-
 
331
 
-
 
332
		while(exitfetchinghistory){
-
 
333
			System.out.println("Fetching inventory history page " +i);
-
 
334
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=history&_search=false&nd="+time+"&rows=30&page="+i+"&sidx=&sord=dsc");
-
 
335
			try {
-
 
336
				response = client.execute(get);
-
 
337
			} catch (ClientProtocolException e) {
-
 
338
				// TODO Auto-generated catch block
-
 
339
				e.printStackTrace();
-
 
340
			} catch (IOException e) {
-
 
341
				// TODO Auto-generated catch block
-
 
342
				e.printStackTrace();
-
 
343
			}
-
 
344
			try {
-
 
345
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
 
346
			} catch (IllegalStateException e) {
-
 
347
				// TODO Auto-generated catch block
-
 
348
				e.printStackTrace();
-
 
349
			} catch (IOException e) {
-
 
350
				// TODO Auto-generated catch block
-
 
351
				e.printStackTrace();
-
 
352
			}
-
 
353
			InventoryHistoryItems inventoryhistoryitems = (InventoryHistoryItems) gson.fromJson(rd, InventoryHistoryItems.class);
-
 
354
			if(inventoryhistoryitems.getRows().size()!=0){
-
 
355
				//System.out.println("Parsing page " + i);
-
 
356
				for(InventoryHistory inventoryhistory : inventoryhistoryitems.getRows()){
-
 
357
					if(inventoryhistory.getUpdateTime() > lastUpdatedInventoryTime){
305
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
358
						if(inventoryhistoryItemMap.containsKey(inventoryhistory.getSellerSku())){
-
 
359
							if(inventoryhistoryItemMap.get(inventoryhistory.getSellerSku()).getUpdateTime() < inventoryhistory.getUpdateTime()){  
-
 
360
								inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
-
 
361
							}
-
 
362
						}
-
 
363
						else{
-
 
364
							inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
-
 
365
						}
-
 
366
					}
-
 
367
					else{
-
 
368
						exitfetchinghistory = false;
-
 
369
					}
-
 
370
				}
-
 
371
			}
-
 
372
			else{
-
 
373
				exitfetchinghistory = false;
-
 
374
			}
-
 
375
			i++;
-
 
376
		}
-
 
377
	}
-
 
378
 
-
 
379
	private static void fetchinventoryfromsnapdeal() throws UnsupportedEncodingException{
-
 
380
		/*client = new DefaultHttpClient();
-
 
381
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
-
 
382
		BufferedReader rd= null;
-
 
383
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
-
 
384
		nameValuePairs.add(new BasicNameValuePair("j_username",
-
 
385
		"khushal.bhatia@saholic.com"));
-
 
386
		nameValuePairs.add(new BasicNameValuePair("j_password",
-
 
387
		"sonline"));
-
 
388
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
-
 
389
		HttpResponse response = null;
306
		try {
390
		try {
-
 
391
			response = client.execute(post);
307
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
392
		} catch (ClientProtocolException e) {
-
 
393
			// TODO Auto-generated catch block
-
 
394
			e.printStackTrace();
308
		} catch (TTransportException e) {
395
		} catch (IOException e) {
309
			// TODO Auto-generated catch block
396
			// TODO Auto-generated catch block
310
			e.printStackTrace();
397
			e.printStackTrace();
311
		}
398
		}
-
 
399
		try {
-
 
400
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
 
401
		} catch (IllegalStateException e1) {
-
 
402
			// TODO Auto-generated catch block
-
 
403
			e1.printStackTrace();
-
 
404
		} catch (IOException e1) {
-
 
405
			// TODO Auto-generated catch block
-
 
406
			e1.printStackTrace();
-
 
407
		}
-
 
408
		String line = "";
-
 
409
		try {
312
		SnapdealInventoryItem inventory_item = null;
410
			while ((line = rd.readLine()) != null) {
-
 
411
				System.out.println(line);
-
 
412
			}
-
 
413
		} catch (IOException e) {
-
 
414
			// TODO Auto-generated catch block
-
 
415
			e.printStackTrace();
-
 
416
		}*/
-
 
417
		int i = 1;
313
		long created_orders = 0;
418
		int items=0;
314
		long pending_orders;
419
		Gson gson = new Gson();
-
 
420
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
315
		inventoryItemList = new ArrayList<Inventory>();
421
		inventoryItemList = new ArrayList<Inventory>();
-
 
422
		HttpGet get;
-
 
423
		HttpResponse response = null;
-
 
424
		BufferedReader rd= null;
316
		while(true){
425
		while(true){
317
			System.out.println("Fetching inventory page " +i);
426
			System.out.println("Fetching current inventory page " +i);
318
			time = System.currentTimeMillis();
-
 
319
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");
427
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");
320
			try {
428
			try {
321
				response = client.execute(get);
429
				response = client.execute(get);
322
			} catch (ClientProtocolException e) {
430
			} catch (ClientProtocolException e) {
323
				// TODO Auto-generated catch block
431
				// TODO Auto-generated catch block
Line 335... Line 443...
335
				// TODO Auto-generated catch block
443
				// TODO Auto-generated catch block
336
				e.printStackTrace();
444
				e.printStackTrace();
337
			}
445
			}
338
			InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
446
			InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
339
			if(inventoryitems.getRows().size()!=0){
447
			if(inventoryitems.getRows().size()!=0){
340
				System.out.println("Parsing page " + i);
-
 
341
				for(Inventory inventory : inventoryitems.getRows()){
448
				for(Inventory inventory : inventoryitems.getRows()){
342
					/*System.out.println("SUPC " + inventory.getSupc());
449
					inventoryItemList.add(inventory);
343
						System.out.println("SKU " + inventory.getSellerSku());
450
					items++;
344
						System.out.println("Product Name " + inventory.getProductName());
-
 
345
						System.out.println("Quantity " + inventory.getAvailableInventory());
-
 
346
						System.out.println("Pending " + inventory.getPendingAvailableInventory());
-
 
347
						System.out.println("Status " + inventory.isPendingUpdate());
-
 
348
					 */
451
				}
349
					pending_orders=0;
452
			}
350
					try{
453
			else{
351
						inventory_item = inventoryClient.getSnapdealInventoryForItem(Long.parseLong(inventory.getSellerSku()));
454
				System.out.println("Fetched  " + items);
-
 
455
				break;
352
					}
456
			}
353
					catch(NumberFormatException nfe)  
-
 
354
					{  
457
			i++;
355
						continue;  
458
		}
356
					} catch (Exception e) {
459
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
357
						// TODO Auto-generated catch block
460
		SnapdealItem snapdealitem = null;
358
						try {
461
		long sku = 0;
-
 
462
		long created_orders;
359
							inventoryClient = new InventoryClient().getClient();
463
		long pending_orders;
360
							try {
464
		try {
361
								inventory_item = inventoryClient.getSnapdealInventoryForItem(Long.parseLong(inventory.getSellerSku()));
465
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
362
							} catch (NumberFormatException e1) {
466
		} catch (TTransportException e1) {
363
								// TODO Auto-generated catch block
467
			// TODO Auto-generated catch block
364
								e1.printStackTrace();
468
			e1.printStackTrace();
-
 
469
		}
-
 
470
		try {
-
 
471
			catalogServiceClient = new CatalogClient().getClient();
365
							} catch (TException e1) {
472
		} catch (TTransportException e1) {
366
								// TODO Auto-generated catch block
473
			// TODO Auto-generated catch block
367
								e1.printStackTrace();
474
			e1.printStackTrace();
368
							}
475
		}
-
 
476
		List<String> notMappedItems = new ArrayList<String>();
369
						} catch (TTransportException e1) {
477
		for(Inventory inventory:inventoryItemList){
370
							// TODO Auto-generated catch block
478
			created_orders = 0;
371
							e1.printStackTrace();
479
			pending_orders = 0;
-
 
480
			if(inventoryhistoryItemMap.get(inventory.getSellerSku())!=null && inventory.getAvailableInventory()!=Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue())){
-
 
481
					try {
-
 
482
						try{
-
 
483
							sku = Long.parseLong(inventory.getSellerSku());
372
						}
484
						}
373
						e.printStackTrace();
-
 
374
					}  
-
 
375
					if(inventory_item.getItem_id()!=0){
485
						catch(NumberFormatException nfe){
376
						if(inventory.getAvailableInventory()!=inventory_item.getAvailability()){
-
 
377
							try {
486
							try {
-
 
487
								snapdealitem = catalogServiceClient.getSnapdealItembySkuAtSnapdeal(inventory.getSellerSku());
378
								if(inventory_item.getLastUpdatedOnSnapdeal()!=0){
488
								if(snapdealitem.getItem_id()!=0){
-
 
489
									sku = snapdealitem.getItem_id();
-
 
490
									skuitemidMap.put(inventory.getSellerSku(),sku);
-
 
491
								}
-
 
492
								else{
379
									created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventory_item.getLastUpdatedOnSnapdeal(), 7, Long.parseLong(inventory.getSellerSku()));
493
									notMappedItems.add("inventory.getSellerSku() "+inventory.getProductName());
-
 
494
									System.out.println();
380
								}
495
								}
381
							} catch (NumberFormatException e) {
496
							} catch (TTransportException e) {
382
								// TODO Auto-generated catch block
-
 
383
								e.printStackTrace();
-
 
384
							} catch (TException e) {
-
 
385
								// TODO Auto-generated catch block
497
								// TODO Auto-generated catch block
386
								e.printStackTrace();
498
								e.printStackTrace();
387
							}
499
							}
388
						}
500
						}
-
 
501
						if(sku!=0){
-
 
502
							System.out.println("Fetching created orders for " + sku);
389
						if(created_orders == (inventory_item.getAvailability() - inventory.getAvailableInventory())){
503
							created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventoryhistoryItemMap.get(inventory.getSellerSku()).getUpdateTime(), 7, sku);
390
						}
504
						}
391
						else{
505
						else{
392
							pending_orders = (inventory_item.getAvailability() - inventory.getAvailableInventory() - created_orders);
506
							continue;
393
						}
507
						}
-
 
508
					} catch (NumberFormatException e) {
-
 
509
						// TODO Auto-generated catch block
-
 
510
						e.printStackTrace();
-
 
511
					} catch (TException e) {
-
 
512
						// TODO Auto-generated catch block
-
 
513
						e.printStackTrace();
394
					}
514
					}
395
					itemIdpendingOrdersMap.put(Long.parseLong(inventory.getSellerSku()),pending_orders);
515
					pending_orders = (inventory.getAvailableInventory() - Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue()) - created_orders);
396
					inventoryItemList.add(inventory);
-
 
397
					items++;
-
 
398
				}
-
 
399
			}
-
 
400
			else{
-
 
401
				System.out.println("Fetched  " + items);
-
 
402
				break;
-
 
403
			}
516
			}
404
			i++;
517
			itemIdpendingOrdersMap.put(sku, pending_orders);
405
		}
518
		}
406
	}
519
	}
407
 
520
 
408
	@SuppressWarnings("deprecation")
521
	@SuppressWarnings("deprecation")
409
	public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException {
522
	public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException {
-
 
523
		fetchinventoryhistoryfromsnapdeal();
410
		fetchinventoryfromsnapdeal();
524
		fetchinventoryfromsnapdeal();
411
		calculateinventory();
525
		calculateinventory();
412
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
526
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
413
		SnapdealItem snapdealitem = null;
527
		SnapdealItem snapdealitem = null;
414
		try {
528
		try {
Line 421... Line 535...
421
		FileInputStream fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
535
		FileInputStream fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
422
		Workbook hwb = new HSSFWorkbook(fis);
536
		Workbook hwb = new HSSFWorkbook(fis);
423
		Sheet sheet = hwb.getSheetAt(0);
537
		Sheet sheet = hwb.getSheetAt(0);
424
		Row row;
538
		Row row;
425
		int iterator=1;
539
		int iterator=1;
426
		long availability,reserve,defaultinventory,holdinventory,actualavailability,heldorders,sent_inventory;
540
		long availability,reserve,defaultinventory,holdinventory,actualavailability,heldorders=0,sent_inventory;
427
		SnapdealItemForInventory  inventoryItem;
541
		SnapdealItemForInventory  inventoryItem;
-
 
542
		StringBuffer outOfStockItems =new StringBuffer();
-
 
543
		StringBuffer backInStockItems =new StringBuffer();
-
 
544
		long sku = 0;
428
		for(Inventory inventory:inventoryItemList){
545
		for(Inventory inventory:inventoryItemList){
429
			System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
546
			//System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
430
			try{
547
			try{
-
 
548
				try{
-
 
549
					sku = Long.parseLong(inventory.getSellerSku());
-
 
550
				}
-
 
551
				catch(NumberFormatException nfe){
-
 
552
					if(skuitemidMap.containsKey(inventory.getSellerSku())){
-
 
553
						sku = skuitemidMap.get(inventory.getSellerSku()); 
-
 
554
					}
-
 
555
					else{
-
 
556
						continue;
-
 
557
					}
-
 
558
				}
431
				snapdealitem = catalogServiceClient.getSnapdealItem(Long.parseLong(inventory.getSellerSku()));
559
				snapdealitem = catalogServiceClient.getSnapdealItem(sku);
432
			}
560
			}
433
			catch(TTransportException e){
561
			catch(TTransportException e){
434
				catalogServiceClient = new CatalogClient().getClient();
562
				catalogServiceClient = new CatalogClient().getClient();
435
				snapdealitem = catalogServiceClient.getSnapdealItem(Long.parseLong(inventory.getSellerSku()));
563
				snapdealitem = catalogServiceClient.getSnapdealItem(sku);
436
			}
564
			}
437
			if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){
565
			if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){
438
				inventoryItem = allItemsInventoryMap.get(Long.parseLong(inventory.getSellerSku()));
566
				inventoryItem = allItemsInventoryMap.get(Long.parseLong(inventory.getSellerSku()));
439
				if(inventoryItem==null){
567
				if(inventoryItem==null){
440
					continue;
568
					continue;
Line 442... Line 570...
442
				availability = inventoryItem.getAvailability(); 
570
				availability = inventoryItem.getAvailability(); 
443
				reserve = inventoryItem.getReserve();
571
				reserve = inventoryItem.getReserve();
444
				defaultinventory = inventoryItem.getDefaultInventory();
572
				defaultinventory = inventoryItem.getDefaultInventory();
445
				holdinventory = inventoryItem.getHoldInventory();
573
				holdinventory = inventoryItem.getHoldInventory();
446
				actualavailability = availability - reserve;
574
				actualavailability = availability - reserve;
-
 
575
				if(itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()))!=null){
447
				heldorders = itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()));
576
					heldorders = itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()));
-
 
577
				}
448
				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);
578
				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);
449
				row =   sheet.getRow((short) iterator);
579
				row =   sheet.getRow((short) iterator);
450
				row.getCell((short) 0).setCellValue(inventory.getSupc());
-
 
451
				row.getCell((short) 1).setCellValue(inventory.getSellerSku());
-
 
452
				row.getCell((short) 2).setCellValue(inventory.getProductName());
-
 
453
				row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());
-
 
454
				long inventoryForRiskyItem = actualavailability - holdinventory;
580
				long inventoryForRiskyItem = actualavailability - holdinventory;
455
				if(inventoryItem.getRisky()){
581
				if(inventoryItem.getRisky()){
456
					if(inventoryForRiskyItem > 0){
582
					if(inventoryForRiskyItem > 0){
457
						if((Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource()) > 0){
583
						if((Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource()) > 0){
458
							row.getCell((short) 4).setCellValue(Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource());
-
 
459
							sent_inventory = Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource();
584
							sent_inventory = Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource();
460
						}
585
						}
461
						else{
586
						else{
462
							row.getCell((short) 4).setCellValue(0);
-
 
463
							sent_inventory = 0;
587
							sent_inventory = 0;
464
						}
588
						}
465
					}
589
					}
466
					else{
590
					else{
467
						row.getCell((short) 4).setCellValue(0);
-
 
468
						sent_inventory = 0;
591
						sent_inventory = 0;
469
					}
592
					}
470
				}
593
				}
471
				else{
594
				else{
472
					if(actualavailability > defaultinventory){
595
					if(actualavailability > defaultinventory){
473
						if((Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource()) > heldorders){
596
						if((Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource()) > heldorders){
474
							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));
597
							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));
475
							row.getCell((short) 4).setCellValue(Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders);
-
 
476
							sent_inventory = Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders;
598
							sent_inventory = Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders;
477
						}
599
						}
478
						else{
600
						else{
479
							row.getCell((short) 4).setCellValue(0);
-
 
480
							sent_inventory = 0;
601
							sent_inventory = 0;
481
						}
602
						}
482
					}
603
					}
483
					else{
604
					else{
484
						if(defaultinventory > heldorders){
605
						if(defaultinventory > heldorders){
485
							row.getCell((short) 4).setCellValue(defaultinventory - heldorders);
-
 
486
							sent_inventory = defaultinventory - heldorders;
606
							sent_inventory = defaultinventory - heldorders;
487
						}
607
						}
488
						else{
608
						else{
489
							row.getCell((short) 4).setCellValue(0);
-
 
490
							sent_inventory = 0;
609
							sent_inventory = 0;
491
						}
610
						}
492
					}
611
					}
493
				}
612
				}
-
 
613
				if(inventory.getAvailableInventory()!= sent_inventory){
-
 
614
					row.getCell((short) 0).setCellValue(inventory.getSupc());
-
 
615
					row.getCell((short) 1).setCellValue(inventory.getSellerSku());
-
 
616
					row.getCell((short) 2).setCellValue(inventory.getProductName());
-
 
617
					row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());
-
 
618
					row.getCell((short) 4).setCellValue(sent_inventory);
-
 
619
					if(inventory.getAvailableInventory()!=0 && sent_inventory==0){
-
 
620
						outOfStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory);
-
 
621
					}
-
 
622
					if(inventory.getAvailableInventory()==0 && sent_inventory!=0){
-
 
623
						backInStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory);
-
 
624
					}
494
				if(inventory.isLive()){
625
					if(inventory.isLive()){
495
					row.getCell((short) 5).setCellValue("Yes");
626
						row.getCell((short) 5).setCellValue("Yes");
496
				}
627
					}
497
				else{
628
					else{
498
					row.getCell((short) 5).setCellValue("No");
629
						row.getCell((short) 5).setCellValue("No");
499
				}
630
					}
500
				SnapdealInventoryItem snapdealinventoryitem = new SnapdealInventoryItem();
631
					SnapdealInventoryItem snapdealinventoryitem = new SnapdealInventoryItem();
501
				snapdealinventoryitem.setAvailability(sent_inventory);
632
					snapdealinventoryitem.setAvailability(sent_inventory);
502
				snapdealinventoryitem.setItem_id(Long.parseLong(inventory.getSellerSku()));
633
					snapdealinventoryitem.setItem_id(Long.parseLong(inventory.getSellerSku()));
-
 
634
					System.out.println("Updating inventory snapshot " + inventory.getSellerSku());
503
				snapdealinventoryitem.setLastUpdatedOnSnapdeal(time);
635
					snapdealinventoryitem.setLastUpdatedOnSnapdeal(time);
504
				try{
636
					try{
505
					inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
637
						inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
506
				}
638
					}
507
				catch(TTransportException e){
639
					catch(TTransportException e){
508
					inventoryClient = new InventoryClient().getClient();
640
						inventoryClient = new InventoryClient().getClient();
509
					inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
641
						inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
-
 
642
					}
-
 
643
					iterator++;
510
				}
644
				}
511
				iterator++;
-
 
512
			}
645
			}
513
			else{
646
			else{
514
				continue;
647
				continue;
515
			}
648
			}
516
		}
649
		}
517
		FileOutputStream fileOut = null;
650
		FileOutputStream fileOut = null;
518
		fis.close();
651
		fis.close();
519
		try {
652
		try {
-
 
653
			System.out.println("Before writing file ");
520
			fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
654
			fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
521
		} catch (FileNotFoundException e) {
655
		} catch (FileNotFoundException e) {
522
			// TODO Auto-generated catch block
656
			// TODO Auto-generated catch block
523
			e.printStackTrace();
657
			e.printStackTrace();
524
		}
658
		}
525
		try {
659
		try {
-
 
660
			
526
			hwb.write(fileOut);
661
			hwb.write(fileOut);
527
		} catch (IOException e) {
662
		} catch (IOException e) {
528
			// TODO Auto-generated catch block
663
			// TODO Auto-generated catch block
529
			e.printStackTrace();
664
			e.printStackTrace();
530
		}
665
		}