Subversion Repositories SmartDukaan

Rev

Rev 10253 | Rev 10353 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 10253 Rev 10352
Line 15... Line 15...
15
import org.slf4j.LoggerFactory;
15
import org.slf4j.LoggerFactory;
16
 
16
 
17
import com.mysql.jdbc.log.LogFactory;
17
import com.mysql.jdbc.log.LogFactory;
18
 
18
 
19
import in.shop2020.model.v1.catalog.CatalogService;
19
import in.shop2020.model.v1.catalog.CatalogService;
-
 
20
import in.shop2020.model.v1.catalog.Category;
20
import in.shop2020.model.v1.catalog.Item;
21
import in.shop2020.model.v1.catalog.Item;
21
import in.shop2020.model.v1.inventory.InventoryService;
22
import in.shop2020.model.v1.inventory.InventoryService;
22
import in.shop2020.model.v1.inventory.InventoryType;
23
import in.shop2020.model.v1.inventory.InventoryType;
23
import in.shop2020.model.v1.inventory.ItemInventory;
24
import in.shop2020.model.v1.inventory.ItemInventory;
24
import in.shop2020.model.v1.inventory.OOSStatus;
25
import in.shop2020.model.v1.inventory.OOSStatus;
25
import in.shop2020.model.v1.inventory.VendorItemPricing;
26
import in.shop2020.model.v1.inventory.VendorItemPricing;
26
import in.shop2020.model.v1.inventory.Warehouse;
27
import in.shop2020.model.v1.inventory.Warehouse;
27
import in.shop2020.model.v1.inventory.WarehouseType;
28
import in.shop2020.model.v1.inventory.WarehouseType;
28
import in.shop2020.support.controllers.ProductNotificationsController;
-
 
29
import in.shop2020.thrift.clients.CatalogClient;
29
import in.shop2020.thrift.clients.CatalogClient;
30
import in.shop2020.thrift.clients.InventoryClient;
30
import in.shop2020.thrift.clients.InventoryClient;
31
import in.shop2020.utils.GmailUtils;
31
import in.shop2020.utils.GmailUtils;
32
 
32
 
33
public class StockSalesReportFetcher {
33
public class StockSalesReportFetcher {
Line 42... Line 42...
42
	private static void createAndMailReport() {
42
	private static void createAndMailReport() {
43
		try {
43
		try {
44
			CatalogService.Client catalogClient = new CatalogClient().getClient();
44
			CatalogService.Client catalogClient = new CatalogClient().getClient();
45
			List<Item> itemList = catalogClient.getAllAliveItems();
45
			List<Item> itemList = catalogClient.getAllAliveItems();
46
			
46
			
-
 
47
			catalogClient = new CatalogClient().getClient();
-
 
48
			List<Category> allCategories = catalogClient.getAllCategories();
-
 
49
			Map<Long, String> categoryIdLabelMap = new Hashtable<Long, String>();
-
 
50
			for(Category category : allCategories) {
-
 
51
				categoryIdLabelMap.put(category.getId(), category.getLabel());
-
 
52
			}
-
 
53
			
47
			InventoryService.Client inventoryClient = new InventoryClient().getClient();
54
			InventoryService.Client inventoryClient = new InventoryClient().getClient();
48
			Map<Long, ItemInventory> inventoryMap = inventoryClient.getInventorySnapshot(0);
55
			Map<Long, ItemInventory> inventoryMap = inventoryClient.getInventorySnapshot(0);
49
			
56
			
50
			inventoryClient = new InventoryClient().getClient();
57
			inventoryClient = new InventoryClient().getClient();
51
			List<OOSStatus> oosStatuses = inventoryClient.getOosStatusesForXDays(-1, NUMBER_OF_DAYS_SALE);
58
			List<OOSStatus> oosStatuses = inventoryClient.getOosStatusesForXDays(-1, NUMBER_OF_DAYS_SALE);
Line 86... Line 93...
86
				}
93
				}
87
				itemPricingMap.put(itemId, pricingListForItem);
94
				itemPricingMap.put(itemId, pricingListForItem);
88
			}
95
			}
89
			
96
			
90
			String tmpDir = System.getProperty("java.io.tmpdir");
97
			String tmpDir = System.getProperty("java.io.tmpdir");
-
 
98
            File nonMovingFile = new File(tmpDir + "/StockSaleReport-NonMoving" + (new Date()) + ".xls");
-
 
99
            File slowMovingFile = new File(tmpDir + "/StockSaleReport-SlowMoving" + (new Date()) + ".xls");
91
            File file = new File(tmpDir + "/StockSaleReport-" + (new Date()) + ".xls");
100
            File movingFile = new File(tmpDir + "/StockSaleReport-Moving" + (new Date()) + ".xls");
-
 
101
            BufferedWriter nonMovingBufferedWriter = new BufferedWriter(new FileWriter(
-
 
102
            		nonMovingFile));
-
 
103
            BufferedWriter slowMovingBufferedWriter = new BufferedWriter(new FileWriter(
-
 
104
            		slowMovingFile));
92
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
105
            BufferedWriter movingBufferedWriter = new BufferedWriter(new FileWriter(
93
                    file));
106
            		movingFile));
