Subversion Repositories SmartDukaan

Rev

Rev 9467 | Rev 9471 | 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());
9456 vikram.rag 217
						vendor_warehouses.addAll(ours_warehouses);
9404 vikram.rag 218
						for (Warehouse warehouse:vendor_warehouses){
9456 vikram.rag 219
							if(warehouse.getBillingWarehouseId()!=7){
220
								continue;
221
							}
9404 vikram.rag 222
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
223
							ignoredItem.setItemId(thriftItem.getId());
224
							ignoredItem.setWarehouseId(warehouse.getId());
225
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
226
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
227
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
228
								if(nlc !=0 && (maxnlc >= nlc)){
229
									reserve = reserve + itemreserve.get(warehouse.getId());
9413 vikram.rag 230
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
9404 vikram.rag 231
								}
9413 vikram.rag 232
								else if(maxnlc==0){
233
									reserve = reserve + itemreserve.get(warehouse.getId());
234
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
235
								}
236
 
9404 vikram.rag 237
							}
238
						}
239
					}else{
240
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
9456 vikram.rag 241
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
242
								continue;
243
							}
9404 vikram.rag 244
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
245
							ignoredItem.setItemId(thriftItem.getId());
246
							ignoredItem.setWarehouseId(entry.getKey());
247
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
248
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
249
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
250
								if(nlc !=0 && (maxnlc >= nlc)){
251
									reserve =  reserve + entry.getValue();
9413 vikram.rag 252
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
9404 vikram.rag 253
								}
9413 vikram.rag 254
								else if(maxnlc==0){
255
									reserve =  reserve + entry.getValue();
256
									System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
257
								}
258
 
9404 vikram.rag 259
							}
9413 vikram.rag 260
 
9404 vikram.rag 261
							else{
262
								//System.out.println("skipping inventory for warehouse id " + entry.getKey());
263
							}
264
						}
265
					}
266
					item= new SnapdealItemForInventory(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),thriftItem.isRisky(),thriftItem.getItemStatus());
9413 vikram.rag 267
					System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
9404 vikram.rag 268
				}
269
				else{
270
					item = new SnapdealItemForInventory(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),thriftItem.isRisky(),thriftItem.getItemStatus());
9413 vikram.rag 271
					System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
9404 vikram.rag 272
				}
273
 
274
				//System.out.println(" Item details are " + thriftItem.getId() +" " + available + " " + reserve + " " + thriftItem.getHoldInventory() + " "+ thriftItem.getDefaultInventory() + " " + thriftItem.isRisky());
275
				//System.out.println("+++++++++++++++++++++++");
276
				allItemsInventoryMap.put(thriftItem.getId(),item);
277
 
278
			}
279
 
280
		} catch (TException e) {
281
			// TODO Auto-generated catch block
282
			e.printStackTrace();
283
		}
284
 
285
	}
