Subversion Repositories SmartDukaan

Rev

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