Subversion Repositories SmartDukaan

Rev

Rev 8380 | Rev 8387 | 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);
7930 manish.sha 28
	private TrackReply trackreply;
8368 manish.sha 29
	private ClientDetail clientDetails;
30
	private WebAuthenticationDetail waDetails;
31
	private String endPointAddress;
7930 manish.sha 32
	/**
33
	 * @param args
34
	 */
35
 
8368 manish.sha 36
	public FedExTrackingService(){
37
		trackreply= null;
38
		clientDetails = getFedExClientDetails();
39
		waDetails = getFedExWebAuthenticationDetails();
40
		endPointAddress = getFedExEndpointAddress();
41
	}
42
 
43
	public ClientDetail getFedExClientDetails(){
44
		ClientDetail clientDetail = new ClientDetail();
45
        String accountNumber ="";
46
        String meterNumber ="";
47
		try {
48
			accountNumber = ConfigClient.getClient().get("fedex_account_number");
49
			meterNumber = ConfigClient.getClient().get("fedex_meter_number");
50
		} catch (ConfigException e) {
51
			log.error("Could not fetch Client Detail", e);
52
		}			
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
		}
68
        wac.setKey(key);
69
        wac.setPassword(password);
70
		return new WebAuthenticationDetail(wac);
71
	}
72
 
73
	public String getFedExEndpointAddress(){
74
		String endPoint="";
75
		try {
76
			endPoint = ConfigClient.getClient().get("fedex_endpoint_address_track");
77
		} catch (ConfigException e) {
78
			log.error("Could not fetch enpoint Address", e);
79
		}
80
		return endPoint;
81
	}
82
 
83
	public Map<String,String> readFedExPickupOrdersMap(List<Order> ordersList){
8385 manish.sha 84
		log.info("Into Method to Read Fedex Pickup Orders");
8368 manish.sha 85
		Map<String,String> fedexPickupOrdersMap= new HashMap<String,String>();
86
		for(Order ord: ordersList){
87
			String awbNumber= ord.getAirwaybill_no();
88
			trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
89
			if(trackreply!=null){
8385 manish.sha 90
				log.info("Successfully get Fedex Pickup Orders Reply");
8368 manish.sha 91
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
92
				SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");
93
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
94
				for (int i=0; i< trackDetails.length; i++) {
95
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8377 manish.sha 96
					for(TrackEvent te : trackEvents){
97
						if("PU".equalsIgnoreCase(te.getEventType())){
98
							fedexPickupOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime()));
99
						}	
100
					}
8368 manish.sha 101
				}
102
			}
103
		}
8385 manish.sha 104
		log.info("Read Fedex Pickup Orders");
8368 manish.sha 105
		return fedexPickupOrdersMap;
106
	}
107
 
108
	public Map<String,String> readFedExReachedDestinationOrdersMap(List<Order> ordersList){
8385 manish.sha 109
		log.info("Into Method to Read Fedex Reached Destination Orders");
8368 manish.sha 110
		Map<String,String> fedexReachedDestinationOrdersMap= new HashMap<String,String>();
111
		for(Order ord: ordersList){
112
			String awbNumber= ord.getAirwaybill_no();
113
			trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
114
			if(trackreply!=null){
8385 manish.sha 115
				log.info("Successfully get Fedex Reached Destination Orders");
8368 manish.sha 116
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
117
				SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");
118
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
119
				for (int i=0; i< trackDetails.length; i++) {
120
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8377 manish.sha 121
					for(TrackEvent te : trackEvents){
122
						if("AR".equalsIgnoreCase(te.getEventType())){
8368 manish.sha 123
						fedexReachedDestinationOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime()));
8377 manish.sha 124
						}	
125
					}
8368 manish.sha 126
				}
127
			}
128
		}
8385 manish.sha 129
		log.info("Read Fedex Reached Destination Orders");
8368 manish.sha 130
		return fedexReachedDestinationOrdersMap;
131
	}
132
 
133
	public Map<String,String> readFedExDeliveredOrdersMap(List<Order> ordersList){
8385 manish.sha 134
		log.info("Into Method to Read Fedex Delivered Orders");
8368 manish.sha 135
		Map<String,String> fedexDeliveredOrdersMap= new HashMap<String,String>();
136
		for(Order ord: ordersList){
137
			String awbNumber= ord.getAirwaybill_no();
138
			trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
139
			if(trackreply!=null){
8385 manish.sha 140
				log.info("Successfully get Fedex Delivered Orders");
8368 manish.sha 141
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
8380 manish.sha 142
				SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
8368 manish.sha 143
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
144
				for (int i=0; i< trackDetails.length; i++) {
145
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8377 manish.sha 146
					for(TrackEvent te : trackEvents){
147
						if("DL".equalsIgnoreCase(te.getEventType())){
8380 manish.sha 148
							fedexDeliveredOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+trackDetails[i].getDeliverySignatureName());
8377 manish.sha 149
						}	
150
					}
8368 manish.sha 151
				}
152
			}
153
		}
8385 manish.sha 154
		log.info("Read Fedex Delivered Orders");
8368 manish.sha 155
		return fedexDeliveredOrdersMap;
156
	}
157
 