9456 vikram.rag 286
	private static void fetchinventoryhistoryfromsnapdeal() throws UnsupportedEncodingException, TException{
9404 vikram.rag 287
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
288
		HttpGet get; 
289
		BufferedReader rd= null;
290
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
291
		nameValuePairs.add(new BasicNameValuePair("j_username",
292
		"khushal.bhatia@saholic.com"));
293
		nameValuePairs.add(new BasicNameValuePair("j_password",
294
		"sonline"));
295
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
296
		HttpResponse response = null;
297
		try {
298
			response = client.execute(post);
299
		} catch (ClientProtocolException e) {
300
			// TODO Auto-generated catch block
301
			e.printStackTrace();
302
		} catch (IOException e) {
303
			// TODO Auto-generated catch block
304
			e.printStackTrace();
305
		}
306
		try {
307
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
308
		} catch (IllegalStateException e1) {
309
			// TODO Auto-generated catch block
310
			e1.printStackTrace();
311
		} catch (IOException e1) {
312
			// TODO Auto-generated catch block
313
			e1.printStackTrace();
314
		}
315
		String line = "";
316
		try {
317
			while ((line = rd.readLine()) != null) {
318
				System.out.println(line);
319
			}
320
		} catch (IOException e) {
321
			// TODO Auto-generated catch block
322
			e.printStackTrace();
323
		}
324
		int i = 1;
325
		Gson gson = new Gson();
9456 vikram.rag 326
		inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();
9404 vikram.rag 327
		Client inventoryClient = null;
9456 vikram.rag 328
		boolean exitfetchinghistory = true;
329
		long lastUpdatedInventoryTime = 0;
9404 vikram.rag 330
		try {
331
			inventoryClient = new InventoryClient().getClient();
9456 vikram.rag 332
			lastUpdatedInventoryTime = inventoryClient.getLastUpdatedTimeForSnapdealInventory();
9404 vikram.rag 333
		} catch (TTransportException e) {
334
			// TODO Auto-generated catch block
335
			e.printStackTrace();
336
		}
9456 vikram.rag 337
 
338
		while(exitfetchinghistory){
339
			System.out.println("Fetching inventory history page " +i);
340
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=history&_search=false&nd="+time+"&rows=30&page="+i+"&sidx=&sord=dsc");
341
			try {
342
				response = client.execute(get);
343
			} catch (ClientProtocolException e) {
344
				// TODO Auto-generated catch block
345
				e.printStackTrace();
346
			} catch (IOException e) {
347
				// TODO Auto-generated catch block
348
				e.printStackTrace();
349
			}
350
			try {
351
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
352
			} catch (IllegalStateException e) {
353
				// TODO Auto-generated catch block
354
				e.printStackTrace();
355
			} catch (IOException e) {
356
				// TODO Auto-generated catch block
357
				e.printStackTrace();
358
			}
359
			InventoryHistoryItems inventoryhistoryitems = (InventoryHistoryItems) gson.fromJson(rd, InventoryHistoryItems.class);
360
			if(inventoryhistoryitems.getRows().size()!=0){
361
				//System.out.println("Parsing page " + i);
362
				for(InventoryHistory inventoryhistory : inventoryhistoryitems.getRows()){
363
					if(inventoryhistory.getUpdateTime() > lastUpdatedInventoryTime){
364
						if(inventoryhistoryItemMap.containsKey(inventoryhistory.getSellerSku())){
365
							if(inventoryhistoryItemMap.get(inventoryhistory.getSellerSku()).getUpdateTime() < inventoryhistory.getUpdateTime()){  
366
								inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
367
							}
368
						}
369
						else{
370
							inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
371
						}
372
					}
373
					else{
374
						exitfetchinghistory = false;
375
					}
376
				}
377
			}
378
			else{
379
				exitfetchinghistory = false;
380
			}
381
			i++;
382
		}
383
	}
384
 
