Subversion Repositories SmartDukaan

Rev

Rev 9471 | Rev 9495 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9404 vikram.rag 1
package in.shop2020;
2
 
9456 vikram.rag 3
import in.shop2020.model.v1.catalog.CatalogService;
9404 vikram.rag 4
import in.shop2020.model.v1.catalog.Item;
5
import in.shop2020.model.v1.catalog.SnapdealItem;
6
import in.shop2020.model.v1.inventory.InventoryService.Client;
7
import in.shop2020.model.v1.inventory.InventoryType;
8
import in.shop2020.model.v1.inventory.ItemInventory;
9
import in.shop2020.model.v1.inventory.SnapdealInventoryItem;
10
import in.shop2020.model.v1.inventory.Warehouse;
11
import in.shop2020.model.v1.inventory.WarehouseType;
12
import in.shop2020.thrift.clients.CatalogClient;
13
import in.shop2020.thrift.clients.InventoryClient;
14
import in.shop2020.thrift.clients.TransactionClient;
9459 vikram.rag 15
import in.shop2020.utils.GmailUtils;
9404 vikram.rag 16
import inventory.Inventory;
9456 vikram.rag 17
import inventory.InventoryHistory;
18
import inventory.InventoryHistoryItems;
9404 vikram.rag 19
import inventory.InventoryItems;
20
import inventory.SnapdealItemForInventory;
21
 
22
import java.io.BufferedReader;
9459 vikram.rag 23
import java.io.File;
9404 vikram.rag 24
import java.io.FileInputStream;
25
import java.io.FileNotFoundException;
26
import java.io.FileOutputStream;
27
import java.io.IOException;
28
import java.io.InputStreamReader;
29
import java.io.UnsupportedEncodingException;
30
import java.util.ArrayList;
9459 vikram.rag 31
import java.util.Calendar;
32
import java.util.GregorianCalendar;
9404 vikram.rag 33
import java.util.HashMap;
34
import java.util.List;
35
import java.util.Map;
36
 
9459 vikram.rag 37
import javax.mail.MessagingException;
38
 
9404 vikram.rag 39
import org.apache.http.HttpResponse;
40
import org.apache.http.NameValuePair;
41
import org.apache.http.client.ClientProtocolException;
42
import org.apache.http.client.HttpClient;
43
import org.apache.http.client.entity.UrlEncodedFormEntity;
44
import org.apache.http.client.methods.HttpGet;
45
import org.apache.http.client.methods.HttpPost;
46
import org.apache.http.impl.client.DefaultHttpClient;
47
import org.apache.http.message.BasicNameValuePair;
48
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
49
import org.apache.poi.ss.usermodel.Row;
50
import org.apache.poi.ss.usermodel.Sheet;
51
import org.apache.poi.ss.usermodel.Workbook;
52
import org.apache.thrift.TException;
53
import org.apache.thrift.transport.TTransportException;
9456 vikram.rag 54
 
9404 vikram.rag 55
import com.google.gson.Gson;
56
 
