Subversion Repositories SmartDukaan

Rev

Rev 12270 | 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.catalog.CatalogService.Client;
import in.shop2020.model.v1.catalog.CompetitorPricing;
import in.shop2020.model.v1.catalog.Item;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.CatalogClient;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ValidationAwareSupport;

@SuppressWarnings({"unused","deprecation"})

@InterceptorRefs({
    @InterceptorRef("defaultStack"),
    @InterceptorRef("login")
})
@Results({
    @Result(name = "redirect", location = "${url}", type = "redirect"),
    @Result(name="authsuccess", type="redirectAction", params = {"actionName" , "reports"})
})

public class CompetitionScrapingController extends ValidationAwareSupport implements ServletRequestAware ,ServletResponseAware, ServletContextAware{

    /**
     * 
     */
    
    private static Logger logger = LoggerFactory.getLogger(CompetitionScrapingController.class);
    
    private HttpServletRequest request;
    private HttpServletResponse response;
    private HttpSession session;
    private ServletContext context;
    private static final long serialVersionUID = -4056242323967836986L;
    private File file;
    private List<CompetitorPricing> previousUploads;
    private String[] snapdeal;
    private String[] flipkart;
    private String[] amazon;
    private String[] itemId;
    private String requestId;
    private List<CompetitorPricing> data;
    
    
    public String processItems() throws TException{
        long uploadId = getTimeInMilliseconds();
        String userEmail = getUserEmail();
        Map<Long,CompetitorPricing> itemScrapingMap = new HashMap<Long,CompetitorPricing>();
        for(int i=0;i<itemId.length;i++){
            CompetitorPricing cp = new CompetitorPricing(); 
            cp.setItem_id(Long.valueOf(itemId[i]));
            cp.setUploadId(uploadId);
            cp.setUserEmail(userEmail);
            cp.setIsSnapdeal(Boolean.valueOf(snapdeal[i]));
            cp.setIsFlipkart(Boolean.valueOf(flipkart[i]));
            cp.setIsAmazon(Boolean.valueOf(amazon[i]));
            itemScrapingMap.put(cp.getItem_id(), cp);
        }
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
        cc.addCompetitorScraping(itemScrapingMap);
        return getPreviousData();
    }

