Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
10126 amar.kumar 1
package in.shop2020.support.utils;
2
 
3
import java.io.BufferedWriter;
4
import java.io.File;
5
import java.io.FileWriter;
6
import java.util.ArrayList;
7
import java.util.Date;
8
import java.util.Hashtable;
9
import java.util.List;
10
import java.util.Map;
11
 
12
import org.apache.commons.lang.StringUtils;
13
import org.apache.commons.logging.Log;
14
import org.slf4j.Logger;
15
import org.slf4j.LoggerFactory;
16
 
17
import com.mysql.jdbc.log.LogFactory;
18
 
19
import in.shop2020.model.v1.catalog.CatalogService;
20
import in.shop2020.model.v1.catalog.Item;
21
import in.shop2020.model.v1.inventory.InventoryService;
22
import in.shop2020.model.v1.inventory.InventoryType;
23
import in.shop2020.model.v1.inventory.ItemInventory;
24
import in.shop2020.model.v1.inventory.OOSStatus;
25
import in.shop2020.model.v1.inventory.VendorItemPricing;
26
import in.shop2020.model.v1.inventory.Warehouse;
27
import in.shop2020.model.v1.inventory.WarehouseType;
28
import in.shop2020.support.controllers.ProductNotificationsController;
29
import in.shop2020.thrift.clients.CatalogClient;
30
import in.shop2020.thrift.clients.InventoryClient;
31
import in.shop2020.utils.GmailUtils;
32
 
