Subversion Repositories SmartDukaan

Rev

Rev 12313 | 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");
15486 kshitij.so 137
        rowhead.createCell((short) 13).setCellValue("Our Price");
138
        rowhead.createCell((short) 14).setCellValue("Lowest Amazon Seller");
139
        rowhead.createCell((short) 15).setCellValue("Lowest Amazon Price");
12256 kshitij.so 140
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
141
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
142
        int iterator=1;
143
        for (CompetitorPricing item : data){
144
            HSSFRow row = sheet.createRow((short)iterator);
145
            row.createCell((short) 0).setCellValue(item.getItem_id());
146
            row.createCell((short) 1).setCellValue(item.getProductName());
147
            row.createCell((short) 2).setCellValue(item.getOurSnapdealPrice());
148
            row.createCell((short) 3).setCellValue(item.getOurSnapdealOfferPrice());
149
            row.createCell((short) 4).setCellValue(item.getLowestSnapdealSeller());
150
            row.createCell((short) 5).setCellValue(item.getLowestSnapdealPrice());
151
            row.createCell((short) 6).setCellValue(item.getLowestSnapdealOfferPrice());
152
            row.createCell((short) 7).setCellValue(item.getOurSnapdealInventory());
153
            row.createCell((short) 8).setCellValue(item.getLowestSnapdealSellerInventory());
154
            row.createCell((short) 9).setCellValue(item.getOurFlipkartPrice());
155
            row.createCell((short) 10).setCellValue(item.getLowestFlipkartSeller());
156
            row.createCell((short) 11).setCellValue(item.getLowestFlipkartPrice());
157
            row.createCell((short) 12).setCellValue(item.getOurFlipkartInventory());
15486 kshitij.so 158
            row.createCell((short) 13).setCellValue(item.getOurAmazonPrice());
159
            row.createCell((short) 14).setCellValue(item.getLowestAmazonSeller());
160
            row.createCell((short) 15).setCellValue(item.getLowestAmazonPrice());
12256 kshitij.so 161
            iterator++;
162
        }
163
        FileOutputStream fileOut = null;
164
        try {
165
            fileOut = new FileOutputStream(file);
166
        } catch (FileNotFoundException e) {
167
            // TODO Auto-generated catch block
168
            e.printStackTrace();
169
        }
170
        try {
171
            hwb.write(fileOut);
172
        } catch (IOException e) {
173
            // TODO Auto-generated catch block
174
            e.printStackTrace();
175
        }
176
        try {
177
            fileOut.close();
178
        } catch (IOException e) {
179
            // TODO Auto-generated catch block
180
            e.printStackTrace();
181
        }
182
        byte[] buffer = new byte[(int)file.length()];
183
        InputStream input = null;
184
        try {
185
            int totalBytesRead = 0;
186
            input = new BufferedInputStream(new FileInputStream(file));
187
            while(totalBytesRead < buffer.length){
188
                int bytesRemaining = buffer.length - totalBytesRead;
189
                int bytesRead = input.read(buffer, totalBytesRead, bytesRemaining); 
190
                if (bytesRead > 0){
191
                    totalBytesRead = totalBytesRead + bytesRead;
192
                }
193
            }
194
        }
195
        finally {
196
            input.close();
197
            file.delete();
198
        }
199
 
200
        response.setHeader("Content-Disposition", "attachment; filename="+this.requestId+".xls");
201
        response.setContentType("application/octet-stream");
202
        ServletOutputStream sos;
203
        try {
204
            sos = response.getOutputStream();
205
            sos.write(buffer);
206
            sos.flush();
207
        } catch (IOException e) {
208
            System.out.println("Unable to stream the manifest file");
209
        }   
210
    }
211
 
212
    public String uploadSheet(){
213
        return "upload";
214
    }
215
 
216
    public String addItems(){
217
        return "addItem";
218
    }
219
 
