Subversion Repositories SmartDukaan

Rev

Rev 12270 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
12256 kshitij.so 1
package in.shop2020.support.controllers;
2
 
3
import in.shop2020.model.v1.catalog.CatalogService.Client;
4
import in.shop2020.model.v1.catalog.CompetitorPricing;
5
import in.shop2020.model.v1.catalog.Item;
6
import in.shop2020.support.utils.ReportsUtils;
7
import in.shop2020.thrift.clients.CatalogClient;
8
 
9
import java.io.BufferedInputStream;
10
import java.io.File;
11
import java.io.FileInputStream;
12
import java.io.FileNotFoundException;
13
import java.io.FileOutputStream;
14
import java.io.IOException;
15
import java.io.InputStream;
16
import java.util.Calendar;
17
import java.util.GregorianCalendar;
18
import java.util.HashMap;
19
import java.util.List;
20
import java.util.Map;
21
 
22
import javax.servlet.ServletContext;
23
import javax.servlet.ServletOutputStream;
24
import javax.servlet.http.HttpServletRequest;
25
import javax.servlet.http.HttpServletResponse;
26
import javax.servlet.http.HttpSession;
27
 
28
import org.apache.commons.io.FileUtils;
29
import org.apache.poi.hssf.usermodel.HSSFRow;
30
import org.apache.poi.hssf.usermodel.HSSFSheet;
31
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
32
import org.apache.poi.ss.usermodel.Cell;
12260 kshitij.so 33
import org.apache.struts2.convention.annotation.InterceptorRef;
34
import org.apache.struts2.convention.annotation.InterceptorRefs;
35
import org.apache.struts2.convention.annotation.Result;
36
import org.apache.struts2.convention.annotation.Results;
12256 kshitij.so 37
import org.apache.struts2.interceptor.ServletRequestAware;
38
import org.apache.struts2.interceptor.ServletResponseAware;
39
import org.apache.struts2.util.ServletContextAware;
40
import org.apache.thrift.TException;
41
import org.apache.thrift.transport.TTransportException;
42
import org.slf4j.Logger;
43
import org.slf4j.LoggerFactory;
44
 
45
import com.opensymphony.xwork2.ValidationAwareSupport;
46
 
12260 kshitij.so 47
@SuppressWarnings({"unused","deprecation"})
48
 
49
@InterceptorRefs({
50
    @InterceptorRef("defaultStack"),
51
    @InterceptorRef("login")
52
})
53
@Results({
54
    @Result(name = "redirect", location = "${url}", type = "redirect"),
55
    @Result(name="authsuccess", type="redirectAction", params = {"actionName" , "reports"})
56
})
57
 
12256 kshitij.so 58
public class CompetitionScrapingController extends ValidationAwareSupport implements ServletRequestAware ,ServletResponseAware, ServletContextAware{
59
 
60
    /**
61
     * 
62
     */
63
 
64
    private static Logger logger = LoggerFactory.getLogger(CompetitionScrapingController.class);
65
 
66
    private HttpServletRequest request;
67
    private HttpServletResponse response;
68
    private HttpSession session;
69
    private ServletContext context;
70
    private static final long serialVersionUID = -4056242323967836986L;
71
    private File file;
72
    private List<CompetitorPricing> previousUploads;
73
    private String[] snapdeal;
74
    private String[] flipkart;
75
    private String[] amazon;
76
    private String[] itemId;
77
    private String requestId;
78
    private List<CompetitorPricing> data;
79
 
80
 
81
    public String processItems() throws TException{
82
        long uploadId = getTimeInMilliseconds();
83
        String userEmail = getUserEmail();
84
        Map<Long,CompetitorPricing> itemScrapingMap = new HashMap<Long,CompetitorPricing>();
85
        for(int i=0;i<itemId.length;i++){
86
            CompetitorPricing cp = new CompetitorPricing(); 
87
            cp.setItem_id(Long.valueOf(itemId[i]));
88
            cp.setUploadId(uploadId);
89
            cp.setUserEmail(userEmail);
90
            cp.setIsSnapdeal(Boolean.valueOf(snapdeal[i]));
91
            cp.setIsFlipkart(Boolean.valueOf(flipkart[i]));
92
            cp.setIsAmazon(Boolean.valueOf(amazon[i]));
93
            itemScrapingMap.put(cp.getItem_id(), cp);
94
        }
12261 kshitij.so 95
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
12256 kshitij.so 96
        cc.addCompetitorScraping(itemScrapingMap);
97
        return getPreviousData();
98
    }
99
 
100
    public String index() throws TException{
12260 kshitij.so 101
        if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE),request.getServletPath())) {
102
            return "authfail";
103
        }
