Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
10367 vikram.rag 1
package in.shop2020;
2
 
3
import in.shop2020.model.v1.catalog.Item;
4
import in.shop2020.model.v1.catalog.SnapdealItemDetails;
5
import in.shop2020.model.v1.catalog.status;
6
import in.shop2020.model.v1.inventory.InventoryType;
7
import in.shop2020.model.v1.inventory.ItemInventory;
8
import in.shop2020.model.v1.inventory.SnapdealInventoryItem;
9
import in.shop2020.model.v1.inventory.Warehouse;
10
import in.shop2020.model.v1.inventory.WarehouseLocation;
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;
15
import in.shop2020.utils.GmailUtils;
16
import inventory.Inventory;
17
import inventory.InventoryHistory;
18
import inventory.InventoryHistoryItems;
19
import inventory.InventoryItems;
20
import inventory.PendingOrderInventoryHistory;
21
import inventory.SnapdealItemForInventory;
22
 
23
import java.io.BufferedReader;
24
import java.io.File;
25
import java.io.FileInputStream;
26
import java.io.FileNotFoundException;
27
import java.io.FileOutputStream;
28
import java.io.IOException;
29
import java.io.InputStreamReader;
30
import java.io.UnsupportedEncodingException;
31
import java.util.ArrayList;
32
import java.util.Calendar;
33
import java.util.GregorianCalendar;
34
import java.util.HashMap;
35
import java.util.List;
36
import java.util.Map;
37
import java.util.Map.Entry;
38
 
39
import javax.mail.MessagingException;
40
import org.apache.http.HttpResponse;
41
import org.apache.http.NameValuePair;
42
import org.apache.http.client.ClientProtocolException;
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.entity.mime.MultipartEntity;
47
import org.apache.http.entity.mime.content.ContentBody;
48
import org.apache.http.entity.mime.content.FileBody;
49
import org.apache.http.impl.client.DefaultHttpClient;
50
import org.apache.http.message.BasicNameValuePair;
51
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
52
import org.apache.poi.ss.usermodel.Row;
53
import org.apache.poi.ss.usermodel.Sheet;
54
import org.apache.poi.ss.usermodel.Workbook;
55
import org.apache.thrift.TException;
56
import org.apache.thrift.transport.TTransportException;
57
 
58
import com.google.gson.Gson;
59
 
