Subversion Repositories SmartDukaan

Rev

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