12256 kshitij.so 104
        return "index";
105
    }
106
 
107
    public String getUploadData() throws NumberFormatException, TException{
108
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
109
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
110
        return "show";
111
    }
112
 
113
    public String getPreviousData() throws TException{
114
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
115
        setPreviousUploads(cc.getPreviousCompetitorScraping(10));
116
        return "previous";
117
    }
118
 
119
    public void downloadReport() throws NumberFormatException, TException, IOException{
120
        File file = new File("/tmp/"+this.requestId+".xls");
121
        HSSFWorkbook hwb=new HSSFWorkbook();
122
        HSSFSheet sheet =  hwb.createSheet(this.requestId);
123
        HSSFRow rowhead=   sheet.createRow((short)0);
124
        rowhead.createCell((short) 0).setCellValue("ITEM-ID");
125
        rowhead.createCell((short) 1).setCellValue("PRODUCT");
126
        rowhead.createCell((short) 2).setCellValue("Our Snapdeal SP");
127
        rowhead.createCell((short) 3).setCellValue("Our Snapdeal Offer Price");
128
        rowhead.createCell((short) 4).setCellValue("Lowest Snapdeal Seller");
129
        rowhead.createCell((short) 5).setCellValue("Lowest Snapdeal SP");
130
        rowhead.createCell((short) 6).setCellValue("Lowest Offer Price");
131
        rowhead.createCell((short) 7).setCellValue("Our Snapdeal Inventory");
132
        rowhead.createCell((short) 8).setCellValue("Lowest Seller Snapdeal Inventory");
133
        rowhead.createCell((short) 9).setCellValue("Our Flipkart SP");
134
        rowhead.createCell((short) 10).setCellValue("Lowest Seller Flipkart");
135
        rowhead.createCell((short) 11).setCellValue("Lowest Flipkart SP");
136
        rowhead.createCell((short) 12).setCellValue("Our Flipkart Inventory");
137
        rowhead.createCell((short) 13).setCellValue("MFN Price");
138
        rowhead.createCell((short) 14).setCellValue("FBA Price");
139
        rowhead.createCell((short) 15).setCellValue("Lowest Seller Amazon");
140
        rowhead.createCell((short) 16).setCellValue("Lowest Amazon SP");
141
        rowhead.createCell((short) 17).setCellValue("MFN Inventory");
142
        rowhead.createCell((short) 18).setCellValue("FBA Inventory");
143
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
144
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
145
        int iterator=1;
146
        for (CompetitorPricing item : data){
147
            HSSFRow row = sheet.createRow((short)iterator);
148
            row.createCell((short) 0).setCellValue(item.getItem_id());
149
            row.createCell((short) 1).setCellValue(item.getProductName());
150
            row.createCell((short) 2).setCellValue(item.getOurSnapdealPrice());
151
            row.createCell((short) 3).setCellValue(item.getOurSnapdealOfferPrice());
152
            row.createCell((short) 4).setCellValue(item.getLowestSnapdealSeller());
153
            row.createCell((short) 5).setCellValue(item.getLowestSnapdealPrice());
154
            row.createCell((short) 6).setCellValue(item.getLowestSnapdealOfferPrice());
155
            row.createCell((short) 7).setCellValue(item.getOurSnapdealInventory());
156
            row.createCell((short) 8).setCellValue(item.getLowestSnapdealSellerInventory());
157
            row.createCell((short) 9).setCellValue(item.getOurFlipkartPrice());
158
            row.createCell((short) 10).setCellValue(item.getLowestFlipkartSeller());
159
            row.createCell((short) 11).setCellValue(item.getLowestFlipkartPrice());
160
            row.createCell((short) 12).setCellValue(item.getOurFlipkartInventory());
161
            row.createCell((short) 13).setCellValue(item.getOurMfnPrice());
162
            row.createCell((short) 14).setCellValue(item.getOurFbaPrice());
163
            row.createCell((short) 15).setCellValue(item.getLowestAmazonSeller());
164
            row.createCell((short) 16).setCellValue(item.getLowestAmazonPrice());
165
            row.createCell((short) 17).setCellValue(item.getOurMfnInventory());
166
            row.createCell((short) 18).setCellValue(item.getOurFbaInventory());
167
            iterator++;
168
        }
169
        FileOutputStream fileOut = null;
170
        try {
171
            fileOut = new FileOutputStream(file);
172
        } catch (FileNotFoundException e) {
173
            // TODO Auto-generated catch block
174
            e.printStackTrace();
175
        }
176
        try {
177
            hwb.write(fileOut);
178
        } catch (IOException e) {
179
            // TODO Auto-generated catch block
180
            e.printStackTrace();
181
        }
182
        try {
183
            fileOut.close();
184
        } catch (IOException e) {
185
            // TODO Auto-generated catch block
186
            e.printStackTrace();
187
        }
188
        byte[] buffer = new byte[(int)file.length()];
189
        InputStream input = null;
190
        try {
191
            int totalBytesRead = 0;
192
            input = new BufferedInputStream(new FileInputStream(file));
193
            while(totalBytesRead < buffer.length){
194
                int bytesRemaining = buffer.length - totalBytesRead;
195
                int bytesRead = input.read(buffer, totalBytesRead, bytesRemaining); 
196
                if (bytesRead > 0){
197
                    totalBytesRead = totalBytesRead + bytesRead;
198
                }
199
            }
200
        }
201
        finally {
202
            input.close();
203
            file.delete();
204
        }
205
 
206
        response.setHeader("Content-Disposition", "attachment; filename="+this.requestId+".xls");
207
        response.setContentType("application/octet-stream");
208
        ServletOutputStream sos;
209
        try {
210
            sos = response.getOutputStream();
211
            sos.write(buffer);
212
            sos.flush();
213
        } catch (IOException e) {
214
            System.out.println("Unable to stream the manifest file");
215
        }   
216
    }