57
public class CreateSnapDealInventoryFeed {
9456 vikram.rag 58
	private static long time = System.currentTimeMillis();
9415 vikram.rag 59
	private static String SNAPDEAL_INVENTORY_SHEET;
9404 vikram.rag 60
	private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();
61
	private static ArrayList<Inventory> inventoryItemList;
62
	static Map<Long,Long> itemIdpendingOrdersMap = new HashMap<Long,Long>();
9456 vikram.rag 63
	static Map<String,Long> skuitemidMap = new HashMap<String,Long>();
64
	private static Map<String,InventoryHistory> inventoryhistoryItemMap;
65
	private static DefaultHttpClient client = new DefaultHttpClient();
9404 vikram.rag 66
	private static void calculateinventory(){
67
		CatalogClient catalogServiceClient = null;
68
		Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();
69
		try {
70
			catalogServiceClient = new CatalogClient();
71
		} catch (TTransportException e) {
72
			// TODO Auto-generated catch block
73
			e.printStackTrace();
74
		}
75
		in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
76
		try {
77
			List<Item> aliveItems = catalogClient.getAllAliveItems();
78
			Map<Long,Item> aliveItemsMap = new HashMap<Long,Item>(); 
79
			for(in.shop2020.model.v1.catalog.Item thriftItem:aliveItems){
80
				aliveItemsMap.put(thriftItem.getId(), thriftItem);
81
 
82
			}
83
			InventoryClient inventoryServiceClient = null;
84
			try {
85
				inventoryServiceClient = new InventoryClient();
86
			} catch (TTransportException e) {
87
				e.printStackTrace();
88
			}
89
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
90
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
9415 vikram.rag 91
			SNAPDEAL_INVENTORY_SHEET = "/home/snapdeal/snapdeal-inventory-"+time+".xls";
9404 vikram.rag 92
			availability = inventoryClient.getInventorySnapshot(0);
9456 vikram.rag 93
			List<Warehouse> allwarehouses = inventoryClient.getWarehouses(null,null,0,0,0);
94
			Map<Long,Warehouse> allWarehousesMap = new HashMap<Long,Warehouse>();
95
			for(Warehouse warehouse:allwarehouses){
96
				allWarehousesMap.put(warehouse.getId(),warehouse);
97
			}
9404 vikram.rag 98
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
99
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
100
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
101
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
102
			for(Warehouse warehouse:warehouses){
103
				thirdpartywarehouseids.add(warehouse.getId());
104
			}
105
			for (Warehouse warehouse:ours_warehouses){
106
				oursGoodWarehouse.add(warehouse.getId());
107
			}
108
			long available=0;
109
			long reserve=0;
110
			long total_held=0;
111
			long heldForSource=0;
112
			double nlc=0;
113
			double maxnlc=0;
114
			Item thriftItem;
9456 vikram.rag 115
			long sku = 0;
9404 vikram.rag 116
			for(Inventory inventoryItem:inventoryItemList){
9456 vikram.rag 117
				try{
118
					sku = Long.parseLong(inventoryItem.getSellerSku());
9404 vikram.rag 119
				}
9456 vikram.rag 120
				catch(NumberFormatException nfe){
121
					System.out.println(inventoryItem.getSellerSku());
122
					if(skuitemidMap.get(inventoryItem.getSellerSku())!=null){
123
						sku = skuitemidMap.get(inventoryItem.getSellerSku());
124
					}
125
					else{
126
						continue;
127
					}
128
				}
129
				if(aliveItemsMap.get(sku) != null){
130
					thriftItem = aliveItemsMap.get(sku);	
131
				}
9404 vikram.rag 132
				else{
133
					continue;
134
				}
135
				available=0;
136
				reserve=0;
137
				total_held=0;
138
				heldForSource=0;
139
				nlc=0;
140
				List<Warehouse> vendor_warehouses=null;
141
				SnapdealItemForInventory item;
142
				if(availability.get(thriftItem.getId())!=null){ 
143
					ItemInventory iteminventory = availability.get(thriftItem.getId());
144
					Map<Long,Long> itemavailability = new HashMap<Long,Long>();
145
					itemavailability = iteminventory.getAvailability();
146
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
147
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());						
148
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
149
						vendor_warehouses.addAll(ours_warehouses);
150
						for (Warehouse warehouse:vendor_warehouses){
9456 vikram.rag 151
							if(warehouse.getBillingWarehouseId()!=7){
152
								continue;
153
							}
9404 vikram.rag 154
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
155
							ignoredItem.setItemId(thriftItem.getId());
156
							ignoredItem.setWarehouseId(warehouse.getId());
157
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem)){
158
								try{
159
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
160
								}
161
								catch(TTransportException e){
162
									inventoryClient = inventoryServiceClient.getClient(); 
163
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
164
								}
165
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
9413 vikram.rag 166
								System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
9404 vikram.rag 167
								if(nlc !=0 && (maxnlc >= nlc)){
168
									total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
169
									heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);
170
									available = available + itemavailability.get(warehouse.getId()) - total_held;
9413 vikram.rag 171
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
9404 vikram.rag 172
								}
9413 vikram.rag 173
								else if(maxnlc==0){
174
									total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
175
									heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);
176
									available = available + itemavailability.get(warehouse.getId()) - total_held;
177
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
9404 vikram.rag 178
								}
179
							}
180
						}
