Subversion Repositories SmartDukaan

Rev

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