Subversion Repositories SmartDukaan

Rev

Rev 8696 | Rev 8715 | 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";
8642 vikram.rag 56
	private static final String CHHOTU = "CHHOTU";
8627 vikram.rag 57
	private static String transactionId;
58
	private static final int SNAPDEAL_GATEWAY_ID = 18;
8646 vikram.rag 59
	private static Logger logger;
8627 vikram.rag 60
 
8616 vikram.rag 61
	public static void processSnapdealOrders(File file) throws JAXBException{
8646 vikram.rag 62
		logger = LoggerFactory.getLogger(ProcessSnapdealOrder.class);
8616 vikram.rag 63
		JAXBContext jc = JAXBContext.newInstance(SaholicAPI.class);
64
		Unmarshaller unmarshaller = jc.createUnmarshaller();
65
		SaholicAPI orders = (SaholicAPI) unmarshaller.unmarshal(file);
66
		Marshaller marshaller = jc.createMarshaller();
67
		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
68
		marshaller.marshal(orders, System.out);
69
		SourceDetail sourceDetail = null;
70
		User user = null;
71
		TransactionClient tsc = null;
72
		try {
73
			tsc = new TransactionClient();
74
			sourceDetail = tsc.getClient().getSourceDetail(SNAPDEAL_SOURCE_ID);
75
		} catch (Exception e) {
8645 vikram.rag 76
			logger.error("Unable to establish connection to the transaction service while getting Snapdeal Source Detail", e);
8616 vikram.rag 77
		}
78
		try {   
79
			in.shop2020.model.v1.user.UserContextService.Client userClient = new UserClient().getClient();
80
			user = userClient.getUserByEmail(sourceDetail.getEmail());
81
		} catch (Exception e) {
8649 vikram.rag 82
			logger.error("Unable to establish connection to the User service", e);
8616 vikram.rag 83
		}
84
		for(Order order:orders.getOrder()){
8627 vikram.rag 85
			long subOrderId = (long) order.getSuborderId();
86
			Client transaction_client = null;
87
			try {
88
				transaction_client = new TransactionClient().getClient();
89
				//transaction_client.snapdealOrderExists(subOrderId);
90
				System.out.println("Suborder id " + subOrderId);
91
				if(transaction_client.snapdealOrderExists(subOrderId)) {
92
					System.out.println("Suborder id exists");
93
					continue;
94
				}
95
 
96
			} catch (TTransportException e1) {
97
				// TODO Auto-generated catch block
98
				e1.printStackTrace();
99
			} catch (TException e) {
100
				// TODO Auto-generated catch block
101
				e.printStackTrace();
102
			}
103
			System.out.println("Inside Order Parsing");
8616 vikram.rag 104
			Transaction txn = new Transaction();
8627 vikram.rag 105
			System.out.println("User details are " + user.getActiveCartId());
8616 vikram.rag 106
			txn.setShoppingCartid(user.getActiveCartId());
8627 vikram.rag 107
			System.out.println("transaction created");
8616 vikram.rag 108
			txn.setCustomer_id(user.getUserId());
8627 vikram.rag 109
			System.out.println("User Id is " + user.getUserId());
8616 vikram.rag 110
			txn.setCreatedOn(new Date().getTime());
111
			txn.setTransactionStatus(TransactionStatus.INIT);
112
			txn.setStatusDescription("Order for Snapdeal ");
113
			List<in.shop2020.model.v1.order.Order> orderlist = new ArrayList<in.shop2020.model.v1.order.Order>();
114
			LineItem lineItem = null;
115
			try {
116
				lineItem = createLineItem(order.getSKUCode(),order.getSellingPricePerItem());
8627 vikram.rag 117
				System.out.println("Line item created");
8616 vikram.rag 118
			} catch (CatalogServiceException e) {
8645 vikram.rag 119
				logger.error("Unable to create order for suborderid  " + order.getSuborderId());
8616 vikram.rag 120
				e.printStackTrace();
121
			} catch (TException e) {
8645 vikram.rag 122
				logger.error("Unable to create order for suborderid  " + order.getSuborderId());
8616 vikram.rag 123
				e.printStackTrace();
124
			}
125
			in.shop2020.model.v1.order.Order t_order = new in.shop2020.model.v1.order.Order();
8627 vikram.rag 126
			t_order.setCustomer_id(user.getUserId());
127
			t_order.setCustomer_email(sourceDetail.getEmail());
128
			t_order.setCustomer_name(order.getCustomerName());
129
			t_order.setCustomer_address1("");
130
			t_order.setCustomer_address2("");
131
			t_order.setCustomer_city(order.getCity());
132
			t_order.setCustomer_state(order.getState());
133
			t_order.setCustomer_pincode(String.valueOf(order.getPINCode()));
134
			t_order.setTotal_amount(lineItem.getTotal_price());            
135
			t_order.setTotal_weight(lineItem.getTotal_weight());
136
			t_order.setLineitems(Collections.singletonList(lineItem));            
137
			t_order.setStatus(OrderStatus.SUBMITTED_FOR_PROCESSING);
138
			t_order.setStatusDescription("In Process");
139
			t_order.setCreated_timestamp(new Date().getTime());
140
			t_order.setOrderType(OrderType.B2C);
141
			t_order.setCod(false);
142
			System.out.println("t order created");
143
			try {
8661 vikram.rag 144
				SimpleDateFormat istFormatter = new SimpleDateFormat("yyyy-MM-dd");
145
				Date shipDate = null;
146
				try {
147
					shipDate= istFormatter.parse(order.getShipByDate());
148
				} catch (ParseException e) {
149
					logger.error("Could not parse order date from file ");
150
					e.printStackTrace();
151
				}
8627 vikram.rag 152
				Calendar time = Calendar.getInstance();
153
				time.add(Calendar.DAY_OF_MONTH, 1);
8661 vikram.rag 154
				t_order.setPromised_shipping_time(shipDate.getTime());
155
				t_order.setExpected_shipping_time(shipDate.getTime());
8627 vikram.rag 156
				time.add(Calendar.DAY_OF_MONTH, 3);
157
				t_order.setPromised_delivery_time(time.getTimeInMillis());
158
				t_order.setExpected_delivery_time(time.getTimeInMillis());
159
				System.out.println("Dates set in transaction");
8697 vikram.rag 160
			} catch(Exception e) {	
8645 vikram.rag 161
				logger.error("Error in updating Shipping or Delivery Time for suborderid  " + order.getSuborderId());
8627 vikram.rag 162
				continue;
163
			}
8657 vikram.rag 164
			InventoryService.Client inventoryClient = null;
165
            Warehouse fulfillmentWarehouse= null; 
8616 vikram.rag 166
            try {
8657 vikram.rag 167
            	inventoryClient = new InventoryClient().getClient();
168
            	List<Long> itemAvailability = inventoryClient.getItemAvailabilityAtLocation(order.getSKUCode(), 1);
169
            	fulfillmentWarehouse = inventoryClient.getWarehouse(itemAvailability.get(0));
8662 vikram.rag 170
            	logger.info("Fulfillment warehouse id for suborderid  " + order.getSuborderId() + " is " + fulfillmentWarehouse.getId());
8657 vikram.rag 171
            	t_order.setFulfilmentWarehouseId(fulfillmentWarehouse.getId());
8662 vikram.rag 172
            	logger.info("Billing warehouse id for suborderid  " + order.getSuborderId() + " is " + fulfillmentWarehouse.getBillingWarehouseId());
8657 vikram.rag 173
        		t_order.setWarehouse_id(fulfillmentWarehouse.getBillingWarehouseId());
174
        		VendorItemPricing vendorItemPricing = inventoryClient.getItemPricing(lineItem.getItem_id(), fulfillmentWarehouse.getVendor().getId());
175
        		t_order.getLineitems().get(0).setTransfer_price(vendorItemPricing.getTransferPrice());
176
        		t_order.getLineitems().get(0).setNlc(vendorItemPricing.getNlc());
8616 vikram.rag 177
			} catch (InventoryServiceException e) {
8662 vikram.rag 178
				logger.error("Error connecting inventory service for suborderid  " + order.getSuborderId());
8616 vikram.rag 179
            	continue;
180
			} catch (TTransportException e) {
181
				// TODO Auto-generated catch block
182
				e.printStackTrace();
183
			} catch (TException e) {
184
				// TODO Auto-generated catch block
185
				e.printStackTrace();
8657 vikram.rag 186
			}
8616 vikram.rag 187
			if(order.getCourier().equalsIgnoreCase(FIRSTFLIGHT)) {
188
				t_order.setLogistics_provider_id(12);
189
			} else if(order.getCourier().equalsIgnoreCase(DELHIVERY)) {
190
				t_order.setLogistics_provider_id(13);
191
			} else if(order.getCourier().equalsIgnoreCase(BLUEDART)) {
192
				t_order.setLogistics_provider_id(14);
8642 vikram.rag 193
			}else if(order.getCourier().equalsIgnoreCase(CHHOTU)) {
194
				t_order.setLogistics_provider_id(16);
8616 vikram.rag 195
			} else {
8652 vikram.rag 196
				logger.error("Error No Courier Match please add courier to our system for suborderid  " + order.getSuborderId() + "Courier Name " + order.getCourier());
8627 vikram.rag 197
				continue;
8616 vikram.rag 198
			}
8627 vikram.rag 199
 
8616 vikram.rag 200
			t_order.setAirwaybill_no(String.valueOf(order.getAWBNumber()));
201
			t_order.setTracking_id(String.valueOf(order.getAWBNumber()));
8627 vikram.rag 202
			t_order.setTotal_amount(order.getSellingPricePerItem());
203
			t_order.setOrderType(OrderType.B2C);
204
			t_order.setSource(SNAPDEAL_SOURCE_ID);
205
			t_order.setOrderType(OrderType.B2C);
206
			orderlist.add(t_order);
207
			txn.setOrders(orderlist);
208
				String referenceCode = order.getReferenceCode();
209
				String productName = order.getProduct();
8651 vikram.rag 210
				SimpleDateFormat istFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
211
				Date snapdealTxnDate = null;
212
				try {
213
					snapdealTxnDate = istFormatter.parse(order.getOrderPlacedDate());
214
				} catch (ParseException e) {
215
					logger.error("Could not parse order date from file ");
216
					e.printStackTrace();
217
				}
218
				try {
219
					transactionId =  String.valueOf(transaction_client.createTransaction(txn));
220
				} catch (TransactionServiceException e) {
221
					logger.error("Could not create transaction ");
222
					e.printStackTrace();
223
				} catch (TException e) {
224
					logger.error("Problem with transaction service while creating transaction");
225
					e.printStackTrace();
226
				}
8627 vikram.rag 227
				createPayment(user, (new Long(subOrderId)).toString(), lineItem.getTotal_price());
228
 
8651 vikram.rag 229
				Transaction transaction = null;
230
				try {
231
					transaction = transaction_client.getTransaction(Long.parseLong(transactionId));
232
				} catch (NumberFormatException e) {
233
					logger.error("Problem parsing transaction id " + transactionId);
234
					e.printStackTrace();
235
				} catch (TransactionServiceException e) {
236
					logger.error("Problem getting transaction from service transaction id " + transactionId);
237
					e.printStackTrace();
238
				} catch (TException e) {
239
					logger.error("Problem with transaction service while getting transaction id " + transactionId);
240
					e.printStackTrace();
241
				}
8627 vikram.rag 242
				in.shop2020.model.v1.order.Order snapdealorder = transaction.getOrders().get(0);
243
 
244
				//inventoryClient.reserveItemInWarehouse(lineItem.getItem_id(), fulfillmentWarehouse.getId(), 1, 
245
				//		snapdealorder.getId(), snapdealorder.getCreated_timestamp(), snapdealorder.getPromised_shipping_time(), snapdealorder.getLineitems().get(0).getQuantity());
246
 
247
 
248
				SnapdealOrder snapdealOrder = new SnapdealOrder();
249
				snapdealOrder.setOrderId(snapdealorder.getId());
250
				snapdealOrder.setSubOrderId(subOrderId);
251
				snapdealOrder.setReferenceCode(referenceCode);
252
				snapdealOrder.setProductName(productName);
253
				snapdealOrder.setSnapdealTxnDate(snapdealTxnDate.getTime());
254
				snapdealOrder.setListingPrice(lineItem.getTotal_price());
8651 vikram.rag 255
				try {
256
					transaction_client.createSnapdealOrder(snapdealOrder);
257
				} catch (TException e) {
258
					logger.error("Could not create Snapdeal Order");
259
					e.printStackTrace();
260
				}
8627 vikram.rag 261
 
8649 vikram.rag 262
			} 
8616 vikram.rag 263
 
264
	}