181
					}
182
					else{
183
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
9456 vikram.rag 184
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
185
								continue;
186
							}
9404 vikram.rag 187
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
188
							ignoredItem.setItemId(thriftItem.getId());
189
							ignoredItem.setWarehouseId(entry.getKey());
190
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
191
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
192
								try{
193
									maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
194
								}
195
								catch(TTransportException e){
196
									catalogClient = catalogServiceClient.getClient();  
197
									maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
198
								}
199
								if(nlc !=0 && (maxnlc >= nlc)){
200
									total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
201
									heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
202
									available =  available + entry.getValue() - total_held;
203
								}
9413 vikram.rag 204
								else if(maxnlc==0){
205
									total_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
206
									heldForSource = heldForSource + total_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
207
									available = available + itemavailability.get(entry.getKey()) - total_held;
208
								}
209
 
9404 vikram.rag 210
							}
211
						}
212
					}
213
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
214
					itemreserve = iteminventory.getReserved();
215
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
216
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
217
						for (Warehouse warehouse:vendor_warehouses){
9456 vikram.rag 218
							if(warehouse.getBillingWarehouseId()!=7){
219
								continue;
220
							}
9404 vikram.rag 221
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
222
							ignoredItem.setItemId(thriftItem.getId());
223
							ignoredItem.setWarehouseId(warehouse.getId());
224
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
225
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
226
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
227
								if(nlc !=0 && (maxnlc >= nlc)){
228
									reserve = reserve + itemreserve.get(warehouse.getId());
9413 vikram.rag 229
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
9404 vikram.rag 230
								}
9413 vikram.rag 231
								else if(maxnlc==0){
232
									reserve = reserve + itemreserve.get(warehouse.getId());
233
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
234
								}
235
 
9404 vikram.rag 236
							}
237
						}
238
					}else{
239
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
9456 vikram.rag 240
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
241
								continue;
242
							}
9404 vikram.rag 243
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
244
							ignoredItem.setItemId(thriftItem.getId());
245
							ignoredItem.setWarehouseId(entry.getKey());
246
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
247
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
248
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
249
								if(nlc !=0 && (maxnlc >= nlc)){
250
									reserve =  reserve + entry.getValue();
9413 vikram.rag 251
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
9404 vikram.rag 252
								}
9413 vikram.rag 253
								else if(maxnlc==0){
254
									reserve =  reserve + entry.getValue();
255
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
256
								}
257
 
9404 vikram.rag 258
							}
9413 vikram.rag 259
 
9404 vikram.rag 260
							else{
261
								//System.out.println("skipping inventory for warehouse id " + entry.getKey());
262
							}
263
						}
264
					}
265
					item= new SnapdealItemForInventory(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),thriftItem.isRisky(),thriftItem.getItemStatus());
9413 vikram.rag 266
					System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
9404 vikram.rag 267
				}
268
				else{
269
					item = new SnapdealItemForInventory(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),thriftItem.isRisky(),thriftItem.getItemStatus());
9413 vikram.rag 270
					System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
9404 vikram.rag 271
				}
272
 
273
				//System.out.println(" Item details are " + thriftItem.getId() +" " + available + " " + reserve + " " + thriftItem.getHoldInventory() + " "+ thriftItem.getDefaultInventory() + " " + thriftItem.isRisky());
274
				//System.out.println("+++++++++++++++++++++++");
275
				allItemsInventoryMap.put(thriftItem.getId(),item);
276
 
277
			}
278
 
279
		} catch (TException e) {
280
			// TODO Auto-generated catch block
281
			e.printStackTrace();
282
		}
283
 
284
	}
