Subversion Repositories SmartDukaan

Rev

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