Subversion Repositories SmartDukaan

Rev

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