9456 vikram.rag 285
	private static void fetchinventoryhistoryfromsnapdeal() throws UnsupportedEncodingException, TException{
9404 vikram.rag 286
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
287
		HttpGet get; 
288
		BufferedReader rd= null;
289
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
290
		nameValuePairs.add(new BasicNameValuePair("j_username",
291
		"khushal.bhatia@saholic.com"));
292
		nameValuePairs.add(new BasicNameValuePair("j_password",
293
		"sonline"));
294
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
295
		HttpResponse response = null;
296
		try {
297
			response = client.execute(post);
298
		} catch (ClientProtocolException e) {
299
			// TODO Auto-generated catch block
300
			e.printStackTrace();
301
		} catch (IOException e) {
302
			// TODO Auto-generated catch block
303
			e.printStackTrace();
304
		}
305
		try {
306
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
307
		} catch (IllegalStateException e1) {
308
			// TODO Auto-generated catch block
309
			e1.printStackTrace();
310
		} catch (IOException e1) {
311
			// TODO Auto-generated catch block
312
			e1.printStackTrace();
313
		}
314
		String line = "";
315
		try {
316
			while ((line = rd.readLine()) != null) {
317
				System.out.println(line);
318
			}
319
		} catch (IOException e) {
320
			// TODO Auto-generated catch block
321
			e.printStackTrace();
322
		}
323
		int i = 1;
324
		Gson gson = new Gson();
9456 vikram.rag 325
		inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();
9404 vikram.rag 326
		Client inventoryClient = null;
9456 vikram.rag 327
		boolean exitfetchinghistory = true;
328
		long lastUpdatedInventoryTime = 0;
9404 vikram.rag 329
		try {
330
			inventoryClient = new InventoryClient().getClient();
9456 vikram.rag 331
			lastUpdatedInventoryTime = inventoryClient.getLastUpdatedTimeForSnapdealInventory();
9404 vikram.rag 332
		} catch (TTransportException e) {
333
			// TODO Auto-generated catch block
334
			e.printStackTrace();
335
		}
9456 vikram.rag 336
 
337
		while(exitfetchinghistory){
338
			System.out.println("Fetching inventory history page " +i);
339
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=history&_search=false&nd="+time+"&rows=30&page="+i+"&sidx=&sord=dsc");
340
			try {
341
				response = client.execute(get);
342
			} catch (ClientProtocolException e) {
343
				// TODO Auto-generated catch block
344
				e.printStackTrace();
345
			} catch (IOException e) {
346
				// TODO Auto-generated catch block
347
				e.printStackTrace();
348
			}
349
			try {
350
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
351
			} catch (IllegalStateException e) {
352
				// TODO Auto-generated catch block
353
				e.printStackTrace();
354
			} catch (IOException e) {
355
				// TODO Auto-generated catch block
356
				e.printStackTrace();
357
			}
358
			InventoryHistoryItems inventoryhistoryitems = (InventoryHistoryItems) gson.fromJson(rd, InventoryHistoryItems.class);
359
			if(inventoryhistoryitems.getRows().size()!=0){
360
				//System.out.println("Parsing page " + i);
361
				for(InventoryHistory inventoryhistory : inventoryhistoryitems.getRows()){
362
					if(inventoryhistory.getUpdateTime() > lastUpdatedInventoryTime){
363
						if(inventoryhistoryItemMap.containsKey(inventoryhistory.getSellerSku())){
364
							if(inventoryhistoryItemMap.get(inventoryhistory.getSellerSku()).getUpdateTime() < inventoryhistory.getUpdateTime()){  
365
								inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
366
							}
367
						}
368
						else{
369
							inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
370
						}
371
					}
372
					else{
373
						exitfetchinghistory = false;
374
					}
375
				}
376
			}
377
			else{
378
				exitfetchinghistory = false;
379
			}
380
			i++;
381
		}
382
	}
383
 
