Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
9947 vikram.rag 1
package in.shop2020;
2
 
3
import in.shop2020.logistics.DeliveryType;
4
import in.shop2020.logistics.LogisticsInfo;
5
import in.shop2020.logistics.LogisticsServiceException;
6
import in.shop2020.model.v1.catalog.CatalogService.Client;
7
import in.shop2020.model.v1.catalog.FlipkartItem;
8
import in.shop2020.model.v1.catalog.Item;
9
import in.shop2020.model.v1.catalog.status;
10049 vikram.rag 10
import in.shop2020.model.v1.inventory.FlipkartInventorySnapshot;
9947 vikram.rag 11
import in.shop2020.model.v1.inventory.InventoryType;
12
import in.shop2020.model.v1.inventory.ItemInventory;
13
import in.shop2020.model.v1.inventory.Warehouse;
14
import in.shop2020.model.v1.inventory.WarehouseLocation;
15
import in.shop2020.model.v1.inventory.WarehouseType;
16
import in.shop2020.model.v1.order.OrderSource;
17
import in.shop2020.serving.model.Order;
18
import in.shop2020.serving.model.OrderItems;
19
import in.shop2020.thrift.clients.CatalogClient;
20
import in.shop2020.thrift.clients.InventoryClient;
21
import in.shop2020.thrift.clients.LogisticsClient;
22
import in.shop2020.thrift.clients.TransactionClient;
9983 vikram.rag 23
import in.shop2020.utils.GmailUtils;
9947 vikram.rag 24
import inventory.FlipkartInventoryItem;
25
 
26
import java.io.BufferedReader;
9983 vikram.rag 27
import java.io.File;
9947 vikram.rag 28
import java.io.IOException;
29
import java.io.InputStreamReader;
9968 vikram.rag 30
import java.io.UnsupportedEncodingException;
9947 vikram.rag 31
import java.util.ArrayList;
32
import java.util.HashMap;
33
import java.util.List;
34
import java.util.Map;
35
import java.util.Map.Entry;
36
 
9983 vikram.rag 37
import javax.mail.MessagingException;
38
 
9947 vikram.rag 39
import org.apache.http.HttpResponse;
40
import org.apache.http.NameValuePair;
41
import org.apache.http.auth.AuthScope;
42
import org.apache.http.auth.UsernamePasswordCredentials;
43
import org.apache.http.client.ClientProtocolException;
44
import org.apache.http.client.HttpClient;
45
import org.apache.http.client.entity.UrlEncodedFormEntity;
46
import org.apache.http.client.methods.HttpGet;
47
import org.apache.http.client.methods.HttpPost;
48
import org.apache.http.entity.StringEntity;
49
import org.apache.http.impl.client.DefaultHttpClient;
50
import org.apache.http.message.BasicNameValuePair;
51
import org.apache.thrift.TException;
52
import org.apache.thrift.transport.TTransportException;
53
 
54
import com.google.gson.Gson;
55
 
56
 
57
 