60
public class UpdateSDInventoryUsingPanelNew {
61
	private static final boolean PANEL = true;
62
	private static long time = System.currentTimeMillis();
63
	private static String SNAPDEAL_INVENTORY_SHEET;
64
	private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();
65
	private static ArrayList<Inventory> currentInventoryItemList;
66
	static Map<Long,Long> itemIdpendingOrdersMap;
67
	private static Map<String,InventoryHistory> inventoryhistoryItemMap;
68
	private static DefaultHttpClient client = new DefaultHttpClient();
69
	static Map<String,SnapdealItemDetails> snapdealItemMap = new HashMap<String,SnapdealItemDetails>();
70
	static Map<Long,SnapdealItemDetails> itemSnapdealMap = new HashMap<Long,SnapdealItemDetails>();
71
	static Map<String,PendingOrderInventoryHistory> PendingOrdersInventoryHistoryMap = new HashMap<String,PendingOrderInventoryHistory>();
72
	static long lastUpdatedInventoryTime = 0;
73
	static java.text.SimpleDateFormat sdf;
74
	static String emailFromAddress;
75
	static String password;
76
	static GmailUtils mailer;
77
	static String sendTo[];
78
	static StringBuffer notMappedItems =new StringBuffer();
10394 vikram.rag 79
 
10367 vikram.rag 80
	public static void initilaize() {
81
		sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
82
		emailFromAddress = "build@shop2020.in";
83
		password = "cafe@nes";
84
		mailer = new GmailUtils();
85
		sendTo = new String[]{"vikram.raghav@shop2020.in"};
86
		/*sendTo = new String[]{ "sandeep.sachdeva@shop2020.in", "vikram.raghav@shop2020.in", "rajneesh.arora@shop2020.in",
87
				"khushal.bhatia@shop2020.in","manoj.kumar@saholic.com","chaitnaya.vats@saholic.com",
88
				"yukti.jain@shop2020.in","manisha.sharma@shop2020.in","chandan.kumar@shop2020.in","ankush.dhingra@shop2020.in"};
10398 vikram.rag 89
				*/
90
		 itemIdpendingOrdersMap = new HashMap<Long,Long>();
10394 vikram.rag 91
		 CatalogClient catalogServiceClient = null;
92
		 try {
93
			 catalogServiceClient = new CatalogClient();
94
		 } catch (TTransportException e1) {
95
			 e1.printStackTrace();
96
		 }
97
		 in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
98
		 List<SnapdealItemDetails> allSnapdealItems = null;
99
		 try {
100
			 allSnapdealItems = catalogClient.getAllSnapdealItems();
101
		 } catch (TException e) {
10367 vikram.rag 102
 
10394 vikram.rag 103
			 e.printStackTrace();
104
		 }
105
		 for(SnapdealItemDetails snapdealItem:allSnapdealItems){
106
			 snapdealItemMap.put(snapdealItem.getSkuAtSnapdeal(),snapdealItem);
107
			 itemSnapdealMap.put(snapdealItem.getItem_id(), snapdealItem);
108
			 //System.out.println("Creating Item and Snapdeal Map " + snapdealItem.getItem_id() + " " + snapdealItem.getSkuAtSnapdeal());
109
		 }
110
		 in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
111
		 try {
112
			 transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
113
			 lastUpdatedInventoryTime = transactionClient.getSourceDetail(7).getLastUpdatedOn();
114
			 //System.out.println("Time is " + lastUpdatedInventoryTime);
115
		 } catch (Exception e) {
116
			 try {
117
				 transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
118
				 lastUpdatedInventoryTime = transactionClient.getSourceDetail(7).getLastUpdatedOn();
119
			 } catch (Exception ex) {
120
				 ex.printStackTrace();
121
			 }
122
		 }
10367 vikram.rag 123
 
124
	}
125
 
126
	private static void calculateinventory(){
127
		CatalogClient catalogServiceClient = null;
128
		Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();
129
		try {
130
			catalogServiceClient = new CatalogClient();
131
		} catch (TTransportException e) {
132
 
133
			e.printStackTrace();
134
		}
135
		in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
136
		try {
137
			List<Item> aliveItems = catalogClient.getAllAliveItems();
138
			Map<Long,Item> aliveItemsMap = new HashMap<Long,Item>(); 
139
			for(in.shop2020.model.v1.catalog.Item thriftItem:aliveItems){
140
				aliveItemsMap.put(thriftItem.getId(), thriftItem);
141
 
142
			}
10376 vikram.rag 143
			InventoryClient inventoryServiceClient=null;
10367 vikram.rag 144
			try {
10376 vikram.rag 145
				inventoryServiceClient = new InventoryClient("inventory_service_server_host","inventory_service_server_port");
10367 vikram.rag 146
			} catch (TTransportException e) {
147
				e.printStackTrace();
148
			}
149
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
150
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
151
			SNAPDEAL_INVENTORY_SHEET = "/home/snapdeal/snapdeal-inventory-"+time+".xls";
152
			availability = inventoryClient.getInventorySnapshot(0);
153
			List<Warehouse> allwarehouses = inventoryClient.getWarehouses(null,null,0,0,0);
154
			Map<Long,Warehouse> allWarehousesMap = new HashMap<Long,Warehouse>();
155
			for(Warehouse warehouse:allwarehouses){
156
				allWarehousesMap.put(warehouse.getId(),warehouse);
157
			}
158
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
159
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
160
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
161
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
162
			for(Warehouse warehouse:warehouses){
163
				thirdpartywarehouseids.add(warehouse.getId());
164
			}
165
			for (Warehouse warehouse:ours_warehouses){
166
				oursGoodWarehouse.add(warehouse.getId());
167
			}
168
			long available=0;
169
			long reserve=0;
170
			long total_warehouse_held=0;
171
			long heldForSource=0;
172
			long total_held=0;
173
			double nlc=0;
174
			double maxnlc=0;
175
			Item thriftItem;
176
			long sku = 0;
177
			for(Inventory inventoryItem:currentInventoryItemList){
178
				if(snapdealItemMap.containsKey(inventoryItem.getSellerSku())){
179
					sku = snapdealItemMap.get(inventoryItem.getSellerSku()).getItem_id();
180
				}
181
				else{
182
					continue;
183
				}
184
				if(aliveItemsMap.get(sku) != null){
185
					thriftItem = aliveItemsMap.get(sku);	
186
				}
187
				else{
188
					continue;
189
				}
190
				available=0;
191
				reserve=0;
192
				total_warehouse_held=0;
193
				heldForSource=0;
194
				total_held=0;
195
				nlc=0;
196
				List<Warehouse> vendor_warehouses=null;
197
				SnapdealItemForInventory item;
198
				if(availability.get(thriftItem.getId())!=null){ 
199
					ItemInventory iteminventory = availability.get(thriftItem.getId());
200
					Map<Long,Long> itemavailability = new HashMap<Long,Long>();
201
					itemavailability = iteminventory.getAvailability();
202
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
203
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());						
204
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
205
						vendor_warehouses.addAll(ours_warehouses);
206
						for (Warehouse warehouse:vendor_warehouses){
207
							if(warehouse.getBillingWarehouseId()!=7){
208
								if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){
209
 
210
								}
211
								else{
212
									continue;
213
								}
214
							}
215
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
216
							ignoredItem.setItemId(thriftItem.getId());
217
							ignoredItem.setWarehouseId(warehouse.getId());
218
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem)){
219
								try{
220
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
221
								}
222
								catch(TTransportException e){
223
									inventoryClient = inventoryServiceClient.getClient(); 
224
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
225
								}
226
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
227
 
228
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
229
								if(nlc !=0 && (maxnlc >= nlc)){
230
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
231
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);
232
									available = available + itemavailability.get(warehouse.getId());
233
									total_held = total_held + total_warehouse_held; 
234
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
235
								}
236
								else if(maxnlc==0){
237
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
238
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);
239
									available = available + itemavailability.get(warehouse.getId());
240
									total_held = total_held + total_warehouse_held;
241
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
242
								}
243
							}
244
						}
245
					}
246
					else{
247
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
248
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
249
								if(allWarehousesMap.get(entry.getKey()).getLogisticsLocation().equals(WarehouseLocation.Delhi) && allWarehousesMap.get(entry.getKey()).getWarehouseType().equals(WarehouseType.THIRD_PARTY) && allWarehousesMap.get(entry.getKey()).getVendor().getId()!=1){
250
 
251
								}
252
								else{
253
									continue;
254
								}
255
							}
256
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
257
							ignoredItem.setItemId(thriftItem.getId());
258
							ignoredItem.setWarehouseId(entry.getKey());
259
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
260
 
261
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
262
								try{
263
									maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
264
								}
265
								catch(TTransportException e){
266
									catalogClient = catalogServiceClient.getClient();  
267
									maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
268
								}
269
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );
270
								if(nlc !=0 && (maxnlc >= nlc)){
271
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
272
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
273
									available =  available + entry.getValue();
274
									total_held = total_held + total_warehouse_held;
275
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
276
								}
277
								else if(maxnlc==0){
278
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
279
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
280
									available = available + itemavailability.get(entry.getKey());
281
									total_held = total_held + total_warehouse_held;
282
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
283
								}
284
 
285
							}
286
						}
287
					}
288
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
289
					itemreserve = iteminventory.getReserved();
290
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
291
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
292
						for (Warehouse warehouse:vendor_warehouses){
293
							if(warehouse.getBillingWarehouseId()!=7){
294
								if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){
295
 
296
								}
297
								else{
298
									continue;
299
								}
300
							}
301
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
302
							ignoredItem.setItemId(thriftItem.getId());
303
							ignoredItem.setWarehouseId(warehouse.getId());