384
	private static void fetchinventoryfromsnapdeal() throws UnsupportedEncodingException{
385
		/*client = new DefaultHttpClient();
386
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
387
		BufferedReader rd= null;
388
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
389
		nameValuePairs.add(new BasicNameValuePair("j_username",
390
		"khushal.bhatia@saholic.com"));
391
		nameValuePairs.add(new BasicNameValuePair("j_password",
392
		"sonline"));
393
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
394
		HttpResponse response = null;
9404 vikram.rag 395
		try {
9456 vikram.rag 396
			response = client.execute(post);
397
		} catch (ClientProtocolException e) {
9404 vikram.rag 398
			// TODO Auto-generated catch block
399
			e.printStackTrace();
9456 vikram.rag 400
		} catch (IOException e) {
401
			// TODO Auto-generated catch block
402
			e.printStackTrace();
9404 vikram.rag 403
		}
9456 vikram.rag 404
		try {
405
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
406
		} catch (IllegalStateException e1) {
407
			// TODO Auto-generated catch block
408
			e1.printStackTrace();
409
		} catch (IOException e1) {
410
			// TODO Auto-generated catch block
411
			e1.printStackTrace();
412
		}
413
		String line = "";
414
		try {
415
			while ((line = rd.readLine()) != null) {
416
				System.out.println(line);
417
			}
418
		} catch (IOException e) {
419
			// TODO Auto-generated catch block
420
			e.printStackTrace();
421
		}*/
422
		int i = 1;
423
		int items=0;
424
		Gson gson = new Gson();
425
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
9404 vikram.rag 426
		inventoryItemList = new ArrayList<Inventory>();
9456 vikram.rag 427
		HttpGet get;
428
		HttpResponse response = null;
429
		BufferedReader rd= null;
9404 vikram.rag 430
		while(true){
9456 vikram.rag 431
			System.out.println("Fetching current inventory page " +i);
9404 vikram.rag 432
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");
433
			try {
434
				response = client.execute(get);
435
			} catch (ClientProtocolException e) {
436
				// TODO Auto-generated catch block
437
				e.printStackTrace();
438
			} catch (IOException e) {
439
				// TODO Auto-generated catch block
440
				e.printStackTrace();
441
			}
442
			try {
443
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
444
			} catch (IllegalStateException e) {
445
				// TODO Auto-generated catch block
446
				e.printStackTrace();
447
			} catch (IOException e) {
448
				// TODO Auto-generated catch block
449
				e.printStackTrace();
450
			}
451
			InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
452
			if(inventoryitems.getRows().size()!=0){
453
				for(Inventory inventory : inventoryitems.getRows()){
9456 vikram.rag 454
					inventoryItemList.add(inventory);
455
					items++;
456
				}
457
			}
458
			else{
459
				System.out.println("Fetched  " + items);
460
				break;
461
			}
462
			i++;
463
		}
464
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
465
		SnapdealItem snapdealitem = null;
466
		long sku = 0;
467
		long created_orders;
468
		long pending_orders;
469
		try {
9467 vikram.rag 470
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
9456 vikram.rag 471
		} catch (TTransportException e1) {
472
			// TODO Auto-generated catch block
473
			e1.printStackTrace();
474
		}
475
		try {
476
			catalogServiceClient = new CatalogClient().getClient();
477
		} catch (TTransportException e1) {
478
			// TODO Auto-generated catch block
479
			e1.printStackTrace();
480
		}
481
		List<String> notMappedItems = new ArrayList<String>();
482
		for(Inventory inventory:inventoryItemList){
483
			created_orders = 0;
484
			pending_orders = 0;
485
			if(inventoryhistoryItemMap.get(inventory.getSellerSku())!=null && inventory.getAvailableInventory()!=Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue())){
9459 vikram.rag 486
				try {
487
					try{
488
						sku = Long.parseLong(inventory.getSellerSku());
489
					}
490
					catch(NumberFormatException nfe){
491
						try {
492
							snapdealitem = catalogServiceClient.getSnapdealItembySkuAtSnapdeal(inventory.getSellerSku());
493
							if(snapdealitem.getItem_id()!=0){
494
								sku = snapdealitem.getItem_id();
495
								skuitemidMap.put(inventory.getSellerSku(),sku);
9404 vikram.rag 496
							}
9459 vikram.rag 497
							else{
498
								notMappedItems.add("inventory.getSellerSku() "+inventory.getProductName());
499
								System.out.println();
500
							}
501
						} catch (TTransportException e) {
502
							// TODO Auto-generated catch block
503
							e.printStackTrace();
9404 vikram.rag 504
						}
505
					}
9459 vikram.rag 506
					if(sku!=0){
507
						System.out.println("Fetching created orders for " + sku);
9468 vikram.rag 508
						try{
509
							created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventoryhistoryItemMap.get(inventory.getSellerSku()).getUpdateTime(), 7, sku);
510
						}
511
						catch(TTransportException e){
512
							transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
513
							created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventoryhistoryItemMap.get(inventory.getSellerSku()).getUpdateTime(), 7, sku);
514
						}
9459 vikram.rag 515
					}
516
					else{
517
						continue;
518
					}
519
				} catch (NumberFormatException e) {
520
					// TODO Auto-generated catch block
521
					e.printStackTrace();
522
				} catch (TException e) {
523
					// TODO Auto-generated catch block
524
					e.printStackTrace();
525
				}
