修改 search 服务的 dev dubbo 配置
完成 product 详情 rest 接口
This commit is contained in:
parent
11b2f67ed1
commit
dfd25c1516
@ -1,10 +0,0 @@
|
|||||||
package cn.iocoder.mall.product.biz.config;
|
|
||||||
|
|
||||||
import cn.iocoder.mall.product.biz.message.MQStreamProducer;
|
|
||||||
import org.springframework.cloud.stream.annotation.EnableBinding;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@EnableBinding(MQStreamProducer.class)
|
|
||||||
public class MQStreamConfiguration {
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
package cn.iocoder.mall.product.application.vo.users;
|
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModel;
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
@ApiModel(value = "商品规格属性和值对 VO")
|
|
||||||
@Data
|
|
||||||
@Accessors(chain = true)
|
|
||||||
public class UsersProductAttrAndValuePairVO {
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "规格编号", required = true, example = "1")
|
|
||||||
private Integer attrId;
|
|
||||||
@ApiModelProperty(value = "规格名", required = true, example = "颜色")
|
|
||||||
private String attrName;
|
|
||||||
@ApiModelProperty(value = "规格值", required = true, example = "10")
|
|
||||||
private Integer attrValueId;
|
|
||||||
@ApiModelProperty(value = "规格值名", required = true, example = "红色")
|
|
||||||
private String attrValueName;
|
|
||||||
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
package cn.iocoder.mall.product.application.vo.users;
|
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商品 Sku 明细 BO
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Accessors(chain = true)
|
|
||||||
public class UsersProductSkuDetailVO {
|
|
||||||
|
|
||||||
@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;
|
|
||||||
@ApiModelProperty(value = "规格值数组", required = true)
|
|
||||||
private List<UsersProductAttrAndValuePairVO> attrs;
|
|
||||||
@ApiModelProperty(value = "价格,单位:分", required = true, example = "100")
|
|
||||||
private Integer price;
|
|
||||||
@ApiModelProperty(value = "库存数量", required = true, example = "100")
|
|
||||||
private Integer quantity;
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package cn.iocoder.mall.product.application.vo.users;
|
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModel;
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@ApiModel(value = "商品 SPU 详细 VO", description = "包括 SKU 信息 VO")
|
|
||||||
@Data
|
|
||||||
@Accessors(chain = true)
|
|
||||||
public class UsersProductSpuDetailVO {
|
|
||||||
|
|
||||||
@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 = "你就说强不强")
|
|
||||||
private String description;
|
|
||||||
@ApiModelProperty(value = "分类编号", required = true, example = "反正我是信了")
|
|
||||||
private Integer cid;
|
|
||||||
@ApiModelProperty(value = "商品主图地址的数组", required = true, example = "http://www.iocoder.cn")
|
|
||||||
private List<String> picUrls;
|
|
||||||
|
|
||||||
// ========== SKU =========
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SKU 数组
|
|
||||||
*/
|
|
||||||
private List<UsersProductSkuDetailVO> skus;
|
|
||||||
|
|
||||||
}
|
|
@ -76,9 +76,6 @@ public class ProductSpuDetailRespDTO implements Serializable {
|
|||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public static class Sku implements Serializable {
|
public static class Sku implements Serializable {
|
||||||
|
|
||||||
/**
|
|
||||||
* sku 编号
|
|
||||||
*/
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
/**
|
/**
|
||||||
* 商品编号
|
* 商品编号
|
||||||
|
@ -11,4 +11,5 @@ spring:
|
|||||||
dubbo:
|
dubbo:
|
||||||
# Dubbo 注册中心
|
# Dubbo 注册中心
|
||||||
registry:
|
registry:
|
||||||
address: spring-cloud://400-infra.server.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址
|
# address: spring-cloud://400-infra.server.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址
|
||||||
|
address: nacos://400-infra.server.iocoder.cn:8848?namespace=dev # 指定 Dubbo 服务注册中心的地址
|
||||||
|
@ -2,6 +2,7 @@ package cn.iocoder.mall.shopweb.controller.product;
|
|||||||
|
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
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.ProductSpuPageReqVO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
|
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
|
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
|
||||||
@ -41,4 +42,11 @@ public class ProductSpuController {
|
|||||||
return success(productSpuManager.getProductSpuSearchCondition(keyword));
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -12,7 +12,7 @@ import java.util.List;
|
|||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public class ProductSpuRespVO {
|
public class ProductSpuRespVO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "SPU 编号", required = true)
|
@ApiModelProperty(value = "SPU 编号", required = true, example = "1")
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
// ========== 基本信息 =========
|
// ========== 基本信息 =========
|
||||||
|
@ -4,8 +4,10 @@ import cn.iocoder.common.framework.util.StringUtils;
|
|||||||
import cn.iocoder.common.framework.vo.PageResult;
|
import cn.iocoder.common.framework.vo.PageResult;
|
||||||
import cn.iocoder.common.framework.vo.SortingField;
|
import cn.iocoder.common.framework.vo.SortingField;
|
||||||
import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO;
|
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.SearchProductPageReqDTO;
|
||||||
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductRespDTO;
|
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.ProductSpuPageReqVO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
|
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
|
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
|
||||||
@ -34,4 +36,6 @@ public interface ProductSpuConvert {
|
|||||||
|
|
||||||
List<ProductSpuSearchConditionRespVO.Category> convertList(List<ProductCategoryRespDTO> list);
|
List<ProductSpuSearchConditionRespVO.Category> convertList(List<ProductCategoryRespDTO> list);
|
||||||
|
|
||||||
|
ProductSpuDetailRespVO convert(ProductSpuDetailRespDTO bean);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,17 @@ package cn.iocoder.mall.shopweb.manager.product;
|
|||||||
import cn.iocoder.common.framework.util.CollectionUtils;
|
import cn.iocoder.common.framework.util.CollectionUtils;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.common.framework.vo.PageResult;
|
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.ProductCategoryRpc;
|
||||||
import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO;
|
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.enums.product.SearchProductConditionFieldEnum;
|
||||||
import cn.iocoder.mall.searchservice.rpc.product.SearchProductRpc;
|
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.SearchProductConditionReqDTO;
|
||||||
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductConditionRespDTO;
|
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductConditionRespDTO;
|
||||||
import cn.iocoder.mall.searchservice.rpc.product.dto.SearchProductRespDTO;
|
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.ProductSpuPageReqVO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
|
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuRespVO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.product.ProductSpuSearchConditionRespVO;
|
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.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -34,6 +39,9 @@ public class ProductSpuManager {
|
|||||||
@DubboReference(version = "${dubbo.consumer.ProductCategoryRpc.version}")
|
@DubboReference(version = "${dubbo.consumer.ProductCategoryRpc.version}")
|
||||||
private ProductCategoryRpc productCategoryRpc;
|
private ProductCategoryRpc productCategoryRpc;
|
||||||
|
|
||||||
|
@DubboReference(version = "${dubbo.consumer.ProductSpuRpc.version}")
|
||||||
|
private ProductSpuRpc productSpuRpc;
|
||||||
|
|
||||||
public PageResult<ProductSpuRespVO> pageProductSpu(ProductSpuPageReqVO pageReqVO) {
|
public PageResult<ProductSpuRespVO> pageProductSpu(ProductSpuPageReqVO pageReqVO) {
|
||||||
CommonResult<PageResult<SearchProductRespDTO>> pageResult =
|
CommonResult<PageResult<SearchProductRespDTO>> pageResult =
|
||||||
searchProductRpc.pageSearchProduct(ProductSpuConvert.INSTANCE.convert(pageReqVO));
|
searchProductRpc.pageSearchProduct(ProductSpuConvert.INSTANCE.convert(pageReqVO));
|
||||||
@ -60,4 +68,11 @@ public class ProductSpuManager {
|
|||||||
return conditionRespVO;
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,8 @@ dubbo:
|
|||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
ProductCategoryRpc:
|
ProductCategoryRpc:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
ProductSpuRpc:
|
||||||
|
version: 1.0.0
|
||||||
SearchProductRpc:
|
SearchProductRpc:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user