Rev 20779 | Rev 20786 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;import in.shop2020.model.v1.order.LineItem;import in.shop2020.model.v1.order.Order;import in.shop2020.model.v1.order.OrderStatus;import in.shop2020.model.v1.order.TransactionServiceException;import in.shop2020.support.utils.ReportsUtils;import in.shop2020.thrift.clients.PaymentClient;import in.shop2020.thrift.clients.TransactionClient;import in.shop2020.thrift.clients.UserClient;import java.io.InputStream;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.apache.struts2.convention.annotation.InterceptorRef;import org.apache.struts2.convention.annotation.InterceptorRefs;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.util.ServletContextAware;import org.apache.thrift.TException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@InterceptorRefs({ @InterceptorRef("defaultStack"), @InterceptorRef("login") })@Results({ @Result(name = "authfail", type = "redirectAction", params = {"actionName", "reports" }),@Result(name = "report",type = "stream",params = {"contentType", "${type}","inputName", "${stream}","bufferSize", "1024","contentDisposition", "attachment;filename=\"${filename}\""})})public class StatisticsController implements ServletRequestAware,ServletContextAware {private static Logger logger = LoggerFactory.getLogger(StatisticsController.class);public String getFilename() {return filename;}public void setFilename(String filename) {this.filename = filename;}public InputStream getStream() {return stream;}public void setStream(InputStream stream) {this.stream = stream;}private InputStream stream;private String filename;private String type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";public String getType() {return type;}private HttpServletRequest request;private HttpSession session;private ServletContext context;private long noOfRegisterUsers;private long noOfOrders;private long noOfCustomers;private int quantity;private double maxOrderAmount;private double minOrderAmount;private double maxPaymentAmount;private double minPaymentAmount;private List<Double> paymentAmountRange;private List<Double> orderAmountRange;private List<Order> validOrders;private String my;private UserClient usc;private in.shop2020.model.v1.user.UserContextService.Client uclient;private TransactionClient tsc;private in.shop2020.model.v1.order.TransactionService.Client tClient;private PaymentClient psc;private in.shop2020.payments.PaymentService.Client pClient;private final DateFormat formatter = new SimpleDateFormat("EEE, dd-MMM-yyyy hh:mm a");public StatisticsController() {try {usc = new UserClient();uclient = usc.getClient();tsc = new TransactionClient();tClient = tsc.getClient();psc = new PaymentClient();pClient = psc.getClient();} catch (Exception e) {logger.error("Error connecting to one of the user, order or payment service",e);}}public String index() {if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE),request.getServletPath())) {return "authfail";}getStats();return "authsuccess";/** if(getSessionUserName()==null) { return "authfail"; } else {* if(!canAccessReport()) { return "exception"; } getStats(); return* "authsuccess"; }*/}private void getStats() {// try {// noOfRegisterUsers = uclient.getUserCount(UserType.USER);// } catch(Exception e){// logger.error("Error while getting the no. of registered users", e);// }try {// noOfOrders = tClient.getValidOrderCount();// noOfCustomers =// tClient.getNoOfCustomersWithSuccessfulTransaction();// orderAmountRange = tClient.getValidOrdersAmountRange();// minOrderAmount = orderAmountRange.get(0);// maxOrderAmount = orderAmountRange.get(1);//validOrders = tClient.getValidOrders(200, false);} catch (Exception e) {logger.error("Error while getting order statistics", e);}try {paymentAmountRange = pClient.getSuccessfulPaymentsAmountRange();minPaymentAmount = paymentAmountRange.get(0);maxPaymentAmount = paymentAmountRange.get(1);} catch (Exception e) {logger.error("Error while getting payment statistics", e);}}public long getNoOfRegisterUsers() {return noOfRegisterUsers;}public long getNoOfOrders() {return noOfOrders;}public long getNoOfCustomers() {return noOfCustomers;}public double getMaxOrderAmount() {return maxOrderAmount;}public double getMinOrderAmount() {return minOrderAmount;}public double getMaxPaymentAmount() {return maxPaymentAmount;}public double getMinPaymentAmount() {return minPaymentAmount;}public List<Order> getValidOrders() {return validOrders;}public LineItem getItem(Order order) throws TransactionServiceException,TException {LineItem lItem = order.getLineitems().get(0);return lItem;}public String getOrderStatusString(OrderStatus status) {return status.getDescription();}public String getDateTime(long milliseconds) {Calendar cal = Calendar.getInstance();cal.setTimeInMillis(milliseconds);return formatter.format(cal.getTime());}@Overridepublic void setServletRequest(HttpServletRequest req) {this.request = req;this.session = req.getSession();}@Overridepublic void setServletContext(ServletContext context) {this.context = context;}public String getServletContextPath() {return context.getContextPath();}public void setQuantity(int quantity) {this.quantity = quantity;}public int getQuantity() {return quantity;}public String download() throws Exception {InputStream is = getClass().getClassLoader().getResourceAsStream("orderformat.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(is);Sheet sheet = workbook.getSheetAt(0);workbook.setSheetName(0, this.getMy());DateFormat df = new SimpleDateFormat("MMM, yyyy");Date fromDate = df.parse(this.getMy());Calendar toDateCal = Calendar.getInstance();toDateCal.add(Calendar.MONTH, 1);List<Order> orders = tClient.getAllOrders(new ArrayList<OrderStatus>(), fromDate.getTime(), toDateCal.getTime().getTime(), 0);int rowNum=2;for(Order o : orders){Row row = sheet.createRow(rowNum);int i=0;row.createCell(++i).setCellValue(o.getId());row.createCell(++i).setCellValue(new Date(o.getCreated_timestamp()));++i;row.createCell(++i).setCellValue(new Date(o.getVerification_timestamp()));++i;row.createCell(++i).setCellValue(o.getInvoice_number());row.createCell(++i).setCellValue(o.getBilled_by());++i;row.createCell(++i).setCellValue(new Date(o.getBilling_timestamp()));row.createCell(++i).setCellValue(o.getAirwaybill_no());row.createCell(++i).setCellValue(o.getLogistics_provider_id());++i;row.createCell(++i).setCellValue(new Date(o.getDelivery_timestamp()));row.createCell(++i).setCellValue(o.getLineitems().get(0).getQuantity());row.createCell(++i).setCellValue(o.getTotal_amount() + o.getShippingCost());if(o.getStatus().equals(OrderStatus.DELIVERY_SUCCESS)) {row.createCell(++i).setCellValue(o.getTotal_amount() + o.getShippingCost());}else {++i;}if(o.isCod()) {row.createCell(++i).setCellValue("COD");} else {row.createCell(++i).setCellValue("PREPAID");}row.createCell(++i).setCellValue(o.getStatusDescription());row.createCell(++i).setCellValue(o.getCustomer_city());}stream = is;filename=this.getMy() + "-order.xlsx";return "report";}public void setMy(String my) {this.my = my;}public String getMy() {return my;}}