33
public class StockSalesReportFetcher {
34
	private static final int NUMBER_OF_DAYS_SALE = 5;
35
	private static final String[] mailTo = {"amar.kumar@shop2020.in", "rajveer.singh@shop2020.in"};
36
	private static final String senderAccountMail = "cnc.center@shop2020.in";
37
	private static final String senderAccountPswd = "5h0p2o2o";
38
 
39
	private static Logger logger = LoggerFactory.getLogger(StockSalesReportFetcher.class);
40
 
41
	private static void createAndMailReport() {
42
		try {
43
			CatalogService.Client catalogClient = new CatalogClient().getClient();
44
			List<Item> itemList = catalogClient.getAllAliveItems();
45
 
46
			InventoryService.Client inventoryClient = new InventoryClient().getClient();
47
			Map<Long, ItemInventory> inventoryMap = inventoryClient.getInventorySnapshot(0);
48
 
49
			inventoryClient = new InventoryClient().getClient();
50
			List<OOSStatus> oosStatuses = inventoryClient.getOosStatusesForXDays(-1, NUMBER_OF_DAYS_SALE);
51
			Map<Long, List<OOSStatus>> oosStatusMapByItem = new Hashtable<Long, List<OOSStatus>>(5000);
52
			for(OOSStatus oosStatus : oosStatuses) {
53
				List<OOSStatus> oosStatusList;
54
				Long itemId = oosStatus.getItem_id();
55
				if(oosStatusMapByItem.containsKey(itemId)) {
56
					oosStatusList = oosStatusMapByItem.get(itemId);
57
					oosStatusList.add(oosStatus);
58
				} else {
59
					oosStatusList = new ArrayList<OOSStatus>(6);
60
					oosStatusList.add(oosStatus);
61
				}
62
				oosStatusMapByItem.put(itemId, oosStatusList);
63
			}
64
 
65
			inventoryClient = new InventoryClient().getClient();
66
			List<Warehouse>  ourGoodWarehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
67
			Map<Long, Warehouse> ourWarehouseMap = new Hashtable<Long, Warehouse>(200);
68
			for(Warehouse warehouse : ourGoodWarehouses) {
10130 amar.kumar 69
				System.out.println("Warehouse = " + warehouse.getId());
10126 amar.kumar 70
				ourWarehouseMap.put(warehouse.getId(), warehouse);
71
			}
72
 
73
			inventoryClient = new InventoryClient().getClient();
74
			List<VendorItemPricing> vendorItemPricings = inventoryClient.getAllVendorItemPricing(0, 0);
75
			Map<Long, List<VendorItemPricing>> itemPricingMap = new Hashtable<Long, List<VendorItemPricing>>(5000);
76
			for(VendorItemPricing vendorItemPricing : vendorItemPricings) {
77
				List<VendorItemPricing> pricingListForItem;
78
				Long itemId = vendorItemPricing.getItemId();
79
				if(itemPricingMap.containsKey(itemId)) {
80
					pricingListForItem = itemPricingMap.get(itemId);
81
					pricingListForItem.add(vendorItemPricing);
82
				} else {
83
					pricingListForItem = new ArrayList<VendorItemPricing>();
84
					pricingListForItem.add(vendorItemPricing);
85
				}
86
				itemPricingMap.put(itemId, pricingListForItem);
87
			}
88
 
89
			String tmpDir = System.getProperty("java.io.tmpdir");
90
            File file = new File(tmpDir + "/StockSaleReport-" + (new Date()) + ".xls");
91
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
92
                    file));
93
            bufferedWriter.write(StringUtils.join(new String[] { "ItemId", "ProductGroup", "Brand",
94
                    "Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock", 
95
                    "Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)", 
96
                    "Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)", 
97
                    "Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)",  
98
                    "Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));
99
 
10129 amar.kumar 100
            Long stockCount;
101
            Double stockValue;
10126 amar.kumar 102
            for (Item item : itemList) {
103
            	stockCount = 0L;
104
            	stockValue = 0.0;
105
            	Long totalOrderCount    = 0L;
106
            	Long websiteOrderCount  = 0L;
107
            	Long ebayOrderCount     = 0L;
108
            	Long snapdealOrderCount = 0L;
109
            	Long flipkartOrderCount = 0L;
110
            	Long amzn_mfnOrderCount = 0L;
10128 amar.kumar 111
            	Double websiteAverageSale  = 0.0;
10126 amar.kumar 112
            	Double totalAverageSale = 0.0;
113
            	Double ebayAverageSale     = 0.0;
114
            	Double snapdealAverageSale = 0.0;
115
            	Double flipkartAverageSale = 0.0;
116
            	Double amzn_mfnAverageSale  = 0.0;
117
            	StringBuilder totalSaleHistory    = new StringBuilder("");
118
            	StringBuilder websiteSaleHistory  = new StringBuilder("");
119
            	StringBuilder ebaySaleHistory     = new StringBuilder("");
120
            	StringBuilder snapdealSaleHistory = new StringBuilder("");
121
            	StringBuilder flipkartSaleHistory = new StringBuilder("");
122
            	StringBuilder amzn_mfnSaleHistory = new StringBuilder("");
123
 
124
            	ItemInventory itemInventory = inventoryMap.get(item.getId());
10127 amar.kumar 125
            	Map<Long, Long> availabilityMap;
126
            	if(itemInventory!= null) {
10129 amar.kumar 127
            		System.out.println("itemId =" + item.getId());
10127 amar.kumar 128
	            	availabilityMap = itemInventory.getAvailability();
129
	            	for (Long warehouseId : availabilityMap.keySet()) {
130
	            		if(ourGoodWarehouses.contains(warehouseId)) {
131
	            			long currentAvailability = availabilityMap.get(warehouseId);
10129 amar.kumar 132
	            			System.out.println("itemId =" + item.getId() + " availability = "+ currentAvailability);
10127 amar.kumar 133
	            			stockCount += currentAvailability;
134
	                    	if(currentAvailability>0) {
135
	                    		List<VendorItemPricing> pricingList = itemPricingMap.get(item.getId());
136
	                    		for(VendorItemPricing vendorItemPricing: pricingList) {
137
	                    			if(vendorItemPricing.getVendorId() == ourWarehouseMap.get(warehouseId).getVendor().getId()) {
138
	                    				stockValue = stockValue + (vendorItemPricing.getNlc()*currentAvailability); 
139
	                    			}
140
	                    		}
141
	                    	}
142
	            		}
143
	            	}
10126 amar.kumar 144
            	}
145
            	for(OOSStatus oosStatus : oosStatusMapByItem.get(item.getId())) {
146
            		switch(oosStatus.getSourceId()) {
147
            			case 0: 
148
            				if(oosStatus.isIs_oos()== false) {
149
            					totalOrderCount += oosStatus.getNum_orders();
150
            					totalSaleHistory.append(oosStatus.getNum_orders() + "-");
151
            				} else {
152
            					totalSaleHistory.append("X-");
153
            				}
154
            				break;
155
            			case 1: 
156
            				if(oosStatus.isIs_oos()== false) {
157
            					websiteOrderCount += oosStatus.getNum_orders();
158
            					websiteSaleHistory.append(oosStatus.getNum_orders() + "-");
159
            				} else {
160
            					websiteSaleHistory.append("X-");
161
            				}
162
            				break;
163
            			case 3: 
164
            				if(oosStatus.isIs_oos()== false) {
165
            					amzn_mfnOrderCount += oosStatus.getNum_orders();
166
            					amzn_mfnSaleHistory.append(oosStatus.getNum_orders() + "-");
167
            				} else {
168
            					amzn_mfnSaleHistory.append("X-");
169
            				}
170
            				break;
171
            			case 6: 
172
            				if(oosStatus.isIs_oos()== false) {
173
            					ebayOrderCount += oosStatus.getNum_orders();
174
            					ebaySaleHistory.append(oosStatus.getNum_orders() + "-");
175
            				} else {
176
            					ebaySaleHistory.append("X-");
177
            				}
178
            				break;
179
            			case 7: 
180
            				if(oosStatus.isIs_oos()== false) {
181
            					snapdealOrderCount += oosStatus.getNum_orders();
182
            					snapdealSaleHistory.append(oosStatus.getNum_orders() + "-");
183
            				} else {
184
            					snapdealSaleHistory.append("X-");
185
            				}
186
            				break;
187
            			case 8: 
188
            				if(oosStatus.isIs_oos()== false) {
189
            					flipkartOrderCount += oosStatus.getNum_orders();
190
            					flipkartSaleHistory.append(oosStatus.getNum_orders() + "-");
191
            				} else {
192
            					flipkartSaleHistory.append("X-");
193
            				}
194
            				break;
195
            			default:
196
            				//do nothing
197
            				break;
198
            		}
199
            	}
200
            	totalAverageSale    = (double)totalOrderCount/NUMBER_OF_DAYS_SALE;
201
            	websiteAverageSale  = (double)websiteOrderCount/NUMBER_OF_DAYS_SALE;
202
            	ebayAverageSale     = (double)ebayOrderCount/NUMBER_OF_DAYS_SALE;
203
            	snapdealAverageSale = (double)snapdealOrderCount/NUMBER_OF_DAYS_SALE;
204
            	flipkartAverageSale = (double)flipkartOrderCount/NUMBER_OF_DAYS_SALE;
205
            	amzn_mfnAverageSale = (double)amzn_mfnOrderCount/NUMBER_OF_DAYS_SALE;
206
 
10129 amar.kumar 207
            	bufferedWriter.write('\n');
10126 amar.kumar 208
            	bufferedWriter.write(StringUtils.join(
209
        			new String[] {
210
                        String.valueOf(item.getId()),
211
                        item.getProductGroup(),
212
                        item.getBrand(),
213
                        item.getModelName(),
214
                        item.getModelNumber(),
215
                        item.getColor(),
216
                        stockCount.toString(),
217
                        stockValue.toString(),
10129 amar.kumar 218
                        new Long(new Double(stockCount/totalAverageSale).longValue()).toString(),
10126 amar.kumar 219
                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
220
                        totalAverageSale.toString(),
221
                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
222
                        websiteAverageSale.toString(),
223
                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
224
                        ebayAverageSale.toString(),
225
                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
226
                        snapdealAverageSale.toString(),
227
                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
228
                        flipkartAverageSale.toString(),
229
                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
230
                        amzn_mfnAverageSale.toString()}, '\t'));
231
            	}
232
            bufferedWriter.close();
233
 
234
            List<File> files = new ArrayList<File>(1);
10128 amar.kumar 235
            files.add(file);
10126 amar.kumar 236
        	GmailUtils mailer = new GmailUtils();
237
        	mailer.sendSSLMessage(mailTo, "Stock Sales Report ", "", senderAccountMail, senderAccountPswd, files);
238
		} catch (Exception e) {
239
			logger.error("Error in generating/sending Stock Sales Report", e);
240
		}
241
 
242
 
243
	}
244
 
245
	public static void main(String[] args) {
246
		createAndMailReport();
247
	}
248
 
249
}