220
    public String uploadBulkFile() throws IOException, TException{
221
        long uploadId = getTimeInMilliseconds();
222
        String userEmail = getUserEmail();
12269 kshitij.so 223
        File fileToCreate = new File("/temp-uploads", "competition-scraping-"+String.valueOf(uploadId)+".xls");
12256 kshitij.so 224
        FileUtils.copyFile(this.file, fileToCreate);
225
        FileInputStream iFile = new FileInputStream(new File(file.getAbsolutePath()));
226
        HSSFWorkbook workbook = new HSSFWorkbook(iFile);
227
        HSSFSheet sheet = workbook.getSheetAt(0);
228
        Map<Long,CompetitorPricing> itemScrapingMap = new HashMap<Long,CompetitorPricing>();
229
        for (int iterator=(sheet.getFirstRowNum()+1);iterator<=sheet.getLastRowNum();iterator++){
12313 kshitij.so 230
            if (sheet.getLastRowNum()-1>100){
231
                logger.info("Greater than 100, returning");
232
                addActionError("Sku's cant be greater than 100");
233
                return "redirect";
234
            }
12256 kshitij.so 235
            CompetitorPricing cp = new CompetitorPricing(); 
236
            if (checkEmptyString(sheet.getRow(iterator).getCell(0))){
237
                continue;
238
            }
239
            else {
240
                cp.setItem_id((long) sheet.getRow(iterator).getCell(0).getNumericCellValue());
241
            }
242
 
243
            if (!checkEmptyString(sheet.getRow(iterator).getCell(1))){
244
                if ((long)sheet.getRow(iterator).getCell(1).getNumericCellValue()==1){
245
                    cp.setIsSnapdeal(true);
246
                }
247
            }
248
 
249
            if (!checkEmptyString(sheet.getRow(iterator).getCell(2))){
250
                if ((long)sheet.getRow(iterator).getCell(2).getNumericCellValue()==1){
251
                    cp.setIsFlipkart(true);
252
                }
253
            }
254
            if (!checkEmptyString(sheet.getRow(iterator).getCell(3))){
255
                if ((long)sheet.getRow(iterator).getCell(3).getNumericCellValue()==1){
256
                    cp.setIsAmazon(true);
257
                }
258
            }
259
            cp.setUploadId(uploadId);
260
            cp.setUserEmail(userEmail);
261
            itemScrapingMap.put(cp.getItem_id(), cp);
262
        }
12262 kshitij.so 263
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
12256 kshitij.so 264
        cc.addCompetitorScraping(itemScrapingMap);
265
        return getPreviousData();
266
    }
267
 
268
    public boolean checkEmptyString(Cell cell){
269
        if (cell==null){
270
            return true;
271
        }
272
        return false;
273
    }
274
 
275
    public long getTimeInMilliseconds(){
276
        Calendar cal=GregorianCalendar.getInstance();
277
        return cal.getTimeInMillis();
278
    }
279
 
280
    public String getTimestamp(long timestamp){
281
        return new java.util.Date(timestamp).toLocaleString();
282
    }
283
 
284
    public String getUserEmail(){
285
        logger.info(session.getAttribute(ReportsUtils.USER_NAME).toString());
286
        logger.info(session.getAttribute(ReportsUtils.USER_EMAIL).toString());
287
        return session.getAttribute(ReportsUtils.USER_EMAIL).toString();
288
    }
289
 
290
 
291
    public File getFile() {
292
        return file;
293
    }
294
 
295
    public void setFile(File file) {
296
        this.file = file;
297
    }
298
 
299
    public void setPreviousUploads(List<CompetitorPricing> previousUploads) {
300
        this.previousUploads = previousUploads;
301
    }
302
 
303
    public List<CompetitorPricing> getPreviousUploads() {
304
        return previousUploads;
305
    }
306
 
307
    public HttpServletRequest getRequest() {
308
        logger.info("set request"+request.toString());
309
        return request;
310
    }
311
 
312
    public void setRequest(HttpServletRequest request) {
313
        this.request = request;
314
    }
315
 
316
    public HttpServletResponse getResponse() {
317
        return response;
318
    }
319
 
320
    public void setResponse(HttpServletResponse response) {
321
        this.response = response;
322
    }
323
 
324
    public HttpSession getSession() {
325
        return session;
326
    }
327
 
328
    public void setSession(HttpSession session) {
329
        this.session = session;
330
    }
331
 
332
    public ServletContext getContext() {
333
        return context;
334
    }
335
 
336
    public void setContext(ServletContext context) {
337
        this.context = context;
338
    }
339
 
340
    public void setServletRequest(HttpServletRequest req) {
341
        this.request = req;
342
        this.session = req.getSession();        
343
    }
344
 
345
    public void setServletContext(ServletContext arg0) {
346
        // TODO Auto-generated method stub
347
 
348
    }
349
 
350
    public void setServletResponse(HttpServletResponse response) {
351
        this.response = response;
352
    }
353
 
354
    public void setSnapdeal(String[] snapdeal) {
355
        this.snapdeal = snapdeal;
356
    }
357
 
358
    public String[] getSnapdeal() {
359
        return snapdeal;
360
    }
361
 
362
    public void setFlipkart(String[] flipkart) {
363
        this.flipkart = flipkart;
364
    }
365
 
366
    public String[] getFlipkart() {
367
        return flipkart;
368
    }
369
 
370
    public void setAmazon(String[] amazon) {
371
        this.amazon = amazon;
372
    }
373
 
374
    public String[] getAmazon() {
375
        return amazon;
376
    }
377
 
378
    public void setItemId(String[] itemId) {
379
        this.itemId = itemId;
380
    }
381
 
382
    public String[] getItemId() {
383
        return itemId;
384
    }
385
 
386
 
387
    public List<CompetitorPricing> getData() {
388
        return data;
389
    }
390
 
391
    public void setData(List<CompetitorPricing> data) {
392
        this.data = data;
393
    }
394
 
395
    public String getRequestId() {
396
        return requestId;
397
    }
398
 
399
    public void setRequestId(String requestId) {
400
        this.requestId = requestId;
401
    }
402
 
403
 
404
 
405
 
406
 
407
}