商品上下架功能的实现
还是先找Controller,然后调用Service,开始实现这个方法
我们需要去数据库中修改商品的上架信息字段,这里不用担心你会把没有更改的更改成null值,因为mybatis-plus只会帮你把要更新的字段给更新,比如这里就只是更新publishStatus,因为只有这个属性变了,其实这里都还好弄,比较复杂的就是要将新的数据保存到es,这里要考虑些问题,就是共性和不同商品的区别,比如假如都是衣服,那么共性就是尺码,颜色等等,我们并不希望每次都重新录入这些共性,于是就可以抽取出来成为一个新的类表,
比如这里就是每个手机都有的东西,然后开始不同品牌的手机的不同功能
我们还需要一个包装类,因为每个种类,每种物品都有不同的共性,所以我们得抽取出新的一个类,包括了一个种类的所有共性
一个EsSkuProductInfo就是一种种类的所有共性,每一个EsProductAttributeValue都是一个属性,然后
包括了所有种类的共性
那么我们首先来查出数据库中该物品的基本属性。其实这个查询我感觉确实有点麻烦,是多表查询,而且容易把自己搞混乱。这个查询会传进来一个商品id,根据这个商品id可以在属性值表中查到对应的属性值,然后去属性表中找出这个属性是什么,看下面的数据库表
首先查出了商品id为22的属性值表,然后根据这个product_attribute_id去属性表中找出具体属性
接下来就可以整合查询了,能够查出商品的基本属性的name,和对应的值
这就是基本属性,包括了销售属性和信息,可以通过type来查找是销售属性还是基本属性
理清了这个思路,我们就可以去在java中写查询语句了
首先是定义这个方法
然后由于mapper中没有该方法,所以我们得去xml文件中自己写这个方法
如果销售属性里面有大小,颜色,那么大小和颜色间是可以组合的,而组合出的结果其实是不用放到mysql中的,因为放进去也没用,放了可以取消则又改变了,我们希望的是通过es实现动态聚合得到真正的值
接下来就是查询该物品的销售属性了。。。
这个sql语句更加的恐怖了。。
这里感觉不解释我自己都不知道是啥意思了。首先传入一个商品id,查出他的所有所有属性,然后pa.type就是筛选出为0也就是销售属性,不过这里可能查出来的销售属性并不完全,所以我们还得去pa表里面查询,不然可能你只弄了一个颜色,但是尺码你没有选,不过这种物品是有尺码的,所以得去找,说到底就是查找最初的父类属性,然后在父类属性中找出销售属性。
这个大方法就是根据传进来的参数决定是上架还是下架某件商品,比较简单的是对数据库进行的操作,只有改一下status就行了,但是比较复杂的就是保存信息到es去。比如下面的就是去es中保存信息的方法
这一个方法完成了商品的上架在es的保存。
首先是查出商品的sku属性,包括库存啊,价格啥的,然后就是查出销售属性的名称,那个方法上面已经在xml中实现了,每个商品的sku属性都是不同的,这里是根据product_id查询出来的。然后我们对每个属性进行统计,因为我们最后要交给前端的是一个新属性,所以这里new了一个新的类EsSkuProductInfo,先把skuStock复制到新类中,然后因为标题最多由三个字段组成,这里声明了变量subTitile,赋完值后将subTitle给info,
然后就就是每件商品的销售属性,是更具体的了,有名称,标题,最后再将公共属性找到,然后把公共属性给每个商品加上,就是不停地封装,当封装完后,最后就可以交给es了,也就是
es删除索引就比较简单了,先更改数据库中的状态,然后直接删除就行
不得不说,es确实比较难,比较复杂,而且特别容易出错。。。