58
public class CreateSubmitFlipkartInventoryFeed {
59
	private static Map<Long, FlipkartInventoryItem> flipkartItemsInventoryMap = new HashMap<Long, FlipkartInventoryItem>();
60
	private static List<FlipkartItem> flipkartItems;
61
	private static List<FlipkartItem> flipkartInventoryItems = new ArrayList<FlipkartItem>();
62
	private static Map<Long,Long> itemIdOrdersMap = new HashMap<Long,Long>();
9983 vikram.rag 63
	private static Map<Long,Item> aliveItemsMap = new HashMap<Long,Item>();
10057 vikram.rag 64
	private static Map<String,Long> heldOrdersMap = new HashMap<String,Long>();
9983 vikram.rag 65
	static java.text.SimpleDateFormat sdf;
66
	static String emailFromAddress;
67
	static String password;
68
	static GmailUtils mailer;
69
	static String sendTo[];
9947 vikram.rag 70
	static
71
	{
9983 vikram.rag 72
		sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
73
		emailFromAddress = "build@shop2020.in";
74
		password = "cafe@nes";
75
		mailer = new GmailUtils();
10090 vikram.rag 76
		//sendTo = new String[]{"vikram.raghav@shop2020.in"};
77
		sendTo = new String[]{ "sandeep.sachdeva@shop2020.in", "vikram.raghav@shop2020.in", "rajneesh.arora@shop2020.in",
9983 vikram.rag 78
				"khushal.bhatia@shop2020.in","manoj.kumar@saholic.com","chaitnaya.vats@saholic.com",
10030 vikram.rag 79
				"yukti.jain@shop2020.in","manoj.pal@shop2020.in","chandan.kumar@shop2020.in","ankush.dhingra@shop2020.in","amar.kumar@shop2020.in"};
10090 vikram.rag 80
		List<String> flipkartorderids = null;
10049 vikram.rag 81
		Client catalogServiceClient = null;
82
		try {
83
			catalogServiceClient = new CatalogClient().getClient();
84
		} catch (TTransportException e) {
85
			e.printStackTrace();
86
		}
87
		try {
88
			flipkartItems = catalogServiceClient.getAllFlipkartItems();
89
		} catch (TException e) {
90
			e.printStackTrace();
91
		}
92
		for(FlipkartItem flipkartItem:flipkartItems){
93
			if(flipkartItem.isIsListedOnFlipkart() && !flipkartItem.isSuppressInventoryFeed())
94
				flipkartInventoryItems.add(flipkartItem);
95
		}
96
		if(flipkartInventoryItems.size()==0){
97
			String text = "";
98
			try {
99
				mailer.sendSSLMessage(sendTo,"No items to send inventory ", emailFromAddress, password, text);
100
				System.exit(0);
101
			} catch (MessagingException e) {
102
				e.printStackTrace();
103
			}
104
		}
105
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
106
		try {
107
			flipkartorderids = FetchOrders();
108
		} catch (ClientProtocolException e1) {
109
			e1.printStackTrace();
110
		} catch (IOException e1) {
111
			e1.printStackTrace();
112
		}
113
		try {
114
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
115
			if(flipkartorderids!=null && flipkartorderids.size()>0){
9989 vikram.rag 116
				itemIdOrdersMap = transactionClient.getCreatedOrdersForFlipkart(flipkartorderids);
10049 vikram.rag 117
			}
118
		} catch (TTransportException e) {
119
			try {
120
				itemIdOrdersMap = transactionClient.getCreatedOrdersForFlipkart(flipkartorderids);
9989 vikram.rag 121
			} catch (TException e1) {
122
				e1.printStackTrace();
123
			}
10049 vikram.rag 124
			//e.printStackTrace();
125
		}catch (TException e) {
126
			e.printStackTrace();
127
		}
9947 vikram.rag 128
 
129
	}
130
 
9967 vikram.rag 131
	public static void main(String[] args) throws ClientProtocolException, TException{
9947 vikram.rag 132
		calculateinventory();
133
		DefaultHttpClient httpclient = new DefaultHttpClient();
9973 vikram.rag 134
		httpclient = (DefaultHttpClient) WebClientWrapper.wrapClient(httpclient);
10051 vikram.rag 135
		//httpclient.getCredentialsProvider().setCredentials(
136
		//		new AuthScope("sandbox-api.flipkart.net", 443),
137
		//		new UsernamePasswordCredentials("og3yg5994bxbxxc1", "8a137068-417c-4e4f-ae95-9295ab938d88"));/// Test Server Access Keys
10049 vikram.rag 138
		httpclient.getCredentialsProvider().setCredentials(
9975 vikram.rag 139
				new AuthScope("api.flipkart.net", 443),
9974 vikram.rag 140
				new UsernamePasswordCredentials("m2z93iskuj81qiid","0c7ab6a5-98c0-4cdc-8be3-72c591e0add4")); //Prod Server Access Keys
10051 vikram.rag 141
		HttpPost httppost = new HttpPost("https://api.flipkart.net/sellers/skus/listings/bulk"); // PROD
142
		//HttpPost httppost = new HttpPost("https://sandbox-api.flipkart.net/sellers/skus/listings/bulk"); // TEST
9947 vikram.rag 143
		StringBuffer jsonRequest = new StringBuffer();
9983 vikram.rag 144
		StringBuffer jsonStart = new StringBuffer();
145
		jsonStart = jsonStart.append("{\"listings\":[");
146
		StringBuffer jsonEnd = new StringBuffer();
147
		jsonEnd.append("]}");
9947 vikram.rag 148
		//System.out.println("JSON request  " + jsonRequest);
149
		LogisticsClient logisticsServiceClient;
150
		in.shop2020.logistics.LogisticsService.Client logisticsClient=null;
151
		LogisticsInfo logisticinfo = null;
152
		try {
153
			logisticsServiceClient = new LogisticsClient("logistics_service_prod_server_host","logistics_service_prod_server_port");
154
			logisticsClient = logisticsServiceClient.getClient();
155
 
156
		} catch (TTransportException e) {
157
			e.printStackTrace();
158
		}
159
		long stock=0;
160
		int i=0;
10049 vikram.rag 161
		long available,reserve,heldforsource,totalheld,allocable,holdinventory,defaultinventory,actualstock,orders,heldorders;
9983 vikram.rag 162
		StringBuffer inventoryItems =new StringBuffer();
163
		String tableHeader = "<html><table border=\"1\" align=\"center\"><tr>" 
164
			+ "<td><b>" + "Product Name" +"</b></td>"
165
			+"<td><b>" + "Item ID" + "</b></td>"
166
			+"<td><b>" + "Inventory" + "</b></td>"
167
			+"<td><b>" + "Orders Added to Inventory" + "</b></td>"
168
			+"<td><b>" + "Sent Inventory" + "</b></td>"
10049 vikram.rag 169
			+"<td><b>" + "Procurement SLA" + "</b></td>"
170
			+"<td><b>" + "Orders on Hold" + "</b></td>"
9983 vikram.rag 171
			+"</tr>";
172
		String tableFooter = "</table></html>";
173
		Item item;
10027 vikram.rag 174
		StringBuffer feedResponse=  new StringBuffer();
10049 vikram.rag 175
		List<FlipkartInventorySnapshot> inventorysnapshotlist = new ArrayList<FlipkartInventorySnapshot>();
9947 vikram.rag 176
		for(Entry<Long, FlipkartInventoryItem> entry:flipkartItemsInventoryMap.entrySet()){
9985 vikram.rag 177
			actualstock=0;
178
			orders=0;
179
			stock=0;
10049 vikram.rag 180
			heldorders=0;
9947 vikram.rag 181
			available = entry.getValue().getAvailability();
182
			reserve = entry.getValue().getReserve();
183
			heldforsource = entry.getValue().getHeldForSource();
184
			totalheld = entry.getValue().getTotalHeldInventory();
185
			holdinventory = entry.getValue().getHoldInventory();
186
			defaultinventory = entry.getValue().getDefaultInventory();
9987 vikram.rag 187
			System.out.println("Item ID  " + entry.getKey());
188
			System.out.println("Available " + available);
189
			System.out.println("Reserve " + reserve);
190
			System.out.println("Held For Source " + heldforsource);
191
			System.out.println("Total Held " + totalheld);
192
			System.out.println("General Hold " + holdinventory );
193
			System.out.println("Default Inventory " + defaultinventory);
9947 vikram.rag 194
			if(!entry.getValue().getStatus().equals(status.PAUSED)){
195
				if(entry.getValue().getRisky()){
196
					if((available - reserve) < totalheld && totalheld!=0){
197
						stock = (long) Math.floor(((available - reserve)*heldforsource/totalheld));
198
					}
199
					else{
200
						allocable = available - reserve - totalheld - holdinventory;
201
						if(allocable < 0){
202
							allocable = 0;
203
						}
204
						stock = Math.round(allocable*1/3) + heldforsource;
205
					}
206
 
207
				}
208
				else{
209
					allocable = available - reserve - totalheld;
210
					if(allocable < 0){
211
						allocable = 0;
212
					}
213
					if((allocable + heldforsource ) > defaultinventory){
214
						stock = Math.round(allocable*1/3) +  heldforsource;
215
					}
216
					else{
217
						stock = defaultinventory;
218
					}
219
				}
220
				System.out.println("Item ID " + entry.getKey()+" Stock "+stock +" Orders " + itemIdOrdersMap.get(entry.getKey()));
9992 vikram.rag 221
				actualstock = stock;
9971 vikram.rag 222
				if(itemIdOrdersMap!=null && itemIdOrdersMap.containsKey(entry.getKey())){
9977 vikram.rag 223
					stock = stock + itemIdOrdersMap.get(entry.getKey());  
9983 vikram.rag 224
					orders = itemIdOrdersMap.get(entry.getKey());
9947 vikram.rag 225
				}
226
				if(stock<0){
227
					stock =0;
228
				}
9977 vikram.rag 229
				else{
230
					if(stock > 25){
231
						stock=25;
232
					}
233
				}
9947 vikram.rag 234
			}
235
			else{
236
				stock =0;
237
			}
238
			try {
239
				logisticinfo = logisticsClient.getLogisticsEstimation(entry.getValue().getId(),"110001",DeliveryType.COD);
240
			} catch (LogisticsServiceException e) {
241
				e.printStackTrace();
242
				continue;
243
			}
10029 vikram.rag 244
			catch (TTransportException e) {
245
				logisticsServiceClient = new LogisticsClient("logistics_service_prod_server_host","logistics_service_prod_server_port");
246
				logisticsClient = logisticsServiceClient.getClient();
247
			} 
10107 vikram.rag 248
			System.out.println("sku at flipkart " + entry.getValue().getSkuAtflipkart());
249
			System.out.println("shipping time " + logisticinfo.getShippingTime());
250
			System.out.println("stock " + stock);
9947 vikram.rag 251
			jsonRequest.append("{\"skuId\":"+"\""+entry.getValue().getSkuAtflipkart()+
252
					"\","+"\"attributeValues\""+":"+
253
					"{\"procurement_sla\""+":"+"\""+logisticinfo.getShippingTime()+
254
					"\","+"\"stock_count\""+":"+"\""+stock+"\""+"}}");
10049 vikram.rag 255
			FlipkartInventorySnapshot inventorySnapshot = new FlipkartInventorySnapshot();
256
			inventorySnapshot.setItem_id(entry.getKey());
257
			inventorySnapshot.setAvailability(stock);
258
			if(heldOrdersMap.containsKey(entry.getValue().getSkuAtflipkart())){
259
				inventorySnapshot.setHeldOrders(heldOrdersMap.get(entry.getValue().getSkuAtflipkart()));
10060 vikram.rag 260
				heldorders = heldOrdersMap.get(entry.getValue().getSkuAtflipkart());
10049 vikram.rag 261
			}
262
			else{
263
				inventorySnapshot.setHeldOrders(0);
264
			}
265
			inventorySnapshot.setCreatedOrders(orders);
266
			inventorysnapshotlist.add(inventorySnapshot);
9983 vikram.rag 267
			item = aliveItemsMap.get(entry.getValue().getId());
268
			inventoryItems.append("<tr>" 
269
					+ "<td>" +getProductName(item)+"</td>"
270
					+"<td>" + item.getId() + "</td>"
271
					+"<td>" + actualstock + "</td>"
272
					+"<td>" + orders + "</td>"
273
					+"<td>" + stock + "</td>"
10049 vikram.rag 274
					+"<td>" + logisticinfo.getShippingTime() + "</td>"
275
					+"<td>" + heldorders + "</td>"
9983 vikram.rag 276
					+"</tr>");
10028 vikram.rag 277
			i++;
278
			if(flipkartItemsInventoryMap.entrySet().size()!=1 && (i!=flipkartItemsInventoryMap.entrySet().size()) ){
10026 vikram.rag 279
				if(i%10!=0){
280
					jsonRequest.append(",");
281
				}
9947 vikram.rag 282
			}
283
			if(i%10==0 || i==flipkartItemsInventoryMap.entrySet().size()){
9968 vikram.rag 284
				StringEntity input = null;
285
				try {
9983 vikram.rag 286
					input = new StringEntity(jsonStart+jsonRequest.toString()+jsonEnd);
287
					System.out.println("Json input " + jsonStart+jsonRequest.toString()+jsonEnd);
288
					jsonRequest = new StringBuffer();
9968 vikram.rag 289
				} catch (UnsupportedEncodingException e) {
290
					e.printStackTrace();
291
				}
9947 vikram.rag 292
				input.setContentType("application/json");
10049 vikram.rag 293
 
9947 vikram.rag 294
				httppost.setEntity(input);
9968 vikram.rag 295
				HttpResponse response = null;
296
				try {
9970 vikram.rag 297
					System.out.println("Before send " );
9968 vikram.rag 298
					response = httpclient.execute(httppost);
9970 vikram.rag 299
					System.out.println("After send " );
9968 vikram.rag 300
				} catch (IOException e) {
301
					e.printStackTrace();
302
				}
9969 vikram.rag 303
				BufferedReader rd = null;
9968 vikram.rag 304
				try {
305
					rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
306
				} catch (IllegalStateException e) {
307
					e.printStackTrace();
308
				} catch (IOException e) {
309
					e.printStackTrace();
310
				}
9947 vikram.rag 311
				String line;
10049 vikram.rag 312
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryServiceClient;
9969 vikram.rag 313
				try {
314
					while ((line = rd.readLine()) != null) {
315
						System.out.println("Response " + line);
9983 vikram.rag 316
						if(line.equalsIgnoreCase("{\"status\":\"success\"}")){
10049 vikram.rag 317
							inventoryServiceClient = new InventoryClient("inventory_service_server_host","inventory_service_server_port").getClient();
318
							inventoryServiceClient.addOrUpdateFlipkartInventorySnapshot(inventorysnapshotlist);
319
							inventorysnapshotlist = new ArrayList<FlipkartInventorySnapshot>();
9983 vikram.rag 320
						}
321
						else{
322
							feedResponse.append(line);
323
						}
10049 vikram.rag 324
 
9969 vikram.rag 325
					}
326
				} catch (IOException e) {
327
					e.printStackTrace();
9947 vikram.rag 328
				}
329
			}
330
		}
9983 vikram.rag 331
		System.out.println("Before sending email");
332
		String text = tableHeader+inventoryItems.toString()+tableFooter;
333
		try {
334
			mailer.sendSSLMessage(sendTo,"Flipkart Inventory Sent Details ", emailFromAddress, password, text);
335
		} catch (MessagingException e) {
336
			e.printStackTrace();
337
		}
338
		if(feedResponse.toString().length()>0){
339
			try {
340
				mailer.sendSSLMessage(sendTo, "Flipkart Inventory could not be updated ", feedResponse.toString(), emailFromAddress, password,new ArrayList<File>());
341
			} catch (MessagingException e) {
342
				e.printStackTrace();
343
			}
344
		}
345
		else{
346
			try {
347
				mailer.sendSSLMessage(sendTo, "Flipkart Inventory updated successfully ", feedResponse.toString(), emailFromAddress, password,new ArrayList<File>());
348
			} catch (MessagingException e) {
349
				e.printStackTrace();
350
			}
351
		}
9947 vikram.rag 352
	}
9983 vikram.rag 353
 
9947 vikram.rag 354
	private static void calculateinventory(){
355
		CatalogClient catalogServiceClient = null;
356
		Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();
357
		try {
358
			catalogServiceClient = new CatalogClient();
359
		} catch (TTransportException e) {
360
			e.printStackTrace();
361
		}
362
		in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
363
		try {
364
			List<Item> aliveItems = catalogClient.getAllAliveItems();
365
			for(in.shop2020.model.v1.catalog.Item thriftItem:aliveItems){
366
				aliveItemsMap.put(thriftItem.getId(), thriftItem);
367
 
368
			}
369
			InventoryClient inventoryServiceClient = new InventoryClient();
370
			try {
371
				inventoryServiceClient = new InventoryClient();
372
			} catch (TTransportException e) {
373
				e.printStackTrace();
374
			}
375
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
376
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
377
			availability = inventoryClient.getInventorySnapshot(0);
378
			List<Warehouse> allwarehouses = inventoryClient.getWarehouses(null,null,0,0,0);
379
			Map<Long,Warehouse> allWarehousesMap = new HashMap<Long,Warehouse>();
380
			for(Warehouse warehouse:allwarehouses){
381
				allWarehousesMap.put(warehouse.getId(),warehouse);
382
			}
383
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
384
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
385
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
386
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
387
			for(Warehouse warehouse:warehouses){
388
				thirdpartywarehouseids.add(warehouse.getId());
389
			}
390
			for (Warehouse warehouse:ours_warehouses){
391
				oursGoodWarehouse.add(warehouse.getId());
392
			}
393
			long available=0;
394
			long reserve=0;
395
			long total_warehouse_held=0;
396
			long heldForSource=0;
397
			long total_held=0;
398
			double nlc=0;
399
			double maxnlc=0;
400
			Item thriftItem;
401
			for(FlipkartItem flipkartItem:flipkartInventoryItems){
402
				if(aliveItemsMap.get(flipkartItem.getItem_id()) != null){
403
					thriftItem = aliveItemsMap.get(flipkartItem.getItem_id());	
404
				}
405
				else{
406
					continue;
407
				}
408
				available=0;
409
				reserve=0;
410
				total_warehouse_held=0;
411
				heldForSource=0;
412
				total_held=0;
413
				nlc=0;
414
				List<Warehouse> vendor_warehouses=null;
415
				FlipkartInventoryItem item;
416
				if(availability.get(thriftItem.getId())!=null){ 
417
					ItemInventory iteminventory = availability.get(thriftItem.getId());
418
					Map<Long,Long> itemavailability = new HashMap<Long,Long>();
419
					itemavailability = iteminventory.getAvailability();
420
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
421
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());						
422
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
423
						vendor_warehouses.addAll(ours_warehouses);
424
						for (Warehouse warehouse:vendor_warehouses){
425
							if(warehouse.getBillingWarehouseId()!=7){
426
								if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){
427
 
428
								}
429
								else{
430
									continue;
431
								}
432
							}
433
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
434
							ignoredItem.setItemId(thriftItem.getId());
435
							ignoredItem.setWarehouseId(warehouse.getId());
436
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem)){
437
								try{
438
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
439
								}
440
								catch(TTransportException e){
441
									inventoryClient = inventoryServiceClient.getClient(); 
442
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
443
								}
444
								maxnlc = flipkartItem.getMaxNlc();
445
 
446
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
447
								if(nlc !=0 && (maxnlc >= nlc)){
448
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
449
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 8);
450
									available = available + itemavailability.get(warehouse.getId());
451
									total_held = total_held + total_warehouse_held; 
452
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
453
								}
454
								else if(maxnlc==0){
455
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
456
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 8);
457
									available = available + itemavailability.get(warehouse.getId());
458
									total_held = total_held + total_warehouse_held;
459
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
460
								}
461
							}
