谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架

文章目录

  • 商品上架
    • ES数据模型
    • 上架流程
    • mybatis之foreach用法
    • TypeReference
    • Feign调用流程

商品上架

后台管理员对spu审核进行操作,点击上架。只有当商品上架才应该被检索,即需要导入商品数据到ES中。

请求参数

POST /product/spuinfo/{spuId}/up

响应数据

{
	"msg": "success",
	"code": 0
}

ES数据模型

搜索栏、分类进行搜索
谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架_第1张图片
效果页面
谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架_第2张图片
要考虑三个点:

1、哪些需要分词
2、哪些词需要过滤
3、需要显示哪些字段

所以设计为商城ES数据模型

Elasticsearch Nested类型

转换成Java类

/**
 * @description: 商品传输ES数据模型
 * @author: DAIHAO
 * @created: 2020/05/13 21:14
 */
@Data
public class SkuEsModel {
    
	//商品ID
	private Long spuId;
	//sku_id
	private Long skuId;
	//标题
	private String skuTitle;
	//价格
	private BigDecimal skuPrice;
	//图片
	private String skuImg;
	//销售量
	private Long saleCount;
	//是否还有库存
	private Boolean hasStock;
	//热度评分
	private Long hotScore;
	//品牌ID
	private Long brandId;
	//品牌名
	private String brandName;
	//品牌图片
	private String brandImg;
	//分类ID
	private Long catalogId;
	//分类名
	private String catalogName;
	//属性
	private List<Attrs> attrs;
	
	@Data
	public static class Attrs {
		//属性ID
		private Long attrId;
		//属性名
		private String attrName;
		//属性值
		private String attrValues;
	}
}

上架流程

谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架_第3张图片

mybatis之foreach用法

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  WHERE ID in
  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  foreach>
select>

foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。

注意 你可以将一个 List 实例或者数组作为参数对象传给 MyBatis,当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中并以名称为键。List 实例将会以"list"作为键,而数组实例的键将是"array"。

TypeReference

Java中TypeReference用法说明

Feign调用流程

伪代码

	/**
	*1 、构造请求数据,将对象转为json;
	* RequestTemplate template = buildTemplateFromArgs.create(argv);
	* 2、发送请求进行执行(执行成功会解码响应数据)
	* executeAndDecode(template);
	* veregnjava
	* 3、执行请求会有重试机制 默认请求5次
	* 伪代码:   while (true) {
	*                 try {
	*                     executeAndDecode(template);
	*                 } catch () {
	*                     try {
	*                         retryer.continueOrPropagate(e);
	*                     } catch () {
	*                         throw ex;
	*                     }
	*                     continue;
	*                 }
	*             }
	*/

Spring Cloud Feign设计原理

你可能感兴趣的:(谷粒商城,java,html,elasticsearch)