Subversion Repositories SmartDukaan

Rev

Rev 20020 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7930 manish.sha 1
package in.shop2020.serving.services;
2
 
3
import in.shop2020.config.ConfigException;
9338 manish.sha 4
import in.shop2020.model.v1.inventory.WarehouseLocation;
8368 manish.sha 5
import in.shop2020.model.v1.order.Order;
7930 manish.sha 6
import in.shop2020.serving.model.ShipmentUpdate;
7
import in.shop2020.thrift.clients.config.ConfigClient;
8
 
9
import java.text.SimpleDateFormat;
10
import java.util.ArrayList;
8368 manish.sha 11
import java.util.HashMap;
7930 manish.sha 12
import java.util.List;
8368 manish.sha 13
import java.util.Map;
8353 manish.sha 14
 
15
import org.apache.commons.logging.Log;
16
import org.apache.commons.logging.LogFactory;
17
 
7930 manish.sha 18
import com.TrackWebServiceClient;
19
import com.fedex.track.stub.ClientDetail;
20
import com.fedex.track.stub.TrackDetail;
21
import com.fedex.track.stub.TrackEvent;
22
import com.fedex.track.stub.TrackReply;
23
import com.fedex.track.stub.WebAuthenticationCredential;
24
import com.fedex.track.stub.WebAuthenticationDetail;
25
 
26
public class FedExTrackingService {
8353 manish.sha 27
 
28
	private static final Log log = LogFactory.getLog(FedExTrackingService.class);
8368 manish.sha 29
	private ClientDetail clientDetails;
30
	private WebAuthenticationDetail waDetails;
31
	private String endPointAddress;
7930 manish.sha 32
	/**
33
	 * @param args
34
	 */
35
 
9338 manish.sha 36
	public FedExTrackingService(WarehouseLocation location){
37
		clientDetails = getFedExClientDetails(location);
9784 manish.sha 38
		waDetails = getFedExWebAuthenticationDetails(location);
8368 manish.sha 39
		endPointAddress = getFedExEndpointAddress();
40
	}
41
 
9338 manish.sha 42
	public ClientDetail getFedExClientDetails(WarehouseLocation whlocation){
8368 manish.sha 43
		ClientDetail clientDetail = new ClientDetail();
44
        String accountNumber ="";
45
        String meterNumber ="";
46
		try {
9338 manish.sha 47
			if(WarehouseLocation.Mumbai==whlocation){
48
				accountNumber = ConfigClient.getClient().get("fedex_account_number_mumbai");
9784 manish.sha 49
				meterNumber = ConfigClient.getClient().get("fedex_meter_number_mumbai");
9338 manish.sha 50
			}
51
			else{
52
				accountNumber = ConfigClient.getClient().get("fedex_account_number");
9784 manish.sha 53
				meterNumber = ConfigClient.getClient().get("fedex_meter_number");
9338 manish.sha 54
			}
8368 manish.sha 55
		} catch (ConfigException e) {
56
			log.error("Could not fetch Client Detail", e);
8387 manish.sha 57
		}
58
		log.info("fedex_account_number in Tracking Service"+accountNumber);
59
		log.info("fedex_meter_number in Tracking Service"+meterNumber);
8368 manish.sha 60
        clientDetail.setAccountNumber(accountNumber);
61
        clientDetail.setMeterNumber(meterNumber);
62
		return clientDetail;
63
	}
64
 
9784 manish.sha 65
	public WebAuthenticationDetail getFedExWebAuthenticationDetails(WarehouseLocation whlocation){
8368 manish.sha 66
        WebAuthenticationCredential wac = new WebAuthenticationCredential();
67
        String key="";
68
        String password="";
69
		try {
9784 manish.sha 70
			if(WarehouseLocation.Mumbai==whlocation){
71
				key = ConfigClient.getClient().get("fedex_authenication_key_mumbai");
72
				password = ConfigClient.getClient().get("fedex_authenication_password_mumbai");
73
			}
74
			else{
75
				key = ConfigClient.getClient().get("fedex_authenication_key");
76
				password = ConfigClient.getClient().get("fedex_authenication_password");
77
			}
8368 manish.sha 78
		} catch (ConfigException e) {
79
			log.error("Could not fetch Web Authenication Detail", e);
80
		}
8387 manish.sha 81
		log.info("fedex_authenication_key in Tracking Service"+key);
82
		log.info("fedex_authenication_password in Tracking Service"+password);
8368 manish.sha 83
        wac.setKey(key);
84
        wac.setPassword(password);
85
		return new WebAuthenticationDetail(wac);
86
	}
87
 
88
	public String getFedExEndpointAddress(){
89
		String endPoint="";
90
		try {
91
			endPoint = ConfigClient.getClient().get("fedex_endpoint_address_track");
92
		} catch (ConfigException e) {
93
			log.error("Could not fetch enpoint Address", e);
94
		}
8387 manish.sha 95
		log.info("fedex_endpoint_address_track in Tracking Service"+endPoint);
8368 manish.sha 96
		return endPoint;
97
	}
98
 
99
	public Map<String,String> readFedExPickupOrdersMap(List<Order> ordersList){
8388 manish.sha 100
		log.info("Into Method to Read Fedex Pickup Orders.... "+ ordersList.size());
8368 manish.sha 101
		Map<String,String> fedexPickupOrdersMap= new HashMap<String,String>();
102
		for(Order ord: ordersList){
103
			String awbNumber= ord.getAirwaybill_no();
8832 manish.sha 104
			System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);
8391 manish.sha 105
			TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
8368 manish.sha 106
			if(trackreply!=null){
8385 manish.sha 107
				log.info("Successfully get Fedex Pickup Orders Reply");
8368 manish.sha 108
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8402 manish.sha 109
				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
8368 manish.sha 110
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
8568 manish.sha 111
trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {
8368 manish.sha 112
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8832 manish.sha 113
					if(trackEvents!=null && trackEvents.length > 0){
114
						for(TrackEvent te : trackEvents){
12964 manish.sha 115
							if("PU".equalsIgnoreCase(te.getEventType()) || "OC".equalsIgnoreCase(te.getEventType())){
8832 manish.sha 116
								fedexPickupOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime()));
117
								break trackDetailsLoop;
118
							}	
119
						}
8377 manish.sha 120
					}
8368 manish.sha 121
				}
122
			}