526
				pending_orders = (inventory.getAvailableInventory() - Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue()) - created_orders);
9404 vikram.rag 527
			}
9456 vikram.rag 528
			itemIdpendingOrdersMap.put(sku, pending_orders);
9404 vikram.rag 529
		}
530
	}
531
 
532
	@SuppressWarnings("deprecation")
533
	public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException {
9456 vikram.rag 534
		fetchinventoryhistoryfromsnapdeal();
9404 vikram.rag 535
		fetchinventoryfromsnapdeal();
536
		calculateinventory();
537
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
538
		SnapdealItem snapdealitem = null;
539
		try {
540
			catalogServiceClient = new CatalogClient().getClient();
541
		} catch (TTransportException e) {
542
			// TODO Auto-generated catch block
543
			e.printStackTrace();
544
		}
545
		Client inventoryClient = new InventoryClient().getClient();
9420 vikram.rag 546
		FileInputStream fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
9413 vikram.rag 547
		Workbook hwb = new HSSFWorkbook(fis);
548
		Sheet sheet = hwb.getSheetAt(0);
549
		Row row;
9404 vikram.rag 550
		int iterator=1;
9456 vikram.rag 551
		long availability,reserve,defaultinventory,holdinventory,actualavailability,heldorders=0,sent_inventory;
9404 vikram.rag 552
		SnapdealItemForInventory  inventoryItem;
9456 vikram.rag 553
		StringBuffer outOfStockItems =new StringBuffer();
554
		StringBuffer backInStockItems =new StringBuffer();
555
		long sku = 0;
9404 vikram.rag 556
		for(Inventory inventory:inventoryItemList){
9456 vikram.rag 557
			//System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
9404 vikram.rag 558
			try{
9456 vikram.rag 559
				try{
560
					sku = Long.parseLong(inventory.getSellerSku());
561
				}
562
				catch(NumberFormatException nfe){
563
					if(skuitemidMap.containsKey(inventory.getSellerSku())){
564
						sku = skuitemidMap.get(inventory.getSellerSku()); 
565
					}
566
					else{
567
						continue;
568
					}
569
				}
570
				snapdealitem = catalogServiceClient.getSnapdealItem(sku);
9404 vikram.rag 571
			}
572
			catch(TTransportException e){
573
				catalogServiceClient = new CatalogClient().getClient();
9456 vikram.rag 574
				snapdealitem = catalogServiceClient.getSnapdealItem(sku);
9404 vikram.rag 575
			}
576
			if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){
577
				inventoryItem = allItemsInventoryMap.get(Long.parseLong(inventory.getSellerSku()));
578
				if(inventoryItem==null){
579
					continue;
580
				}
581
				availability = inventoryItem.getAvailability(); 
582
				reserve = inventoryItem.getReserve();
583
				defaultinventory = inventoryItem.getDefaultInventory();
584
				holdinventory = inventoryItem.getHoldInventory();
585
				actualavailability = availability - reserve;
9456 vikram.rag 586
				if(itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()))!=null){
587
					heldorders = itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()));
