Subversion Repositories SmartDukaan

Rev

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