Subversion Repositories SmartDukaan

Rev

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