385
	private static void fetchinventoryfromsnapdeal() throws UnsupportedEncodingException{
386
		/*client = new DefaultHttpClient();
387
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
388
		BufferedReader rd= null;
389
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
390
		nameValuePairs.add(new BasicNameValuePair("j_username",
391
		"khushal.bhatia@saholic.com"));
392
		nameValuePairs.add(new BasicNameValuePair("j_password",
393
		"sonline"));
394
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
395
		HttpResponse response = null;
9404 vikram.rag 396
		try {
9456 vikram.rag 397
			response = client.execute(post);
398
		} catch (ClientProtocolException e) {
9404 vikram.rag 399
			// TODO Auto-generated catch block
400
			e.printStackTrace();
9456 vikram.rag 401
		} catch (IOException e) {
402
			// TODO Auto-generated catch block
403
			e.printStackTrace();
9404 vikram.rag 404
		}
9456 vikram.rag 405
		try {
406
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
407
		} catch (IllegalStateException e1) {
408
			// TODO Auto-generated catch block
409
			e1.printStackTrace();
410
		} catch (IOException e1) {
411
			// TODO Auto-generated catch block
412
			e1.printStackTrace();
413
		}
414
		String line = "";
415
		try {
416
			while ((line = rd.readLine()) != null) {
417
				System.out.println(line);
418
			}
419
		} catch (IOException e) {
420
			// TODO Auto-generated catch block
421
			e.printStackTrace();
422
		}*/
423
		int i = 1;
424
		int items=0;
425
		Gson gson = new Gson();
426
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
9404 vikram.rag 427
		inventoryItemList = new ArrayList<Inventory>();
9456 vikram.rag 428
		HttpGet get;
429
		HttpResponse response = null;
430
		BufferedReader rd= null;
9404 vikram.rag 431
		while(true){
9456 vikram.rag 432
			System.out.println("Fetching current inventory page " +i);
9404 vikram.rag 433
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");
434
			try {
435
				response = client.execute(get);
436
			} catch (ClientProtocolException e) {
437
				// TODO Auto-generated catch block
438
				e.printStackTrace();
439
			} catch (IOException e) {
440
				// TODO Auto-generated catch block
441
				e.printStackTrace();
442
			}
443
			try {
444
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
445
			} catch (IllegalStateException e) {
446
				// TODO Auto-generated catch block
447
				e.printStackTrace();
448
			} catch (IOException e) {
449
				// TODO Auto-generated catch block
450
				e.printStackTrace();
451
			}
452
			InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
453
			if(inventoryitems.getRows().size()!=0){
454
				for(Inventory inventory : inventoryitems.getRows()){
9456 vikram.rag 455
					inventoryItemList.add(inventory);
456
					items++;
457
				}
458
			}
459
			else{
460
				System.out.println("Fetched  " + items);
461
				break;
462
			}
463
			i++;
464
		}
465
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
466
		SnapdealItem snapdealitem = null;
467
		long sku = 0;
468
		long created_orders;
469
		long pending_orders;
470
		try {
9467 vikram.rag 471
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
9456 vikram.rag 472
		} catch (TTransportException e1) {
473
			// TODO Auto-generated catch block
474
			e1.printStackTrace();
475
		}
476
		try {
477
			catalogServiceClient = new CatalogClient().getClient();
478
		} catch (TTransportException e1) {
479
			// TODO Auto-generated catch block
480
			e1.printStackTrace();
481
		}
482
		List<String> notMappedItems = new ArrayList<String>();
483
		for(Inventory inventory:inventoryItemList){
484
			created_orders = 0;
485
			pending_orders = 0;
486
			if(inventoryhistoryItemMap.get(inventory.getSellerSku())!=null && inventory.getAvailableInventory()!=Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue())){
9459 vikram.rag 487
				try {
488
					try{
489
						sku = Long.parseLong(inventory.getSellerSku());
490
					}
491
					catch(NumberFormatException nfe){
492
						try {
493
							snapdealitem = catalogServiceClient.getSnapdealItembySkuAtSnapdeal(inventory.getSellerSku());
494
							if(snapdealitem.getItem_id()!=0){
495
								sku = snapdealitem.getItem_id();
496
								skuitemidMap.put(inventory.getSellerSku(),sku);
9404 vikram.rag 497
							}
9459 vikram.rag 498
							else{
499
								notMappedItems.add("inventory.getSellerSku() "+inventory.getProductName());
500
								System.out.println();
501
							}
502
						} catch (TTransportException e) {
503
							// TODO Auto-generated catch block
504
							e.printStackTrace();
9404 vikram.rag 505
						}
506
					}
9459 vikram.rag 507
					if(sku!=0){
508
						System.out.println("Fetching created orders for " + sku);
9468 vikram.rag 509
						try{
510
							created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventoryhistoryItemMap.get(inventory.getSellerSku()).getUpdateTime(), 7, sku);
511
						}
512
						catch(TTransportException e){
513
							transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
514
							created_orders = transactionClient.getOrdersCreatedAfterTimestampForSource(inventoryhistoryItemMap.get(inventory.getSellerSku()).getUpdateTime(), 7, sku);
515
						}
9459 vikram.rag 516
					}
517
					else{
518
						continue;
519
					}
520
				} catch (NumberFormatException e) {
521
					// TODO Auto-generated catch block
522
					e.printStackTrace();
523
				} catch (TException e) {
524
					// TODO Auto-generated catch block
525
					e.printStackTrace();
526
				}
527
				pending_orders = (inventory.getAvailableInventory() - Long.parseLong(inventoryhistoryItemMap.get(inventory.getSellerSku()).getNewValue()) - created_orders);
9404 vikram.rag 528
			}