123
		}
8385 manish.sha 124
		log.info("Read Fedex Pickup Orders");
8368 manish.sha 125
		return fedexPickupOrdersMap;
126
	}
127
 
128
	public Map<String,String> readFedExReachedDestinationOrdersMap(List<Order> ordersList){
8388 manish.sha 129
		log.info("Into Method to Read Fedex Reached Destination Orders.... "+ ordersList.size());
8368 manish.sha 130
		Map<String,String> fedexReachedDestinationOrdersMap= new HashMap<String,String>();
131
		for(Order ord: ordersList){
132
			String awbNumber= ord.getAirwaybill_no();
8832 manish.sha 133
			System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);
8391 manish.sha 134
			TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
8368 manish.sha 135
			if(trackreply!=null){
8385 manish.sha 136
				log.info("Successfully get Fedex Reached Destination Orders");
8368 manish.sha 137
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8402 manish.sha 138
				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
8368 manish.sha 139
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
20023 kshitij.so 140
				List<String> statusCodes = new ArrayList<String>();
8568 manish.sha 141
trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {
8368 manish.sha 142
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
20023 kshitij.so 143
					if (!(trackDetails[i].getStatusCode() == null || trackDetails[i].getStatusCode().trim().isEmpty())){
144
						statusCodes.add(trackDetails[i].getStatusCode().trim());
145
					}
8832 manish.sha 146
					if(trackEvents!=null && trackEvents.length > 0){
147
						for(TrackEvent te : trackEvents){
20023 kshitij.so 148
							if(("AF".equalsIgnoreCase(te.getEventType()) || "AR".equalsIgnoreCase(te.getEventType())) && statusCodes.contains("FD")){
8832 manish.sha 149
								fedexReachedDestinationOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime()));
150
								break trackDetailsLoop;
151
							}	
152
						}
8377 manish.sha 153
					}
8368 manish.sha 154
				}
155
			}
156
		}
8385 manish.sha 157
		log.info("Read Fedex Reached Destination Orders");
8368 manish.sha 158
		return fedexReachedDestinationOrdersMap;
159
	}
160
 
