Subversion Repositories SmartDukaan

Rev

Rev 10128 | Rev 10130 | 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
 
10129 amar.kumar 99
            Long stockCount;
100
            Double stockValue;
10126 amar.kumar 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;
10128 amar.kumar 110
            	Double websiteAverageSale  = 0.0;
10126 amar.kumar 111
            	Double totalAverageSale = 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) {
10129 amar.kumar 126
            		System.out.println("itemId =" + item.getId());
10127 amar.kumar 127
	            	availabilityMap = itemInventory.getAvailability();
128
	            	for (Long warehouseId : availabilityMap.keySet()) {
129
	            		if(ourGoodWarehouses.contains(warehouseId)) {
130
	            			long currentAvailability = availabilityMap.get(warehouseId);
10129 amar.kumar 131
	            			System.out.println("itemId =" + item.getId() + " availability = "+ currentAvailability);
10127 amar.kumar 132
	            			stockCount += currentAvailability;
133
	                    	if(currentAvailability>0) {
134
	                    		List<VendorItemPricing> pricingList = itemPricingMap.get(item.getId());
135
	                    		for(VendorItemPricing vendorItemPricing: pricingList) {
136
	                    			if(vendorItemPricing.getVendorId() == ourWarehouseMap.get(warehouseId).getVendor().getId()) {
137
	                    				stockValue = stockValue + (vendorItemPricing.getNlc()*currentAvailability); 
138
	                    			}
139
	                    		}
140
	                    	}
141
	            		}
142
	            	}
10126 amar.kumar 143
            	}
144
            	for(OOSStatus oosStatus : oosStatusMapByItem.get(item.getId())) {
145
            		switch(oosStatus.getSourceId()) {
146
            			case 0: 
147
            				if(oosStatus.isIs_oos()== false) {
148
            					totalOrderCount += oosStatus.getNum_orders();
149
            					totalSaleHistory.append(oosStatus.getNum_orders() + "-");
150
            				} else {
151
            					totalSaleHistory.append("X-");
152
            				}
153
            				break;
154
            			case 1: 
155
            				if(oosStatus.isIs_oos()== false) {
156
            					websiteOrderCount += oosStatus.getNum_orders();
157
            					websiteSaleHistory.append(oosStatus.getNum_orders() + "-");
158
            				} else {
159
            					websiteSaleHistory.append("X-");
160
            				}
161
            				break;
162
            			case 3: 
163
            				if(oosStatus.isIs_oos()== false) {
164
            					amzn_mfnOrderCount += oosStatus.getNum_orders();
165
            					amzn_mfnSaleHistory.append(oosStatus.getNum_orders() + "-");
166
            				} else {
167
            					amzn_mfnSaleHistory.append("X-");
168
            				}
169
            				break;
170
            			case 6: 
171
            				if(oosStatus.isIs_oos()== false) {
172
            					ebayOrderCount += oosStatus.getNum_orders();
173
            					ebaySaleHistory.append(oosStatus.getNum_orders() + "-");
174
            				} else {
175
            					ebaySaleHistory.append("X-");
176
            				}
177
            				break;
178
            			case 7: 
179
            				if(oosStatus.isIs_oos()== false) {
180
            					snapdealOrderCount += oosStatus.getNum_orders();
181
            					snapdealSaleHistory.append(oosStatus.getNum_orders() + "-");
182
            				} else {
183
            					snapdealSaleHistory.append("X-");
184
            				}
185
            				break;
186
            			case 8: 
187
            				if(oosStatus.isIs_oos()== false) {
188
            					flipkartOrderCount += oosStatus.getNum_orders();
189
            					flipkartSaleHistory.append(oosStatus.getNum_orders() + "-");
190
            				} else {
191
            					flipkartSaleHistory.append("X-");
192
            				}
193
            				break;
194
            			default:
195
            				//do nothing
196
            				break;
197
            		}
198
            	}
199
            	totalAverageSale    = (double)totalOrderCount/NUMBER_OF_DAYS_SALE;
200
            	websiteAverageSale  = (double)websiteOrderCount/NUMBER_OF_DAYS_SALE;
201
            	ebayAverageSale     = (double)ebayOrderCount/NUMBER_OF_DAYS_SALE;
202
            	snapdealAverageSale = (double)snapdealOrderCount/NUMBER_OF_DAYS_SALE;
203
            	flipkartAverageSale = (double)flipkartOrderCount/NUMBER_OF_DAYS_SALE;
204
            	amzn_mfnAverageSale = (double)amzn_mfnOrderCount/NUMBER_OF_DAYS_SALE;
205
 
10129 amar.kumar 206
            	bufferedWriter.write('\n');
10126 amar.kumar 207
            	bufferedWriter.write(StringUtils.join(
208
        			new String[] {
209
                        String.valueOf(item.getId()),
210
                        item.getProductGroup(),
211
                        item.getBrand(),
212
                        item.getModelName(),
213
                        item.getModelNumber(),
214
                        item.getColor(),
215
                        stockCount.toString(),
216
                        stockValue.toString(),
10129 amar.kumar 217
                        new Long(new Double(stockCount/totalAverageSale).longValue()).toString(),
10126 amar.kumar 218
                        totalSaleHistory.substring(0, totalSaleHistory.length()-1),
219
                        totalAverageSale.toString(),
220
                        websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),
221
                        websiteAverageSale.toString(),
222
                        ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),
223
                        ebayAverageSale.toString(),
224
                        snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),
225
                        snapdealAverageSale.toString(),
226
                        flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),
227
                        flipkartAverageSale.toString(),
228
                        amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),
229
                        amzn_mfnAverageSale.toString()}, '\t'));
230
            	}
231
            bufferedWriter.close();
232
 
233
            List<File> files = new ArrayList<File>(1);
10128 amar.kumar 234
            files.add(file);
10126 amar.kumar 235
        	GmailUtils mailer = new GmailUtils();
236
        	mailer.sendSSLMessage(mailTo, "Stock Sales Report ", "", senderAccountMail, senderAccountPswd, files);
237
		} catch (Exception e) {
238
			logger.error("Error in generating/sending Stock Sales Report", e);
239
		}
240
 
241
 
242
	}
243
 
244
	public static void main(String[] args) {
245
		createAndMailReport();
246
	}
247
 
248
}