Subversion Repositories SmartDukaan

Rev

Rev 5068 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.support.controllers;

import in.shop2020.model.v1.order.OrderStatus;
import in.shop2020.model.v1.order.TransactionServiceException;
import in.shop2020.thrift.clients.TransactionClient;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ValidationAwareSupport;

public class OrderMonitorController extends ValidationAwareSupport implements ServletRequestAware, ServletResponseAware {

        private static Logger logger = LoggerFactory.getLogger(ProductNotificationsController.class);
        private final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        private HttpServletRequest request;
        private HttpServletResponse response;
        
        private long startTimestamp, endTimestamp;
        
        private Map<String, Long> orderStatusDistribution;
        
        public String index()   {
                Date startDate, endDate;
                try {
                        if (request.getParameter("start") != null && request.getParameter("end") != null)       {
                                startDate = dateFormat.parse(request.getParameter("start"));
                                endDate = dateFormat.parse(request.getParameter("end"));
                                
                        } else  {
                                startDate = new Date();
                                startDate.setHours(0);
                                startDate.setMinutes(0);
                                startDate.setSeconds(0);
                                
                                endDate = new Date();
                        }
                        startTimestamp = startDate.getTime();
                        endTimestamp = endDate.getTime();
                        
                        logger.info("Start: " + startDate + "\tEnd: " + endDate);
                        
                        TransactionClient tsc = new TransactionClient();
                        in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
                        
                        Map<Long, Long> orderDistribution = new HashMap<Long, Long>();
                        orderDistribution.putAll(transactionClient.getStatusDistributionOfOrders(startDate.getTime(), endDate.getTime()));
                        logger.info(orderDistribution.toString());
                        
                        orderStatusDistribution = new HashMap<String, Long>();
                        
                        for (long orderStatusId: orderDistribution.keySet())    {
                                String statusName = OrderStatus.findByValue((int)orderStatusId).name();
                                long count = orderDistribution.get(orderStatusId);
                                logger.info("\t"  + orderStatusId + " " + statusName + " " + count);
                                orderStatusDistribution.put(statusName, count);
                        }
                        logger.info(orderStatusDistribution.toString());
                
                } catch (ParseException e) {
                        logger.error(e.getStackTrace().toString());
                        addActionError("Please enter valid start and end date");
                        
                } catch (TTransportException e) {
                        logger.error(e.getStackTrace().toString());
                        addActionError(e.getMessage());
                        
                } catch (TransactionServiceException e) {
                        logger.error(e.getStackTrace().toString());
                        addActionError(e.getMessage());
                        
                } catch (TException e) {
                        logger.error(e.getStackTrace().toString());
                        addActionError(e.getMessage());
                }
                return "index";
        }
        
        public HttpHeaders getOrderIds()        {
                long status = (long)OrderStatus.valueOf(request.getParameter("status")).getValue();
                String[] timestamps = request.getParameter("timestamps").split("-");
                
                TransactionClient tsc;
                try {
                        tsc = new TransactionClient();
                        in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
                        List<Long> orderIds = transactionClient.getOrderIdsForStatus(status, Long.parseLong(timestamps[0]), Long.parseLong(timestamps[1]));
                        
                        response.setContentType("text/comma-separated-values");
                        response.setHeader("Content-disposition", "inline; filename=OrderIds-" + request.getParameter("status") + ".csv");
                        
                        StringBuilder sb = new StringBuilder();
                        
                        for (long orderId: orderIds)    {
                                sb.append(Long.toString(orderId));
                                sb.append("\n");
                        }
                        ServletOutputStream sos = response.getOutputStream();
                        sos.write(sb.toString().getBytes());
                        sos.flush();
                        
                } catch (TTransportException e) {
                        logger.error("", e);
                        
                } catch (NumberFormatException e) {
                        logger.error("", e);
                        
                } catch (TransactionServiceException e) {
                        logger.error("", e);
                        
                } catch (TException e) {
                        logger.error("", e);
                        
                } catch (IOException e) {
                        logger.error("", e);
                }
                
                return new DefaultHttpHeaders();
        }
        
        public Map<String, Long> getOrderStatusDistribution()   {
                return this.orderStatusDistribution;
        }
        
        public String getPath() {
                return this.request.getServletPath();
        }
        
        public String getStartEndTimestamp()    {
                return "" + startTimestamp + "-" + endTimestamp;
        }
        
        @Override
        public void setServletRequest(HttpServletRequest request) {
                this.request = request;
        }
        
        @Override
        public void setServletResponse(HttpServletResponse response) {
                this.response = response;
        }
}