Rev 20870 | Rev 25950 | 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.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.axis.utils.ByteArrayOutputStream;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.xssf.usermodel.XSSFDataFormat;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.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import org.apache.thrift.TException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.opensymphony.xwork2.ActionSupport;@InterceptorRefs({ @InterceptorRef("defaultStack"), @InterceptorRef("login") })@Results({ @Result(name = "authfail", type = "redirectAction", params = {"actionName", "reports" })})public class StatisticsController implements ServletRequestAware, ServletResponseAware,ServletContextAware {private static Logger logger = LoggerFactory.getLogger(StatisticsController.class);private HttpServletResponse response;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<Order> validOrders;private String my;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 {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(50, 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);XSSFDataFormat df1 = workBook.createDataFormat();CellStyle cs = workBook.createCellStyle();cs.setDataFormat(df1.getFormat("dd-mm-yy HH:mm"));ByteArrayOutputStream bos = new ByteArrayOutputStream();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());Cell created = row.createCell(i++);created.setCellValue(new Date(o.getCreated_timestamp()));created.setCellStyle(cs);i++;if(o.getVerification_timestamp()>0){Cell verified = row.createCell(i++);verified.setCellValue(new Date(o.getVerification_timestamp()));verified.setCellStyle(cs);} else {i++;}i++;row.createCell(i++).setCellValue(o.getInvoice_number());row.createCell(i++).setCellValue(o.getBilled_by());i++;if(o.getBilling_timestamp()>0){Cell billed = row.createCell(i++);billed.setCellValue(new Date(o.getBilling_timestamp()));billed.setCellStyle(cs);} else {i++;}if(o.getShipping_timestamp()>0) {Cell shipped = row.createCell(i++);shipped.setCellValue(new Date(o.getShipping_timestamp()));shipped.setCellStyle(cs);} else {i++;}row.createCell(i++).setCellValue(o.getAirwaybill_no());row.createCell(i++).setCellValue(o.getLogistics_provider_id());i++;if(o.getDelivery_timestamp()>0){Cell delivered = row.createCell(i++);delivered.setCellValue(new Date(o.getDelivery_timestamp()));delivered.setCellStyle(cs);} else {i++;}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.getStatus().getDescription());row.createCell(i++).setCellValue(o.getCustomer_id());row.createCell(i++).setCellValue(o.getCustomer_name());row.createCell(i++).setCellValue(o.getCustomer_city());row.createCell(i++).setCellValue(o.getCustomer_pincode());row.createCell(i++).setCellValue(o.getCustomer_state());row.createCell(i++).setCellValue(o.getLineitems().get(0).getItem_id());LineItem lineItem = o.getLineitems().get(0);row.createCell(i++).setCellValue((lineItem.getBrand() + " " + getValidName(lineItem.getModel_name()) +" " + getValidName(lineItem.getModel_number()).replaceAll(" ", " ")));row.createCell(i++).setCellValue(lineItem.getColor());row.createCell(i++).setCellValue(o.getLogisticsTransactionId());rowNum++;}ServletOutputStream os = response.getOutputStream();workBook.write(bos);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");String filename=this.getMy() + "-order.xlsx";response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");bos.writeTo(os);os.flush();return ActionSupport.NONE;}public void setMy(String my) {this.my = my;}public String getMy() {return my;}@Overridepublic void setServletResponse(HttpServletResponse arg0) {this.response = arg0;}private String getValidName(String name){return name!=null?name:"";}}