    public String index() throws TException{
        if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE),request.getServletPath())) {
            return "authfail";
        }
        return "index";
    }
    
    public String getUploadData() throws NumberFormatException, TException{
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
        return "show";
    }
    
    public String getPreviousData() throws TException{
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
        setPreviousUploads(cc.getPreviousCompetitorScraping(10));
        return "previous";
    }
    
    public void downloadReport() throws NumberFormatException, TException, IOException{
        File file = new File("/tmp/"+this.requestId+".xls");
        HSSFWorkbook hwb=new HSSFWorkbook();
        HSSFSheet sheet =  hwb.createSheet(this.requestId);
        HSSFRow rowhead=   sheet.createRow((short)0);
        rowhead.createCell((short) 0).setCellValue("ITEM-ID");
        rowhead.createCell((short) 1).setCellValue("PRODUCT");
        rowhead.createCell((short) 2).setCellValue("Our Snapdeal SP");
        rowhead.createCell((short) 3).setCellValue("Our Snapdeal Offer Price");
        rowhead.createCell((short) 4).setCellValue("Lowest Snapdeal Seller");
        rowhead.createCell((short) 5).setCellValue("Lowest Snapdeal SP");
        rowhead.createCell((short) 6).setCellValue("Lowest Offer Price");
        rowhead.createCell((short) 7).setCellValue("Our Snapdeal Inventory");
        rowhead.createCell((short) 8).setCellValue("Lowest Seller Snapdeal Inventory");
        rowhead.createCell((short) 9).setCellValue("Our Flipkart SP");
        rowhead.createCell((short) 10).setCellValue("Lowest Seller Flipkart");
        rowhead.createCell((short) 11).setCellValue("Lowest Flipkart SP");
        rowhead.createCell((short) 12).setCellValue("Our Flipkart Inventory");
        rowhead.createCell((short) 13).setCellValue("MFN Price");
        rowhead.createCell((short) 14).setCellValue("FBA Price");
        rowhead.createCell((short) 15).setCellValue("Lowest Seller Amazon");
        rowhead.createCell((short) 16).setCellValue("Lowest Amazon SP");
        rowhead.createCell((short) 17).setCellValue("MFN Inventory");
        rowhead.createCell((short) 18).setCellValue("FBA Inventory");
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
        int iterator=1;
        for (CompetitorPricing item : data){
            HSSFRow row = sheet.createRow((short)iterator);
            row.createCell((short) 0).setCellValue(item.getItem_id());
            row.createCell((short) 1).setCellValue(item.getProductName());
            row.createCell((short) 2).setCellValue(item.getOurSnapdealPrice());
            row.createCell((short) 3).setCellValue(item.getOurSnapdealOfferPrice());
            row.createCell((short) 4).setCellValue(item.getLowestSnapdealSeller());
            row.createCell((short) 5).setCellValue(item.getLowestSnapdealPrice());
            row.createCell((short) 6).setCellValue(item.getLowestSnapdealOfferPrice());
            row.createCell((short) 7).setCellValue(item.getOurSnapdealInventory());
            row.createCell((short) 8).setCellValue(item.getLowestSnapdealSellerInventory());
            row.createCell((short) 9).setCellValue(item.getOurFlipkartPrice());
            row.createCell((short) 10).setCellValue(item.getLowestFlipkartSeller());
            row.createCell((short) 11).setCellValue(item.getLowestFlipkartPrice());
            row.createCell((short) 12).setCellValue(item.getOurFlipkartInventory());
            row.createCell((short) 13).setCellValue(item.getOurMfnPrice());
            row.createCell((short) 14).setCellValue(item.getOurFbaPrice());
            row.createCell((short) 15).setCellValue(item.getLowestAmazonSeller());
            row.createCell((short) 16).setCellValue(item.getLowestAmazonPrice());
            row.createCell((short) 17).setCellValue(item.getOurMfnInventory());
            row.createCell((short) 18).setCellValue(item.getOurFbaInventory());
            iterator++;
        }
        FileOutputStream fileOut = null;
        try {
            fileOut = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            hwb.write(fileOut);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            fileOut.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        byte[] buffer = new byte[(int)file.length()];
        InputStream input = null;
        try {
            int totalBytesRead = 0;
            input = new BufferedInputStream(new FileInputStream(file));
            while(totalBytesRead < buffer.length){
                int bytesRemaining = buffer.length - totalBytesRead;
                int bytesRead = input.read(buffer, totalBytesRead, bytesRemaining); 
                if (bytesRead > 0){
                    totalBytesRead = totalBytesRead + bytesRead;
                }
            }
        }
        finally {
            input.close();
            file.delete();
        }

        response.setHeader("Content-Disposition", "attachment; filename="+this.requestId+".xls");
        response.setContentType("application/octet-stream");
        ServletOutputStream sos;
        try {
            sos = response.getOutputStream();
            sos.write(buffer);
            sos.flush();
        } catch (IOException e) {
            System.out.println("Unable to stream the manifest file");
        }   
    }

    public String uploadSheet(){
        return "upload";
    }
    
    public String addItems(){
        return "addItem";
    }

    public String uploadBulkFile() throws IOException, TException{
        long uploadId = getTimeInMilliseconds();
        String userEmail = getUserEmail();
        File fileToCreate = new File("/temp-uploads", "competition-scraping-"+String.valueOf(uploadId)+".xls");
        FileUtils.copyFile(this.file, fileToCreate);
        FileInputStream iFile = new FileInputStream(new File(file.getAbsolutePath()));
        HSSFWorkbook workbook = new HSSFWorkbook(iFile);
        HSSFSheet sheet = workbook.getSheetAt(0);
        Map<Long,CompetitorPricing> itemScrapingMap = new HashMap<Long,CompetitorPricing>();
        for (int iterator=(sheet.getFirstRowNum()+1);iterator<=sheet.getLastRowNum();iterator++){
            if (sheet.getLastRowNum()-1>100){
                logger.info("Greater than 100, returning");
                addActionError("Sku's cant be greater than 100");
                return "redirect";
            }
            CompetitorPricing cp = new CompetitorPricing(); 
            if (checkEmptyString(sheet.getRow(iterator).getCell(0))){
                continue;
            }
            else {
                cp.setItem_id((long) sheet.getRow(iterator).getCell(0).getNumericCellValue());
            }
            
            if (!checkEmptyString(sheet.getRow(iterator).getCell(1))){
                if ((long)sheet.getRow(iterator).getCell(1).getNumericCellValue()==1){
                    cp.setIsSnapdeal(true);
                }
            }
            
            if (!checkEmptyString(sheet.getRow(iterator).getCell(2))){
                if ((long)sheet.getRow(iterator).getCell(2).getNumericCellValue()==1){
                    cp.setIsFlipkart(true);
                }
            }
            if (!checkEmptyString(sheet.getRow(iterator).getCell(3))){
                if ((long)sheet.getRow(iterator).getCell(3).getNumericCellValue()==1){
                    cp.setIsAmazon(true);
                }
            }
            cp.setUploadId(uploadId);
            cp.setUserEmail(userEmail);
            itemScrapingMap.put(cp.getItem_id(), cp);
        }
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
        cc.addCompetitorScraping(itemScrapingMap);
        return getPreviousData();
    }
    
    public boolean checkEmptyString(Cell cell){
        if (cell==null){
            return true;
        }
        return false;
    }

    public long getTimeInMilliseconds(){
        Calendar cal=GregorianCalendar.getInstance();
        return cal.getTimeInMillis();
    }
    
    public String getTimestamp(long timestamp){
        return new java.util.Date(timestamp).toLocaleString();
    }
    
    public String getUserEmail(){
        logger.info(session.getAttribute(ReportsUtils.USER_NAME).toString());
        logger.info(session.getAttribute(ReportsUtils.USER_EMAIL).toString());
        return session.getAttribute(ReportsUtils.USER_EMAIL).toString();
    }


    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }
    
    public void setPreviousUploads(List<CompetitorPricing> previousUploads) {
        this.previousUploads = previousUploads;
    }

    public List<CompetitorPricing> getPreviousUploads() {
        return previousUploads;
    }

    public HttpServletRequest getRequest() {
        logger.info("set request"+request.toString());
        return request;
    }

    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }

    public HttpServletResponse getResponse() {
        return response;
    }

    public void setResponse(HttpServletResponse response) {
        this.response = response;
    }

    public HttpSession getSession() {
        return session;
    }

    public void setSession(HttpSession session) {
        this.session = session;
    }

    public ServletContext getContext() {
        return context;
    }

    public void setContext(ServletContext context) {
        this.context = context;
    }

    public void setServletRequest(HttpServletRequest req) {
        this.request = req;
        this.session = req.getSession();        
    }

    public void setServletContext(ServletContext arg0) {
        // TODO Auto-generated method stub

    }

    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }

    public void setSnapdeal(String[] snapdeal) {
        this.snapdeal = snapdeal;
    }

    public String[] getSnapdeal() {
        return snapdeal;
    }

    public void setFlipkart(String[] flipkart) {
        this.flipkart = flipkart;
    }

    public String[] getFlipkart() {
        return flipkart;
    }

    public void setAmazon(String[] amazon) {
        this.amazon = amazon;
    }

    public String[] getAmazon() {
        return amazon;
    }

    public void setItemId(String[] itemId) {
        this.itemId = itemId;
    }

    public String[] getItemId() {
        return itemId;
    }

   
    public List<CompetitorPricing> getData() {
        return data;
    }

    public void setData(List<CompetitorPricing> data) {
        this.data = data;
    }

    public String getRequestId() {
        return requestId;
    }

    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }

    



}