9458 vikram.rag 588
					if(heldorders < 0){
589
						heldorders = 0;
590
					}
9456 vikram.rag 591
				}
9413 vikram.rag 592
				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);
9404 vikram.rag 593
				row =   sheet.getRow((short) iterator);
594
				long inventoryForRiskyItem = actualavailability - holdinventory;
595
				if(inventoryItem.getRisky()){
596
					if(inventoryForRiskyItem > 0){
9413 vikram.rag 597
						if((Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource()) > 0){
9415 vikram.rag 598
							sent_inventory = Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource();
9404 vikram.rag 599
						}
600
						else{
9415 vikram.rag 601
							sent_inventory = 0;
9404 vikram.rag 602
						}
603
					}
604
					else{
9415 vikram.rag 605
						sent_inventory = 0;
9404 vikram.rag 606
					}
607
				}
608
				else{
609
					if(actualavailability > defaultinventory){
9413 vikram.rag 610
						if((Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource()) > heldorders){
611
							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));
9415 vikram.rag 612
							sent_inventory = Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders;
9404 vikram.rag 613
						}
614
						else{
9415 vikram.rag 615
							sent_inventory = 0;
9404 vikram.rag 616
						}
617
					}
618
					else{
619
						if(defaultinventory > heldorders){
9415 vikram.rag 620
							sent_inventory = defaultinventory - heldorders;
9404 vikram.rag 621
						}
622
						else{
9415 vikram.rag 623
							sent_inventory = 0;
9404 vikram.rag 624
						}
625
					}
626
				}
9456 vikram.rag 627
				if(inventory.getAvailableInventory()!= sent_inventory){
628
					row.getCell((short) 0).setCellValue(inventory.getSupc());
629
					row.getCell((short) 1).setCellValue(inventory.getSellerSku());
630
					row.getCell((short) 2).setCellValue(inventory.getProductName());
631
					row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());
632
					row.getCell((short) 4).setCellValue(sent_inventory);
633
					if(inventory.getAvailableInventory()!=0 && sent_inventory==0){
9459 vikram.rag 634
						outOfStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory+"\n");
9456 vikram.rag 635
					}
636
					if(inventory.getAvailableInventory()==0 && sent_inventory!=0){
9459 vikram.rag 637
						backInStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory+"\n");
9456 vikram.rag 638
					}
639
					if(inventory.isLive()){
640
						row.getCell((short) 5).setCellValue("Yes");
641
					}
642
					else{
643
						row.getCell((short) 5).setCellValue("No");
644
					}
645
					SnapdealInventoryItem snapdealinventoryitem = new SnapdealInventoryItem();
646
					snapdealinventoryitem.setAvailability(sent_inventory);
647
					snapdealinventoryitem.setItem_id(Long.parseLong(inventory.getSellerSku()));
648
					System.out.println("Updating inventory snapshot " + inventory.getSellerSku());
649
					snapdealinventoryitem.setLastUpdatedOnSnapdeal(time);
650
					try{
651
						inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
652
					}
653
					catch(TTransportException e){
654
						inventoryClient = new InventoryClient().getClient();
655
						inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
656
					}
657
					iterator++;
9404 vikram.rag 658
				}
659
			}
660
			else{
661
				continue;
662
			}
663
		}
664
		FileOutputStream fileOut = null;
665
		fis.close();
666
		try {
9456 vikram.rag 667
			System.out.println("Before writing file ");
9404 vikram.rag 668
			fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
669
		} catch (FileNotFoundException e) {
670
			// TODO Auto-generated catch block
671
			e.printStackTrace();
672
		}
673
		try {
9459 vikram.rag 674
 
9404 vikram.rag 675
			hwb.write(fileOut);
676
		} catch (IOException e) {
677
			// TODO Auto-generated catch block
678
			e.printStackTrace();
679
		}