304
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
305
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
306
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
307
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
308
								if(nlc !=0 && (maxnlc >= nlc)){
309
									reserve = reserve + itemreserve.get(warehouse.getId());
310
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
311
								}
312
								else if(maxnlc==0){
313
									reserve = reserve + itemreserve.get(warehouse.getId());
314
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
315
								}
316
 
317
							}
318
						}
319
					}else{
320
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
321
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
322
								if(allWarehousesMap.get(entry.getKey()).getLogisticsLocation().equals(WarehouseLocation.Delhi) && allWarehousesMap.get(entry.getKey()).getWarehouseType().equals(WarehouseType.THIRD_PARTY) && allWarehousesMap.get(entry.getKey()).getVendor().getId()!=1){
323
 
324
								}
325
								else{
326
									continue;
327
								}
328
							}
329
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
330
							ignoredItem.setItemId(thriftItem.getId());
331
							ignoredItem.setWarehouseId(entry.getKey());
332
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
333
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
334
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
335
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );
336
								if(nlc !=0 && (maxnlc >= nlc)){
337
									reserve =  reserve + entry.getValue();
338
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
339
								}
340
								else if(maxnlc==0){
341
									reserve =  reserve + entry.getValue();
342
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
343
								}
344
 
345
							}
346
 
347
							else{
348
								//System.out.println("skipping inventory for warehouse id " + entry.getKey());
349
							}
350
						}
351
					}
352
					item= new SnapdealItemForInventory(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),total_held,thriftItem.isRisky(),thriftItem.getItemStatus());
353
					//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
354
				}
355
				else{
356
					item = new SnapdealItemForInventory(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),0,thriftItem.isRisky(),thriftItem.getItemStatus());
357
					//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
358
				}
359
 
360
				//System.out.println(" Item details are " + thriftItem.getId() +" " + available + " " + reserve + " " + thriftItem.getHoldInventory() + " "+ thriftItem.getDefaultInventory() + " " + thriftItem.isRisky());
361
				//System.out.println("+++++++++++++++++++++++");
362
				allItemsInventoryMap.put(thriftItem.getId(),item);
363
 
364
			}
365
 
366
		} catch (TException e) {
367
 
368
			e.printStackTrace();
369
		}
370
 
371
	}
372
	private static void fetchinventoryhistoryfromsnapdeal() throws UnsupportedEncodingException, TException{
373
		int i = 1;
374
		Gson gson = new Gson();
375
		inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();
376
		boolean exitfetchinghistory = true;
377
		System.out.println("Fetching history inventory");
378
		HttpGet get;
379
		HttpResponse response = null;
380
		BufferedReader rd = null;
381
		while(exitfetchinghistory){
382
			System.out.println("Fetching inventory history page " +i);
383
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=history&_search=false&nd="+time+"&rows=30&page="+i+"&sidx=&sord=dsc");
384
 
385
			try {
386
				response = client.execute(get);
387
			} catch (ClientProtocolException e) {
388
 
389
				e.printStackTrace();
390
			} catch (IOException e) {
391
 
392
				e.printStackTrace();
393
			}
394
 
395
			try {
396
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
397
 
398
			} catch (IllegalStateException e) {
399
 
400
				e.printStackTrace();
401
			} catch (IOException e) {
402
 
403
				e.printStackTrace();
404
			}
405
			InventoryHistoryItems inventoryhistoryitems = (InventoryHistoryItems) gson.fromJson(rd, InventoryHistoryItems.class);
406
			if(inventoryhistoryitems.getRows().size()!=0){
407
				//System.out.println("Parsing page " + i);
408
				for(InventoryHistory inventoryhistory : inventoryhistoryitems.getRows()){
409
					//System.out.println("Inventory History " + inventoryhistory.getSellerSku() +" "+ inventoryhistory.getSupc());
410
					if(inventoryhistory.getUpdateTime() > lastUpdatedInventoryTime){
411
						if(inventoryhistoryItemMap.containsKey(inventoryhistory.getSellerSku())){
412
							if(inventoryhistoryItemMap.get(inventoryhistory.getSellerSku()).getUpdateTime() < inventoryhistory.getUpdateTime()){  
413
								inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
414
							}
415
						}
416
						else{
417
							inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
418
						}
419
					}
420
					else{
421
						exitfetchinghistory = false;
422
					}
423
				}
424
			}
425
			else{
426
				exitfetchinghistory = false;
427
			}
428
			i++;	
429
		}
10376 vikram.rag 430
		InventoryClient inventoryServiceClient = new InventoryClient("inventory_service_server_host","inventory_service_server_port");
10367 vikram.rag 431
		in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
432
		List<SnapdealInventoryItem> snapdealInventoryItemHistoryList = inventoryClient.getSnapdealInventorySnapshot();
433
		if(snapdealInventoryItemHistoryList.size()>0){
434
			for(SnapdealInventoryItem snapdealInventoryItem:snapdealInventoryItemHistoryList){
435
				if(itemSnapdealMap.containsKey(snapdealInventoryItem.getItem_id())){
436
					PendingOrderInventoryHistory pendingOrdersInventoryHistory = new PendingOrderInventoryHistory();
437
					pendingOrdersInventoryHistory.setPendingOrders(snapdealInventoryItem.getPendingOrders());
438
					pendingOrdersInventoryHistory.setInventoryHistory(snapdealInventoryItem.getAvailability());
439
					pendingOrdersInventoryHistory.setLastUpdatedTimestamp(snapdealInventoryItem.getLastUpdatedOnSnapdeal());
440
					PendingOrdersInventoryHistoryMap.put(itemSnapdealMap.get(snapdealInventoryItem.getItem_id()).getSkuAtSnapdeal(), pendingOrdersInventoryHistory);
441
				}
442
			}
443
		}
444
		PendingOrderInventoryHistory  pendingOrdersInventoryHistory;
445
		for(Entry<String, InventoryHistory> inventoryHistoryItem :inventoryhistoryItemMap.entrySet()){
446
			if(PendingOrdersInventoryHistoryMap.containsKey(inventoryHistoryItem.getValue().getSellerSku())){
447
				pendingOrdersInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventoryHistoryItem.getValue().getSellerSku());
448
				pendingOrdersInventoryHistory.setInventoryHistory(Long.parseLong(inventoryHistoryItem.getValue().getNewValue()));
449
				pendingOrdersInventoryHistory.setLastUpdatedTimestamp(inventoryHistoryItem.getValue().getUpdateTime());
450
				PendingOrdersInventoryHistoryMap.put(inventoryHistoryItem.getValue().getSellerSku(),pendingOrdersInventoryHistory);
451
			}
452
			else{
453
				pendingOrdersInventoryHistory = new PendingOrderInventoryHistory();
454
				pendingOrdersInventoryHistory.setInventoryHistory(Long.parseLong(inventoryHistoryItem.getValue().getNewValue()));
455
				pendingOrdersInventoryHistory.setLastUpdatedTimestamp(inventoryHistoryItem.getValue().getUpdateTime());
456
				pendingOrdersInventoryHistory.setPendingOrders(0);
457
				PendingOrdersInventoryHistoryMap.put(inventoryHistoryItem.getValue().getSellerSku(),pendingOrdersInventoryHistory);
458
			}
459
		}
