Subversion Repositories SmartDukaan

Rev

Rev 12260 | Go to most recent revision | Details | 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;
33
import org.apache.struts2.interceptor.ServletRequestAware;
34
import org.apache.struts2.interceptor.ServletResponseAware;
35
import org.apache.struts2.util.ServletContextAware;
36
import org.apache.thrift.TException;
37
import org.apache.thrift.transport.TTransportException;
38
import org.slf4j.Logger;
39
import org.slf4j.LoggerFactory;
40
 
41
import com.opensymphony.xwork2.ValidationAwareSupport;
42
 
43
public class CompetitionScrapingController extends ValidationAwareSupport implements ServletRequestAware ,ServletResponseAware, ServletContextAware{
44
 
45
    /**
46
     * 
47
     */
48
 
49
    private static Logger logger = LoggerFactory.getLogger(CompetitionScrapingController.class);
50
 
51
    private HttpServletRequest request;
52
    private HttpServletResponse response;
53
    private HttpSession session;
54
    private ServletContext context;
55
    private static final long serialVersionUID = -4056242323967836986L;
56
    private File file;
57
    private List<CompetitorPricing> previousUploads;
58
    private String[] snapdeal;
59
    private String[] flipkart;
60
    private String[] amazon;
61
    private String[] itemId;
62
    private String requestId;
63
    private List<CompetitorPricing> data;
64
 
65
 
66
    public String processItems() throws TException{
67
        long uploadId = getTimeInMilliseconds();
68
        String userEmail = getUserEmail();
69
        for(int i=0;i<snapdeal.length;i++){
70
            logger.info(itemId[i]);
71
            logger.info(snapdeal[i]);
72
        }
73
        for(int i=0;i<flipkart.length;i++){
74
            logger.info(itemId[i]);
75
            logger.info(flipkart[i]);
76
        }
77
        for(int i=0;i<amazon.length;i++){
78
            logger.info(itemId[i]);
79
            logger.info(amazon[i]);
80
        }
81
        Map<Long,CompetitorPricing> itemScrapingMap = new HashMap<Long,CompetitorPricing>();
82
        for(int i=0;i<itemId.length;i++){
83
            CompetitorPricing cp = new CompetitorPricing(); 
84
            cp.setItem_id(Long.valueOf(itemId[i]));
85
            cp.setUploadId(uploadId);
86
            cp.setUserEmail(userEmail);
87
            cp.setIsSnapdeal(Boolean.valueOf(snapdeal[i]));
88
            cp.setIsFlipkart(Boolean.valueOf(flipkart[i]));
89
            cp.setIsAmazon(Boolean.valueOf(amazon[i]));
90
            itemScrapingMap.put(cp.getItem_id(), cp);
91
        }
92
        Client cc = new CatalogClient().getClient();
93
        cc.addCompetitorScraping(itemScrapingMap);
94
        return getPreviousData();
95
    }
96
 
97
    public String index() throws TException{
98
        return "index";
99
    }
100
 
101
    public String getUploadData() throws NumberFormatException, TException{
102
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
103
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
104
        return "show";
105
    }
106
 
107
    public String getPreviousData() throws TException{
108
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
109
        setPreviousUploads(cc.getPreviousCompetitorScraping(10));
110
        return "previous";
111
    }
112
 
113
    public void downloadReport() throws NumberFormatException, TException, IOException{
114
        File file = new File("/tmp/"+this.requestId+".xls");
115
        HSSFWorkbook hwb=new HSSFWorkbook();
116
        HSSFSheet sheet =  hwb.createSheet(this.requestId);
117
        HSSFRow rowhead=   sheet.createRow((short)0);
118
        rowhead.createCell((short) 0).setCellValue("ITEM-ID");
119
        rowhead.createCell((short) 1).setCellValue("PRODUCT");
120
        rowhead.createCell((short) 2).setCellValue("Our Snapdeal SP");
121
        rowhead.createCell((short) 3).setCellValue("Our Snapdeal Offer Price");
122
        rowhead.createCell((short) 4).setCellValue("Lowest Snapdeal Seller");
123
        rowhead.createCell((short) 5).setCellValue("Lowest Snapdeal SP");
124
        rowhead.createCell((short) 6).setCellValue("Lowest Offer Price");
125
        rowhead.createCell((short) 7).setCellValue("Our Snapdeal Inventory");
126
        rowhead.createCell((short) 8).setCellValue("Lowest Seller Snapdeal Inventory");
127
        rowhead.createCell((short) 9).setCellValue("Our Flipkart SP");
128
        rowhead.createCell((short) 10).setCellValue("Lowest Seller Flipkart");
129
        rowhead.createCell((short) 11).setCellValue("Lowest Flipkart SP");
130
        rowhead.createCell((short) 12).setCellValue("Our Flipkart Inventory");
131
        rowhead.createCell((short) 13).setCellValue("MFN Price");
132
        rowhead.createCell((short) 14).setCellValue("FBA Price");
133
        rowhead.createCell((short) 15).setCellValue("Lowest Seller Amazon");
134
        rowhead.createCell((short) 16).setCellValue("Lowest Amazon SP");
135
        rowhead.createCell((short) 17).setCellValue("MFN Inventory");
136
        rowhead.createCell((short) 18).setCellValue("FBA Inventory");
137
        Client cc = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();
138
        data = cc.getUploadResultById(Long.valueOf(this.requestId));
139
        int iterator=1;
140
        for (CompetitorPricing item : data){
141
            HSSFRow row = sheet.createRow((short)iterator);
142
            row.createCell((short) 0).setCellValue(item.getItem_id());
143
            row.createCell((short) 1).setCellValue(item.getProductName());
144
            row.createCell((short) 2).setCellValue(item.getOurSnapdealPrice());
145
            row.createCell((short) 3).setCellValue(item.getOurSnapdealOfferPrice());
146
            row.createCell((short) 4).setCellValue(item.getLowestSnapdealSeller());
147
            row.createCell((short) 5).setCellValue(item.getLowestSnapdealPrice());
148
            row.createCell((short) 6).setCellValue(item.getLowestSnapdealOfferPrice());
149
            row.createCell((short) 7).setCellValue(item.getOurSnapdealInventory());
150
            row.createCell((short) 8).setCellValue(item.getLowestSnapdealSellerInventory());
151
            row.createCell((short) 9).setCellValue(item.getOurFlipkartPrice());
152
            row.createCell((short) 10).setCellValue(item.getLowestFlipkartSeller());
153
            row.createCell((short) 11).setCellValue(item.getLowestFlipkartPrice());
154
            row.createCell((short) 12).setCellValue(item.getOurFlipkartInventory());
155
            row.createCell((short) 13).setCellValue(item.getOurMfnPrice());
156
            row.createCell((short) 14).setCellValue(item.getOurFbaPrice());
157
            row.createCell((short) 15).setCellValue(item.getLowestAmazonSeller());
158
            row.createCell((short) 16).setCellValue(item.getLowestAmazonPrice());
159
            row.createCell((short) 17).setCellValue(item.getOurMfnInventory());
160
            row.createCell((short) 18).setCellValue(item.getOurFbaInventory());
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();
223
        File fileToCreate = new File("/temp-uploads", "competition-scraping-"+String.valueOf(uploadId));
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++){
230
            CompetitorPricing cp = new CompetitorPricing(); 
231
            if (checkEmptyString(sheet.getRow(iterator).getCell(0))){
232
                continue;
233
            }
234
            else {
235
                cp.setItem_id((long) sheet.getRow(iterator).getCell(0).getNumericCellValue());
236
            }
237
 
238
            if (!checkEmptyString(sheet.getRow(iterator).getCell(1))){
239
                if ((long)sheet.getRow(iterator).getCell(1).getNumericCellValue()==1){
240
                    cp.setIsSnapdeal(true);
241
                }
242
            }
243
 
244
            if (!checkEmptyString(sheet.getRow(iterator).getCell(2))){
245
                if ((long)sheet.getRow(iterator).getCell(2).getNumericCellValue()==1){
246
                    cp.setIsFlipkart(true);
247
                }
248
            }
249
            if (!checkEmptyString(sheet.getRow(iterator).getCell(3))){
250
                if ((long)sheet.getRow(iterator).getCell(3).getNumericCellValue()==1){
251
                    cp.setIsAmazon(true);
252
                }
253
            }
254
            cp.setUploadId(uploadId);
255
            cp.setUserEmail(userEmail);
256
            itemScrapingMap.put(cp.getItem_id(), cp);
257
        }
258
        Client cc = new CatalogClient().getClient();
259
        cc.addCompetitorScraping(itemScrapingMap);
260
        return getPreviousData();
261
    }
262
 
263
    public boolean checkEmptyString(Cell cell){
264
        if (cell==null){
265
            return true;
266
        }
267
        return false;
268
    }
269
 
270
    public long getTimeInMilliseconds(){
271
        Calendar cal=GregorianCalendar.getInstance();
272
        return cal.getTimeInMillis();
273
    }
274
 
275
    public String getTimestamp(long timestamp){
276
        return new java.util.Date(timestamp).toLocaleString();
277
    }
278
 
279
    public String getUserEmail(){
280
        logger.info(session.getAttribute(ReportsUtils.USER_NAME).toString());
281
        logger.info(session.getAttribute(ReportsUtils.USER_EMAIL).toString());
282
        return session.getAttribute(ReportsUtils.USER_EMAIL).toString();
283
    }
284
 
285
 
286
    public File getFile() {
287
        return file;
288
    }
289
 
290
    public void setFile(File file) {
291
        this.file = file;
292
    }
293
 
294
    public void setPreviousUploads(List<CompetitorPricing> previousUploads) {
295
        this.previousUploads = previousUploads;
296
    }
297
 
298
    public List<CompetitorPricing> getPreviousUploads() {
299
        return previousUploads;
300
    }
301
 
302
    public HttpServletRequest getRequest() {
303
        logger.info("set request"+request.toString());
304
        return request;
305
    }
306
 
307
    public void setRequest(HttpServletRequest request) {
308
        this.request = request;
309
    }
310
 
311
    public HttpServletResponse getResponse() {
312
        return response;
313
    }
314
 
315
    public void setResponse(HttpServletResponse response) {
316
        this.response = response;
317
    }
318
 
319
    public HttpSession getSession() {
320
        return session;
321
    }
322
 
323
    public void setSession(HttpSession session) {
324
        this.session = session;
325
    }
326
 
327
    public ServletContext getContext() {
328
        return context;
329
    }
330
 
331
    public void setContext(ServletContext context) {
332
        this.context = context;
333
    }
334
 
335
    public void setServletRequest(HttpServletRequest req) {
336
        this.request = req;
337
        this.session = req.getSession();        
338
    }
339
 
340
    public void setServletContext(ServletContext arg0) {
341
        // TODO Auto-generated method stub
342
 
343
    }
344
 
345
    public void setServletResponse(HttpServletResponse response) {
346
        this.response = response;
347
    }
348
 
349
    public void setSnapdeal(String[] snapdeal) {
350
        this.snapdeal = snapdeal;
351
    }
352
 
353
    public String[] getSnapdeal() {
354
        return snapdeal;
355
    }
356
 
357
    public void setFlipkart(String[] flipkart) {
358
        this.flipkart = flipkart;
359
    }
360
 
361
    public String[] getFlipkart() {
362
        return flipkart;
363
    }
364
 
365
    public void setAmazon(String[] amazon) {
366
        this.amazon = amazon;
367
    }
368
 
369
    public String[] getAmazon() {
370
        return amazon;
371
    }
372
 
373
    public void setItemId(String[] itemId) {
374
        this.itemId = itemId;
375
    }
376
 
377
    public String[] getItemId() {
378
        return itemId;
379
    }
380
 
381
 
382
    public List<CompetitorPricing> getData() {
383
        return data;
384
    }
385
 
386
    public void setData(List<CompetitorPricing> data) {
387
        this.data = data;
388
    }
389
 
390
    public String getRequestId() {
391
        return requestId;
392
    }
393
 
394
    public void setRequestId(String requestId) {
395
        this.requestId = requestId;
396
    }
397
 
398
 
399
 
400
 
401
 
402
}