462
						}
463
					}
464
					else{
465
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
466
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
467
								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){
468
 
469
								}
470
								else{
471
									continue;
472
								}
473
							}
474
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
475
							ignoredItem.setItemId(thriftItem.getId());
476
							ignoredItem.setWarehouseId(entry.getKey());
477
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
478
 
479
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
480
								maxnlc = flipkartItem.getMaxNlc();
481
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );
482
								if(nlc !=0 && (maxnlc >= nlc)){
483
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
484
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 8);
485
									available =  available + entry.getValue();
486
									total_held = total_held + total_warehouse_held;
487
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
488
								}
489
								else if(maxnlc==0){
490
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
491
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 8);
492
									available = available + itemavailability.get(entry.getKey());
493
									total_held = total_held + total_warehouse_held;
494
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
495
								}
496
 
497
							}
498
						}
499
					}
500
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
501
					itemreserve = iteminventory.getReserved();
502
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
503
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
504
						for (Warehouse warehouse:vendor_warehouses){
505
							if(warehouse.getBillingWarehouseId()!=7){
506
								if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){
507
 
508
								}
509
								else{
510
									continue;
511
								}
512
							}
513
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
514
							ignoredItem.setItemId(thriftItem.getId());
515
							ignoredItem.setWarehouseId(warehouse.getId());
