Rev 10128 | Rev 10130 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.utils;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import java.util.List;import java.util.Map;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.mysql.jdbc.log.LogFactory;import in.shop2020.model.v1.catalog.CatalogService;import in.shop2020.model.v1.catalog.Item;import in.shop2020.model.v1.inventory.InventoryService;import in.shop2020.model.v1.inventory.InventoryType;import in.shop2020.model.v1.inventory.ItemInventory;import in.shop2020.model.v1.inventory.OOSStatus;import in.shop2020.model.v1.inventory.VendorItemPricing;import in.shop2020.model.v1.inventory.Warehouse;import in.shop2020.model.v1.inventory.WarehouseType;import in.shop2020.support.controllers.ProductNotificationsController;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.thrift.clients.InventoryClient;import in.shop2020.utils.GmailUtils;public class StockSalesReportFetcher {private static final int NUMBER_OF_DAYS_SALE = 5;private static final String[] mailTo = {"amar.kumar@shop2020.in", "rajveer.singh@shop2020.in"};private static final String senderAccountMail = "cnc.center@shop2020.in";private static final String senderAccountPswd = "5h0p2o2o";private static Logger logger = LoggerFactory.getLogger(StockSalesReportFetcher.class);private static void createAndMailReport() {try {CatalogService.Client catalogClient = new CatalogClient().getClient();List<Item> itemList = catalogClient.getAllAliveItems();InventoryService.Client inventoryClient = new InventoryClient().getClient();Map<Long, ItemInventory> inventoryMap = inventoryClient.getInventorySnapshot(0);inventoryClient = new InventoryClient().getClient();List<OOSStatus> oosStatuses = inventoryClient.getOosStatusesForXDays(-1, NUMBER_OF_DAYS_SALE);Map<Long, List<OOSStatus>> oosStatusMapByItem = new Hashtable<Long, List<OOSStatus>>(5000);for(OOSStatus oosStatus : oosStatuses) {List<OOSStatus> oosStatusList;Long itemId = oosStatus.getItem_id();if(oosStatusMapByItem.containsKey(itemId)) {oosStatusList = oosStatusMapByItem.get(itemId);oosStatusList.add(oosStatus);} else {oosStatusList = new ArrayList<OOSStatus>(6);oosStatusList.add(oosStatus);}oosStatusMapByItem.put(itemId, oosStatusList);}inventoryClient = new InventoryClient().getClient();List<Warehouse> ourGoodWarehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);Map<Long, Warehouse> ourWarehouseMap = new Hashtable<Long, Warehouse>(200);for(Warehouse warehouse : ourGoodWarehouses) {ourWarehouseMap.put(warehouse.getId(), warehouse);}inventoryClient = new InventoryClient().getClient();List<VendorItemPricing> vendorItemPricings = inventoryClient.getAllVendorItemPricing(0, 0);Map<Long, List<VendorItemPricing>> itemPricingMap = new Hashtable<Long, List<VendorItemPricing>>(5000);for(VendorItemPricing vendorItemPricing : vendorItemPricings) {List<VendorItemPricing> pricingListForItem;Long itemId = vendorItemPricing.getItemId();if(itemPricingMap.containsKey(itemId)) {pricingListForItem = itemPricingMap.get(itemId);pricingListForItem.add(vendorItemPricing);} else {pricingListForItem = new ArrayList<VendorItemPricing>();pricingListForItem.add(vendorItemPricing);}itemPricingMap.put(itemId, pricingListForItem);}String tmpDir = System.getProperty("java.io.tmpdir");File file = new File(tmpDir + "/StockSaleReport-" + (new Date()) + ".xls");BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));bufferedWriter.write(StringUtils.join(new String[] { "ItemId", "ProductGroup", "Brand","Model Name", "Model Number", "Color", "Stock Qty", "Stock Value", "NOD Stock","Sales History(All-Sources)", "Avg Sales(All-Sources)", "Sales History(Website)","Avg Sales(Website)", "Sales History(Ebay)", "Avg Sales(Ebay)", "Sales History(Snapdeal)","Avg Sales(Snapdeal)", "Sales History(Flipkart)", "Avg Sales(Flipkart)","Sales History(Amazon-MFN)", "Avg Sales(Amazon-MFN)"}, '\t'));Long stockCount;Double stockValue;for (Item item : itemList) {stockCount = 0L;stockValue = 0.0;Long totalOrderCount = 0L;Long websiteOrderCount = 0L;Long ebayOrderCount = 0L;Long snapdealOrderCount = 0L;Long flipkartOrderCount = 0L;Long amzn_mfnOrderCount = 0L;Double websiteAverageSale = 0.0;Double totalAverageSale = 0.0;Double ebayAverageSale = 0.0;Double snapdealAverageSale = 0.0;Double flipkartAverageSale = 0.0;Double amzn_mfnAverageSale = 0.0;StringBuilder totalSaleHistory = new StringBuilder("");StringBuilder websiteSaleHistory = new StringBuilder("");StringBuilder ebaySaleHistory = new StringBuilder("");StringBuilder snapdealSaleHistory = new StringBuilder("");StringBuilder flipkartSaleHistory = new StringBuilder("");StringBuilder amzn_mfnSaleHistory = new StringBuilder("");ItemInventory itemInventory = inventoryMap.get(item.getId());Map<Long, Long> availabilityMap;if(itemInventory!= null) {System.out.println("itemId =" + item.getId());availabilityMap = itemInventory.getAvailability();for (Long warehouseId : availabilityMap.keySet()) {if(ourGoodWarehouses.contains(warehouseId)) {long currentAvailability = availabilityMap.get(warehouseId);System.out.println("itemId =" + item.getId() + " availability = "+ currentAvailability);stockCount += currentAvailability;if(currentAvailability>0) {List<VendorItemPricing> pricingList = itemPricingMap.get(item.getId());for(VendorItemPricing vendorItemPricing: pricingList) {if(vendorItemPricing.getVendorId() == ourWarehouseMap.get(warehouseId).getVendor().getId()) {stockValue = stockValue + (vendorItemPricing.getNlc()*currentAvailability);}}}}}}for(OOSStatus oosStatus : oosStatusMapByItem.get(item.getId())) {switch(oosStatus.getSourceId()) {case 0:if(oosStatus.isIs_oos()== false) {totalOrderCount += oosStatus.getNum_orders();totalSaleHistory.append(oosStatus.getNum_orders() + "-");} else {totalSaleHistory.append("X-");}break;case 1:if(oosStatus.isIs_oos()== false) {websiteOrderCount += oosStatus.getNum_orders();websiteSaleHistory.append(oosStatus.getNum_orders() + "-");} else {websiteSaleHistory.append("X-");}break;case 3:if(oosStatus.isIs_oos()== false) {amzn_mfnOrderCount += oosStatus.getNum_orders();amzn_mfnSaleHistory.append(oosStatus.getNum_orders() + "-");} else {amzn_mfnSaleHistory.append("X-");}break;case 6:if(oosStatus.isIs_oos()== false) {ebayOrderCount += oosStatus.getNum_orders();ebaySaleHistory.append(oosStatus.getNum_orders() + "-");} else {ebaySaleHistory.append("X-");}break;case 7:if(oosStatus.isIs_oos()== false) {snapdealOrderCount += oosStatus.getNum_orders();snapdealSaleHistory.append(oosStatus.getNum_orders() + "-");} else {snapdealSaleHistory.append("X-");}break;case 8:if(oosStatus.isIs_oos()== false) {flipkartOrderCount += oosStatus.getNum_orders();flipkartSaleHistory.append(oosStatus.getNum_orders() + "-");} else {flipkartSaleHistory.append("X-");}break;default://do nothingbreak;}}totalAverageSale = (double)totalOrderCount/NUMBER_OF_DAYS_SALE;websiteAverageSale = (double)websiteOrderCount/NUMBER_OF_DAYS_SALE;ebayAverageSale = (double)ebayOrderCount/NUMBER_OF_DAYS_SALE;snapdealAverageSale = (double)snapdealOrderCount/NUMBER_OF_DAYS_SALE;flipkartAverageSale = (double)flipkartOrderCount/NUMBER_OF_DAYS_SALE;amzn_mfnAverageSale = (double)amzn_mfnOrderCount/NUMBER_OF_DAYS_SALE;bufferedWriter.write('\n');bufferedWriter.write(StringUtils.join(new String[] {String.valueOf(item.getId()),item.getProductGroup(),item.getBrand(),item.getModelName(),item.getModelNumber(),item.getColor(),stockCount.toString(),stockValue.toString(),new Long(new Double(stockCount/totalAverageSale).longValue()).toString(),totalSaleHistory.substring(0, totalSaleHistory.length()-1),totalAverageSale.toString(),websiteSaleHistory.substring(0, websiteSaleHistory.length()-1),websiteAverageSale.toString(),ebaySaleHistory.substring(0, ebaySaleHistory.length()-1),ebayAverageSale.toString(),snapdealSaleHistory.substring(0, snapdealSaleHistory.length()-1),snapdealAverageSale.toString(),flipkartSaleHistory.substring(0, flipkartSaleHistory.length()-1),flipkartAverageSale.toString(),amzn_mfnSaleHistory.substring(0, amzn_mfnSaleHistory.length()-1),amzn_mfnAverageSale.toString()}, '\t'));}bufferedWriter.close();List<File> files = new ArrayList<File>(1);files.add(file);GmailUtils mailer = new GmailUtils();mailer.sendSSLMessage(mailTo, "Stock Sales Report ", "", senderAccountMail, senderAccountPswd, files);} catch (Exception e) {logger.error("Error in generating/sending Stock Sales Report", e);}}public static void main(String[] args) {createAndMailReport();}}