Subversion Repositories SmartDukaan

Rev

Rev 10126 | Rev 10128 | 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) {
69
				ourWarehouseMap.put(warehouse.getId(), warehouse);
70
			}
71
 
72
			inventoryClient = new InventoryClient().getClient();
73
			List<VendorItemPricing> vendorItemPricings = inventoryClient.getAllVendorItemPricing(0, 0);
74
			Map<Long, List<VendorItemPricing>> itemPricingMap = new Hashtable<Long, List<VendorItemPricing>>(5000);
75
			for(VendorItemPricing vendorItemPricing : vendorItemPricings) {
76
				List<VendorItemPricing> pricingListForItem;
77
				Long itemId = vendorItemPricing.getItemId();
78
				if(itemPricingMap.containsKey(itemId)) {
79
					pricingListForItem = itemPricingMap.get(itemId);
80
					pricingListForItem.add(vendorItemPricing);
81
				} else {
82
					pricingListForItem = new ArrayList<VendorItemPricing>();
83
					pricingListForItem.add(vendorItemPricing);
84
				}
85
				itemPricingMap.put(itemId, pricingListForItem);
86
			}
87
 
88
			String tmpDir = System.getProperty("java.io.tmpdir");
89
            File file = new File(tmpDir + "/StockSaleReport-" + (new Date()) + ".xls");
90
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
91
                    file));
