后端:增加 H5 需要的商品推荐接口

This commit is contained in:
YunaiV
2019-03-31 18:43:40 +08:00
parent b333340c20
commit 6699bd34a8
10 changed files with 207 additions and 23 deletions

View File

@@ -0,0 +1,53 @@
package cn.iocoder.mall.promotion.application.controller.users;
import cn.iocoder.common.framework.constant.CommonStatusEnum;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.product.api.ProductSpuService;
import cn.iocoder.mall.product.api.bo.ProductSpuBO;
import cn.iocoder.mall.promotion.api.ProductRecommendService;
import cn.iocoder.mall.promotion.api.bo.ProductRecommendBO;
import cn.iocoder.mall.promotion.application.convert.ProductRecommendConvert;
import cn.iocoder.mall.promotion.application.vo.users.UsersProductRecommendVO;
import com.alibaba.dubbo.config.annotation.Reference;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping("users/banner")
@Api("商品推荐模块")
public class UsersProductRecommendController {
@Reference(validation = "true")
private ProductRecommendService productRecommendService;
@Reference(validation = "true")
private ProductSpuService productSpuService;
@GetMapping("/list")
@ApiOperation("获得所有 Banner 列表")
public CommonResult<Multimap<Integer, UsersProductRecommendVO>> list() {
// 查询商品推荐列表
List<ProductRecommendBO> productRecommends = productRecommendService.getProductRecommendList(
null, CommonStatusEnum.ENABLE.getValue()).getData();
// 获得商品集合
List<ProductSpuBO> spus = productSpuService.getProductSpuList(
productRecommends.stream().map(ProductRecommendBO::getProductSpuId).collect(Collectors.toSet())).getData();
Map<Integer, ProductSpuBO> spuMap = spus.stream().collect(Collectors.toMap(ProductSpuBO::getId, account -> account));
// 组合结果,返回
Multimap<Integer, UsersProductRecommendVO> result = new HashMultimap<>();
productRecommends.sort(Comparator.comparing(ProductRecommendBO::getSort)); // 排序,按照 sort 升序
productRecommends.forEach(productRecommendBO -> result.put(productRecommendBO.getType(),
ProductRecommendConvert.INSTANCE.convert(spuMap.get(productRecommendBO.getProductSpuId())))); // 将 ProductSpuBO 添加到 results 中
return CommonResult.success(result);
}
}

View File

@@ -1,10 +1,12 @@
package cn.iocoder.mall.promotion.application.convert;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.product.api.bo.ProductSpuBO;
import cn.iocoder.mall.promotion.api.bo.ProductRecommendBO;
import cn.iocoder.mall.promotion.api.bo.ProductRecommendPageBO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsProductRecommendPageVO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsProductRecommendVO;
import cn.iocoder.mall.promotion.application.vo.users.UsersProductRecommendVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@@ -23,7 +25,10 @@ public interface ProductRecommendConvert {
@Mappings({})
CommonResult<AdminsProductRecommendPageVO> convert(CommonResult<ProductRecommendPageBO> result);
// @Mappings({})
// List<UsersProductRecommendVO> convertList(List<ProductRecommendBO> banners);
@Mappings({})
UsersProductRecommendVO convert(ProductSpuBO productSpu);
// @Mappings({})
// List<UsersProductRecommendVO> convertList(List<ProductRecommendBO> banners);
}

View File

@@ -0,0 +1,75 @@
package cn.iocoder.mall.promotion.application.vo.users;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
@ApiModel(value = "商品推荐 VO", description = "不包括 SKU 信息 VO")
public class UsersProductRecommendVO {
@ApiModelProperty(value = "商品 SPU 编号", required = true, example = "1")
private Integer id;
// ========== 基本信息 =========
@ApiModelProperty(value = "SPU 名字", required = true, example = "厮大牛逼")
private String name;
@ApiModelProperty(value = "卖点", required = true, example = "各种 MQ 骚操作")
private String sellPoint;
@ApiModelProperty(value = "商品主图地址的数组", required = true, example = "http://www.iocoder.cn")
private List<String> picUrls;
// ========== Sku 相关字段 =========
/**
* 价格
*
* 目前的计算方式是,以 Sku 最小价格为准
*/
private Integer price;
public Integer getId() {
return id;
}
public UsersProductRecommendVO setId(Integer id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public UsersProductRecommendVO setName(String name) {
this.name = name;
return this;
}
public String getSellPoint() {
return sellPoint;
}
public UsersProductRecommendVO setSellPoint(String sellPoint) {
this.sellPoint = sellPoint;
return this;
}
public List<String> getPicUrls() {
return picUrls;
}
public UsersProductRecommendVO setPicUrls(List<String> picUrls) {
this.picUrls = picUrls;
return this;
}
public Integer getPrice() {
return price;
}
public UsersProductRecommendVO setPrice(Integer price) {
this.price = price;
return this;
}
}