Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5068 varun.gupt 1
package in.shop2020.support.controllers;
2
 
3
import in.shop2020.model.v1.order.OrderStatus;
4
import in.shop2020.model.v1.order.TransactionServiceException;
5
import in.shop2020.thrift.clients.TransactionClient;
6
 
7
import java.io.IOException;
8
import java.text.DateFormat;
9
import java.text.ParseException;
10
import java.text.SimpleDateFormat;
11
import java.util.ArrayList;
12
import java.util.Date;
13
import java.util.HashMap;
14
import java.util.List;
15
import java.util.Map;
16
 
17
import javax.servlet.ServletOutputStream;
18
import javax.servlet.http.HttpServletRequest;
19
import javax.servlet.http.HttpServletResponse;
20
 
21
import org.apache.struts2.interceptor.ServletRequestAware;
22
import org.apache.struts2.interceptor.ServletResponseAware;
23
import org.apache.struts2.rest.DefaultHttpHeaders;
24
import org.apache.struts2.rest.HttpHeaders;
25
import org.apache.thrift.TException;
26
import org.apache.thrift.transport.TTransportException;
27
import org.slf4j.Logger;
28
import org.slf4j.LoggerFactory;
29
 
30
import com.opensymphony.xwork2.ValidationAwareSupport;
31
 
32
public class OrderMonitorController extends ValidationAwareSupport implements ServletRequestAware, ServletResponseAware {
33
 
34
	private static Logger logger = LoggerFactory.getLogger(ProductNotificationsController.class);
35
	private final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
36
	private HttpServletRequest request;
37
	private HttpServletResponse response;
38
 
39
	private long startTimestamp, endTimestamp;
40
 
41
	private Map<String, Long> orderStatusDistribution;
42
 
43
	public String index()	{
44
		Date startDate, endDate;
45
		try {
46
			if (request.getParameter("start") != null && request.getParameter("end") != null)	{
47
				startDate = dateFormat.parse(request.getParameter("start"));
48
				endDate = dateFormat.parse(request.getParameter("end"));
49
 
50
			} else	{
51
				startDate = new Date();
52
				startDate.setHours(0);
53
				startDate.setMinutes(0);
54
				startDate.setSeconds(0);
55
 
56
				endDate = new Date();
57
			}
58
			startTimestamp = startDate.getTime();
59
			endTimestamp = endDate.getTime();
60
 
61
			logger.info("Start: " + startDate + "\tEnd: " + endDate);
62
 
63
			TransactionClient tsc = new TransactionClient();
64
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
65
 
66
			Map<Long, Long> orderDistribution = new HashMap<Long, Long>();
67
			orderDistribution.putAll(transactionClient.getStatusDistributionOfOrders(startDate.getTime(), endDate.getTime()));
68
			logger.info(orderDistribution.toString());
69
 
70
			orderStatusDistribution = new HashMap<String, Long>();
71
 
72
			for (long orderStatusId: orderDistribution.keySet())	{
73
				String statusName = OrderStatus.findByValue((int)orderStatusId).name();
74
				long count = orderDistribution.get(orderStatusId);
75
				logger.info("\t"  + orderStatusId + " " + statusName + " " + count);
76
				orderStatusDistribution.put(statusName, count);
77
			}
78
			logger.info(orderStatusDistribution.toString());
79
 
80
		} catch (ParseException e) {
81
			logger.error(e.getStackTrace().toString());
82
			addActionError("Please enter valid start and end date");
83
 
84
		} catch (TTransportException e) {
85
			logger.error(e.getStackTrace().toString());
86
			addActionError(e.getMessage());
87
 
88
		} catch (TransactionServiceException e) {
89
			logger.error(e.getStackTrace().toString());
90
			addActionError(e.getMessage());
91
 
92
		} catch (TException e) {
93
			logger.error(e.getStackTrace().toString());
94
			addActionError(e.getMessage());
95
		}
96
		return "index";
97
	}
98
 
99
	public HttpHeaders getOrderIds()	{
100
		long status = (long)OrderStatus.valueOf(request.getParameter("status")).getValue();
101
		String[] timestamps = request.getParameter("timestamps").split("-");
102
 
103
		logger.info(status + " - " + timestamps);
104
 
105
		TransactionClient tsc;
106
		try {
107
			tsc = new TransactionClient();
108
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
109
			List<Long> orderIds = transactionClient.getOrderIdsForStatus(status, Long.parseLong(timestamps[0]), Long.parseLong(timestamps[1]));
110
 
111
			response.setContentType("text/tab-separated-values");
112
			response.setHeader("Content-disposition", "inline; filename=OrderIds-" + request.getParameter("status") + ".txt");
113
 
114
			StringBuilder sb = new StringBuilder();
115
 
116
			for (long orderId: orderIds)	{
117
				sb.append(Long.toString(orderId));
118
				sb.append("\n");
119
			}
120
			ServletOutputStream sos = response.getOutputStream();
121
			sos.write(sb.toString().getBytes());
122
			sos.flush();
123
 
124
		} catch (TTransportException e) {
125
			logger.error("", e);
126
 
127
		} catch (NumberFormatException e) {
128
			logger.error("", e);
129
 
130
		} catch (TransactionServiceException e) {
131
			logger.error("", e);
132
 
133
		} catch (TException e) {
134
			logger.error("", e);
135
 
136
		} catch (IOException e) {
137
			logger.error("", e);
138
		}
139
 
140
		return new DefaultHttpHeaders();
141
	}
142
 
143
	public Map<String, Long> getOrderStatusDistribution()	{
144
		return this.orderStatusDistribution;
145
	}
146
 
147
	public String getPath()	{
148
		return this.request.getServletPath();
149
	}
150
 
151
	public String getStartEndTimestamp()	{
152
		return "" + startTimestamp + "-" + endTimestamp;
153
	}
154
 
155
	@Override
156
	public void setServletRequest(HttpServletRequest request) {
157
		this.request = request;
158
	}
159
 
160
	@Override
161
	public void setServletResponse(HttpServletResponse response) {
162
		this.response = response;
163
	}
164
}