217
 
218
    public String uploadSheet(){
219
        return "upload";
220
    }
221
 
222
    public String addItems(){
223
        return "addItem";
224
    }
225
 
226
    public String uploadBulkFile() throws IOException, TException{
227
        long uploadId = getTimeInMilliseconds();
228
        String userEmail = getUserEmail();
12269 kshitij.so 229
        File fileToCreate = new File("/temp-uploads", "competition-scraping-"+String.valueOf(uploadId)+".xls");
12256 kshitij.so 230
        FileUtils.copyFile(this.file, fileToCreate);
231
        FileInputStream iFile = new FileInputStream(new File(file.getAbsolutePath()));
232
        HSSFWorkbook workbook = new HSSFWorkbook(iFile);
233
        HSSFSheet sheet = workbook.getSheetAt(0);
234
        Map<Long,CompetitorPricing> itemScrapingMap = new HashMap<Long,CompetitorPricing>();
235
        for (int iterator=(sheet.getFirstRowNum()+1);iterator<=sheet.getLastRowNum();iterator++){
12313 kshitij.so 236
            if (sheet.getLastRowNum()-1>100){
237
                logger.info("Greater than 100, returning");
238
                addActionError("Sku's cant be greater than 100");
239
                return "redirect";
240
            }
12256 kshitij.so 241
            CompetitorPricing cp = new CompetitorPricing(); 
242
            if (checkEmptyString(sheet.getRow(iterator).getCell(0))){
243
                continue;
244
            }
245
            else {
246
                cp.setItem_id((long) sheet.getRow(iterator).getCell(0).getNumericCellValue());
247
            }
248
 
249
            if (!checkEmptyString(sheet.getRow(iterator).getCell(1))){
250
                if ((long)sheet.getRow(iterator).getCell(1).getNumericCellValue()==1){
251
                    cp.setIsSnapdeal(true);
252
                }
253
            }
254
 
255
            if (!checkEmptyString(sheet.getRow(iterator).getCell(2))){
256
                if ((long)sheet.getRow(iterator).getCell(2).getNumericCellValue()==1){
257
                    cp.setIsFlipkart(true);
258
                }
259
            }
260
            if (!checkEmptyString(sheet.getRow(iterator).getCell(3))){
261
                if ((long)sheet.getRow(iterator).getCell(3).getNumericCellValue()==1){
262
                    cp.setIsAmazon(true);
263
                }
264
            }
265
            cp.setUploadId(uploadId);
266
            cp.setUserEmail(userEmail);
267
            itemScrapingMap.put(cp.getItem_id(), cp);
268
        }
12262 kshitij.so 269
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
12256 kshitij.so 270
        cc.addCompetitorScraping(itemScrapingMap);
271
        return getPreviousData();
272
    }
