修改 search 服务的 dev dubbo 配置

完成 product 详情 rest 接口
This commit is contained in:
YunaiV
2020-08-05 00:21:51 +08:00
parent 11b2f67ed1
commit dfd25c1516
13 changed files with 115 additions and 103 deletions

View File

@@ -2,6 +2,7 @@ package cn.iocoder.mall.shopweb.controller.product;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuDetailRespVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuPageReqVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
@@ -41,4 +42,11 @@ public class ProductSpuController {
return success(productSpuManager.getProductSpuSearchCondition(keyword));
}
@GetMapping("/get_detail")
@ApiOperation("获得商品 SPU 的明细,包括 SKU 等等信息")
@ApiImplicitParam(name = "id", required = true, value = "商品 SPU 编号", example = "1024")
public CommonResult<ProductSpuDetailRespVO> getProductSpuDetail(@RequestParam("id") Integer id) {
return success(productSpuManager.getProductSpuDetail(id));
}
}

View File

@@ -0,0 +1,22 @@
package cn.iocoder.mall.shopweb.controller.product.vo.attr;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@ApiModel(value = "商品规格 KEY + VALUE 对的 Response VO")
@Data
@Accessors(chain = true)
public class ProductAttrKeyValueRespVO {
@ApiModelProperty(value = "规格 KEY 编号", required = true, example = "1")
private Integer attrKeyId;
@ApiModelProperty(value = "规格 KEY 名字", required = true, example = "颜色")
private String attrKeyName;
@ApiModelProperty(value = "规格 VALUE 值", required = true, example = "10")
private Integer attrValueId;
@ApiModelProperty(value = "规格 VALUE 名字", required = true, example = "红色")
private String attrValueName;
}

View File

@@ -0,0 +1,61 @@
package cn.iocoder.mall.shopweb.controller.product.vo.product;
import cn.iocoder.mall.shopweb.controller.product.vo.attr.ProductAttrKeyValueRespVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "商品 SPU 详细 Response VO", description = "包括 SKU 信息 VO")
@Data
@Accessors(chain = true)
public class ProductSpuDetailRespVO {
@ApiModelProperty(value = "SPU 编号", required = true, example = "1")
private Integer id;
// ========== 基本信息 =========
@ApiModelProperty(value = "SPU 名字", required = true, example = "芋艿")
private String name;
@ApiModelProperty(value = "卖点", required = true, example = "好吃好玩")
private String sellPoint;
@ApiModelProperty(value = "描述", required = true, example = "我是哈哈哈")
private String description;
@ApiModelProperty(value = "分类编号", required = true, example = "1")
private Integer cid;
@ApiModelProperty(value = "商品主图地址", required = true, example = "http://www.iocoder.cn/xxx.jpg", notes = "多个之间,使用逗号分隔")
private List<String> picUrls;
// ========== SKU =========
/**
* SKU 数组
*/
private List<Sku> skus;
@ApiModel("商品 SKU 详细 Response VO")
@Data
@Accessors(chain = true)
public static class Sku implements Serializable {
@ApiModelProperty(value = "sku 编号", required = true, example = "1")
private Integer id;
@ApiModelProperty(value = "SPU 编号", required = true, example = "1")
private Integer spuId;
@ApiModelProperty(value = "图片地址", required = true, example = "http://www.iocoder.cn")
private String picURL;
/**
* 规格值数组
*/
private List<ProductAttrKeyValueRespVO> attrs;
@ApiModelProperty(value = "价格,单位:分", required = true, example = "100")
private Integer price;
@ApiModelProperty(value = "库存数量", required = true, example = "100")
private Integer quantity;
}
}

View File

@@ -12,7 +12,7 @@ import java.util.List;
@Accessors(chain = true)
public class ProductSpuRespVO {
@ApiModelProperty(value = "SPU 编号", required = true)
@ApiModelProperty(value = "SPU 编号", required = true, example = "1")
private Integer id;
// ========== 基本信息 =========

View File

@@ -4,8 +4,10 @@ import cn.iocoder.common.framework.util.StringUtils;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.common.framework.vo.SortingField;
import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO;
import cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuDetailRespDTO;
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductPageReqDTO;
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductRespDTO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuDetailRespVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuPageReqVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
@@ -34,4 +36,6 @@ public interface ProductSpuConvert {
List<ProductSpuSearchConditionRespVO.Category> convertList(List<ProductCategoryRespDTO> list);
ProductSpuDetailRespVO convert(ProductSpuDetailRespDTO bean);
}

View File

@@ -3,13 +3,17 @@ package cn.iocoder.mall.shopweb.manager.product;
import cn.iocoder.common.framework.util.CollectionUtils;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.productservice.enums.spu.ProductSpuDetailFieldEnum;
import cn.iocoder.mall.productservice.rpc.category.ProductCategoryRpc;
import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO;
import cn.iocoder.mall.productservice.rpc.spu.ProductSpuRpc;
import cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuDetailRespDTO;
import cn.iocoder.mall.searchservice.enums.product.SearchProductConditionFieldEnum;
import cn.iocoder.mall.searchservice.rpc.product.SearchProductRpc;
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductConditionReqDTO;
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductConditionRespDTO;
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductRespDTO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuDetailRespVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuPageReqVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
@@ -18,6 +22,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -34,6 +39,9 @@ public class ProductSpuManager {
@DubboReference(version = "${dubbo.consumer.ProductCategoryRpc.version}")
private ProductCategoryRpc productCategoryRpc;
@DubboReference(version = "${dubbo.consumer.ProductSpuRpc.version}")
private ProductSpuRpc productSpuRpc;
public PageResult<ProductSpuRespVO> pageProductSpu(ProductSpuPageReqVO pageReqVO) {
CommonResult<PageResult<SearchProductRespDTO>> pageResult =
searchProductRpc.pageSearchProduct(ProductSpuConvert.INSTANCE.convert(pageReqVO));
@@ -60,4 +68,11 @@ public class ProductSpuManager {
return conditionRespVO;
}
public ProductSpuDetailRespVO getProductSpuDetail(Integer id) {
CommonResult<ProductSpuDetailRespDTO> getProductSpuDetailResult = productSpuRpc.getProductSpuDetail(id,
Arrays.asList(ProductSpuDetailFieldEnum.SKU.getField(), ProductSpuDetailFieldEnum.ATTR.getField()));
getProductSpuDetailResult.checkError();
return ProductSpuConvert.INSTANCE.convert(getProductSpuDetailResult.getData());
}
}

View File

@@ -35,6 +35,8 @@ dubbo:
version: 1.0.0
ProductCategoryRpc:
version: 1.0.0
ProductSpuRpc:
version: 1.0.0
SearchProductRpc:
version: 1.0.0