9456 vikram.rag 529
			itemIdpendingOrdersMap.put(sku, pending_orders);
9404 vikram.rag 530
		}
531
	}
532
 
533
	@SuppressWarnings("deprecation")
534
	public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException {
9456 vikram.rag 535
		fetchinventoryhistoryfromsnapdeal();
9404 vikram.rag 536
		fetchinventoryfromsnapdeal();
537
		calculateinventory();
538
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
539
		SnapdealItem snapdealitem = null;
540
		try {
541
			catalogServiceClient = new CatalogClient().getClient();
542
		} catch (TTransportException e) {
543
			// TODO Auto-generated catch block
544
			e.printStackTrace();
545
		}
546
		Client inventoryClient = new InventoryClient().getClient();
9420 vikram.rag 547
		FileInputStream fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
9413 vikram.rag 548
		Workbook hwb = new HSSFWorkbook(fis);
549
		Sheet sheet = hwb.getSheetAt(0);
550
		Row row;
9404 vikram.rag 551
		int iterator=1;
9456 vikram.rag 552
		long availability,reserve,defaultinventory,holdinventory,actualavailability,heldorders=0,sent_inventory;
9404 vikram.rag 553
		SnapdealItemForInventory  inventoryItem;
9456 vikram.rag 554
		StringBuffer outOfStockItems =new StringBuffer();
555
		StringBuffer backInStockItems =new StringBuffer();
556
		long sku = 0;
9404 vikram.rag 557
		for(Inventory inventory:inventoryItemList){
9456 vikram.rag 558
			//System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
9404 vikram.rag 559
			try{
9456 vikram.rag 560
				try{
561
					sku = Long.parseLong(inventory.getSellerSku());
562
				}
563
				catch(NumberFormatException nfe){
564
					if(skuitemidMap.containsKey(inventory.getSellerSku())){
565
						sku = skuitemidMap.get(inventory.getSellerSku()); 
566
					}
567
					else{
568
						continue;
569
					}
570
				}
571
				snapdealitem = catalogServiceClient.getSnapdealItem(sku);
9404 vikram.rag 572
			}
573
			catch(TTransportException e){
574
				catalogServiceClient = new CatalogClient().getClient();
9456 vikram.rag 575
				snapdealitem = catalogServiceClient.getSnapdealItem(sku);
9404 vikram.rag 576
			}
577
			if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){
578
				inventoryItem = allItemsInventoryMap.get(Long.parseLong(inventory.getSellerSku()));
579
				if(inventoryItem==null){
580
					continue;
581
				}
582
				availability = inventoryItem.getAvailability(); 
583
				reserve = inventoryItem.getReserve();
584
				defaultinventory = inventoryItem.getDefaultInventory();
585
				holdinventory = inventoryItem.getHoldInventory();
586
				actualavailability = availability - reserve;
9456 vikram.rag 587
				if(itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()))!=null){
588
					heldorders = itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku()));
9458 vikram.rag 589
					if(heldorders < 0){
590
						heldorders = 0;
591
					}
9456 vikram.rag 592
				}
9413 vikram.rag 593
				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 594
				row =   sheet.getRow((short) iterator);
595
				long inventoryForRiskyItem = actualavailability - holdinventory;
