Subversion Repositories SmartDukaan

Rev

Rev 8697 | Rev 8739 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8616 vikram.rag 1
package in.shop2020;
2
 
3
import in.shop2020.model.v1.catalog.CatalogService;
4
import in.shop2020.model.v1.catalog.CatalogServiceException;
5
import in.shop2020.model.v1.catalog.Item;
6
import in.shop2020.model.v1.inventory.InventoryService;
7
import in.shop2020.model.v1.inventory.InventoryServiceException;
8
import in.shop2020.model.v1.inventory.VendorItemPricing;
9
import in.shop2020.model.v1.inventory.Warehouse;
10
import in.shop2020.model.v1.order.LineItem;
11
import in.shop2020.model.v1.order.OrderStatus;
12
import in.shop2020.model.v1.order.OrderType;
13
import in.shop2020.model.v1.order.SnapdealOrder;
14
import in.shop2020.model.v1.order.SourceDetail;
15
import in.shop2020.model.v1.order.Transaction;
8651 vikram.rag 16
import in.shop2020.model.v1.order.TransactionServiceException;
8616 vikram.rag 17
import in.shop2020.model.v1.order.TransactionStatus;
18
import in.shop2020.model.v1.order.TransactionService.Client;
19
import in.shop2020.model.v1.user.User;
20
import in.shop2020.payments.PaymentException;
21
import in.shop2020.payments.PaymentStatus;
22
import in.shop2020.thrift.clients.CatalogClient;
23
import in.shop2020.thrift.clients.InventoryClient;
24
import in.shop2020.thrift.clients.PaymentClient;
25
import in.shop2020.thrift.clients.TransactionClient;
26
import in.shop2020.thrift.clients.UserClient;
27
 
28
import java.io.File;
8651 vikram.rag 29
import java.text.ParseException;
8616 vikram.rag 30
import java.text.SimpleDateFormat;
31
import java.util.ArrayList;
32
import java.util.Calendar;
33
import java.util.Collections;
34
import java.util.Date;
35
import java.util.List;
36
import java.util.TimeZone;
37
 
38
import javax.xml.bind.JAXBContext;
39
import javax.xml.bind.JAXBException;
40
import javax.xml.bind.Marshaller;
41
import javax.xml.bind.Unmarshaller;
42
import org.apache.thrift.TException;
43
import org.apache.thrift.transport.TTransportException;
8645 vikram.rag 44
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
8616 vikram.rag 46
 
47
import order.SaholicAPI;
48
import order.ObjectFactory;
49
import order.SaholicAPI.Order;
50
 