92
            bufferedWriter.write(StringUtils.join(new String[] { "ItemId", "ProductGroup", "Brand",
93
                    "Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock", 
94
                    "Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)", 
95
                    "Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)", 
96
                    "Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)",  
97
                    "Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));
98
 
99
            Long stockCount = 0L;
100
            Double stockValue = 0.0;
101
            for (Item item : itemList) {
102
            	stockCount = 0L;
103
            	stockValue = 0.0;
104
            	Long totalOrderCount    = 0L;
105
            	Long websiteOrderCount  = 0L;
106
            	Long ebayOrderCount     = 0L;
107
            	Long snapdealOrderCount = 0L;
108
            	Long flipkartOrderCount = 0L;
109
            	Long amzn_mfnOrderCount = 0L;
110
            	Double totalAverageSale = 0.0;
111
            	Double websiteAverageSale  = 0.0;
112
            	Double ebayAverageSale     = 0.0;
113
            	Double snapdealAverageSale = 0.0;
114
            	Double flipkartAverageSale = 0.0;
115
            	Double amzn_mfnAverageSale  = 0.0;
116
            	StringBuilder totalSaleHistory    = new StringBuilder("");
117
            	StringBuilder websiteSaleHistory  = new StringBuilder("");
118
            	StringBuilder ebaySaleHistory     = new StringBuilder("");
119
            	StringBuilder snapdealSaleHistory = new StringBuilder("");
120
            	StringBuilder flipkartSaleHistory = new StringBuilder("");
121
            	StringBuilder amzn_mfnSaleHistory = new StringBuilder("");
122
 
123
            	ItemInventory itemInventory = inventoryMap.get(item.getId());
10127 amar.kumar 124
            	Map<Long, Long> availabilityMap;
125
            	if(itemInventory!= null) {
126
	            	availabilityMap = itemInventory.getAvailability();
127
	            	for (Long warehouseId : availabilityMap.keySet()) {
128
	            		if(ourGoodWarehouses.contains(warehouseId)) {
129
	            			long currentAvailability = availabilityMap.get(warehouseId);
130
	            			stockCount += currentAvailability;
131
	                    	if(currentAvailability>0) {
132
	                    		List<VendorItemPricing> pricingList = itemPricingMap.get(item.getId());
133
	                    		for(VendorItemPricing vendorItemPricing: pricingList) {
134
	                    			if(vendorItemPricing.getVendorId() == ourWarehouseMap.get(warehouseId).getVendor().getId()) {
135
	                    				stockValue = stockValue + (vendorItemPricing.getNlc()*currentAvailability); 
136
	                    			}
137
	                    		}
138
	                    	}
139
	            		}
140
	            	}
10126 amar.kumar 141
            	}
142
            	for(OOSStatus oosStatus : oosStatusMapByItem.get(item.getId())) {
143
            		switch(oosStatus.getSourceId()) {
144
            			case 0: 
145
            				if(oosStatus.isIs_oos()== false) {
146
            					totalOrderCount += oosStatus.getNum_orders();
147
            					totalSaleHistory.append(oosStatus.getNum_orders() + "-");
148
            				} else {
149
            					totalSaleHistory.append("X-");
150
            				}
151
            				break;
152
            			case 1: 
153
            				if(oosStatus.isIs_oos()== false) {
154
            					websiteOrderCount += oosStatus.getNum_orders();
155
            					websiteSaleHistory.append(oosStatus.getNum_orders() + "-");
156
            				} else {
157
            					websiteSaleHistory.append("X-");
158
            				}
159
            				break;
160
            			case 3: 
161
            				if(oosStatus.isIs_oos()== false) {
162
            					amzn_mfnOrderCount += oosStatus.getNum_orders();
163
            					amzn_mfnSaleHistory.append(oosStatus.getNum_orders() + "-");
164
            				} else {
165
            					amzn_mfnSaleHistory.append("X-");
166
            				}
167
            				break;
168
            			case 6: 
169
            				if(oosStatus.isIs_oos()== false) {
170
            					ebayOrderCount += oosStatus.getNum_orders();
171
            					ebaySaleHistory.append(oosStatus.getNum_orders() + "-");
172
            				} else {
173
            					ebaySaleHistory.append("X-");
174
            				}
175
            				break;
176
            			case 7: 
177
            				if(oosStatus.isIs_oos()== false) {
178
            					snapdealOrderCount += oosStatus.getNum_orders();
179
            					snapdealSaleHistory.append(oosStatus.getNum_orders() + "-");
180
            				} else {
181
            					snapdealSaleHistory.append("X-");
182
            				}
183
            				break;
184
            			case 8: 
185
            				if(oosStatus.isIs_oos()== false) {
186
            					flipkartOrderCount += oosStatus.getNum_orders();
187
            					flipkartSaleHistory.append(oosStatus.getNum_orders() + "-");
188
            				} else {
189
            					flipkartSaleHistory.append("X-");
190
            				}
191
            				break;
192
            			default:
193
            				//do nothing
194
            				break;
195
            		}
196
            	}
197
            	totalAverageSale    = (double)totalOrderCount/NUMBER_OF_DAYS_SALE;
198
            	websiteAverageSale  = (double)websiteOrderCount/NUMBER_OF_DAYS_SALE;
199
            	ebayAverageSale     = (double)ebayOrderCount/NUMBER_OF_DAYS_SALE;
200
            	snapdealAverageSale = (double)snapdealOrderCount/NUMBER_OF_DAYS_SALE;
201
            	flipkartAverageSale = (double)flipkartOrderCount/NUMBER_OF_DAYS_SALE;
202
            	amzn_mfnAverageSale = (double)amzn_mfnOrderCount/NUMBER_OF_DAYS_SALE;
203
 
204
 
205
            	bufferedWriter.write(StringUtils.join(
206
        			new String[] {
207
                        String.valueOf(item.getId()),
208
                        item.getProductGroup(),
209
                        item.getBrand(),
210
                        item.getModelName(),
211
                        item.getModelNumber(),
212
                        item.getColor(),
213
                        stockCount.toString(),
214
                        stockValue.toString(),
215
                        String.valueOf(stockCount/totalAverageSale),
216
                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
217
                        totalAverageSale.toString(),
218
                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
219
                        websiteAverageSale.toString(),
220
                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
221
                        ebayAverageSale.toString(),
222
                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
223
                        snapdealAverageSale.toString(),
224
                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
225
                        flipkartAverageSale.toString(),
226
                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
227
                        amzn_mfnAverageSale.toString()}, '\t'));
228
            	}
229
            bufferedWriter.close();
230
 
231
            List<File> files = new ArrayList<File>(1);
232
        	GmailUtils mailer = new GmailUtils();
233
        	mailer.sendSSLMessage(mailTo, "Stock Sales Report ", "", senderAccountMail, senderAccountPswd, files);
234
		} catch (Exception e) {
235
			logger.error("Error in generating/sending Stock Sales Report", e);
236
		}
237
 
238
 
239
	}
240
 
241
	public static void main(String[] args) {
242
		createAndMailReport();
243
	}
244
 
245
}