460
	}
461
 
462
	private static void fetchcurrentinventoryfromsnapdeal() throws UnsupportedEncodingException, TException{
463
		int i = 1;
464
		int items=0;
465
		Gson gson = new Gson();
466
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
467
		currentInventoryItemList = new ArrayList<Inventory>();
468
		HttpGet get;
469
		HttpResponse response = null;
470
		BufferedReader rd= null;
471
		System.out.println("Fetching current inventory ");
472
		while(true){
473
			//System.out.println("Fetching current inventory page " +i);
474
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");
475
			try {
476
				response = client.execute(get);
477
			} catch (ClientProtocolException e) {
478
 
479
				e.printStackTrace();
480
			} catch (IOException e) {
481
 
482
				e.printStackTrace();
483
			}
484
			try {
485
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
486
			} catch (IllegalStateException e) {
487
 
488
				e.printStackTrace();
489
			} catch (IOException e) {
490
 
491
				e.printStackTrace();
492
			}
493
			InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
494
			if(inventoryitems.getRows().size()!=0){
495
				for(Inventory inventory : inventoryitems.getRows()){
496
					if(snapdealItemMap.containsKey(inventory.getSellerSku())){
497
						currentInventoryItemList.add(inventory);
498
					}
499
 
500
					else{
501
						notMappedItems.append("<tr>" 
502
								+ "<td>" + inventory.getProductName() +"</td>"
503
								+"<td>" + inventory.getSellerSku() + "</td>"
504
								+"<td>" + inventory.getSupc() + "</td>"
505
								+"</tr>");
506
					}
507
					items++;
508
				}
509
			}
510
			else{
511
				System.out.println("Fetched  " + items);
512
				break;
513
			}
514
			i++;
515
		}
516
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
517
		SnapdealItemDetails snapdealitem = null;
518
		long sku = 0;
519
		long created_orders;
520
		long pending_orders;
521
		Map<Long, Long> itemIdCreatedOrdersMap = null;
522
		try {
523
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
524
			System.out.println("Last Updated on Time is  " + lastUpdatedInventoryTime);
525
			if(lastUpdatedInventoryTime > 0){
526
				itemIdCreatedOrdersMap = transactionClient.getOrdersCreatedAfterTimestampForSource(lastUpdatedInventoryTime, 7);
527
				System.out.println("Item id orders created map size "+ itemIdCreatedOrdersMap.entrySet().size());
528
			}
529
		} catch (TTransportException e1) {
530
 
531
			e1.printStackTrace();
532
		}
533
		try {
534
			catalogServiceClient = new CatalogClient().getClient();
535
		} catch (TTransportException e1) {
536
 
537
			e1.printStackTrace();
538
		}
539
		List<String> notMappedItems = new ArrayList<String>();
540
 
541
		for(Inventory inventory:currentInventoryItemList){
542
			created_orders = 0;
543
			pending_orders = 0;
544
			snapdealitem = snapdealItemMap.get(inventory.getSellerSku());
545
			if(snapdealitem==null){
546
				notMappedItems.add(inventory.getSellerSku()+" "+inventory.getProductName());
547
				System.out.println("Not Mapped  " + inventory.getSellerSku());
548
				continue;
549
			}
550
			sku = snapdealitem.getItem_id();
551
			if(sku!=0){
552
				if(itemIdCreatedOrdersMap!=null && itemIdCreatedOrdersMap.containsKey(sku)){
553
					created_orders = itemIdCreatedOrdersMap.get(sku);
554
				}
555
				System.out.println("Created orders for " + sku +" " + created_orders);
556
			}
557
			else{
558
				continue;
559
			}
560
			if(PendingOrdersInventoryHistoryMap.containsKey(inventory.getSellerSku())){
561
				System.out.println("Calculating Pending Orders for " + inventory.getSellerSku());
562
				System.out.println("Current Inventory "+inventory.getAvailableInventory());
563
				System.out.println("History Inventory "+PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getInventoryHistory());
564
				System.out.println("Created Orders "+created_orders);
565
				System.out.println("Old Pending Orders "+ PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders());
566
				if(PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getLastUpdatedTimestamp() > lastUpdatedInventoryTime){
567
					pending_orders = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders() + PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getInventoryHistory() - inventory.getAvailableInventory() - created_orders;
568
				}
569
				else{
570
					pending_orders = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders() - created_orders;
571
				}
572
				System.out.println("New Pending Orders "+pending_orders);
573
				PendingOrderInventoryHistory pendingOrderInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku());
574
				pendingOrderInventoryHistory.setPendingOrders(pending_orders);
575
				PendingOrdersInventoryHistoryMap.put(inventory.getSellerSku(),pendingOrderInventoryHistory);
576
			}
577
			else{
578
				System.out.print("Could not calculate pending orders " + inventory.getSellerSku() +"\n");
579
				PendingOrderInventoryHistory pendingOrderInventoryHistory = new PendingOrderInventoryHistory();
580
				pendingOrderInventoryHistory.setPendingOrders(pending_orders);
581
				pendingOrderInventoryHistory.setInventoryHistory(inventory.getAvailableInventory());
582
				pendingOrderInventoryHistory.setLastUpdatedTimestamp(System.currentTimeMillis());
583
				PendingOrdersInventoryHistoryMap.put(inventory.getSellerSku(),pendingOrderInventoryHistory);
584
			}
585
			itemIdpendingOrdersMap.put(sku, pending_orders);
586
 
587
		}