-
 
107
            nonMovingBufferedWriter.write(StringUtils.join(new String[] { "ItemId", "Category", "ProductGroup", 
-
 
108
            		"Brand", "Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock", 
-
 
109
                    "Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)", 
-
 
110
                    "Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)", 
-
 
111
                    "Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)",  
-
 
112
                    "Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));
-
 
113
            slowMovingBufferedWriter.write(StringUtils.join(new String[] { "ItemId", "Category", "ProductGroup", 
-
 
114
            		"Brand", "Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock", 
-
 
115
                    "Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)", 
-
 
116
                    "Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)", 
-
 
117
                    "Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)",  
-
 
118
                    "Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));
94
            bufferedWriter.write(StringUtils.join(new String[] { "ItemId", "ProductGroup", "Brand",
119
            movingBufferedWriter.write(StringUtils.join(new String[] { "ItemId", "Category", "ProductGroup", 
95
                    "Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock", 
120
            		"Brand", "Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock", 
96
                    "Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)", 
121
                    "Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)", 
97
                    "Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)", 
122
                    "Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)", 
98
                    "Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)",  
123
                    "Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)",  
99
                    "Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));
124
                    "Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));
100
            
125
            
Line 107... Line 132...
107
            	Long websiteOrderCount  = 0L;
132
            	Long websiteOrderCount  = 0L;
108
            	Long ebayOrderCount     = 0L;
133
            	Long ebayOrderCount     = 0L;
109
            	Long snapdealOrderCount = 0L;
134
            	Long snapdealOrderCount = 0L;
110
            	Long flipkartOrderCount = 0L;
135
            	Long flipkartOrderCount = 0L;
111
            	Long amzn_mfnOrderCount = 0L;
136
            	Long amzn_mfnOrderCount = 0L;
-
 
137
            	Long totalInStockDays    = 0L;
-
 
138
            	Long websiteInStockDays  = 0L;
-
 
139
            	Long ebayInStockDays     = 0L;
-
 
140
            	Long snapdealInStockDays = 0L;
-
 
141
            	Long flipkartInStockDays = 0L;
-
 
142
            	Long amzn_mfnInStockDays = 0L;
112
            	Double websiteAverageSale  = 0.0;
143
            	Double websiteAverageSale  = 0.0;
113
            	Double totalAverageSale = 0.0;
144
            	Double totalAverageSale = 0.0;
114
            	Double ebayAverageSale     = 0.0;
145
            	Double ebayAverageSale     = 0.0;
115
            	Double snapdealAverageSale = 0.0;
146
            	Double snapdealAverageSale = 0.0;
116
            	Double flipkartAverageSale = 0.0;
147
            	Double flipkartAverageSale = 0.0;
Line 141... Line 172...
141
	                    		}
172
	                    		}
142
	                    	}
173
	                    	}
143
	            		}
174
	            		}
144
	            	}
175
	            	}
145
            	}
176
            	}
-
 
177
            	if(stockCount<=0) {
-
 
178
            		continue;
-
 
179
            	}
146
            	for(OOSStatus oosStatus : oosStatusMapByItem.get(item.getId())) {
180
            	for(OOSStatus oosStatus : oosStatusMapByItem.get(item.getId())) {
147
            		switch(oosStatus.getSourceId()) {
181
            		switch(oosStatus.getSourceId()) {
148
            			case 0: 
182
            			case 0: 
149
            				if(oosStatus.isIs_oos()== false) {
183
            				if(oosStatus.isIs_oos()== false) {
-
 
184
            					totalInStockDays++;
150
            					totalOrderCount += oosStatus.getNum_orders();
185
            					totalOrderCount += oosStatus.getNum_orders();
151
            					totalSaleHistory.append(oosStatus.getNum_orders() + "-");
186
            					totalSaleHistory.append(oosStatus.getNum_orders() + "-");
152
            				} else {
187
            				} else {
153
            					totalSaleHistory.append("X-");
188
            					totalSaleHistory.append("X-");
154
            				}
189
            				}
155
            				break;
190
            				break;
156
            			case 1: 
191
            			case 1: 
157
            				if(oosStatus.isIs_oos()== false) {
192
            				if(oosStatus.isIs_oos()== false) {
-
 
193
            					websiteInStockDays++;
158
            					websiteOrderCount += oosStatus.getNum_orders();
194
            					websiteOrderCount += oosStatus.getNum_orders();
159
            					websiteSaleHistory.append(oosStatus.getNum_orders() + "-");
195
            					websiteSaleHistory.append(oosStatus.getNum_orders() + "-");
160
            				} else {
196
            				} else {
161
            					websiteSaleHistory.append("X-");
197
            					websiteSaleHistory.append("X-");
162
            				}
198
            				}
163
            				break;
199
            				break;
164
            			case 3: 
200
            			case 3: 
165
            				if(oosStatus.isIs_oos()== false) {
201
            				if(oosStatus.isIs_oos()== false) {
-
 
202
            					amzn_mfnInStockDays++;
166
            					amzn_mfnOrderCount += oosStatus.getNum_orders();
203
            					amzn_mfnOrderCount += oosStatus.getNum_orders();
167
            					amzn_mfnSaleHistory.append(oosStatus.getNum_orders() + "-");
204
            					amzn_mfnSaleHistory.append(oosStatus.getNum_orders() + "-");
168
            				} else {
205
            				} else {
169
            					amzn_mfnSaleHistory.append("X-");
206
            					amzn_mfnSaleHistory.append("X-");
170
            				}
207
            				}
171
            				break;
208
            				break;
172
            			case 6: 
209
            			case 6: 
173
            				if(oosStatus.isIs_oos()== false) {
210
            				if(oosStatus.isIs_oos()== false) {
-
 
211
            					ebayInStockDays++;
174
            					ebayOrderCount += oosStatus.getNum_orders();
212
            					ebayOrderCount += oosStatus.getNum_orders();
175
            					ebaySaleHistory.append(oosStatus.getNum_orders() + "-");
213
            					ebaySaleHistory.append(oosStatus.getNum_orders() + "-");
176
            				} else {
214
            				} else {
177
            					ebaySaleHistory.append("X-");
215
            					ebaySaleHistory.append("X-");
178
            				}
216
            				}
179
            				break;
217
            				break;
180
            			case 7: 
218
            			case 7: 
181
            				if(oosStatus.isIs_oos()== false) {
219
            				if(oosStatus.isIs_oos()== false) {
-
 
220
            					snapdealInStockDays++;
182
            					snapdealOrderCount += oosStatus.getNum_orders();
221
            					snapdealOrderCount += oosStatus.getNum_orders();
183
            					snapdealSaleHistory.append(oosStatus.getNum_orders() + "-");
222
            					snapdealSaleHistory.append(oosStatus.getNum_orders() + "-");
184
            				} else {
223
            				} else {
185
            					snapdealSaleHistory.append("X-");
224
            					snapdealSaleHistory.append("X-");
186
            				}
225
            				}
187
            				break;
226
            				break;
188
            			case 8: 
227
            			case 8: 
189
            				if(oosStatus.isIs_oos()== false) {
228
            				if(oosStatus.isIs_oos()== false) {
-
 
229
            					flipkartInStockDays++;
190
            					flipkartOrderCount += oosStatus.getNum_orders();
230
            					flipkartOrderCount += oosStatus.getNum_orders();
191
            					flipkartSaleHistory.append(oosStatus.getNum_orders() + "-");
231
            					flipkartSaleHistory.append(oosStatus.getNum_orders() + "-");
192
            				} else {
232
            				} else {
193
            					flipkartSaleHistory.append("X-");
233
            					flipkartSaleHistory.append("X-");
194
            				}
234
            				}
Line 196... Line 236...
196
            			default:
236
            			default:
197
            				//do nothing
237
            				//do nothing
198
            				break;
238
            				break;
199
            		}
239
            		}
200
            	}
240
            	}
201
            	totalAverageSale    = (double)totalOrderCount/NUMBER_OF_DAYS_SALE;
241
            	totalAverageSale    = (double)totalOrderCount/totalInStockDays;
202
            	websiteAverageSale  = (double)websiteOrderCount/NUMBER_OF_DAYS_SALE;
242
            	websiteAverageSale  = (double)websiteOrderCount/websiteInStockDays;
203
            	ebayAverageSale     = (double)ebayOrderCount/NUMBER_OF_DAYS_SALE;
243
            	ebayAverageSale     = (double)ebayOrderCount/ebayInStockDays;
204
            	snapdealAverageSale = (double)snapdealOrderCount/NUMBER_OF_DAYS_SALE;
244
            	snapdealAverageSale = (double)snapdealOrderCount/snapdealInStockDays;
205
            	flipkartAverageSale = (double)flipkartOrderCount/NUMBER_OF_DAYS_SALE;
245
            	flipkartAverageSale = (double)flipkartOrderCount/flipkartInStockDays;
206
            	amzn_mfnAverageSale = (double)amzn_mfnOrderCount/NUMBER_OF_DAYS_SALE;
246
            	amzn_mfnAverageSale = (double)amzn_mfnOrderCount/amzn_mfnInStockDays;
207
            
247
            
-
 
248
            	if(totalAverageSale<=0.0) {
208
            	bufferedWriter.write('\n');
249
            		nonMovingBufferedWriter.write('\n');
209
            	bufferedWriter.write(StringUtils.join(
250
            		nonMovingBufferedWriter.write(StringUtils.join(
210
        			new String[] {
251
	        			new String[] {
211
                        String.valueOf(item.getId()),
252
	                        String.valueOf(item.getId()),
-
 
253
	                        categoryIdLabelMap.get(item.getCatalogItemId()),
212
                        item.getProductGroup(),
254
	                        item.getProductGroup(),
213
                        item.getBrand(),
255
	                        item.getBrand(),
214
                        item.getModelName(),
256
	                        item.getModelName(),
215
                        item.getModelNumber(),
257
	                        item.getModelNumber(),
216
                        item.getColor(),
258
	                        item.getColor(),
217
                        stockCount.toString(),
259
	                        stockCount.toString(),
218
                        stockValue.toString(),
260
	                        stockValue.toString(),
219
                        totalAverageSale>0 ? new Long(new Double(stockCount/totalAverageSale).longValue()).toString(): "0",
261
	                        totalAverageSale>0 ? new Long(new Double(stockCount/totalAverageSale).longValue()).toString(): "0",
220
                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
262
	                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
221
                        totalAverageSale.toString(),
263
	                        totalAverageSale.toString(),
222
                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
264
	                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
223
                        websiteAverageSale.toString(),
265
	                        websiteAverageSale.toString(),
224
                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
266
	                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
225
                        ebayAverageSale.toString(),
267
	                        ebayAverageSale.toString(),
226
                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
268
	                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
227
                        snapdealAverageSale.toString(),
269
	                        snapdealAverageSale.toString(),
228
                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
270
	                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
229
                        flipkartAverageSale.toString(),
271
	                        flipkartAverageSale.toString(),
230
                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
272
	                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
231
                        amzn_mfnAverageSale.toString()}, '\t'));
273
	                        amzn_mfnAverageSale.toString()}, '\t'));
-
 
274
            	}
-
 
275
            	else {
-
 
276
            		double nodStock = totalAverageSale > 0 ? new Double(stockCount/totalAverageSale): 0;
-
 
277
            		if(nodStock>30) {
-
 
278
            			slowMovingBufferedWriter.write('\n');
-
 
279
                		slowMovingBufferedWriter.write(StringUtils.join(
-
 
280
    	        			new String[] {
-
 
281
    	                        String.valueOf(item.getId()),
-
 
282
    	                        categoryIdLabelMap.get(item.getCatalogItemId()),
-
 
283
    	                        item.getProductGroup(),
-
 
284
    	                        item.getBrand(),
-
 
285
    	                        item.getModelName(),
-
 
286
    	                        item.getModelNumber(),
-
 
287
    	                        item.getColor(),
-
 
288
    	                        stockCount.toString(),
-
 
289
    	                        stockValue.toString(),
-
 
290
    	                        totalAverageSale>0 ? new Long(new Double(stockCount/totalAverageSale).longValue()).toString(): "0",
-
 
291
    	                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
-
 
292
    	                        totalAverageSale.toString(),
-
 
293
    	                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
-
 
294
    	                        websiteAverageSale.toString(),
-
 
295
    	                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
-
 
296
    	                        ebayAverageSale.toString(),
-
 
297
    	                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
-
 
298
    	                        snapdealAverageSale.toString(),
-
 
299
    	                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
-
 
300
    	                        flipkartAverageSale.toString(),
-
 
301
    	                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
-
 
302
    	                        amzn_mfnAverageSale.toString()}, '\t'));
-
 
303
            		} else {
-
 
304
            			movingBufferedWriter.write('\n');
-
 
305
                		movingBufferedWriter.write(StringUtils.join(
-
 
306
    	        			new String[] {
-
 
307
    	                        String.valueOf(item.getId()),
-
 
308
    	                        categoryIdLabelMap.get(item.getCatalogItemId()),
-
 
309
    	                        item.getProductGroup(),
-
 
310
    	                        item.getBrand(),
-
 
311
    	                        item.getModelName(),
-
 
312
    	                        item.getModelNumber(),
-
 
313
    	                        item.getColor(),
-
 
314
    	                        stockCount.toString(),
-
 
315
    	                        stockValue.toString(),
-
 
316
    	                        totalAverageSale>0 ? new Long(new Double(stockCount/totalAverageSale).longValue()).toString(): "0",
-
 
317
    	                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
-
 
318
    	                        totalAverageSale.toString(),
-
 
319
    	                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
-
 
320
    	                        websiteAverageSale.toString(),
-
 
321
    	                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
-
 
322
    	                        ebayAverageSale.toString(),
-
 
323
    	                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
-
 
324
    	                        snapdealAverageSale.toString(),
-
 
325
    	                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
-
 
326
    	                        flipkartAverageSale.toString(),
-
 
327
    	                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
-
 
328
    	                        amzn_mfnAverageSale.toString()}, '\t'));
-
 
329
            		}
232
            	}
330
            	}
-
 
331
            }
-
 
332
            nonMovingBufferedWriter.close();
-
 
333
            slowMovingBufferedWriter.close();
233
            bufferedWriter.close();
334
            movingBufferedWriter.close();
234
            
335
            
235
            List<File> files = new ArrayList<File>(1);
336
            List<File> files = new ArrayList<File>(1);
-
 
337
            files.add(nonMovingFile);
-
 
338
            files.add(slowMovingFile);
236
            files.add(file);
339
            files.add(movingFile);
237
        	GmailUtils mailer = new GmailUtils();
340
        	GmailUtils mailer = new GmailUtils();
238
        	mailer.sendSSLMessage(mailTo, "Stock Sales Report ", "", senderAccountMail, senderAccountPswd, files);
341
        	mailer.sendSSLMessage(mailTo, "Stock Sales Report ", "", senderAccountMail, senderAccountPswd, files);
239
		} catch (Exception e) {
342
		} catch (Exception e) {
240
			logger.error("Error in generating/sending Stock Sales Report", e);
343
			logger.error("Error in generating/sending Stock Sales Report", e);
241
		}
344
		}