265
 
8649 vikram.rag 266
	public static void createPayment(User user, String subOrderId, double amount) {
267
		in.shop2020.payments.PaymentService.Client client = null;
268
		try {
269
			client = new PaymentClient().getClient();
270
		} catch (TTransportException e) {
271
			logger.error("Could not connect to payment service ");
272
			e.printStackTrace();
273
		}
274
		long paymentId = 0;
275
		try {
276
			paymentId = client.createPayment(user.getUserId(), amount, SNAPDEAL_GATEWAY_ID, Long.valueOf(transactionId), false);
277
		} catch (NumberFormatException e) {
278
			logger.error("Could not create payment");
279
			e.printStackTrace();
280
		} catch (PaymentException e) {
281
			logger.error("Could not create payment payment exception");
282
			e.printStackTrace();
283
		} catch (TException e) {
284
			logger.error("Could not create payment thrift exception");
285
			e.printStackTrace();
286
		}
287
		try {
288
			client.updatePaymentDetails(paymentId, null, null, null, null, null, null, subOrderId, null, PaymentStatus.AUTHORIZED, null, null);
289
		} catch (PaymentException e) {
290
			logger.error("Could not update payment to order");
291
			e.printStackTrace();
292
		} catch (TException e) {
293
			logger.error("Could not update payment thrift exception");
294
			e.printStackTrace();
295
		}
8627 vikram.rag 296
	}   
297
 
8616 vikram.rag 298
	public static LineItem createLineItem(long itemId, double amount) throws CatalogServiceException, TException {
8627 vikram.rag 299
		LineItem lineItem = new LineItem();
300
		CatalogService.Client catalogClient = new CatalogClient().getClient();
301
		Item item = catalogClient.getItem(itemId);
8616 vikram.rag 302
 
8627 vikram.rag 303
		lineItem.setProductGroup(item.getProductGroup());
304
		lineItem.setBrand(item.getBrand());
305
		lineItem.setModel_number(item.getModelNumber());
306
		lineItem.setModel_name(item.getModelName());
307
		lineItem.setExtra_info(item.getFeatureDescription());
308
		lineItem.setQuantity(1);
309
		lineItem.setItem_id(item.getId());
310
		lineItem.setUnit_weight(item.getWeight());
311
		lineItem.setTotal_weight(item.getWeight());
312
		lineItem.setUnit_price(amount);
313
		lineItem.setTotal_price(amount);
314
 
315
		if (item.getColor() == null || "NA".equals(item.getColor())) {
316
			lineItem.setColor("");
317
		} else {
318
			lineItem.setColor(item.getColor());
319
		}
320
		return lineItem;
8616 vikram.rag 321
	}
322
 
323
}