588
	}
589
 
590
	public static void handleLogin() throws ClientProtocolException, IOException{
591
		HttpGet get = new HttpGet("http://selleraccounts.snapdeal.com/keymaker/login");
592
		HttpResponse response = null;
593
		try {
594
			response = client.execute(get);
595
		} catch (ClientProtocolException e) {
596
 
597
			e.printStackTrace();
598
		} catch (IOException e) {
599
 
600
			e.printStackTrace();
601
		}
602
		BufferedReader rd = null;
603
		try {
604
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
605
		} catch (IllegalStateException e1) {
606
 
607
			e1.printStackTrace();
608
		} catch (IOException e1) {
609
 
610
			e1.printStackTrace();
611
		}
612
		String line = "";
613
		StringBuffer sb = new StringBuffer();
614
		try {
615
			while ((line = rd.readLine()) != null) {
616
				sb.append(line);
617
				//System.out.println(line);
618
			}
619
		} catch (IOException e) {
620
 
621
			e.printStackTrace();
622
		}
623
		int i= sb.toString().indexOf("name=\"lt\" value=");
624
		char[] charArray = sb.toString().toCharArray();
625
		String lt = "";
626
		int j=0;
627
		for(j=i+16;j<=charArray.length;j++){
628
 
629
			if(charArray[j]==' '){
630
				break;
631
			}
632
		}
633
		lt = sb.substring(i+17,j-1);
634
		System.out.println("LT VALUE " + lt);
635
		i= sb.toString().indexOf("name=\"execution\" value=");
636
		charArray = sb.toString().toCharArray();
637
		String ex = "";
638
		j=0;
639
		for(j=i+24;j<=charArray.length;j++){
640
			if(charArray[j]==' '){
641
				break;
642
			}
643
		}
644
		ex = sb.substring(i+24,j-1);
645
		System.out.println("EXECUTION VALUE " + ex);
646
		HttpPost post = new HttpPost("http://selleraccounts.snapdeal.com/login?service=http%3A%2F%2Fseller.snapdeal.com%2Fj_spring_cas_security_check");
647
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
648
		//nameValuePairs.add(new BasicNameValuePair("username",
649
		//"khushal.bhatia@saholic.com"));
650
		nameValuePairs.add(new BasicNameValuePair("username",
651
		"saholic-snapdeal@saholic.com"));
652
		//nameValuePairs.add(new BasicNameValuePair("password",
653
		//"sonline"));
654
		nameValuePairs.add(new BasicNameValuePair("password",
655
		"bc452ce4"));
656
		nameValuePairs.add(new BasicNameValuePair("_eventId","submit"));
657
		nameValuePairs.add(new BasicNameValuePair("execution",ex));
658
		nameValuePairs.add(new BasicNameValuePair("lt",lt));
659
		nameValuePairs.add(new BasicNameValuePair("submit","LOGIN"));
660
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
661
		response = client.execute(post);
662
		rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
663
		line = "";
664
		while ((line = rd.readLine()) != null) {
665
			System.out.println(line);
666
		}
667
		get = new HttpGet("http://seller.snapdeal.com/inventory/");
668
		response = client.execute(get);
669
		rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
670
		while ((line = rd.readLine()) != null) {
671
			//System.out.println(line);
672
		}
673
	}
674
 
675
 
676
 
677
 
678
	@SuppressWarnings("deprecation")
