Subversion Repositories SmartDukaan

Rev

Rev 7791 | Rev 7809 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
458 rajveer 1
package in.shop2020.serving.controllers;
7791 rajveer 2
import java.util.GregorianCalendar;
3
import java.text.SimpleDateFormat;
4
import java.util.Calendar;
3830 chandransh 5
import java.util.HashMap;
7791 rajveer 6
import java.util.List;
3830 chandransh 7
import java.util.Map;
507 rajveer 8
import java.util.StringTokenizer;
9
 
5072 amar.kumar 10
import in.shop2020.datalogger.EventType;
4865 rajveer 11
import in.shop2020.logistics.LogisticsInfo;
507 rajveer 12
import in.shop2020.logistics.LogisticsService.Client;
4630 mandeep.dh 13
import in.shop2020.logistics.DeliveryType;
786 rajveer 14
import in.shop2020.logistics.LogisticsServiceException;
3126 rajveer 15
import in.shop2020.thrift.clients.LogisticsClient;
5072 amar.kumar 16
import in.shop2020.utils.DataLogger;
507 rajveer 17
 
832 rajveer 18
import org.apache.log4j.Logger;
458 rajveer 19
import org.apache.struts2.rest.DefaultHttpHeaders;
20
import org.apache.struts2.rest.HttpHeaders;
786 rajveer 21
import org.apache.thrift.TException;
458 rajveer 22
 
3830 chandransh 23
import com.google.gson.Gson;
24
 
458 rajveer 25
/**
26
 * @author rajveer
27
 *
28
 */
29
public class EstimateController extends BaseController {
30
 
1044 chandransh 31
	private static final long serialVersionUID = 8023801600023970837L;
32
 
7791 rajveer 33
	public static Map<Integer, String> businessDayToActualDateMap = new HashMap<Integer, String>();
832 rajveer 34
	private static Logger log = Logger.getLogger(Class.class);	
458 rajveer 35
	private String id;
507 rajveer 36
	private long itemId;
37
	private String pincode;
7791 rajveer 38
	private String days = "-1";
3830 chandransh 39
	private boolean isCODAvailable;
6524 rajveer 40
	private boolean isOTGAvailable;
3830 chandransh 41
	private Map<String, String> response = new HashMap<String, String>();
42
 
458 rajveer 43
	public EstimateController() {
44
		super();
45
	}
46
 
47
    // GET /logout
786 rajveer 48
    public HttpHeaders show(){
3126 rajveer 49
    	LogisticsClient logisticsServiceClient = null;
507 rajveer 50
    	try {
3126 rajveer 51
			logisticsServiceClient = new LogisticsClient();
507 rajveer 52
			Client logisticsClient = logisticsServiceClient.getClient();
4865 rajveer 53
			LogisticsInfo logistincInfo = logisticsClient.getLogisticsEstimation(itemId, pincode, DeliveryType.PREPAID);
7791 rajveer 54
 
55
			if(logistincInfo.getDeliveryTime()!=-1L){
56
				days = checkValidDeliveryEstimate((int)logistincInfo.getDeliveryTime());
57
			}
58
 
4865 rajveer 59
			isCODAvailable = logistincInfo.isCodAllowed();
6524 rajveer 60
			isOTGAvailable = logistincInfo.isOtgAvailable();
3830 chandransh 61
    	} catch (LogisticsServiceException e)	{
7791 rajveer 62
    		days = "-1";
3830 chandransh 63
    		isCODAvailable = false;
64
    		log.error("Unable to get estimate/COD availability for " + itemId, e);
65
 
66
		} catch(TException e)	{
786 rajveer 67
 
3830 chandransh 68
		} catch (Exception e)	{
786 rajveer 69
 
70
		}
7791 rajveer 71
		response.put("delivery_estimate", days);
3830 chandransh 72
		response.put("is_cod_available_for_location", Boolean.toString(isCODAvailable));
6524 rajveer 73
		response.put("on_time_guarantee", Boolean.toString(isOTGAvailable));
3830 chandransh 74
 
5072 amar.kumar 75
		try{
5340 amar.kumar 76
			if(pincode.length() == 6 && !pincode.equals("110001")){
77
				String requestOrigin = request.getHeader("referer").contains("cart")?"Cart":"Product";
78
				DataLogger.logData(EventType.DELIVERY_ESTIMATE, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),
79
						pincode, (new Long(days)).toString(), (new Long(itemId)).toString(), (new Boolean(isCODAvailable)).toString(),
80
						requestOrigin);
81
			}
5072 amar.kumar 82
		}catch(Exception e){
5191 amar.kumar 83
			log.warn(e.getMessage()+"pincode : "+ pincode + " Actual referer : " + request.getHeader("referer") + e.getStackTrace());
5072 amar.kumar 84
		}
458 rajveer 85
    	return new DefaultHttpHeaders("index");
86
    }
3830 chandransh 87
 
7791 rajveer 88
    public static String checkValidDeliveryEstimate(int days) throws TException {
89
    	Calendar now = new GregorianCalendar();
90
    	int hour = now.get(Calendar.HOUR_OF_DAY);
91
    	if(businessDayToActualDateMap.containsKey(days)){
7798 rajveer 92
    		if(hour != 0){	
7791 rajveer 93
    			return businessDayToActualDateMap.get(days);
94
    		}
95
    		businessDayToActualDateMap.clear();
96
		}
97
 
98
 
99
    	now.add(Calendar.DAY_OF_MONTH, days);
100
		Calendar to_range = new GregorianCalendar();
101
		to_range.add(Calendar.DAY_OF_MONTH, 30);
102
 
103
    	LogisticsClient logisticsServiceClient = null;
104
 
105
		logisticsServiceClient = new LogisticsClient();
106
		Client logisticsClient = logisticsServiceClient.getClient();
107
 
108
    	List<Long> holidays = logisticsClient.getHolidays(now.getTimeInMillis(), to_range.getTimeInMillis());
109
 
110
    	boolean check= true;
111
    	outer:while(check){
112
    		if(Calendar.SUNDAY==now.get(Calendar.DAY_OF_WEEK)){
113
    			now.add(Calendar.DAY_OF_MONTH, 1);
114
    			check = true;
115
    			continue outer;
116
    		}
117
    		for(int i=0; i<holidays.size(); i++){
118
    			long now_in_long= now.getTimeInMillis();
119
    			if(now_in_long==holidays.get(i)){
120
    				now.add(Calendar.DAY_OF_MONTH, 1);
121
    				check = true;
122
    				continue outer;
123
    			}
124
    		}
125
    		check= false;
126
    		SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMMM-yyyy");
127
			businessDayToActualDateMap.put(days, dateformat.format(now.getTime()));
128
    	}
129
    	return businessDayToActualDateMap.get(days);
130
	}
131
 
458 rajveer 132
    /**
133
     * 
134
     * @param id
135
     */
136
    public void setId(String id) {
137
        this.id = id;
2148 chandransh 138
        StringTokenizer tokenizer = new StringTokenizer(this.id, "_");
507 rajveer 139
        this.pincode = tokenizer.nextToken();
140
        this.itemId = Long.parseLong(tokenizer.nextToken());
458 rajveer 141
    }
142
 
3830 chandransh 143
    public String getResponseJSONString() {
144
    	Gson gson = new Gson();
145
    	return gson.toJson(response);
458 rajveer 146
    }
3830 chandransh 147
}