273
 
274
    public boolean checkEmptyString(Cell cell){
275
        if (cell==null){
276
            return true;
277
        }
278
        return false;
279
    }
280
 
281
    public long getTimeInMilliseconds(){
282
        Calendar cal=GregorianCalendar.getInstance();
283
        return cal.getTimeInMillis();
284
    }
285
 
286
    public String getTimestamp(long timestamp){
287
        return new java.util.Date(timestamp).toLocaleString();
288
    }
289
 
290
    public String getUserEmail(){
291
        logger.info(session.getAttribute(ReportsUtils.USER_NAME).toString());
292
        logger.info(session.getAttribute(ReportsUtils.USER_EMAIL).toString());
293
        return session.getAttribute(ReportsUtils.USER_EMAIL).toString();
294
    }
295
 
296
 
297
    public File getFile() {
298
        return file;
299
    }
300
 
301
    public void setFile(File file) {
302
        this.file = file;
303
    }
304
 
305
    public void setPreviousUploads(List<CompetitorPricing> previousUploads) {
306
        this.previousUploads = previousUploads;
307
    }
308
 
309
    public List<CompetitorPricing> getPreviousUploads() {
310
        return previousUploads;
311
    }
312
 
313
    public HttpServletRequest getRequest() {
314
        logger.info("set request"+request.toString());
315
        return request;
316
    }
317
 
318
    public void setRequest(HttpServletRequest request) {
319
        this.request = request;
320
    }
321
 
322
    public HttpServletResponse getResponse() {
323
        return response;
324
    }
325
 
326
    public void setResponse(HttpServletResponse response) {
327
        this.response = response;
328
    }
329
 
330
    public HttpSession getSession() {
331
        return session;
332
    }
333
 
334
    public void setSession(HttpSession session) {
335
        this.session = session;
336
    }
337
 
338
    public ServletContext getContext() {
339
        return context;
340
    }
341
 
342
    public void setContext(ServletContext context) {
343
        this.context = context;
344
    }
345
 
346
    public void setServletRequest(HttpServletRequest req) {
347
        this.request = req;
348
        this.session = req.getSession();        
349
    }
350
 
351
    public void setServletContext(ServletContext arg0) {
352
        // TODO Auto-generated method stub
353
 
354
    }
355
 
356
    public void setServletResponse(HttpServletResponse response) {
357
        this.response = response;
358
    }
359
 
360
    public void setSnapdeal(String[] snapdeal) {
361
        this.snapdeal = snapdeal;
362
    }
363
 
364
    public String[] getSnapdeal() {
365
        return snapdeal;
366
    }
367
 
368
    public void setFlipkart(String[] flipkart) {
369
        this.flipkart = flipkart;
370
    }
371
 
372
    public String[] getFlipkart() {
373
        return flipkart;
374
    }
375
 
376
    public void setAmazon(String[] amazon) {
377
        this.amazon = amazon;
378
    }
379
 
380
    public String[] getAmazon() {
381
        return amazon;
382
    }
383
 
384
    public void setItemId(String[] itemId) {
385
        this.itemId = itemId;
386
    }
387
 
388
    public String[] getItemId() {
389
        return itemId;
390
    }
391
 
392
 
393
    public List<CompetitorPricing> getData() {
394
        return data;
395
    }
396
 
397
    public void setData(List<CompetitorPricing> data) {
398
        this.data = data;
399
    }
400
 
401
    public String getRequestId() {
402
        return requestId;
403
    }
404
 
405
    public void setRequestId(String requestId) {
406
        this.requestId = requestId;
407
    }
408
 
409
 
410
 
411
 
412
 
413
}