51
public class ProcessSnapdealOrder {
52
	private static final int SNAPDEAL_SOURCE_ID = 7;
53
	private static final String FIRSTFLIGHT = "First Flight";
8627 vikram.rag 54
	private static final String DELHIVERY = "DELHIVERY";
55
	private static final String BLUEDART = "Bluedart";
8715 vikram.rag 56
	private static final String CHHOTU = "CHHOTU";	
57
	private static final String LAST_MILE = "LAST_MILE";
58
	private static final String  ECOMM_EXP = "ECOMM_EXP";
59
	private static final String  EWINGS = "EWINGS";
60
	private static final String DTDC = "DTDC";
61
	private static final String WAREOLOG = "DTDC";
62
	private static final String  MIRAKLE = "MIRAKLE";
63
	private static final String RAJIV_TRANSPORT = "RAJIV_TRANSPORT";
64
	private static final String BLUEDART_HIGH_VALUE = "BLUEDART_HIGH_VALUE";
65
	private static final String BLUEDART_SURFACE = "BLUEDART_SURFACE";
66
	private static final String BLUEDART_APEX = "BLUEDART_APEX";
67
	private static final String ARAMEX = "ARAMEX";
68
	private static final String GATI = "GATI";
69
	private static final String INDIA_POST = "INDIA_POST";
70
	private static final String FEDEX = "FEDEX";
71
	private static final String IOT = "IOT";
72
	private static final String RED_EXP = "RED_EXP";
73
	private static final String GHARPAY = "GHARPAY";
74
	private static final String QUANTIUM = "QUANTIUM";
75
	private static final String GATI_AIR = "GATI_AIR`";
76
	private static final String VDELIVER = "VDELIVER";
8627 vikram.rag 77
	private static String transactionId;
78
	private static final int SNAPDEAL_GATEWAY_ID = 18;
8646 vikram.rag 79
	private static Logger logger;
8627 vikram.rag 80
 
8616 vikram.rag 81
	public static void processSnapdealOrders(File file) throws JAXBException{
8646 vikram.rag 82
		logger = LoggerFactory.getLogger(ProcessSnapdealOrder.class);
8616 vikram.rag 83
		JAXBContext jc = JAXBContext.newInstance(SaholicAPI.class);
84
		Unmarshaller unmarshaller = jc.createUnmarshaller();
85
		SaholicAPI orders = (SaholicAPI) unmarshaller.unmarshal(file);
86
		Marshaller marshaller = jc.createMarshaller();
87
		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
88
		marshaller.marshal(orders, System.out);
89
		SourceDetail sourceDetail = null;
90
		User user = null;
91
		TransactionClient tsc = null;
92
		try {
93
			tsc = new TransactionClient();
94
			sourceDetail = tsc.getClient().getSourceDetail(SNAPDEAL_SOURCE_ID);
95
		} catch (Exception e) {
8645 vikram.rag 96
			logger.error("Unable to establish connection to the transaction service while getting Snapdeal Source Detail", e);
8616 vikram.rag 97
		}
98
		try {   
99
			in.shop2020.model.v1.user.UserContextService.Client userClient = new UserClient().getClient();
100
			user = userClient.getUserByEmail(sourceDetail.getEmail());
101
		} catch (Exception e) {
8649 vikram.rag 102
			logger.error("Unable to establish connection to the User service", e);
8616 vikram.rag 103
		}
104
		for(Order order:orders.getOrder()){
8627 vikram.rag 105
			long subOrderId = (long) order.getSuborderId();
106
			Client transaction_client = null;
107
			try {
108
				transaction_client = new TransactionClient().getClient();
109
				//transaction_client.snapdealOrderExists(subOrderId);
110
				System.out.println("Suborder id " + subOrderId);
111
				if(transaction_client.snapdealOrderExists(subOrderId)) {
112
					System.out.println("Suborder id exists");
113
					continue;
114
				}
115
 
116
			} catch (TTransportException e1) {
117
				// TODO Auto-generated catch block
118
				e1.printStackTrace();
119
			} catch (TException e) {
120
				// TODO Auto-generated catch block
121
				e.printStackTrace();
122
			}
123
			System.out.println("Inside Order Parsing");
8616 vikram.rag 124
			Transaction txn = new Transaction();
8627 vikram.rag 125
			System.out.println("User details are " + user.getActiveCartId());
8616 vikram.rag 126
			txn.setShoppingCartid(user.getActiveCartId());
8627 vikram.rag 127
			System.out.println("transaction created");
8616 vikram.rag 128
			txn.setCustomer_id(user.getUserId());
8627 vikram.rag 129
			System.out.println("User Id is " + user.getUserId());
8616 vikram.rag 130
			txn.setCreatedOn(new Date().getTime());
131
			txn.setTransactionStatus(TransactionStatus.INIT);
132
			txn.setStatusDescription("Order for Snapdeal ");
133
			List<in.shop2020.model.v1.order.Order> orderlist = new ArrayList<in.shop2020.model.v1.order.Order>();
134
			LineItem lineItem = null;
135
			try {
136
				lineItem = createLineItem(order.getSKUCode(),order.getSellingPricePerItem());
8627 vikram.rag 137
				System.out.println("Line item created");
8616 vikram.rag 138
			} catch (CatalogServiceException e) {
8645 vikram.rag 139
				logger.error("Unable to create order for suborderid  " + order.getSuborderId());
8616 vikram.rag 140
				e.printStackTrace();
141
			} catch (TException e) {
8645 vikram.rag 142
				logger.error("Unable to create order for suborderid  " + order.getSuborderId());
8616 vikram.rag 143
				e.printStackTrace();
144
			}
145
			in.shop2020.model.v1.order.Order t_order = new in.shop2020.model.v1.order.Order();
8627 vikram.rag 146
			t_order.setCustomer_id(user.getUserId());
147
			t_order.setCustomer_email(sourceDetail.getEmail());
148
			t_order.setCustomer_name(order.getCustomerName());
149
			t_order.setCustomer_address1("");
150
			t_order.setCustomer_address2("");
151
			t_order.setCustomer_city(order.getCity());
152
			t_order.setCustomer_state(order.getState());
153
			t_order.setCustomer_pincode(String.valueOf(order.getPINCode()));
154
			t_order.setTotal_amount(lineItem.getTotal_price());            
155
			t_order.setTotal_weight(lineItem.getTotal_weight());
156
			t_order.setLineitems(Collections.singletonList(lineItem));            
157
			t_order.setStatus(OrderStatus.SUBMITTED_FOR_PROCESSING);
158
			t_order.setStatusDescription("In Process");
159
			t_order.setCreated_timestamp(new Date().getTime());
160
			t_order.setOrderType(OrderType.B2C);
161
			t_order.setCod(false);
162
			System.out.println("t order created");
163
			try {
8661 vikram.rag 164
				SimpleDateFormat istFormatter = new SimpleDateFormat("yyyy-MM-dd");
165
				Date shipDate = null;
166
				try {
167
					shipDate= istFormatter.parse(order.getShipByDate());
168
				} catch (ParseException e) {
169
					logger.error("Could not parse order date from file ");
170
					e.printStackTrace();
171
				}
8627 vikram.rag 172
				Calendar time = Calendar.getInstance();
173
				time.add(Calendar.DAY_OF_MONTH, 1);
8661 vikram.rag 174
				t_order.setPromised_shipping_time(shipDate.getTime());
175
				t_order.setExpected_shipping_time(shipDate.getTime());
8627 vikram.rag 176
				time.add(Calendar.DAY_OF_MONTH, 3);
177
				t_order.setPromised_delivery_time(time.getTimeInMillis());
178
				t_order.setExpected_delivery_time(time.getTimeInMillis());
179
				System.out.println("Dates set in transaction");
8697 vikram.rag 180
			} catch(Exception e) {	
8645 vikram.rag 181
				logger.error("Error in updating Shipping or Delivery Time for suborderid  " + order.getSuborderId());
8627 vikram.rag 182
				continue;
183
			}
8657 vikram.rag 184
			InventoryService.Client inventoryClient = null;
185
            Warehouse fulfillmentWarehouse= null; 
8616 vikram.rag 186
            try {
8657 vikram.rag 187
            	inventoryClient = new InventoryClient().getClient();
188
            	List<Long> itemAvailability = inventoryClient.getItemAvailabilityAtLocation(order.getSKUCode(), 1);
189
            	fulfillmentWarehouse = inventoryClient.getWarehouse(itemAvailability.get(0));
8662 vikram.rag 190
            	logger.info("Fulfillment warehouse id for suborderid  " + order.getSuborderId() + " is " + fulfillmentWarehouse.getId());
8657 vikram.rag 191
            	t_order.setFulfilmentWarehouseId(fulfillmentWarehouse.getId());
8662 vikram.rag 192
            	logger.info("Billing warehouse id for suborderid  " + order.getSuborderId() + " is " + fulfillmentWarehouse.getBillingWarehouseId());
8657 vikram.rag 193
        		t_order.setWarehouse_id(fulfillmentWarehouse.getBillingWarehouseId());
194
        		VendorItemPricing vendorItemPricing = inventoryClient.getItemPricing(lineItem.getItem_id(), fulfillmentWarehouse.getVendor().getId());
195
        		t_order.getLineitems().get(0).setTransfer_price(vendorItemPricing.getTransferPrice());
196
        		t_order.getLineitems().get(0).setNlc(vendorItemPricing.getNlc());
8616 vikram.rag 197
			} catch (InventoryServiceException e) {
8662 vikram.rag 198
				logger.error("Error connecting inventory service for suborderid  " + order.getSuborderId());
8616 vikram.rag 199
            	continue;
200
			} catch (TTransportException e) {
201
				// TODO Auto-generated catch block
202
				e.printStackTrace();
203
			} catch (TException e) {
204
				// TODO Auto-generated catch block
205
				e.printStackTrace();
8657 vikram.rag 206
			}
8616 vikram.rag 207
			if(order.getCourier().equalsIgnoreCase(FIRSTFLIGHT)) {
208
				t_order.setLogistics_provider_id(12);
209
			} else if(order.getCourier().equalsIgnoreCase(DELHIVERY)) {
210
				t_order.setLogistics_provider_id(13);
211
			} else if(order.getCourier().equalsIgnoreCase(BLUEDART)) {
212
				t_order.setLogistics_provider_id(14);
8642 vikram.rag 213
			}else if(order.getCourier().equalsIgnoreCase(CHHOTU)) {
214
				t_order.setLogistics_provider_id(16);
8715 vikram.rag 215
			}
216
			else if(order.getCourier().equalsIgnoreCase(LAST_MILE)){
217
				t_order.setLogistics_provider_id(17);
218
			}
219
			else if(order.getCourier().equalsIgnoreCase(ECOMM_EXP)){
220
				t_order.setLogistics_provider_id(18);
221
			}
222
			else if(order.getCourier().equalsIgnoreCase(EWINGS)){
223
				t_order.setLogistics_provider_id(19);
224
			}
225
			else if(order.getCourier().equalsIgnoreCase(DTDC)){
226
				t_order.setLogistics_provider_id(20);
227
			}
228
			else if(order.getCourier().equalsIgnoreCase(WAREOLOG)){
229
				t_order.setLogistics_provider_id(21);
230
			}
231
			else if(order.getCourier().equalsIgnoreCase(MIRAKLE)){
232
				t_order.setLogistics_provider_id(22);
233
			}
234
			else if(order.getCourier().equalsIgnoreCase(RAJIV_TRANSPORT)){
235
				t_order.setLogistics_provider_id(23);
236
			}
237
			else if(order.getCourier().equalsIgnoreCase(BLUEDART_HIGH_VALUE)){
238
				t_order.setLogistics_provider_id(24);
239
			}
240
			else if(order.getCourier().equalsIgnoreCase(BLUEDART_SURFACE)){
241
				t_order.setLogistics_provider_id(25);
242
			}
243
			else if(order.getCourier().equalsIgnoreCase(BLUEDART_APEX)){
244
				t_order.setLogistics_provider_id(26);
245
			}
246
			else if(order.getCourier().equalsIgnoreCase(ARAMEX)){
247
				t_order.setLogistics_provider_id(27);
248
			}
249
			else if(order.getCourier().equalsIgnoreCase(GATI)){
250
				t_order.setLogistics_provider_id(28);
251
			}
252
			else if(order.getCourier().equalsIgnoreCase(INDIA_POST)){
253
				t_order.setLogistics_provider_id(29);
254
			}
255
			else if(order.getCourier().equalsIgnoreCase(FEDEX)){
256
				t_order.setLogistics_provider_id(30);
257
			}
258
			else if(order.getCourier().equalsIgnoreCase(IOT)){
259
				t_order.setLogistics_provider_id(31);
260
			}
261
			else if(order.getCourier().equalsIgnoreCase(RED_EXP)){
262
				t_order.setLogistics_provider_id(32);
263
			}
264
			else if(order.getCourier().equalsIgnoreCase(VDELIVER)){
265
				t_order.setLogistics_provider_id(33);
266
			}
267
			else if(order.getCourier().equalsIgnoreCase(GHARPAY)){
268
				t_order.setLogistics_provider_id(34);
269
			}
270
			else if(order.getCourier().equalsIgnoreCase(QUANTIUM)){
271
				t_order.setLogistics_provider_id(35);
272
			}
273
			else if(order.getCourier().equalsIgnoreCase(GATI_AIR)){
274
				t_order.setLogistics_provider_id(36);
275
			}
276
			else {
8652 vikram.rag 277
				logger.error("Error No Courier Match please add courier to our system for suborderid  " + order.getSuborderId() + "Courier Name " + order.getCourier());
8627 vikram.rag 278
				continue;
8616 vikram.rag 279
			}
8627 vikram.rag 280
 
8616 vikram.rag 281
			t_order.setAirwaybill_no(String.valueOf(order.getAWBNumber()));
282
			t_order.setTracking_id(String.valueOf(order.getAWBNumber()));
8627 vikram.rag 283
			t_order.setTotal_amount(order.getSellingPricePerItem());
284
			t_order.setOrderType(OrderType.B2C);
285
			t_order.setSource(SNAPDEAL_SOURCE_ID);
286
			t_order.setOrderType(OrderType.B2C);
287
			orderlist.add(t_order);
288
			txn.setOrders(orderlist);
289
				String referenceCode = order.getReferenceCode();
290
				String productName = order.getProduct();
8651 vikram.rag 291
				SimpleDateFormat istFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
292
				Date snapdealTxnDate = null;
293
				try {
294
					snapdealTxnDate = istFormatter.parse(order.getOrderPlacedDate());
295
				} catch (ParseException e) {
296
					logger.error("Could not parse order date from file ");
297
					e.printStackTrace();
298
				}
299
				try {
300
					transactionId =  String.valueOf(transaction_client.createTransaction(txn));
301
				} catch (TransactionServiceException e) {
302
					logger.error("Could not create transaction ");
303
					e.printStackTrace();
304
				} catch (TException e) {
305
					logger.error("Problem with transaction service while creating transaction");
306
					e.printStackTrace();
307
				}
8627 vikram.rag 308
				createPayment(user, (new Long(subOrderId)).toString(), lineItem.getTotal_price());
309
 
8651 vikram.rag 310
				Transaction transaction = null;
311
				try {
312
					transaction = transaction_client.getTransaction(Long.parseLong(transactionId));
313
				} catch (NumberFormatException e) {
314
					logger.error("Problem parsing transaction id " + transactionId);
315
					e.printStackTrace();
316
				} catch (TransactionServiceException e) {
317
					logger.error("Problem getting transaction from service transaction id " + transactionId);
318
					e.printStackTrace();
319
				} catch (TException e) {
320
					logger.error("Problem with transaction service while getting transaction id " + transactionId);
321
					e.printStackTrace();
322
				}
8627 vikram.rag 323
				in.shop2020.model.v1.order.Order snapdealorder = transaction.getOrders().get(0);
324
 
325
				//inventoryClient.reserveItemInWarehouse(lineItem.getItem_id(), fulfillmentWarehouse.getId(), 1, 
326
				//		snapdealorder.getId(), snapdealorder.getCreated_timestamp(), snapdealorder.getPromised_shipping_time(), snapdealorder.getLineitems().get(0).getQuantity());
327
 
328
 
329
				SnapdealOrder snapdealOrder = new SnapdealOrder();
330
				snapdealOrder.setOrderId(snapdealorder.getId());
331
				snapdealOrder.setSubOrderId(subOrderId);
332
				snapdealOrder.setReferenceCode(referenceCode);
333
				snapdealOrder.setProductName(productName);
334
				snapdealOrder.setSnapdealTxnDate(snapdealTxnDate.getTime());
335
				snapdealOrder.setListingPrice(lineItem.getTotal_price());
8651 vikram.rag 336
				try {
337
					transaction_client.createSnapdealOrder(snapdealOrder);
338
				} catch (TException e) {
339
					logger.error("Could not create Snapdeal Order");
340
					e.printStackTrace();
341
				}
8627 vikram.rag 342
 
8649 vikram.rag 343
			} 
8616 vikram.rag 344
 
345
	}
346
 
8649 vikram.rag 347
	public static void createPayment(User user, String subOrderId, double amount) {
348
		in.shop2020.payments.PaymentService.Client client = null;
349
		try {
350
			client = new PaymentClient().getClient();
351
		} catch (TTransportException e) {
352
			logger.error("Could not connect to payment service ");
353
			e.printStackTrace();
354
		}
355
		long paymentId = 0;
356
		try {
357
			paymentId = client.createPayment(user.getUserId(), amount, SNAPDEAL_GATEWAY_ID, Long.valueOf(transactionId), false);
358
		} catch (NumberFormatException e) {
359
			logger.error("Could not create payment");
360
			e.printStackTrace();
361
		} catch (PaymentException e) {
362
			logger.error("Could not create payment payment exception");
363
			e.printStackTrace();
364
		} catch (TException e) {
365
			logger.error("Could not create payment thrift exception");
366
			e.printStackTrace();
367
		}
368
		try {
369
			client.updatePaymentDetails(paymentId, null, null, null, null, null, null, subOrderId, null, PaymentStatus.AUTHORIZED, null, null);
370
		} catch (PaymentException e) {
371
			logger.error("Could not update payment to order");
372
			e.printStackTrace();
373
		} catch (TException e) {
374
			logger.error("Could not update payment thrift exception");
375
			e.printStackTrace();
376
		}
8627 vikram.rag 377
	}   
378
 
8616 vikram.rag 379
	public static LineItem createLineItem(long itemId, double amount) throws CatalogServiceException, TException {
8627 vikram.rag 380
		LineItem lineItem = new LineItem();
381
		CatalogService.Client catalogClient = new CatalogClient().getClient();
382
		Item item = catalogClient.getItem(itemId);
8616 vikram.rag 383
 
8627 vikram.rag 384
		lineItem.setProductGroup(item.getProductGroup());
385
		lineItem.setBrand(item.getBrand());
386
		lineItem.setModel_number(item.getModelNumber());
387
		lineItem.setModel_name(item.getModelName());
388
		lineItem.setExtra_info(item.getFeatureDescription());
389
		lineItem.setQuantity(1);
390
		lineItem.setItem_id(item.getId());
391
		lineItem.setUnit_weight(item.getWeight());
392
		lineItem.setTotal_weight(item.getWeight());
393
		lineItem.setUnit_price(amount);
394
		lineItem.setTotal_price(amount);
395
 
8715 vikram.rag 396
        if (item.getColor() == null || "NA".equals(item.getColor())) {
8627 vikram.rag 397
			lineItem.setColor("");
398
		} else {
399
			lineItem.setColor(item.getColor());
400
		}
401
		return lineItem;
8616 vikram.rag 402
	}
403
 
404
}