10371 vikram.rag 679
	public static void sendsnapdealinventory (){
10367 vikram.rag 680
		initilaize();
681
		try {
682
			handleLogin();
683
		} catch (ClientProtocolException e2) {
684
			System.out.println("Handle login failed");
685
			e2.printStackTrace();
686
		} catch (IOException e2) {
687
			System.out.println("Handle login failed");
688
			e2.printStackTrace();
689
		}
690
		try {
691
			fetchinventoryhistoryfromsnapdeal();
692
		} catch (UnsupportedEncodingException e2) {
693
			System.out.println("History Inventory Fetch failed");
694
			e2.printStackTrace();
10371 vikram.rag 695
		} catch (TException e) {
696
			e.printStackTrace();
10367 vikram.rag 697
		}
698
		try {
699
			fetchcurrentinventoryfromsnapdeal();
700
		} catch (UnsupportedEncodingException e2) {
701
			System.out.println("Current Inventory Fetch failed");
702
			e2.printStackTrace();
10371 vikram.rag 703
		} catch (TException e) {
704
			e.printStackTrace();
10367 vikram.rag 705
		}
706
		calculateinventory();
707
		FileInputStream fis = null;
708
		Workbook hwb = null;
709
		Sheet sheet = null;
710
		if(!PANEL){
711
			try {
712
				fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
713
			} catch (FileNotFoundException e) {
714
				System.out.println("Template File not found");
715
				e.printStackTrace();
716
			}
717
			try {
718
				hwb = new HSSFWorkbook(fis);
719
			} catch (IOException e) {
720
				System.out.println("Could not created workbook I/O Problem");
721
				e.printStackTrace();
722
			}
723
			sheet = hwb.getSheetAt(0);
724
		}
725
		Row row = null;
726
		int iterator=1;
727
		long available,reserve,defaultinventory,holdinventory,heldorders=0,sent_inventory = 0,totalheld,heldforsource,allocable;
728
		SnapdealItemForInventory  inventoryItem;
729
		StringBuffer outOfStockItems =new StringBuffer();
730
		StringBuffer backInStockItems =new StringBuffer();
731
		StringBuffer inventoryChangeItems =new StringBuffer();
732
		StringBuffer heldMoreThanAvailable =new StringBuffer();
733
		long sku = 0;
734
		SnapdealItemDetails snapdealitem;
735
		long lastSentInventoryTime = System.currentTimeMillis();
10394 vikram.rag 736
		List<SnapdealInventoryItem> snapdealInventoryItemList = new ArrayList<SnapdealInventoryItem>();; 
10367 vikram.rag 737
		for(Inventory inventory:currentInventoryItemList){
738
			//System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
739
			if(snapdealItemMap.containsKey(inventory.getSellerSku())){
740
				snapdealitem = snapdealItemMap.get(inventory.getSellerSku()); 
741
				sku =  snapdealitem.getItem_id();
742
			}
743
			else{
744
				continue;
745
			}
746
			if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){
747
				inventoryItem = allItemsInventoryMap.get(sku);
748
				if(inventoryItem==null){
749
					continue;
750
				}
751
				available = inventoryItem.getAvailability(); 
752
				reserve = inventoryItem.getReserve();
753
				defaultinventory = inventoryItem.getDefaultInventory();
754
				holdinventory = inventoryItem.getHoldInventory();
755
				totalheld = inventoryItem.getTotalHeldInventory();
756
				heldforsource = inventoryItem.getHeldForSource();
757
				if(itemIdpendingOrdersMap.containsKey(sku)){
758
					heldorders = itemIdpendingOrdersMap.get(sku);
759
					if(heldorders < 0){
760
						heldorders = 0;
761
					}
762
				}
763
				System.out.println("itemId: " + inventoryItem.getId() + "\trisky: " + inventoryItem.getRisky()+ 
764
						"\tavailable: " + available + "\treserve: " + reserve + "\theldForSource:" + heldforsource +
765
						"\twebsite_hold: " + holdinventory + "\ttotal_held: " +totalheld +"\tdefault_inv: "
766
						+ defaultinventory + "\theldorders " + heldorders);
767
				if(!PANEL){
768
					row =   sheet.getRow((short) iterator);
769
				}
770
				if(!inventoryItem.getStatus().equals(status.PAUSED)){
771
					if(inventoryItem.getRisky()){
772
						if((available - reserve) < totalheld && totalheld!=0){
773
							sent_inventory = (long) Math.floor(((available - reserve)*heldforsource/totalheld)) - heldorders;
774
							heldMoreThanAvailable.append("<tr>" 
775
									+ "<td>" + inventory.getProductName() +"</td>"
776
									+"<td>" + sku + "</td>"
777
									+"<td>" + (available - reserve) +  "</td>"
778
									+"<td>" + totalheld + "</td>"
779
									+"</tr>");
780
						}
781
						else{
782
							allocable = available - reserve - totalheld - holdinventory;
783
							if(allocable < 0){
784
								allocable = 0;
785
							}
786
							sent_inventory = Math.round(allocable*2/3) + heldforsource - heldorders ;
787
						}
788
						if(sent_inventory < 0){
789
							sent_inventory = 0;
790
						}
791
					}
792
					else{
793
						allocable = available - reserve - totalheld;
794
						if(allocable < 0){
795
							allocable = 0;
796
						}
797
						if((allocable + heldforsource ) > defaultinventory){
798
							sent_inventory = Math.round(allocable*2/3) +  heldforsource - heldorders;
799
							//System.out.println("actual" + allocable + "\t2/3actual" + Math.round(allocable*2/3) +  "\theld for source" + heldforsource + "\theldorders" +  heldorders + "\tFinal Value is : " + (Math.round(allocable*2/3) +  heldforsource - heldorders));
800
							if(sent_inventory < 0){
801
								sent_inventory = 0;							
802
							}
803
						}
804
						else{
805
							if(defaultinventory > heldorders){
806
								sent_inventory = defaultinventory - heldorders;
807
							}
808
							else{
809
								sent_inventory = 0;
810
							}
811
						}
812
					}
813
				}
814
				else{
815
					sent_inventory = 0;
816
				}
817
				SnapdealInventoryItem snapdealInventoryItem;
10396 vikram.rag 818
				if(inventory.getAvailableInventory()!= sent_inventory){
10367 vikram.rag 819
					if(!PANEL){
820
						row.getCell((short) 0).setCellValue(inventory.getSupc());
821
						row.getCell((short) 1).setCellValue(inventory.getSellerSku());
822
						row.getCell((short) 2).setCellValue(inventory.getProductName());
823
						row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());
824
						row.getCell((short) 4).setCellValue(sent_inventory);
825
						if(inventory.isLive()){
826
							row.getCell((short) 5).setCellValue("Yes");
827
						}
828
						else{
829
							row.getCell((short) 5).setCellValue("No");
830
						}
831
					}
832
					else{
833
						snapdealInventoryItem = new SnapdealInventoryItem();
834
						PendingOrderInventoryHistory pendingOrderInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku());
835
						if(snapdealItemMap.containsKey(inventory.getSellerSku())){
10374 vikram.rag 836
							System.out.println("++++++++++++++++++++++++++++++++++++++++");
837
							System.out.println("Updating snapdeal inventory snapshot");
838
							System.out.println("++++++++++++++++++++++++++++++++++++++++");
10367 vikram.rag 839
							snapdealInventoryItem.setItem_id(snapdealItemMap.get(inventory.getSellerSku()).getItem_id());
840
							snapdealInventoryItem.setPendingOrders(pendingOrderInventoryHistory.getPendingOrders());
841
							snapdealInventoryItem.setAvailability(sent_inventory);
842
							snapdealInventoryItem.setLastUpdatedOnSnapdeal(lastSentInventoryTime);
843
							snapdealInventoryItemList.add(snapdealInventoryItem);
844
						}
845
						UpdateSDIUsingPanel UDSI = new UpdateSDIUsingPanel();
846
						try {
847
							UDSI.handleLogin();
848
							UDSI.updateInventory(sent_inventory,inventory.getSupc());
849
						} catch (ClientProtocolException e) {
850
							System.out.println("Could not login and update inventory");
851
							e.printStackTrace();
852
							continue;
853
						} catch (IOException e) {
854
							System.out.println("Could not login and update inventory I/O");
855
							e.printStackTrace();
856
							continue;
857
						}
858
					}
859
					if(inventory.getAvailableInventory()!=0 && sent_inventory==0){
860
						outOfStockItems.append("<tr>" 
861
								+ "<td>" + inventory.getProductName() +"</td>"
862
								+"<td>" + sku + "</td>"
863
								+"<td>" + inventory.getAvailableInventory() + "</td>"
864
								+"<td>" + sent_inventory + "</td>"
865
								+"</tr>");
866
					}
867
					else if(inventory.getAvailableInventory()==0 && sent_inventory!=0){
868
						backInStockItems.append("<tr>" 
869
								+ "<td>" + inventory.getProductName() +"</td>"
870
								+"<td>" + sku + "</td>"
871
								+"<td>" + inventory.getAvailableInventory() + "</td>"
872
								+"<td>" + sent_inventory + "</td>"
873
								+"</tr>");
874
					}
875
					else{
876
						inventoryChangeItems.append("<tr>" 
877
								+ "<td>" + inventory.getProductName() +"</td>"
878
								+"<td>" + sku + "</td>"
879
								+"<td>" + inventory.getAvailableInventory() + "</td>"
880
								+"<td>" + sent_inventory + "</td>"
881
								+"</tr>");
882
					}
883
					iterator++;
884
				}