596
				if(inventoryItem.getRisky()){
597
					if(inventoryForRiskyItem > 0){
9413 vikram.rag 598
						if((Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource()) > 0){
9415 vikram.rag 599
							sent_inventory = Math.round(inventoryForRiskyItem*2/3) - heldorders + inventoryItem.getHeldForSource();
9404 vikram.rag 600
						}
601
						else{
9415 vikram.rag 602
							sent_inventory = 0;
9404 vikram.rag 603
						}
604
					}
605
					else{
9415 vikram.rag 606
						sent_inventory = 0;
9404 vikram.rag 607
					}
608
				}
609
				else{
610
					if(actualavailability > defaultinventory){
9413 vikram.rag 611
						if((Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource()) > heldorders){
612
							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 613
							sent_inventory = Math.round(actualavailability*2/3) +  inventoryItem.getHeldForSource() - heldorders;
9404 vikram.rag 614
						}
615
						else{
9415 vikram.rag 616
							sent_inventory = 0;
9404 vikram.rag 617
						}
618
					}
619
					else{
620
						if(defaultinventory > heldorders){
9415 vikram.rag 621
							sent_inventory = defaultinventory - heldorders;
9404 vikram.rag 622
						}
623
						else{
9415 vikram.rag 624
							sent_inventory = 0;
9404 vikram.rag 625
						}
626
					}
627
				}
9456 vikram.rag 628
				if(inventory.getAvailableInventory()!= sent_inventory){
629
					row.getCell((short) 0).setCellValue(inventory.getSupc());
630
					row.getCell((short) 1).setCellValue(inventory.getSellerSku());
631
					row.getCell((short) 2).setCellValue(inventory.getProductName());
632
					row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());
633
					row.getCell((short) 4).setCellValue(sent_inventory);
634
					if(inventory.getAvailableInventory()!=0 && sent_inventory==0){
9459 vikram.rag 635
						outOfStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory+"\n");
9456 vikram.rag 636
					}
637
					if(inventory.getAvailableInventory()==0 && sent_inventory!=0){
9459 vikram.rag 638
						backInStockItems.append(sku+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+sent_inventory+"\n");
9456 vikram.rag 639
					}
640
					if(inventory.isLive()){
641
						row.getCell((short) 5).setCellValue("Yes");
642
					}
643
					else{
644
						row.getCell((short) 5).setCellValue("No");
645
					}
646
					SnapdealInventoryItem snapdealinventoryitem = new SnapdealInventoryItem();
647
					snapdealinventoryitem.setAvailability(sent_inventory);
648
					snapdealinventoryitem.setItem_id(Long.parseLong(inventory.getSellerSku()));
649
					System.out.println("Updating inventory snapshot " + inventory.getSellerSku());
650
					snapdealinventoryitem.setLastUpdatedOnSnapdeal(time);
651
					try{
652
						inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
653
					}
654
					catch(TTransportException e){
655
						inventoryClient = new InventoryClient().getClient();
656
						inventoryClient.addOrUpdateSnapdealInventoryForItem(snapdealinventoryitem);
657
					}
658
					iterator++;
9404 vikram.rag 659
				}
660
			}
661
			else{
662
				continue;
663
			}
664
		}
665
		FileOutputStream fileOut = null;
666
		fis.close();
667
		try {
9456 vikram.rag 668
			System.out.println("Before writing file ");
9404 vikram.rag 669
			fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
670
		} catch (FileNotFoundException e) {
671
			// TODO Auto-generated catch block
672
			e.printStackTrace();
673
		}
674
		try {
9459 vikram.rag 675
 
9404 vikram.rag 676
			hwb.write(fileOut);
677
		} catch (IOException e) {
678
			// TODO Auto-generated catch block
679
			e.printStackTrace();
680
		}
