Rev 8121 | Rev 8396 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.ServletRequest;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import in.shop2020.model.v1.catalog.Amazonlisted;import in.shop2020.model.v1.catalog.CatalogServiceException;import in.shop2020.model.v1.catalog.Item;import in.shop2020.model.v1.inventory.AmazonInventorySnapshot;import in.shop2020.model.v1.catalog.CatalogService.Client;import in.shop2020.model.v1.inventory.InventoryServiceException;import in.shop2020.model.v1.order.AmazonOrder;import in.shop2020.support.utils.ReportsUtils;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.thrift.clients.InventoryClient;import in.shop2020.thrift.clients.LogisticsClient;import in.shop2020.thrift.clients.TransactionClient;import in.shop2020.logistics.DeliveryType;import in.shop2020.logistics.LogisticsInfo;import in.shop2020.logistics.LogisticsServiceException;import in.shop2020.logistics.PickUpType;import org.apache.commons.io.FileUtils;import org.apache.commons.lang.xwork.StringUtils;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.struts2.convention.annotation.InterceptorRef;import org.apache.struts2.convention.annotation.InterceptorRefs;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.opensymphony.xwork2.ValidationAwareSupport;@SuppressWarnings("serial")@InterceptorRefs({@InterceptorRef("defaultStack"),@InterceptorRef("login")})@Results({@Result(name = "redirect", location = "${url}", type = "redirect"),@Result(name="authsuccess", type="redirectAction", params = {"actionName" , "reports"})})public class AmazonListController extends ValidationAwareSupport implements ServletRequestAware ,ServletResponseAware, ServletContextAware{private static Logger logger = LoggerFactory.getLogger(AmazonListController.class);private HttpServletRequest request;private HttpSession session;private ServletContext context;private String url;private String id;private String itemId;private String isFba;private String isNonFba;private String isInventoryOverride;private String fbaPrice;private String sellingPrice;private String saholicPrice;private String isTime;private String handlingTime;private String customHandlingTime;private String holdInventory;private String defaultInventory;private String fileUploadFileName;private String fileUploadContentType;private String suppressMfnPriceUpdate;private String suppressFbaPriceUpdate;private File file;public String index() {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {return "authfail";}return "index";}public List<Amazonlisted> fetchItems() throws TException {Client CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();return CatalogClient.getAllAmazonListedItems();}public Amazonlisted fetchItemDetail() throws NumberFormatException, TException {Client CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();return CatalogClient.getAmazonItemDetails(Long.valueOf(id));}public Item getSaholicItem(String id) throws NumberFormatException, CatalogServiceException, TException {Client CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();return CatalogClient.getItem(Long.valueOf(id));}public String update() throws NumberFormatException, TException{Client CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();boolean flag=false;boolean commit=false;long delay = Long.valueOf(customHandlingTime);if ( Boolean.valueOf(isTime)) {flag = true;}changeItemInventory();Amazonlisted amazonlisted = CatalogClient.getAmazonItemDetails(Long.valueOf(itemId));if (amazonlisted.getSellingPrice()!=Double.valueOf(sellingPrice)){amazonlisted.setSellingPrice(Double.valueOf(sellingPrice));commit=true;}if (amazonlisted.getFbaPrice()!=Double.valueOf(fbaPrice)){amazonlisted.setFbaPrice(Double.valueOf(fbaPrice));commit=true;}if (amazonlisted.isIsFba()!=Boolean.valueOf(isFba)){amazonlisted.setIsFba(Boolean.valueOf(isFba));commit=true;}if (amazonlisted.isIsNonFba()!=Boolean.valueOf(isNonFba)){amazonlisted.setIsNonFba(Boolean.valueOf(isNonFba));commit=true;}if (amazonlisted.isIsCustomTime()!=flag){amazonlisted.setIsCustomTime(flag);commit=true;}if (amazonlisted.getHandlingTime()!=delay){amazonlisted.setHandlingTime(delay);commit=true;}if(amazonlisted.isIsInventoryOverride()!=Boolean.valueOf(isInventoryOverride)){amazonlisted.setIsInventoryOverride(Boolean.valueOf(isInventoryOverride));commit=true;}if(amazonlisted.isSuppressMfnPriceUpdate()!=Boolean.valueOf(suppressMfnPriceUpdate)){amazonlisted.setSuppressMfnPriceUpdate(Boolean.valueOf(suppressMfnPriceUpdate));commit=true;}if(amazonlisted.isSuppressFbaPriceUpdate()!=Boolean.valueOf(suppressFbaPriceUpdate)){amazonlisted.setSuppressFbaPriceUpdate(Boolean.valueOf(suppressFbaPriceUpdate));commit=true;}if(commit){CatalogClient.updateAmazonItemDetails(amazonlisted);}else{logger.info("Nothing new to commit");}//setUrl("/amazon-list/");return "index";}public void upload() throws IOException, TException {File fileToCreate = new File("/tmp/", "Amazon-shipping.xls");FileUtils.copyFile(this.file, fileToCreate);FileInputStream iFile = new FileInputStream(new File(file.getAbsolutePath()));HSSFWorkbook workbook = new HSSFWorkbook(iFile);HSSFSheet sheet = workbook.getSheetAt(0);Map<Long,Map<String,String>> amazonOrderMap = new HashMap<Long,Map<String,String>>();for (int iterator=sheet.getFirstRowNum();iterator<=sheet.getLastRowNum();iterator++){TransactionClient tcl = new TransactionClient();List<AmazonOrder> orders = tcl.getClient().getAmazonOrderByAmazonOrderId(sheet.getRow(iterator).getCell(0).getStringCellValue());for (AmazonOrder order : orders){if (StringUtils.equals(order.getStatus(), "Order-Payment-Success")){Map<String,String> dateMap = new HashMap<String,String>();dateMap.put(sheet.getRow(iterator).getCell(1).getStringCellValue(), sheet.getRow(iterator).getCell(2).getStringCellValue());amazonOrderMap.put(order.getOrderId(), dateMap);}}}TransactionClient tcl = new TransactionClient();tcl.getClient().updateTimestampForAmazonOrder(amazonOrderMap);}private void changeItemInventory() throws NumberFormatException, TException {Client CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();if (StringUtils.isEmpty(holdInventory)) {holdInventory = "0";}if (StringUtils.isEmpty(defaultInventory)) {defaultInventory = "0";}CatalogClient.updateItemInventory(Long.valueOf(itemId),Long.valueOf(holdInventory),Long.valueOf(defaultInventory));}public Map<Long, Long> getAvailableItemInventory(String itemId) throws NumberFormatException, InventoryServiceException, TException{InventoryClient inventoryServiceClient = new InventoryClient();in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();in.shop2020.model.v1.inventory.ItemInventory thriftItemInventory = inventoryClient.getItemInventoryByItemId(Long.valueOf(itemId));return thriftItemInventory.getAvailability();}public Map<Long, Long> getReservedItemInventory(String itemId) throws NumberFormatException, InventoryServiceException, TException{InventoryClient inventoryServiceClient = new InventoryClient();in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();in.shop2020.model.v1.inventory.ItemInventory thriftItemInventory = inventoryClient.getItemInventoryByItemId(Long.valueOf(itemId));return thriftItemInventory.getReserved();}public String getWarehouseName(String warehouseId) throws NumberFormatException, TException {InventoryClient inventoryServiceClient = new InventoryClient();return inventoryServiceClient.getClient().getWarehouseName(Long.valueOf(warehouseId));}public AmazonInventorySnapshot getInventoryForAmazonItem(String itemId) throws NumberFormatException, TException {InventoryClient inventoryServiceClient = new InventoryClient();try {return inventoryServiceClient.getClient().getAmazonInventoryForItem(Long.valueOf(itemId));}catch (Exception e){return null;}}public Long getTimetoShip(String itemId) throws LogisticsServiceException, TException{LogisticsClient logisticsClient = new LogisticsClient();return logisticsClient.getClient().getLogisticsInfo("110001", Long.valueOf(itemId), DeliveryType.COD, PickUpType.COURIER).getShippingTime();}public Map<Long, Item> getAliveItemMap() throws TTransportException, InterruptedException{List<Item> itemList = null;int retry=0;while(true){try {if (retry==3)break;Client CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();itemList = CatalogClient.getAllAliveItems();break;} catch ( NullPointerException e) {retry++;System.out.println("Unable to fetch alive items.Retrying");Thread.sleep(3000);e.printStackTrace();} catch (TException e) {retry++;System.out.println("Unable to fetch alive items.Retrying");Thread.sleep(3000);e.printStackTrace();}}Map<Long, Item> itemMap = new HashMap<Long, Item>();for (Item o : itemList) {itemMap.put((Long) o.getId(), o);}return itemMap;}public String runAsinJob() throws IOException, InterruptedException {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().substring(request.getContextPath().length()).split("/")[1].split("!")[0])) {logger.info(request.getRequestURI().substring(request.getContextPath().length()).split("/")[1].split("!")[0]);return "authfail";}ProcessBuilder testProcess = new ProcessBuilder("/bin/bash");String[] command = {"/bin/bash", "-c", "sudo /root/code/trunk/AmazonFeeds/Test.sh"};testProcess.command(command);logger.info(testProcess.command().toString());Process process = testProcess.start();process.waitFor();logger.info(String.valueOf(process.exitValue()));return "asinjob";}public void uploadBulkFile() throws IOException, TException{File fileToCreate = new File("/tmp/", "Amazon-bulk-upload.xls");FileUtils.copyFile(this.file, fileToCreate);FileInputStream iFile = new FileInputStream(new File(file.getAbsolutePath()));HSSFWorkbook workbook = new HSSFWorkbook(iFile);HSSFSheet sheet = workbook.getSheetAt(0);Map<Long,Amazonlisted> amazonBulkUpdate = new HashMap<Long,Amazonlisted>();Client CatalogClient=null;try {CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();}for (int iterator=(sheet.getFirstRowNum()+1);iterator<=sheet.getLastRowNum();iterator++){Amazonlisted amazonlisted =null;Long sku;if (checkEmptyString(sheet.getRow(iterator).getCell(0))){continue;}else {sku=(long) sheet.getRow(iterator).getCell(0).getNumericCellValue();amazonlisted = CatalogClient.getAmazonItemDetails(sku);}if (!checkEmptyString(sheet.getRow(iterator).getCell(1))){double mfnPrice = sheet.getRow(iterator).getCell(1).getNumericCellValue();amazonlisted.setSellingPrice(mfnPrice);}if (!checkEmptyString(sheet.getRow(iterator).getCell(2))){double fbaSellingPrice = sheet.getRow(iterator).getCell(2).getNumericCellValue();amazonlisted.setFbaPrice(fbaSellingPrice);}if (!checkEmptyString(sheet.getRow(iterator).getCell(3))){if ((long)sheet.getRow(iterator).getCell(3).getNumericCellValue()==1){amazonlisted.setIsNonFba(true);}if ((long)sheet.getRow(iterator).getCell(3).getNumericCellValue()==0){amazonlisted.setIsNonFba(false);}}if (!checkEmptyString(sheet.getRow(iterator).getCell(4))){if ((long)sheet.getRow(iterator).getCell(4).getNumericCellValue()==1){amazonlisted.setIsFba(true);}if ((long)sheet.getRow(iterator).getCell(4).getNumericCellValue()==0){amazonlisted.setIsFba(false);}}if (!checkEmptyString(sheet.getRow(iterator).getCell(5))){if ((long)sheet.getRow(iterator).getCell(5).getNumericCellValue()==1){amazonlisted.setIsInventoryOverride(true);}if ((long)sheet.getRow(iterator).getCell(5).getNumericCellValue()==0){amazonlisted.setIsInventoryOverride(false);}}if (!checkEmptyString(sheet.getRow(iterator).getCell(6))){if ((long)sheet.getRow(iterator).getCell(6).getNumericCellValue()==1){amazonlisted.setSuppressMfnPriceUpdate(true);}if ((long)sheet.getRow(iterator).getCell(6).getNumericCellValue()==0){amazonlisted.setSuppressMfnPriceUpdate(false);}}if (!checkEmptyString(sheet.getRow(iterator).getCell(7))){if ((long)sheet.getRow(iterator).getCell(7).getNumericCellValue()==1){amazonlisted.setSuppressFbaPriceUpdate(true);}if ((long)sheet.getRow(iterator).getCell(7).getNumericCellValue()==0){amazonlisted.setSuppressFbaPriceUpdate(false);}}amazonBulkUpdate.put(sku, amazonlisted);}logger.info("Amazon Bulk Map "+amazonBulkUpdate.toString());CatalogClient = new CatalogClient("catalog_service_server_host_amazon","catalog_service_server_port").getClient();CatalogClient.updateAmazonAttributesInBulk(amazonBulkUpdate);}public boolean checkEmptyString(Cell cell){if (cell==null){return true;}return false;}public String uploadSheet(){if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().substring(request.getContextPath().length()).split("/")[1].split("!")[0])) {logger.info(request.getRequestURI().substring(request.getContextPath().length()).split("/")[1].split("!")[0]);return "authfail";}return "amazon-shipping-upload";}public String uploadBulkSheet(){if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().substring(request.getContextPath().length()).split("/")[1].split("!")[0])) {logger.info(request.getRequestURI().substring(request.getContextPath().length()).split("/")[1].split("!")[0]);return "authfail";}return "amazon-bulk-upload";}public String edit() {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().substring(request.getContextPath().length()).split("/")[1])) {return "authfail";}return "edit";}public String show() {if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getRequestURI().substring(request.getContextPath().length()).split("/")[1])) {logger.info(request.getRequestURI().substring(request.getContextPath().length()).split("/")[1]);return "authfail";}if (StringUtils.equals(id, "options")){return "options";}return "id";}public String editNew() {return "editNew";}public void setId(String id) {logger.info(id);this.id = id;}public void setUrl(String url) {this.url = url;}public String getUrl() {return url;}public String getId() {return id;}public void setItemId(String itemId) {this.itemId = itemId;}public String getItemId() {return itemId;}public void setIsFba(String isFba) {this.isFba = isFba;}public String getIsFba() {return isFba;}public void setIsNonFba(String isNonFba) {this.isNonFba = isNonFba;}public String getIsNonFba() {return isNonFba;}public void setIsInventoryOverride(String isInventoryOverride) {this.isInventoryOverride = isInventoryOverride;}public String getIsInventoryOverride() {return isInventoryOverride;}public void setSellingPrice(String sellingPrice) {this.sellingPrice = sellingPrice;}public String getSellingPrice() {return sellingPrice;}public void setFbaPrice(String fbaPrice) {this.fbaPrice = fbaPrice;}public String getFbaPrice() {return fbaPrice;}public void setSaholicPrice(String saholicPrice) {this.saholicPrice = saholicPrice;}public String getSaholicPrice() {return saholicPrice;}public void setIsTime(String isTime){this.isTime = isTime;}public String getIsTime(){return isTime;}public void setHandlingTime(String handlingTime){this.handlingTime = handlingTime;}public String getHandlingTime(){return handlingTime;}public void setCustomHandlingTime(String customHandlingTime){this.customHandlingTime = customHandlingTime;}public String getCustomHandlingTime(){return customHandlingTime;}public void setHoldInventory(String holdInventory){this.holdInventory = holdInventory;}public String getHoldInventory(){return holdInventory;}public void setDefaultInventory(String defaultInventory){this.defaultInventory = defaultInventory;}public String getDefaultInventory(){return defaultInventory;}public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getFileUploadContentType() {return fileUploadContentType;}public void setFileUploadContentType(String fileUploadContentType) {this.fileUploadContentType = fileUploadContentType;}public String getFileUploadFileName() {return fileUploadFileName;}public void setFileUploadFileName(String fileUploadFileName) {this.fileUploadFileName = fileUploadFileName;}public void setServletRequest(HttpServletRequest req) {this.request = req;this.session = req.getSession();}public static void main(String[] args) throws NumberFormatException, InventoryServiceException, TException, IOException {AmazonListController call = new AmazonListController();//System.out.println(call.runAsinJob());}@Overridepublic void setServletContext(ServletContext arg0) {// TODO Auto-generated method stub}@Overridepublic void setServletResponse(HttpServletResponse arg0) {// TODO Auto-generated method stub}public void setSuppressMfnPriceUpdate(String suppressMfnPriceUpdate) {this.suppressMfnPriceUpdate = suppressMfnPriceUpdate;}public String getSuppressMfnPriceUpdate() {return suppressMfnPriceUpdate;}public void setSuppressFbaPriceUpdate(String suppressFbaPriceUpdate) {this.suppressFbaPriceUpdate = suppressFbaPriceUpdate;}public String getSuppressFbaPriceUpdate() {return suppressFbaPriceUpdate;}}