Rev 9784 | Rev 20020 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.serving.services;import in.shop2020.config.ConfigException;import in.shop2020.model.v1.inventory.WarehouseLocation;import in.shop2020.model.v1.order.Order;import in.shop2020.serving.model.ShipmentUpdate;import in.shop2020.thrift.clients.config.ConfigClient;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.TrackWebServiceClient;import com.fedex.track.stub.ClientDetail;import com.fedex.track.stub.TrackDetail;import com.fedex.track.stub.TrackEvent;import com.fedex.track.stub.TrackReply;import com.fedex.track.stub.WebAuthenticationCredential;import com.fedex.track.stub.WebAuthenticationDetail;public class FedExTrackingService {private static final Log log = LogFactory.getLog(FedExTrackingService.class);private ClientDetail clientDetails;private WebAuthenticationDetail waDetails;private String endPointAddress;/*** @param args*/public FedExTrackingService(WarehouseLocation location){clientDetails = getFedExClientDetails(location);waDetails = getFedExWebAuthenticationDetails(location);endPointAddress = getFedExEndpointAddress();}public ClientDetail getFedExClientDetails(WarehouseLocation whlocation){ClientDetail clientDetail = new ClientDetail();String accountNumber ="";String meterNumber ="";try {if(WarehouseLocation.Mumbai==whlocation){accountNumber = ConfigClient.getClient().get("fedex_account_number_mumbai");meterNumber = ConfigClient.getClient().get("fedex_meter_number_mumbai");}else{accountNumber = ConfigClient.getClient().get("fedex_account_number");meterNumber = ConfigClient.getClient().get("fedex_meter_number");}} catch (ConfigException e) {log.error("Could not fetch Client Detail", e);}log.info("fedex_account_number in Tracking Service"+accountNumber);log.info("fedex_meter_number in Tracking Service"+meterNumber);clientDetail.setAccountNumber(accountNumber);clientDetail.setMeterNumber(meterNumber);return clientDetail;}public WebAuthenticationDetail getFedExWebAuthenticationDetails(WarehouseLocation whlocation){WebAuthenticationCredential wac = new WebAuthenticationCredential();String key="";String password="";try {if(WarehouseLocation.Mumbai==whlocation){key = ConfigClient.getClient().get("fedex_authenication_key_mumbai");password = ConfigClient.getClient().get("fedex_authenication_password_mumbai");}else{key = ConfigClient.getClient().get("fedex_authenication_key");password = ConfigClient.getClient().get("fedex_authenication_password");}} catch (ConfigException e) {log.error("Could not fetch Web Authenication Detail", e);}log.info("fedex_authenication_key in Tracking Service"+key);log.info("fedex_authenication_password in Tracking Service"+password);wac.setKey(key);wac.setPassword(password);return new WebAuthenticationDetail(wac);}public String getFedExEndpointAddress(){String endPoint="";try {endPoint = ConfigClient.getClient().get("fedex_endpoint_address_track");} catch (ConfigException e) {log.error("Could not fetch enpoint Address", e);}log.info("fedex_endpoint_address_track in Tracking Service"+endPoint);return endPoint;}public Map<String,String> readFedExPickupOrdersMap(List<Order> ordersList){log.info("Into Method to Read Fedex Pickup Orders.... "+ ordersList.size());Map<String,String> fedexPickupOrdersMap= new HashMap<String,String>();for(Order ord: ordersList){String awbNumber= ord.getAirwaybill_no();System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){log.info("Successfully get Fedex Pickup Orders Reply");TrackDetail[] trackDetails=trackreply.getTrackDetails();SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent te : trackEvents){if("PU".equalsIgnoreCase(te.getEventType()) || "OC".equalsIgnoreCase(te.getEventType())){fedexPickupOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime()));break trackDetailsLoop;}}}}}}log.info("Read Fedex Pickup Orders");return fedexPickupOrdersMap;}public Map<String,String> readFedExReachedDestinationOrdersMap(List<Order> ordersList){log.info("Into Method to Read Fedex Reached Destination Orders.... "+ ordersList.size());Map<String,String> fedexReachedDestinationOrdersMap= new HashMap<String,String>();for(Order ord: ordersList){String awbNumber= ord.getAirwaybill_no();System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){log.info("Successfully get Fedex Reached Destination Orders");TrackDetail[] trackDetails=trackreply.getTrackDetails();SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent te : trackEvents){if("AR".equalsIgnoreCase(te.getEventType())){fedexReachedDestinationOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime()));break trackDetailsLoop;}}}}}}log.info("Read Fedex Reached Destination Orders");return fedexReachedDestinationOrdersMap;}public Map<String,String> readFedExDeliveredOrdersMap(List<Order> ordersList){log.info("Into Method to Read Fedex Delivered Orders.... "+ ordersList.size());Map<String,String> fedexDeliveredOrdersMap= new HashMap<String,String>();for(Order ord: ordersList){String awbNumber= ord.getAirwaybill_no();System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){log.info("Successfully get Fedex Delivered Orders");TrackDetail[] trackDetails=trackreply.getTrackDetails();SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent te : trackEvents){if("DL".equalsIgnoreCase(te.getEventType())){if(trackDetails[i].getDeliverySignatureName()!=null && !trackDetails[i].getDeliverySignatureName().isEmpty()){fedexDeliveredOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+trackDetails[i].getDeliverySignatureName());}else{fedexDeliveredOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+ord.getCustomer_name());}break trackDetailsLoop;}}}}}}log.info("Read Fedex Delivered Orders");return fedexDeliveredOrdersMap;}public Map<String,String> readFedExReturnedOrdersMap(List<Order> ordersList){log.info("Into Method to Read Fedex Returned Orders.... "+ ordersList.size());Map<String,String> fedexReturnedOrdersMap= new HashMap<String,String>();for(Order ord: ordersList){String awbNumber= ord.getAirwaybill_no();System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){log.info("Successfully get Fedex Returned Orders");TrackDetail[] trackDetails=trackreply.getTrackDetails();SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent te : trackEvents){if("RS".equalsIgnoreCase(te.getEventType())){fedexReturnedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());break trackDetailsLoop;}}}}}}log.info("Read Fedex Returned Orders");return fedexReturnedOrdersMap;}public Map<String,String> readFedExUnDeliveredOrdersMap(List<Order> ordersList){log.info("Into Method to Read Fedex Undelivered Orders.... "+ ordersList.size());Map<String,String> fedexUnDeliveredOrdersMap= new HashMap<String,String>();orderLoop:for(Order ord: ordersList){String awbNumber= ord.getAirwaybill_no();System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){log.info("Successfully Get Fedex Undelivered Orders");TrackDetail[] trackDetails=trackreply.getTrackDetails();trackDetailsLoop:for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent tevent : trackEvents){if("DL".equalsIgnoreCase(tevent.getEventType())){continue orderLoop;}}for(TrackEvent te : trackEvents){if("DE".equalsIgnoreCase(te.getEventType())){fedexUnDeliveredOrdersMap.put(awbNumber, te.getEventDescription());break trackDetailsLoop;}}}}}}log.info("Read Fedex Undelivered Orders");return fedexUnDeliveredOrdersMap;}public Map<String,String> readFedExFirstDeliveryAttemptedOrdersMap(List<Order> ordersList){log.info("Into Method to Read Fedex First Delivery Attempted Orders.... "+ ordersList.size());Map<String,String> fedexFirstDeliveryAttemptedOrdersMap= new HashMap<String,String>();for(Order ord: ordersList){String awbNumber= ord.getAirwaybill_no();System.out.println("Order Id.... "+ord.getId()+".....Airwaybill No..... "+awbNumber);TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){log.info("Successfully get Fedex First Delivery Attempted Orders");TrackDetail[] trackDetails=trackreply.getTrackDetails();SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");trackDeatilsLoop:for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent te : trackEvents){if("OD".equalsIgnoreCase(te.getEventType())){if(te.getStatusExceptionCode()!=null){fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getStatusExceptionDescription());}else{fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());}break trackDeatilsLoop;}else if("DE".equalsIgnoreCase(te.getEventType())){fedexFirstDeliveryAttemptedOrdersMap.put(awbNumber, dateformat.format(te.getTimestamp().getTime())+" "+timeformat.format(te.getTimestamp().getTime())+"|"+te.getEventDescription());break trackDeatilsLoop;}}}}}}log.info("Read Fedex First Delivery Attempted Orders");return fedexFirstDeliveryAttemptedOrdersMap;}public List<ShipmentUpdate> getUpdates(String awbNumber){List<ShipmentUpdate> updates = new ArrayList<ShipmentUpdate>();TrackReply trackreply = TrackWebServiceClient.getTrackingUpdates(awbNumber, clientDetails, waDetails, endPointAddress);if(trackreply!=null){TrackDetail[] trackDetails=trackreply.getTrackDetails();SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy");SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm:ss");for (int i=0; i< trackDetails.length; i++) {TrackEvent trackEvents[]= trackDetails[i].getEvents();if(trackEvents!=null && trackEvents.length > 0){for(TrackEvent te : trackEvents){ShipmentUpdate shipUpdate = new ShipmentUpdate();if(te.getAddress()!=null){if(te.getAddress().getCity()!=null){shipUpdate.city= te.getAddress().getCity();}else{shipUpdate.city="Unknown";}}else{shipUpdate.city="Unknown";}shipUpdate.date= dateformat.format(te.getTimestamp().getTime());shipUpdate.time= timeformat.format(te.getTimestamp().getTime());shipUpdate.description= te.getEventDescription();updates.add(shipUpdate);}}}return updates;}else{return null;}}public static void main(String[] args) {FedExTrackingService trackClient = new FedExTrackingService(WarehouseLocation.Delhi);List<ShipmentUpdate> updates = trackClient.getUpdates("796869788166");for(ShipmentUpdate update: updates){System.out.println(update.toString());}}}