885
			}
886
			else{
887
				continue;
888
			}
889
		}
890
		if(iterator > 1){
891
			FileOutputStream fileOut = null;
892
			if(!PANEL){
893
				try {
894
					fis.close();
895
				} catch (IOException e2) {
896
					e2.printStackTrace();
897
				}
898
				try {
899
					System.out.println("Before writing file ");
900
					fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
901
				} catch (FileNotFoundException e) {
902
 
903
					e.printStackTrace();
904
				}
905
				try {
906
 
907
					hwb.write(fileOut);
908
				} catch (IOException e) {
909
 
910
					e.printStackTrace();
911
				}
912
				HttpPost post = new HttpPost("http://seller.snapdeal.com/inventory/upload");
913
				File file = new File(SNAPDEAL_INVENTORY_SHEET);
914
				MultipartEntity mpEntity = new MultipartEntity();
915
				ContentBody cbFile = new FileBody(file,"application/vnd.ms-excel");
916
				mpEntity.addPart("file", cbFile);
917
				post.setEntity(mpEntity);
918
				System.out.println("Before posting file");
919
				HttpResponse response=null;
920
				try {
921
					response = client.execute(post);
922
				} catch (ClientProtocolException e2) {
923
					System.out.println("Error While Posting Inventory File");
924
					e2.printStackTrace();
925
				} catch (IOException e2) {
926
					System.out.println("I/O Error While Posting Inventory File");
927
					e2.printStackTrace();
928
				}
929
				BufferedReader rd = null;
930
				try {
931
					rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
932
				} catch (IllegalStateException e1) {
933
 
934
					e1.printStackTrace();
935
				} catch (IOException e1) {
936
 
937
					e1.printStackTrace();
938
				}
939
				String line = "";
940
				String feedresponse = null;
941
				try {
942
					while ((line = rd.readLine()) != null) {
943
						System.out.println(line);
944
						feedresponse = line;
945
					}
946
				} catch (IOException e) {
947
 
948
					e.printStackTrace();
949
				}
950
				System.out.println("posting response" + feedresponse);
951
 
952
			}
953
			int retry = 24;
954
			boolean feedsuccess =false;
955
			while(retry>0){
956
				try {
10377 vikram.rag 957
					Thread.sleep(1*60*1000);
10371 vikram.rag 958
				} catch (InterruptedException e) {
959
					e.printStackTrace();
960
				}
961
				try {
10367 vikram.rag 962
					lastUpdatedInventoryTime = lastSentInventoryTime; 
963
					fetchinventoryhistoryfromsnapdeal();
964
				} catch (UnsupportedEncodingException e1) {
965
					System.out.println("Error while fetching inventory update result");
966
					e1.printStackTrace();
10371 vikram.rag 967
				} catch (TException e) {
968
					e.printStackTrace();
10367 vikram.rag 969
				}
970
				if(inventoryhistoryItemMap.entrySet().size()==iterator -1){
971
					feedsuccess = true;
972
					break;
973
				}
974
				retry --;
975
			}
976
			String PANEL_TEXT_MAIL = "";
977
			if(PANEL){
978
				PANEL_TEXT_MAIL = " (Using Panel)";
979
			}
980
			String emailSubjectTxt;
981
			String text;
982
			String tableHeader;
983
			if(feedsuccess){
10369 vikram.rag 984
				in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
985
				try {
986
					transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
987
					transactionClient.updateSourceDetailTimestamp(7, lastSentInventoryTime);
988
				} catch (Exception e) {
989
					try {
990
						transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
991
						transactionClient.updateSourceDetailTimestamp(7, lastSentInventoryTime);
992
					} catch (Exception ex) {
993
						ex.printStackTrace();
994
					}
995
				}
10371 vikram.rag 996
				InventoryClient inventoryServiceClient = null;
997
				try {
10394 vikram.rag 998
					inventoryServiceClient = new InventoryClient();
10371 vikram.rag 999
				} catch (TTransportException e1) {
1000
					e1.printStackTrace();
1001
				}
10394 vikram.rag 1002
				if(snapdealInventoryItemList.size() > 0){
1003
					in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
10371 vikram.rag 1004
					try {
10394 vikram.rag 1005
						System.out.println("Before updating to database");
1006
						for(SnapdealInventoryItem item:snapdealInventoryItemList){
1007
							System.out.println("Item ID " + item.getItem_id()); 
1008
							System.out.println("Availability " + item.getAvailability());
1009
							System.out.println("Updated time " + sdf.format(item.getLastUpdatedOnSnapdeal()));
1010
							System.out.println("Pending Orders " + item.getPendingOrders());
1011
						}
1012
						System.out.println("Snapdeal inventory list size" + snapdealInventoryItemList.size());
10371 vikram.rag 1013
						inventoryClient.addOrUpdateAllSnapdealInventory(snapdealInventoryItemList);
10394 vikram.rag 1014
					} catch (TException e) {
1015
						e.printStackTrace();
1016
						inventoryClient = inventoryServiceClient.getClient();
1017
						try {
1018
							inventoryClient.addOrUpdateAllSnapdealInventory(snapdealInventoryItemList);
1019
						} catch (TException e1) {
1020
							e1.printStackTrace();
1021
						}
10371 vikram.rag 1022
					}
10367 vikram.rag 1023
				}
1024
				emailSubjectTxt = "Products back in stock on Snapdeal "+sdf.format(lastSentInventoryTime) + PANEL_TEXT_MAIL;
1025
				tableHeader = "<tr>" 
1026
					+ "<td>" + "Product Name" +"</td>"
1027
					+"<td>" + "Item ID" + "</td>"
1028
					+"<td>" + "Old Inventory" + "</td>"
1029
					+"<td>" + "New Inventory" + "</td>"
1030
					+"</tr>";
10394 vikram.rag 1031
 
10367 vikram.rag 1032
				if(backInStockItems.length() > 0){
1033
					text = "<html><table border=\"1\" align=\"center\">"+tableHeader+backInStockItems.toString()+"</table></html>";
1034
					try {
1035
						mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
1036
						//mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
10374 vikram.rag 1037
					} catch (Exception e) {
10367 vikram.rag 1038
						e.printStackTrace();
1039
					}
1040
				}
1041
				emailSubjectTxt = "Products out of stock on Snapdeal "+sdf.format(lastSentInventoryTime) + PANEL_TEXT_MAIL;
1042
				if(outOfStockItems.length() > 0){
1043
					text = "<html><table border=\"1\" align=\"center\">"+tableHeader+outOfStockItems.toString()+"</table></html>";
1044
					try {
1045
						mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
1046
						//mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
10374 vikram.rag 1047
					} catch (Exception e) {
10367 vikram.rag 1048
						e.printStackTrace();
1049
					}
1050
				}
1051
				emailSubjectTxt = "Snapdeal Inventory Updated for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis())+PANEL_TEXT_MAIL;
1052
				if(inventoryChangeItems.length() > 0){
1053
					text = "<html><table border=\"1\" align=\"center\">"+tableHeader+inventoryChangeItems.toString()+"</table></html>";
1054
					try {
1055
						mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
10374 vikram.rag 1056
					} catch (Exception e) {
10367 vikram.rag 1057
						e.printStackTrace();
1058
					}
1059
				}
1060
			}
1061
			else{
1062
				emailSubjectTxt = "Snapdeal Inventory Could not be updated "+PANEL_TEXT_MAIL+" " +sdf.format(System.currentTimeMillis());
10371 vikram.rag 1063
				try {
1064
					mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password,"Please contact Engg ");
10374 vikram.rag 1065
				} catch (Exception e) {
10371 vikram.rag 1066
					e.printStackTrace();
1067
				}
10367 vikram.rag 1068
			}