9413 vikram.rag 680
		/*		HttpClient client = new DefaultHttpClient();
9404 vikram.rag 681
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
682
		BufferedReader rd= null;
9405 vikram.rag 683
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
9404 vikram.rag 684
		nameValuePairs.add(new BasicNameValuePair("j_username",
685
		"khushal.bhatia@saholic.com"));
686
		nameValuePairs.add(new BasicNameValuePair("j_password",
687
		"sonline"));
9405 vikram.rag 688
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
9404 vikram.rag 689
		HttpResponse response = null;
690
		String line;
9405 vikram.rag 691
		try {
9404 vikram.rag 692
			response = client.execute(post);
693
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
694
			while ((line = rd.readLine()) != null) {
695
				System.out.println(line);
696
			}
697
 
698
		} catch (ClientProtocolException e) {
699
			// TODO Auto-generated catch block
700
			e.printStackTrace();
701
		} catch (IOException e) {
702
			// TODO Auto-generated catch block
703
			e.printStackTrace();
704
		}
9405 vikram.rag 705
		post = new HttpPost("http://seller.snapdeal.com/inventory/upload");
9404 vikram.rag 706
		File file = new File("/home/vikram/snapdeal-inventory-1389608325312.xls");
707
		MultipartEntity mpEntity = new MultipartEntity();
708
	    ContentBody cbFile = new FileBody(file,"application/vnd.ms-excel");
709
	    mpEntity.addPart("file", cbFile);
710
	    post.setEntity(mpEntity);
711
		response = client.execute(post);
712
		try {
713
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
714
		} catch (IllegalStateException e1) {
715
			// TODO Auto-generated catch block
716
			e1.printStackTrace();
717
		} catch (IOException e1) {
718
			// TODO Auto-generated catch block
719
			e1.printStackTrace();
720
		}
721
		line = "";
722
		try {
723
			while ((line = rd.readLine()) != null) {
724
				System.out.println(line);
725
			}
726
		} catch (IOException e) {
727
			// TODO Auto-generated catch block
728
			e.printStackTrace();
729
		}
9413 vikram.rag 730
		 */
9459 vikram.rag 731
		java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
732
		Calendar cal=GregorianCalendar.getInstance();
733
		String emailFromAddress = "build@shop2020.in";
734
		String password = "cafe@nes";
735
		GmailUtils mailer = new GmailUtils();
9460 vikram.rag 736
		String sendTo[] = new String[]{"vikram.raghav@shop2020.in","kshitij.sood@shop2020.in"};
9459 vikram.rag 737
		/*String sendTo[] = new String[]{ "sandeep.sachdeva@shop2020.in", "vikram.raghav@shop2020.in", "rajneesh.arora@shop2020.in",
738
				"khushal.bhatia@shop2020.in","manoj.kumar@saholic.com","chaitnaya.vats@saholic.com",
739
				"yukti.jain@shop2020.in","manisha.sharma@shop2020.in","chandan.kumar@shop2020.in","ankush.dhingra@shop2020.in","amar.kumar@shop2020.in"};
740
		 */
741
		String emailSubjectTxt = "Products back in stock on Snapdeal "+sdf.format(cal.getTime());
742
		String text = backInStockItems.toString();
743
		if(text.length() > 0){
744
			try {
745
				mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
746
			} catch (MessagingException e) {
747
				e.printStackTrace();
748
			}
749
		}
750
		emailSubjectTxt = "Products out of stock on Snapdeal "+sdf.format(cal.getTime());
751
		text = outOfStockItems.toString();
752
		if(text.length() > 0){
753
			try {
754
				mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
755
			} catch (MessagingException e) {
756
				e.printStackTrace();
757
			}
758
		}
9460 vikram.rag 759
		List<File> files = new ArrayList<File>();
760
		files.add(new File(SNAPDEAL_INVENTORY_SHEET));
761
		try {
9471 vikram.rag 762
			mailer.sendSSLMessage(sendTo,"Inventory File","Please see attached inventory file", emailFromAddress, password, files);
9460 vikram.rag 763
		} catch (MessagingException e) {
764
			e.printStackTrace();
765
		}
766
 
9459 vikram.rag 767
 
9404 vikram.rag 768
	}
769
 
770
}