Subversion Repositories SmartDukaan

Rev

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