516
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
517
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
518
								maxnlc = flipkartItem.getMaxNlc();
519
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
520
								if(nlc !=0 && (maxnlc >= nlc)){
521
									reserve = reserve + itemreserve.get(warehouse.getId());
522
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
523
								}
524
								else if(maxnlc==0){
525
									reserve = reserve + itemreserve.get(warehouse.getId());
526
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
527
								}
528
 
529
							}
530
						}
531
					}else{
532
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
533
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
534
								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){
535
 
536
								}
537
								else{
538
									continue;
539
								}
540
							}
541
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
542
							ignoredItem.setItemId(thriftItem.getId());
543
							ignoredItem.setWarehouseId(entry.getKey());
544
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
545
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
546
								maxnlc = flipkartItem.getMaxNlc();
547
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );
548
								if(nlc !=0 && (maxnlc >= nlc)){
549
									reserve =  reserve + entry.getValue();
550
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
551
								}
552
								else if(maxnlc==0){
553
									reserve =  reserve + entry.getValue();
554
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
555
								}
556
 
557
							}
558
 
559
							else{
560
								//System.out.println("skipping inventory for warehouse id " + entry.getKey());
561
							}
562
						}
563
					}
564
					item= new FlipkartInventoryItem(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),total_held,thriftItem.isRisky(),thriftItem.getItemStatus(),flipkartItem.getSkuAtFlipkart());