9413 vikram.rag 681
		/*		HttpClient client = new DefaultHttpClient();
9404 vikram.rag 682
		HttpPost post = new HttpPost("http://seller.snapdeal.com/login_security_check?spring-security-redirect=http://seller.snapdeal.com/inventory&");
683
		BufferedReader rd= null;
9405 vikram.rag 684
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
9404 vikram.rag 685
		nameValuePairs.add(new BasicNameValuePair("j_username",
686
		"khushal.bhatia@saholic.com"));
687
		nameValuePairs.add(new BasicNameValuePair("j_password",
688
		"sonline"));
9405 vikram.rag 689
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
9404 vikram.rag 690
		HttpResponse response = null;
691
		String line;
9405 vikram.rag 692
		try {
9404 vikram.rag 693
			response = client.execute(post);
694
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
695
			while ((line = rd.readLine()) != null) {
696
				System.out.println(line);
697
			}
698
 
699
		} catch (ClientProtocolException e) {
700
			// TODO Auto-generated catch block
701
			e.printStackTrace();
702
		} catch (IOException e) {
703
			// TODO Auto-generated catch block
704
			e.printStackTrace();
705
		}
9405 vikram.rag 706
		post = new HttpPost("http://seller.snapdeal.com/inventory/upload");
9404 vikram.rag 707
		File file = new File("/home/vikram/snapdeal-inventory-1389608325312.xls");
708
		MultipartEntity mpEntity = new MultipartEntity();
709
	    ContentBody cbFile = new FileBody(file,"application/vnd.ms-excel");
710
	    mpEntity.addPart("file", cbFile);
711
	    post.setEntity(mpEntity);
712
		response = client.execute(post);
713
		try {
714
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
715
		} catch (IllegalStateException e1) {
716
			// TODO Auto-generated catch block
717
			e1.printStackTrace();
718
		} catch (IOException e1) {
719
			// TODO Auto-generated catch block
720
			e1.printStackTrace();
721
		}
722
		line = "";
723
		try {
724
			while ((line = rd.readLine()) != null) {
725
				System.out.println(line);
726
			}
727
		} catch (IOException e) {
728
			// TODO Auto-generated catch block
729
			e.printStackTrace();
730
		}
9413 vikram.rag 731
		 */
9459 vikram.rag 732
		java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
733
		Calendar cal=GregorianCalendar.getInstance();
734
		String emailFromAddress = "build@shop2020.in";
735
		String password = "cafe@nes";
736
		GmailUtils mailer = new GmailUtils();
9460 vikram.rag 737
		String sendTo[] = new String[]{"vikram.raghav@shop2020.in","kshitij.sood@shop2020.in"};
9459 vikram.rag 738
		/*String sendTo[] = new String[]{ "sandeep.sachdeva@shop2020.in", "vikram.raghav@shop2020.in", "rajneesh.arora@shop2020.in",
739
				"khushal.bhatia@shop2020.in","manoj.kumar@saholic.com","chaitnaya.vats@saholic.com",
740
				"yukti.jain@shop2020.in","manisha.sharma@shop2020.in","chandan.kumar@shop2020.in","ankush.dhingra@shop2020.in","amar.kumar@shop2020.in"};
741
		 */
742
		String emailSubjectTxt = "Products back in stock on Snapdeal "+sdf.format(cal.getTime());
743
		String text = backInStockItems.toString();
744
		if(text.length() > 0){
745
			try {
746
				mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
747
			} catch (MessagingException e) {
748
				e.printStackTrace();
749
			}
750
		}
751
		emailSubjectTxt = "Products out of stock on Snapdeal "+sdf.format(cal.getTime());
752
		text = outOfStockItems.toString();
753
		if(text.length() > 0){
754
			try {
755
				mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
756
			} catch (MessagingException e) {
757
				e.printStackTrace();
758
			}
759
		}
9460 vikram.rag 760
		List<File> files = new ArrayList<File>();
761
		files.add(new File(SNAPDEAL_INVENTORY_SHEET));
762
		try {
763
			mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, files);
764
		} catch (MessagingException e) {
765
			e.printStackTrace();
766
		}
767
 
9459 vikram.rag 768
 
9404 vikram.rag 769
	}
770
 
771
}