1069
			tableHeader = "<tr>" 
1070
				+ "<td>" + "Product Name" +"</td>"
1071
				+"<td>" + "Item ID" + "</td>"
1072
				+"<td>" + "Available - Reserve" + "</td>"
1073
				+"<td>" + "Total Held" + "</td>"
1074
				+"</tr>";
1075
 
1076
			emailSubjectTxt = "Items with (Total Held > Net Available) Inventory "+ sdf.format(System.currentTimeMillis());
1077
			if(heldMoreThanAvailable.length() > 0){
1078
				text = "<html><table border=\"1\" align=\"center\">"+tableHeader+heldMoreThanAvailable.toString()+"</table></html>";
1079
				try {
1080
					mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
1081
					//mailer.sendSSLMessage(sendTo,"Snapdeal Inventory Updates sent for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis()),inventoryChangeItems.toString(), emailFromAddress, password, new ArrayList<File>());
10374 vikram.rag 1082
				} catch (Exception e) {
10367 vikram.rag 1083
					e.printStackTrace();
1084
				}
1085
			}
1086
 
1087
		}
1088
		else{
1089
			try {
1090
				mailer.sendSSLMessage(sendTo,"No changes in Snapdeal inventory to update "+ sdf.format(System.currentTimeMillis()),"No change in Snapdeal Inventory to be updated ", emailFromAddress, password, new ArrayList<File>());
10374 vikram.rag 1091
			} catch (Exception e) {
10367 vikram.rag 1092
				e.printStackTrace();
1093
			}
10371 vikram.rag 1094
			try {
10398 vikram.rag 1095
				System.out.println("++++++++++++++++++++++++++++++");
1096
				System.out.println("Thread Sleeping for 30 minutes");
1097
				System.out.println("++++++++++++++++++++++++++++++");
10371 vikram.rag 1098
				Thread.sleep(30*60*1000);
1099
			} catch (InterruptedException e) {
1100
				e.printStackTrace();
1101
			}
10367 vikram.rag 1102
		}
1103
		String tableHeader = "<tr>" 
1104
			+ "<td>" + "Product Name" +"</td>"
1105
			+"<td>" + "SKU at Snapdeal" + "</td>"
1106
			+"<td>" + "SUPC" + "</td>"
1107
			+"</tr>";
1108
		String text;
1109
 
1110
		if(notMappedItems.length() >0){
1111
			text = "<html><table border=\"1\" align=\"center\">"+tableHeader+notMappedItems.toString()+"</table></html>";
10371 vikram.rag 1112
			try {
1113
				mailer.sendSSLMessage(sendTo,"Please create Warehouse ID and Item ID mapping", emailFromAddress, password, text);
10374 vikram.rag 1114
			} catch (Exception e) {
10371 vikram.rag 1115
				e.printStackTrace();
1116
			}
10367 vikram.rag 1117
		}
1118
 
1119
	}
1120
 
10394 vikram.rag 1121
	public static void main(String[] args){
1122
		while(true){
1123
			sendsnapdealinventory();
1124
		}
10367 vikram.rag 1125
 
10394 vikram.rag 1126
	}
1127
 
10367 vikram.rag 1128
}