package com.ishop.mobile.api; import com.iplatform.base.Constants; import com.ishop.merchant.ProductConstants; import com.ishop.merchant.util.ProductAttrUtils; import com.ishop.mobile.BaseApi; import com.ishop.mobile.pojo.MerchantProductParam; import com.ishop.mobile.util.VoUtils; import com.ishop.model.po.EbMerchant; import com.ishop.model.po.EbProduct; import com.ishop.model.po.EbProductAttr; import com.ishop.model.po.EbProductAttrValue; import com.ishop.model.vo.ProMerchantProductVo; import com.ishop.model.vo.ProductCommonVo; import com.ishop.model.vo.ProductDetailReplyVo; import com.ishop.model.vo.ProductDetailVo; import com.ishop.model.vo.ProductMerchantVo; import com.walker.db.page.GenericPager; import com.walker.db.page.ListPageContext; import com.walker.infrastructure.utils.StringUtils; import com.walker.infrastructure.utils.UrlUtils; import com.walker.web.ResponseValue; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @RestController @RequestMapping("/front/product") public class ProductApi extends BaseApi { /** * 商户商品列表 * @param param * @return */ @RequestMapping(value = "/merchant/pro/list", method = RequestMethod.GET) public ResponseValue getMerchantProList(MerchantProductParam param){ if(param == null || param.getMerId() == null){ return ResponseValue.error(Constants.ERROR_ARGUMENT); } String keyword = null; if(StringUtils.isNotEmpty(param.getKeyword())){ keyword = UrlUtils.decode(param.getKeyword()); } GenericPager pager = this.getProductService().queryPageMerchantProductH5List(param.getMerId(), keyword , param.getCid(), param.getMaxPrice(), param.getMinPrice(), param.getSalesOrder(), param.getPriceOrder()); logger.info(pager.toString()); List productList = pager.getDatas(); // 填补活动边框,后续看看啥东西。2023-07-05 // productList = activityStyleService.makeActivityBorderStyle(productList); String cdnUrl = this.getCdnUrl(); List data = new ArrayList<>(); if(!StringUtils.isEmptyList(productList)){ for(EbProduct e : productList){ data.add(VoUtils.acquireProductCommonVo(e, cdnUrl)); } } GenericPager commonVoGenericPager = ListPageContext.createGenericPager(data, pager.getPageIndex(), (int)pager.getTotalRows()); commonVoGenericPager.setPageSize(pager.getPageSize()); return ResponseValue.success(commonVoGenericPager); } /** * 商品详情评论 * @param id * @return */ @RequestMapping(value = "/reply/detail/{id}", method = RequestMethod.GET) public ResponseValue getProductReply(@PathVariable Long id){ if(id == null || id.longValue() <= 0){ throw new IllegalArgumentException(Constants.ERROR_ARGUMENT); } ProductDetailReplyVo vo = this.getProductReplyService().queryH5ProductReply(id); return ResponseValue.success(vo); } // @ApiOperation(value = "商品评论数量") @RequestMapping(value = "/reply/config/{id}", method = RequestMethod.GET) public ResponseValue getReplyCount(@PathVariable Long id){ return ResponseValue.success(this.getProductReplyService().queryH5ReplyCount(id)); } @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET) public ResponseValue detail(@PathVariable Long id, String type){ logger.debug("商品详情参数:id={},type={}", id, type); if (StringUtils.isEmpty(type) || type.equals("undefined")) { type = ProductConstants.PRODUCT_TYPE_NORMAL_KEY; } if (!type.equals(ProductConstants.PRODUCT_TYPE_VIDEO_KEY) && !type.equals(ProductConstants.PRODUCT_TYPE_NORMAL_KEY) && !type.equals(ProductConstants.PRODUCT_TYPE_SECKILL_KEY)) { return ResponseValue.error("商品类型未知"); } if (type.equals(ProductConstants.PRODUCT_TYPE_VIDEO_KEY)) { logger.info("商品详情 --》 加载视频号商品id={},", id); // return componentProductService.getH5Detail(id); throw new UnsupportedOperationException("视频号商品未实现代码!"); } if (type.equals(ProductConstants.PRODUCT_TYPE_SECKILL_KEY)) { // return seckillService.getProductDetail(id); throw new UnsupportedOperationException("秒杀商品未实现代码!"); } EbProduct product = this.getProductService().queryH5Detail(id); if(product == null){ return ResponseValue.error("商品不存在"); } ProductDetailVo detailVo = new ProductDetailVo(); detailVo.setProductInfo(product); if(StringUtils.isNotEmpty(product.getGuaranteeIds())){ List idList = new ArrayList<>(4); for(String gid : StringUtils.commaDelimitedListToStringArray(product.getGuaranteeIds())){ idList.add(Integer.parseInt(gid)); } detailVo.setGuaranteeList(this.getProductGuaranteeService().queryListByIds(idList)); } // 获取商品规格 String keyAttr = ProductAttrUtils.combineKey(ProductConstants.PRODUCT_TYPE_NORMAL, id); List attrList = this.getProductAttrCache().getList(keyAttr); if(!StringUtils.isEmptyList(attrList)){ detailVo.setProductAttr(attrList); } // 根据制式设置sku属性 LinkedHashMap skuMap = new LinkedHashMap<>(); List productAttrValueList = this.getProductAttrValueService().queryProductAttrValueList(ProductConstants.PRODUCT_TYPE_NORMAL, id); if(!StringUtils.isEmptyList(productAttrValueList)){ for(EbProductAttrValue atr : productAttrValueList){ skuMap.put(atr.getSku(), atr); } detailVo.setProductValue(skuMap); } EbMerchant merchant = this.getMerchantCache().get(product.getMerId()); ProductMerchantVo productMerchantVo = VoUtils.acquireProductMerchantVo(merchant, this.getCdnUrl()); productMerchantVo.setCollectNum(0); // 暂时先不查询收藏数量 List recommendList = this.getProductService().queryRecommendedProductsByMerId(product.getMerId(), 4); List data = new ArrayList<>(); if(!StringUtils.isEmptyList(recommendList)){ for(EbProduct p: recommendList){ data.add(VoUtils.acquireProMerchantProductVo(p, this.getCdnUrl())); } } productMerchantVo.setProList(data); detailVo.setMerchantInfo(productMerchantVo); detailVo.setUserCollect(false); // 用户收藏 /*if (userId > 0) { // 查询用户是否收藏收藏 productDetailResponse.setUserCollect(productRelationService.existCollectByUser(userId, product.getId())); } // 异步调用进行数据统计 asyncService.productDetailStatistics(product.getId(), userId); // 添加活动背景 productDetailResponse.getProductInfo().setActivityStyle(activityStyleService.makeActivityBackgroundStyle(productDetailResponse.getProductInfo())); */ return ResponseValue.success(detailVo); } }