package com.mmall.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.mmall.common.Const; import com.mmall.common.ServerResponse; import com.mmall.dao.CategoryMapper; import com.mmall.dao.ProductMapper; import com.mmall.pojo.Category; import com.mmall.pojo.Product; import com.mmall.service.ICategoryService; import com.mmall.service.IProductService; import com.mmall.util.DateTimeUtil; import com.mmall.util.PropertiesUtil; import com.mmall.vo.ProductDetailVo; import com.mmall.vo.ProductListVo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service("iProductService") public class ProductServiceImpl implements IProductService{ @Autowired private ProductMapper productMapper; @Autowired private CategoryMapper categoryMapper; @Autowired private ICategoryService iCategoryService; /** * 获取产品详情 * @param productId * @return */ public ServerResponse<ProductDetailVo> getProductDetail(Integer productId){ if(productId==null){ return ServerResponse.createByErrorCodeAndMessage(Const.ResponseCode.ILLEGAL_ARGUMENT.getCode(),Const.ResponseCode.ILLEGAL_ARGUMENT.getDesc()); } Product product = productMapper.selectByPrimaryKey(productId); if(product==null){ return ServerResponse.createByErrorMessage("产品不存在或已下架"); } if(product.getStatus()!=Const.ProductStatusEnum.ON_SALE.getCode()){ return ServerResponse.createByErrorMessage("产品不存在或已下架"); } ProductDetailVo productDetailVo = assmbleProductDetailVo(product); return ServerResponse.createBySuccessData(productDetailVo); } /** * 组装ProductDetailVo * @param product * @return */ private ProductDetailVo assmbleProductDetailVo(Product product){ ProductDetailVo productDetailVo = new ProductDetailVo(); productDetailVo.setId(product.getId()); productDetailVo.setName(product.getName()); productDetailVo.setCategoryId(product.getCategoryId()); productDetailVo.setSubtitle(product.getSubtitle()); productDetailVo.setMainImage(product.getMainImage()); productDetailVo.setSubImages(product.getSubImages()); productDetailVo.setDetail(product.getDetail()); productDetailVo.setStatus(product.getStatus()); productDetailVo.setStock(product.getStock()); productDetailVo.setCreateTime(DateTimeUtil.dateToStr(product.getCreateTime())); productDetailVo.setUpdateTime(DateTimeUtil.dateToStr(product.getUpdateTime())); productDetailVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix")); Category category = categoryMapper.selectByPrimaryKey(product.getCategoryId()); if(category==null){ productDetailVo.setParentCategoryId(0); }else { productDetailVo.setParentCategoryId(category.getParentId()); } return productDetailVo; } /** * 产品搜索及动态排序List * @param keyword * @param categoryId * @param pageNum * @param pageSize * @param orderBy * @return */ public ServerResponse<PageInfo> getProductListBykeyWordCategoryId(String keyword,Integer categoryId,int pageNum,int pageSize,String orderBy){ if(StringUtils.isBlank(keyword)&&categoryId==null){ return ServerResponse.createByErrorCodeAndMessage(Const.ResponseCode.ILLEGAL_ARGUMENT.getCode(),Const.ResponseCode.ILLEGAL_ARGUMENT.getDesc()); } List<Integer> categoryIdList = Lists.newArrayList(); String a; if(categoryId!=null){ Category category = categoryMapper.selectByPrimaryKey(categoryId); if(category==null && StringUtils.isBlank(keyword)){ // 该品类为空在且关键字不存在,不报错,返回空结果集 PageHelper.startPage(pageNum,pageSize); List<ProductListVo> productListVoList = Lists.newArrayList(); PageInfo pageInfo = new PageInfo(productListVoList); return ServerResponse.createBySuccessData(pageInfo); } categoryIdList = iCategoryService.selectCategoryAndChildrenById(category.getId()).getData(); } if(StringUtils.isNotBlank(keyword)){ keyword = new StringBuilder().append("%").append(keyword).append("%").toString(); } PageHelper.startPage(pageNum,pageSize); // 对列表排序 if(StringUtils.isNotBlank(orderBy)){ if(Const.ProductListOrderBy.PRICE_ASC_DESC.contains(orderBy)){ String[] orderByArray = orderBy.split("_"); PageHelper.orderBy(orderByArray[0]+" "+orderByArray[1]); } } List<Product> productList = productMapper.selectByKeywordCategoryIdList(StringUtils.isBlank(keyword)?null:keyword,categoryIdList==null?null:categoryIdList); List<ProductListVo> productListVos = Lists.newArrayList(); for(Product product:productList){ ProductListVo productListVo = assmbleProductListVo(product); productListVos.add(productListVo); } PageInfo pageInfo = new PageInfo(productList); pageInfo.setList(productListVos); return ServerResponse.createBySuccessData(pageInfo); } /** * 组装ProductListVo * @param product * @return */ private ProductListVo assmbleProductListVo(Product product){ ProductListVo productListVo = new ProductListVo(); productListVo.setId(product.getId()); productListVo.setName(product.getName()); productListVo.setCategoryId(product.getCategoryId()); productListVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix","http://image.rancui.com/")); productListVo.setMainImage(product.getMainImage()); productListVo.setPrice(product.getPrice()); productListVo.setSubtitle(product.getSubtitle()); productListVo.setStatus(product.getStatus()); return productListVo; } // backend /** * 获取产品列表 * @param pageNum * @param pageSize * @return */ public ServerResponse<PageInfo> getProductList(int pageNum,int pageSize){ PageHelper.startPage(pageNum,pageSize); List<Product> productList = productMapper.selectProductList(); List<ProductListVo> productListVoList = Lists.newArrayList(); for(Product product:productList){ ProductListVo productListVo = assmbleProductListVo(product); productListVoList.add(productListVo); } PageInfo pageInfo = new PageInfo(productList); pageInfo.setList(productListVoList); return ServerResponse.createBySuccessData(pageInfo); } /** * 搜索产品(后台) * @param productName * @param productId * @param pageNum * @param pageSize * @return */ public ServerResponse<PageInfo> searchProduct(String productName, Integer productId, int pageNum, int pageSize){ PageHelper.startPage(pageNum,pageSize); if(StringUtils.isNotBlank(productName)){ productName = new StringBuilder().append("%").append(productName).append("%").toString(); } List<Product> productList = productMapper.selectByProductNameAndProductId(productName,productId); List<ProductListVo> productListVoList = Lists.newArrayList(); for(Product product:productList){ ProductListVo productListVo = assmbleProductListVo(product); productListVoList.add(productListVo); } PageInfo pageInfo = new PageInfo(productList); pageInfo.setList(productListVoList); return ServerResponse.createBySuccessData(pageInfo); } }