Subversion Repositories SmartDukaan

Rev

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