161
	public Map<String,String> readFedExDeliveredOrdersMap(List<Order> ordersList){
8388 manish.sha 162
		log.info("Into Method to Read Fedex Delivered Orders.... "+ ordersList.size());
8368 manish.sha 163
		Map<String,String> fedexDeliveredOrdersMap= new HashMap<String,String>();
164
		for(Order ord: ordersList){
165
			String awbNumber= ord.getAirwaybill_no();
8832 manish.sha 166
			System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);
8391 manish.sha 167
			TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
8368 manish.sha 168
			if(trackreply!=null){
8385 manish.sha 169
				log.info("Successfully get Fedex Delivered Orders");
8368 manish.sha 170
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8380 manish.sha 171
				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
8368 manish.sha 172
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
8568 manish.sha 173
trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {
8368 manish.sha 174
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8832 manish.sha 175
					if(trackEvents!=null && trackEvents.length > 0){
176
						for(TrackEvent te : trackEvents){
177
							if("DL".equalsIgnoreCase(te.getEventType())){
178
								if(trackDetails[i].getDeliverySignatureName()!=null && !trackDetails[i].getDeliverySignatureName().isEmpty()){
179
									fedexDeliveredOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+trackDetails[i].getDeliverySignatureName());
180
								}
181
								else{
182
									fedexDeliveredOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+ord.getCustomer_name());
183
								}
184
								break trackDetailsLoop;
185
							}	
186
						}
8377 manish.sha 187
					}
8368 manish.sha 188
				}
189
			}
190
		}
8385 manish.sha 191
		log.info("Read Fedex Delivered Orders");
8368 manish.sha 192
		return fedexDeliveredOrdersMap;
193
	}
194
 
195
	public Map<String,String> readFedExReturnedOrdersMap(List<Order> ordersList){
8388 manish.sha 196
		log.info("Into Method to Read Fedex Returned Orders.... "+ ordersList.size());
8368 manish.sha 197
		Map<String,String> fedexReturnedOrdersMap= new HashMap<String,String>();
198
		for(Order ord: ordersList){
199
			String awbNumber= ord.getAirwaybill_no();
8832 manish.sha 200
			System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);
8391 manish.sha 201
			TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
8368 manish.sha 202
			if(trackreply!=null){
8385 manish.sha 203
				log.info("Successfully get Fedex Returned Orders");
8368 manish.sha 204
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8402 manish.sha 205
				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
8368 manish.sha 206
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
8568 manish.sha 207
trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {
8368 manish.sha 208
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8832 manish.sha 209
					if(trackEvents!=null && trackEvents.length > 0){
210
						for(TrackEvent te : trackEvents){
211
							if("RS".equalsIgnoreCase(te.getEventType())){
212
								fedexReturnedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());
213
								break trackDetailsLoop;
214
							}
8377 manish.sha 215
						}
216
					}
8368 manish.sha 217
				}
218
			}
219
		}
8385 manish.sha 220
		log.info("Read Fedex Returned Orders");
8368 manish.sha 221
		return fedexReturnedOrdersMap;
222
	}
223
 
224
	public Map<String,String> readFedExUnDeliveredOrdersMap(List<Order> ordersList){
8388 manish.sha 225
		log.info("Into Method to Read Fedex Undelivered Orders.... "+ ordersList.size());
8368 manish.sha 226
		Map<String,String> fedexUnDeliveredOrdersMap= new HashMap<String,String>();
8504 manish.sha 227
		orderLoop:for(Order ord: ordersList){
8368 manish.sha 228
			String awbNumber= ord.getAirwaybill_no();
8832 manish.sha 229
			System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);
8391 manish.sha 230
			TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
8368 manish.sha 231
			if(trackreply!=null){
8385 manish.sha 232
				log.info("Successfully Get Fedex Undelivered Orders");
8368 manish.sha 233
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8568 manish.sha 234
trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {
8368 manish.sha 235
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8832 manish.sha 236
					if(trackEvents!=null && trackEvents.length > 0){
237
						for(TrackEvent tevent : trackEvents){
238
							if("DL".equalsIgnoreCase(tevent.getEventType())){
239
								continue orderLoop;
240
							}
8504 manish.sha 241
						}
8832 manish.sha 242
						for(TrackEvent te : trackEvents){
243
							if("DE".equalsIgnoreCase(te.getEventType())){
244
								fedexUnDeliveredOrdersMap.put(awbNumber, te.getEventDescription());
245
								break trackDetailsLoop;
246
							}
8377 manish.sha 247
						}
248
					}
8368 manish.sha 249
				}
250
			}
251
		}
8385 manish.sha 252
		log.info("Read Fedex Undelivered Orders");
8368 manish.sha 253
		return fedexUnDeliveredOrdersMap;
