package com.ssbusy.controller.catalog; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.broadleafcommerce.common.web.controller.BroadleafAbstractController; import org.broadleafcommerce.core.catalog.domain.Product; import org.broadleafcommerce.core.catalog.domain.Sku; import org.broadleafcommerce.core.web.catalog.ProductHandlerMapping; import org.broadleafcommerce.inventory.domain.Inventory; import org.broadleafcommerce.inventory.service.InventoryService; import org.broadleafcommerce.profile.web.core.CustomerState; import org.hibernate.tool.hbm2x.StringUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import com.ssbusy.core.account.domain.MyCustomer; import com.ssbusy.core.like.service.LikeService; import com.ssbusy.core.product.domain.MyProduct; public class SsbProductController extends BroadleafAbstractController implements Controller { protected String defaultProductView = "catalog/product"; protected static String MODEL_ATTRIBUTE_NAME = "product"; @Resource(name = "ssbLikeService") protected LikeService likeService; @Resource(name = "blInventoryService") protected InventoryService inventoryService; @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView(); Product product = (Product) request .getAttribute(ProductHandlerMapping.CURRENT_PRODUCT_ATTRIBUTE_NAME); if (product == null) return homeView(model); List<Sku> skus; MyCustomer customer = (MyCustomer) CustomerState.getCustomer(); if (customer == null || customer.getRegion() == null) { skus = product.getSkus(); } else { List<Inventory> invents = inventoryService.listAllInventories(product, customer.getRegion().getFulfillmentLocations()); skus = new ArrayList<Sku>(invents.size()); Map<Sku, Inventory> invs = new HashMap<Sku, Inventory>(invents.size()); for (Inventory inv : invents) { skus.add(inv.getSku()); invs.put(inv.getSku(), inv); } if (!skus.contains(product.getDefaultSku())) return homeView(model); // 分仓不卖defaultSku,则认为整个都没卖 model.addObject("inventories", invs); skus.remove(product.getDefaultSku()); } model.addObject("skus", skus); MyProduct myproduct = (MyProduct) product; if (myproduct.getTotalSaled() == null) { myproduct.setTotalSaled(0L); } if (myproduct.getTotalLike() == null) { myproduct.setTotalLike(0L); } model.addObject(MODEL_ATTRIBUTE_NAME, product); if (StringUtils.isNotEmpty(product.getDisplayTemplate())) { model.setViewName(product.getDisplayTemplate()); } else { model.setViewName(getDefaultProductView()); } return model; } private ModelAndView homeView(ModelAndView model) { model.setViewName("redirect:/"); return model; } public String getDefaultProductView() { return defaultProductView; } public void setDefaultProductView(String defaultProductView) { this.defaultProductView = defaultProductView; } }