158
	public Map<String,String> readFedExReturnedOrdersMap(List<Order> ordersList){
8385 manish.sha 159
		log.info("Into Method to Read Fedex Returned Orders");
8368 manish.sha 160
		Map<String,String> fedexReturnedOrdersMap= new HashMap<String,String>();
161
		for(Order ord: ordersList){
162
			String awbNumber= ord.getAirwaybill_no();
163
			trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
164
			if(trackreply!=null){
8385 manish.sha 165
				log.info("Successfully get Fedex Returned Orders");
8368 manish.sha 166
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
167
				SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");
168
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
169
				for (int i=0; i< trackDetails.length; i++) {
170
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8377 manish.sha 171
					for(TrackEvent te : trackEvents){
172
						if("RS".equalsIgnoreCase(te.getEventType())){
8380 manish.sha 173
							fedexReturnedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());
8377 manish.sha 174
						}
175
					}
8368 manish.sha 176
				}
177
			}
178
		}
8385 manish.sha 179
		log.info("Read Fedex Returned Orders");
8368 manish.sha 180
		return fedexReturnedOrdersMap;
181
	}
182
 
183
	public Map<String,String> readFedExUnDeliveredOrdersMap(List<Order> ordersList){
8385 manish.sha 184
		log.info("Into Method to Read Fedex Undelivered Orders");
8368 manish.sha 185
		Map<String,String> fedexUnDeliveredOrdersMap= new HashMap<String,String>();
186
		for(Order ord: ordersList){
187
			String awbNumber= ord.getAirwaybill_no();
188
			trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
189
			if(trackreply!=null){
8385 manish.sha 190
				log.info("Successfully Get Fedex Undelivered Orders");
8368 manish.sha 191
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
192
				for (int i=0; i< trackDetails.length; i++) {
193
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8377 manish.sha 194
					for(TrackEvent te : trackEvents){
195
						if("DE".equalsIgnoreCase(te.getEventType())){
8380 manish.sha 196
							fedexUnDeliveredOrdersMap.put(awbNumber, te.getEventDescription());
8377 manish.sha 197
						}
198
					}
8368 manish.sha 199
				}
200
			}
201
		}
8385 manish.sha 202
		log.info("Read Fedex Undelivered Orders");
8368 manish.sha 203
		return fedexUnDeliveredOrdersMap;
204
	}
205
 
206
	public Map<String,String> readFedExFirstDeliveryAttemptedOrdersMap(List<Order> ordersList){
8385 manish.sha 207
		log.info("Into Method to Read Fedex First Delivery Attempted Orders");
8368 manish.sha 208
		Map<String,String> fedexFirstDeliveryAttemptedOrdersMap= new HashMap<String,String>();
209
		for(Order ord: ordersList){
210
			String awbNumber= ord.getAirwaybill_no();
211
			trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
212
			if(trackreply!=null){
8385 manish.sha 213
				log.info("Successfully get Fedex First Delivery Attempted Orders");
8368 manish.sha 214
				TrackDetail[] trackDetails=trackreply.getTrackDetails();
215
				SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");
216
				SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
217
				for (int i=0; i< trackDetails.length; i++) {
218
					TrackEvent trackEvents[]= trackDetails[i].getEvents();
8377 manish.sha 219
					for(TrackEvent te : trackEvents){
220
						if("OD".equalsIgnoreCase(te.getEventType())){
8380 manish.sha 221
							if(te.getStatusExceptionCode()!=null){
222
								fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getStatusExceptionDescription());
223
							}
224
							else{
225
								fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());
226
							}
8377 manish.sha 227
						}
228
					}
8368 manish.sha 229
				}
230
			}
231
		}
8385 manish.sha 232
		log.info("Read Fedex First Delivery Attempted Orders");
8368 manish.sha 233
		return fedexFirstDeliveryAttemptedOrdersMap;
234
	}
235
 
7930 manish.sha 236
	public List<ShipmentUpdate> getUpdates(String awbNumber){
237
		List<ShipmentUpdate> updates = new ArrayList<ShipmentUpdate>();
8368 manish.sha 238
		trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);
7930 manish.sha 239
		if(trackreply!=null){
240
			TrackDetail[] trackDetails=trackreply.getTrackDetails();
241
			SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");
242
			SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");
243
			for (int i=0; i< trackDetails.length; i++) {
244
				TrackEvent trackEvents[]= trackDetails[i].getEvents();
245
				for(TrackEvent te : trackEvents){
246
					ShipmentUpdate shipUpdate = new ShipmentUpdate();
8353 manish.sha 247
					if(te.getAddress()!=null){
248
						if(te.getAddress().getCity()!=null){
249
							shipUpdate.city= te.getAddress().getCity();
250
						}
251
						else{
252
							shipUpdate.city="Unknown";
253
						}
254
					}
255
					else{
256
						shipUpdate.city="Unknown";
257
					}
7930 manish.sha 258
					shipUpdate.date= dateformat.format(te.getTimestamp().getTime());
259
					shipUpdate.time= timeformat.format(te.getTimestamp().getTime());
260
					shipUpdate.description= te.getEventDescription();
261
					updates.add(shipUpdate);
262
				}			
263
			}
264
			return updates;
265
		}
266
		else{
267
			return null;
268
		}
269
	}
270
 
271
	public static void main(String[] args) {
272
		FedExTrackingService trackClient = new FedExTrackingService();
8368 manish.sha 273
		List<ShipmentUpdate> updates = trackClient.getUpdates("796869788166");
7930 manish.sha 274
		for(ShipmentUpdate update: updates){
275
			System.out.println(update.toString());
276
		}
277
	}
278
 
279
}