254
	}
255
 
256
	public Map<String,String> readFedExFirstDeliveryAttemptedOrdersMap(List<Order> ordersList){
8388 manish.sha 257
		log.info("Into Method to Read Fedex First Delivery Attempted Orders.... "+ ordersList.size());
8368 manish.sha 258
		Map<String,String> fedexFirstDeliveryAttemptedOrdersMap= new HashMap<String,String>();
259
		for(Order ord: ordersList){
260
			String awbNumber= ord.getAirwaybill_no();
8832 manish.sha 261
			System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);
8391 manish.sha 262
			TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
8368 manish.sha 263
			if(trackreply!=null){
8385 manish.sha 264
				log.info("Successfully get Fedex First Delivery Attempted Orders");
8368 manish.sha 265
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8402 manish.sha 266
				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
8368 manish.sha 267
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
8568 manish.sha 268
trackDeatilsLoop:for (int i=0; i< trackDetails.length; i++) {
8368 manish.sha 269
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8832 manish.sha 270
					if(trackEvents!=null && trackEvents.length > 0){
271
						for(TrackEvent te : trackEvents){
272
							if("OD".equalsIgnoreCase(te.getEventType())){
273
								if(te.getStatusExceptionCode()!=null){
274
									fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getStatusExceptionDescription());
275
								}
276
								else{
277
									fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());
278
								}
279
								break trackDeatilsLoop;
8380 manish.sha 280
							}
8832 manish.sha 281
							else if("DE".equalsIgnoreCase(te.getEventType())){
8380 manish.sha 282
								fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());
8832 manish.sha 283
								break trackDeatilsLoop;
8380 manish.sha 284
							}
8377 manish.sha 285
						}
286
					}
8368 manish.sha 287
				}
288
			}
289
		}
8385 manish.sha 290
		log.info("Read Fedex First Delivery Attempted Orders");
8368 manish.sha 291
		return fedexFirstDeliveryAttemptedOrdersMap;
292
	}
293
 
7930 manish.sha 294
	public List<ShipmentUpdate> getUpdates(String awbNumber){
295
		List<ShipmentUpdate> updates = new ArrayList<ShipmentUpdate>();
8391 manish.sha 296
		TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
7930 manish.sha 297
		if(trackreply!=null){
298
			TrackDetail[] trackDetails=trackreply.getTrackDetails();
299
			SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");
300
			SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
301
			for (int i=0; i< trackDetails.length; i++) {
302
				TrackEvent trackEvents[]= trackDetails[i].getEvents();
20023 kshitij.so 303
				System.out.println("Status code "+trackDetails[i].getStatusCode());
8832 manish.sha 304
				if(trackEvents!=null && trackEvents.length > 0){
305
					for(TrackEvent te : trackEvents){
20023 kshitij.so 306
						System.out.print("Code "+te.getStatusExceptionCode());
307
						System.out.print(" Event code "+te.getEventType());
308
						System.out.print(" Event Desc "+te.getEventDescription());
309
						System.out.println(" Add "+te.getAddress().getCity());
8832 manish.sha 310
						ShipmentUpdate shipUpdate = new ShipmentUpdate();
311
						if(te.getAddress()!=null){
312
							if(te.getAddress().getCity()!=null){
313
								shipUpdate.city= te.getAddress().getCity();
314
							}
315
							else{
316
								shipUpdate.city="Unknown";
317
							}
8353 manish.sha 318
						}
319
						else{
320
							shipUpdate.city="Unknown";
321
						}
8832 manish.sha 322
						shipUpdate.date= dateformat.format(te.getTimestamp().getTime());
323
						shipUpdate.time= timeformat.format(te.getTimestamp().getTime());
324
						shipUpdate.description= te.getEventDescription();
325
						updates.add(shipUpdate);
8353 manish.sha 326
					}
8832 manish.sha 327
				}
7930 manish.sha 328
			}
329
			return updates;
330
		}
331
		else{
332
			return null;
333
		}
334
	}
335
 
336
	public static void main(String[] args) {
9338 manish.sha 337
		FedExTrackingService trackClient = new FedExTrackingService(WarehouseLocation.Delhi);
20023 kshitij.so 338
		List<ShipmentUpdate> updates = trackClient.getUpdates("783305226332");
7930 manish.sha 339
		for(ShipmentUpdate update: updates){
340
			System.out.println(update.toString());
341
		}
342
	}
343
 
344
}