565
					//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
566
				}
567
				else{
568
					item = new FlipkartInventoryItem(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),0,thriftItem.isRisky(),thriftItem.getItemStatus(),flipkartItem.getSkuAtFlipkart());
569
					//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
570
				}
571
 
572
				//System.out.println(" Item details are " + thriftItem.getId() +" " + available + " " + reserve + " " + thriftItem.getHoldInventory() + " "+ thriftItem.getDefaultInventory() + " " + thriftItem.isRisky());
573
				//System.out.println("+++++++++++++++++++++++");
574
				flipkartItemsInventoryMap.put(thriftItem.getId(),item);
575
 
576
			}
577
 
578
		} catch (TException e) {
579
			e.printStackTrace();
580
		}
581
	}
582
 
583
	static List<String> FetchOrders() throws ClientProtocolException, IOException{
584
		HttpClient client = new DefaultHttpClient();
585
		HttpPost post = new HttpPost("https://seller.flipkart.com/login");
586
		BufferedReader rd= null;
587
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
588
		nameValuePairs.add(new BasicNameValuePair("authName",
589
		"flipkart"));
590
		nameValuePairs.add(new BasicNameValuePair("username",
591
		"flipkart-support@saholic.com"));
592
		nameValuePairs.add(new BasicNameValuePair("password",
593
		"076c27ee24d7596b06608a8ed2559f87"));
594
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
595
		HttpResponse response = client.execute(post);
596
		rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
597
		String line = "";
598
		Gson gson;
599
		List<Order> orders = new ArrayList<Order>(); 
600
		OrderItems new_orders;
601
		OrderItems conf_orders;
602
		HttpGet get_new;
603
		HttpGet get_conf; 
604
		long time;
605
		int i=1;
606
		while ((line = rd.readLine()) != null) {
607
			System.out.println(line);
608
		}
609
		time = System.currentTimeMillis();
610
		while(true){
611
			get_new = new HttpGet("https://seller.flipkart.com/dashboard/som/new_order_items?status=on_hold%2Capproved.payment_approved&sort=confirm_by_date&page="+i+"&page_size=100&_="+time);
612
			response = client.execute(get_new);
613
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
614
			line = "";
615
			gson = new Gson();
616
			new_orders = (OrderItems) gson.fromJson(rd, OrderItems.class);
617
			if(new_orders.getOrder_items().size()>0){
618
				orders.addAll(new_orders.getOrder_items());
619
			}
620
			else{
621
				break;
622
			}
623
			i++;
624
		}
625
		i=1;
626
		time = System.currentTimeMillis();
627
		while(true){
628
			get_conf = new HttpGet("https://seller.flipkart.com/dashboard/som/confirmed_order_items?status=approved.seller_approved&sort=confirm_by_date&page="+i+"&page_size=100&_="+time);
629
			response = client.execute(get_conf);
630
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
631
			line = "";
632
			gson = new Gson();
633
			conf_orders = (OrderItems) gson.fromJson(rd, OrderItems.class);
634
			if(conf_orders.getOrder_items().size()>0){
635
				orders.addAll(conf_orders.getOrder_items());
636
			}
637
			else{
638
				break;
639
			}
640
			i++;
641
		}
642
		List<String> orderIdList = new ArrayList<String>();
10054 vikram.rag 643
		Long heldOrders = 0L;
9947 vikram.rag 644
		for(Order order:orders){
10049 vikram.rag 645
			//System.out.println("Order  " + order.getExternalId() +" "+order.getOrderItemId() + " : "+ order.getStatus() + " "+order.getStatusDateMessage() + " "
646
			//		+ order.getStatusLabel() + " " + order.getPickup_by_date() + " "+ order.getTrackingId());
9947 vikram.rag 647
			orderIdList.add(order.getExternalId());
10049 vikram.rag 648
			if(order.getStatus().equalsIgnoreCase("on_hold")){
10062 vikram.rag 649
				if(heldOrdersMap.containsKey(String.valueOf(order.getSku()))){
10057 vikram.rag 650
					heldOrders = heldOrdersMap.get(String.valueOf(order.getSku()))+order.getQuantity();
651
					heldOrdersMap.put(String.valueOf(order.getSku()),heldOrders);
10059 vikram.rag 652
					System.out.println("Item ID " + order.getSku() + " Held Orders " + heldOrdersMap.get(String.valueOf(order.getSku())));
10049 vikram.rag 653
				}
654
				else{
10054 vikram.rag 655
					heldOrders = (long) order.getQuantity();
10057 vikram.rag 656
					heldOrdersMap.put(String.valueOf(order.getSku()),heldOrders);
10059 vikram.rag 657
					System.out.println("Item ID " + order.getSku() + " Held Orders " + heldOrdersMap.get(String.valueOf(order.getSku())));
10049 vikram.rag 658
				}
659
			}
9947 vikram.rag 660
		}
661
		return orderIdList; 
662
	}
9983 vikram.rag 663
	static String getProductName(Item item){
664
		return getName(item.getBrand())+" " + getName(item.getModelName())+" " + getName(item.getModelNumber())+" " + getName(item.getColor()); 
665
 
666
	}
667
	static String getName(String name){
668
		if(name==null || name.length()==0){
669
			return "";
670
		}
671
		else{
672
			return name;
673
		}
674
	}
9947 vikram.rag 675
}