00:00
那我们继续来编写商品上架功能,那我们的后台管理系统里边,当我们选中某一个SQ,我们可以来点击上架,它会为我们发送上架请求,包括我们F12看控制台,我们network,我们来监控一下,当我们来点击上架的时候呢,它会发送商品的上架请求,这个请求呢是product s PU info带上我们商品的ID up表示商品上架操作。当然这个请求呢,我们应该参照我们的接口文档来做商品上架,上架呢也不需要发送额外的数据,只要把这个po的ID给我们带上就行了,我们会查出这些数据给他们重新保存到ES里边,好,我把这个呢复制过来,们来到商品服务product服务里边,因为我们这个路径呢是product,好,我们来到商品服务里边,我们在商品服务的这个s poo controller里边们来编写我们的上架功能,那上架功能的路径是这样子的,好,我来先写上我们。
01:00
的这个方法我复制一份过来,那么这个呢,就叫po up,那么这个商品的上架,我们的请求参数没有,我们只有一个路径变量,我们把这一块呢删除,我来先来映射请求,使用post map们来映射请求,而请求的整个路径呢,Po符前面这就不用写了,把后边复制过来,来映射上路径变量at一个pass variable,那们这个路径变量呢,是我们的po ID,好,我们写一个long类型的po ID,那假设呢,有这么一个上架方法,那就希望呢po英fo service有这么一个方法,能给我们进行商品上架功能,把这个po ID给这一传,那上架成功以后就返回,OK就行了。好,我们来创建出这个方法,奥尔英特我们创建出这个方法,那这个方法的作用就是商品上架,来标注上商品上架,我们这一块呢,要指定的是po的ID,好,我们来添加上这个方法来实现。
02:08
我们在这来al in好添加上实现,我们在这个实现里边,我们来完善商品上架的功能,那首先要上架我们给ES里边要存储的数据模型,我们之前分析了是这个模型,那我们要为这个模型呢,我们建立一个B,好,那现在呢,就直接在common们里边来建立be,因为我们要上的这个架,我们在product里边组装好数据,我们还要传给search服务,Search服务呢再来进行上架,所以呢,我们可以写在com里边,但有些同学就会说,那实际开发的时候,如果真是微服务的话,可能我隔壁做的这个开发人员,他只有权限能拿到我们的search服务,那他自己独立开发search服务,那我在我电脑上修改的common他可能呢都看不到,那针对于这种呢,其实我们就应该是在product里边将我们这个数据模型写一份,那我们product会给search发送请求,那search里边呢,再来写一份,那我们在这开发呢,为了方便。
03:08
就全放在common里边,好,那在这来给common里边,我们来直接放上我们的传输对象,相当于ES的这个to,好,我们专门来写上一个我们这个领域模型,我们就叫ES,我们放一个包里边,我们呢就来创建一个类,我们就叫SK。ES model,也就是我们SQ在ES里边保存到数据模型,好,我们来点击,OK,把我们要封装的这些属性我们来都来写上,好,我们先来写上an贝,我们要封装的这些属性呢,我在这儿来,先把整个mapping我直接全部复制过来,来一个一个的来抽取。好,我们在这来注释上,那我们第一个是我们浪类型的SQID,把这个先截取过来,这是我们要做的第一个,我们把这个复制过来,好,我们写一个private。
04:00
Long类型的我们SQID,我们在ES里边要保存SQ的ID,好接下来呢,我们再来看第二个是我们的PUID,把它呢也复制过来,我们先来写上这么几项。好,把它呢放在这来对照着来写private。我们还是浪类型的pidd,即使是浪类型,我们底部映射写keyword,它也会当成keyword进行存储好,然后呢,我们继续来private,我们SK的title,我们这个title呢,是string类型的,来写一个string,它要用来做全文检索,还有我们的这个SQ的price private。由于我们数据库查出来的是一个big Dis simma,我们在这呢写贝Di s,但是这呢是SQ price能保存到ES里边,它也会转换成我们q word值,还有我们的SQ image,这个图片是一个文本,我们的string,嗯,SQ的默认图片。好,这几个基本信息写完了,我们接下来继续,我们看还要封装,接下来是SQ的这些其他的信息,我把这一块呢,我直接复制来CTRLC。
05:20
我们在这呢放上,那么接下来要做的是我们的sell can private,那现在是一个long类型的,我们的。销量,我们把这个销量放在这儿,还有我们private布尔类型的,我们这个汉school是否拥有库存,接下来还有我们private浪类型的,我们这个热度评分hot score好。然后接下来我们再来看剩下的,剩下的呢,这一块就是我们的品牌ID,分类ID来写上private浪类型的品牌ID,还有我们private。
06:01
我们浪类型的分类ID这些呢,都是跟数据库的字段来进行对应的,我们查出来呢,也好封装,我们把这两个也放在这,然后呢,接下来还是品牌的名字转类型的品牌名,但是品牌名呢,我们在这一块的映射,我们看到它是不在数据库进行检索的,只是一个冗余存储字段,还有我们的品牌的图片,把这个也复制过来,CTRLC品牌的图片。以及我们分类的这个图片,CTRLC,诶,这是我们分类的名字,把这个复制过来,那这就是我们的这些基本属性的存储,每一个什么意思,看变量名也很能见明之意。接下来呢,还有我们的这个at t RS,这就是我们所有的这个商品规格属性信息,Private们来写一个list,那list类型的什么呢?我来先在这写一个object,我们这个叫at ts,那么list类型应该是这个有at t tr name和at tr value,那么就来写一个静态的内部类static class。
07:11
我们就叫at t RS,我们这个内部内呢,我们就来用上它是这个属性走它里面呢拥有我们这三个属性,首先private浪类型的,我们的at t rad,还有我们的at tr的name和at t RA value,我们把这几个呢都复制过来,我们的at tr name,它是一个string类型的,还有我们string类型的at tr value6好把这几个值呢,我们都拿过来,At tr value6把这一块我一定要跟ES里面的数据模型也对应好。同样的data,我们要给它生成get set方法,为了保证我们其他第三方工具能对他进行序列化、反序列化等,我们给它设置为可访问的权限,这我们商品在ES中保存的这个数据模型。
08:01
那接下来我们controller呢,就会来调用我们这个上架方法,最终呢,将我们ES需要用的数据组装起来,好,我们接下来要做的事情就是组装我们需要的数据,我们需要的数据呢,是一个SKU model这个类型的我们就叫ES model,等于你有一个s ks model。而这个里边呢,有一些基本信息,首先我们要上架这个s PU ids puu旗下呢有非常多的SKU,所以这些SKU呢,最终我们相当于还要装成一个list,我们要上架这么多的SQ商品,我们就叫sqs model,我们就叫up products,我们需要上架的商品,我们来写到这。每一个商品呢,都要封装成这个模型,所以我们要做的第一件事,组装数据需要做的第一件事,我们需要查询出,查出当前squ ID对应的所有SKU信息,当然这些SKU信息里边还包含了品牌的名字等等,那我们就先来查,我们查SK,我们就需要注入SQ的info service,我们来找一下我们有一个sqo service来通过它来查到我们所有的Su,我们就叫get sqs8我们的s puu ID,我按照s puu的ID来进行查询,那Su的ID呢就是它,那最终呢会查到,我们来写一个list,会查到所有的SQ info信息,我们把这个info entity,我们来封装过来,我们就叫SQ info entities,这是我们查到的所有SQ信息,我们。
09:46
就叫SQS,我们来创建出这个方法,走在sqo service里边,我们来添加上这个方法的实现,那方法的第一步我们先来查询。所有的SQ我们是按照SID来查的,那么就可以来利用this.select来找一下,诶,这没select,那么就来用get,这也没有查集合,那我们的这个查询集合应该是这个list的方法,List里边呢,有一个cor up,我们传入查询条件,那这个查询条件传完以后呢,然后就会给我们返回所有的这个集合数据,好我们把它返回,那我们的条件就是我来写上用一个cor wrapper。
10:30
我们现在要查SQ info的这个实体类,好我们的条件呢是按照它的SQID,我们来看一下SQ info里边每一个SQ都保存了它的QID是什么?好,那就可以点一个E口,条件就是按照它的这个里边的SQID等于指定的值po ID就是我们传过来的值,将这个查询出来。CTRL按住我们来点到引用的这个方法,那么现在呢,第一步我们就查出这个了。
11:03
接下来呢,我们就要封装信息,第二个我们封装每个SQ的信息,而且每一个封装呢,都是要封装成这个模型的数据,好,那我就先来便利点,我们是来使用stream点一个map来处理每一条数据,那每一个SKU我们拿过来,我们首先呢都要封装成一个这个类型的数据,最终呢,我们希望把这个类型的数据我们来返回,而且呢,我们把它收集成一个集合,我们to list。好,我们来创建出这个方法,那最终呢,我们相当于就是要这个样的数据,那我们这一块呢,就把它去掉,那现在我们来看如何封装成这个类型的数据。首先我们查出的每一个SQ里边SQ idsq的idsq的name这些都有,那么可以先来做一个属性对抗,保证呢,我们这些属性跟我们那个模型里边都是一样的,那我们这一块呢,基本都是一样的,那我们先来第一步来属性对抗。
12:11
使用beings.copy properties,我们将当前正在便利的SQ的数据我们拷贝到我们的ES model里边。那有没有不一样的数据呢?来对比一下ES model的数据,好把它呢提出来。拉出来。我们把它放到放在这,包括呢,我们把SKU的info我们也拉出来。我们两个呢,一一对比一下,SQ的info拉出来。好,我们现在来看一下这两个的属性对比。首先我们SQ的info里边的SQID一样的,SQID一样的,主要看ES model里边SQ title,那在这里边呢,也有,那都是一样的。SQ的price我们来看一下,在这里边呢,它叫price,所以有一个不一样,我们来标记一下,它叫SQ的price,其实保险期间我们可以手动的一个一个往进设置,还有一个SQ的image,我们来看image,就是这个默认图片,它也不一样,所以我们在这呢也要进行一个设置。
13:26
包括我们继续来进行对比,这有销量SQ的,我们这个cell count,我们这呢也有sell没问题,当然这个库存hasto这里边没有,我们相当于还得单独来查,所以我们每一个单独要处理的,我们都要放在这,好我们继续来对比。我们的这个热度评分,哎,这个热度分呢,我们也要单独处理,现在我们现在还没有这个热度分的信息,还有我们品牌的ID,我们来看一下品牌ID,分类ID在SQ里边也都有,但是这三个品牌的名字,品牌的图片以及分类的名字。
14:05
这个也需要额外处理,那我们把这三个呢也复制出来,这三个呢也得单独处理。接下来我们再来参照。我们来看一下这一块整个都完了以后,就剩下at t RS了,At t RS里边呢又长成这个样子,所以呢,这些都是要单独处理的,我们把这一块呢放在这儿。好,我把这两个对比呢,我就来关掉,我们开始来单独处理这些数据。首先SK的价格在我们ES model里边,我们要set,我们叫SQ price,它呢是我们当前SQ的这个price,直接点一个get price。两个呢名不一样好说,还有我们SQ的图片也是这样子的,点一个set SQ的image图片,它呢也是我们查出来的这个SKU里边每一个SQ我们都保存了默认图片,接下来我们要看是不是拥有库存,这个库存的这个判断,我们必须给我们的库存服务发送请求,我们问一下他这个东西有没有库存,这才行。所以呢,我们现在要做的这一件事,我们写一个图度,就是呢,发送远程调用,也就是说呢,我们这个库存系统要给我们查询是否有库存,而且呢,我们这只查是否有库存,并不用查库存是多少。
15:36
所以呢,其实库存系统并不做一个精确查询,这是我们要做的第一件事,第二件事还有我们这个热度评分,这个热度评分。那默认刚上架的商品,刚上架的商品呢,我们可以给他给一个没有热度,比如零之类的,但实际上我们后台都有操作,比如我们这个商品即使刚上架也要置顶,那这个热度评分那就很高了,这都是我们后台的更复杂的操作,所以呢,我们默认就给它放一个零,我们这一块的操作我们在后台里边就不写了,大家可以再来扩展这个功能。
16:13
接下来我们把我们能做的可以先在这儿来一做,第三步我们来再来写一个图度来看我们第三步,第三步呢,我们就要查出这个品牌的名字,以及分类的名字要放上去,我们要查询品牌。和分类的名字信息,我们要设置上去,好,我就来写一个ES model,点一个set我们的品牌的名字,除了名字外,我们ES model里边还要set我们品牌的图片,当然这两个我们需要用品牌的service来进行查询,那么希望呢看有没有brand service,那么在这来注入一个查询品牌和查询分类的service,我们这都得有。一个呢是brand,我们的品牌的这个查询,我就叫brand。
17:04
Service,好把它注入进来,那它呢帮我们来查品牌,还有我们要查分类的信息,那caty service,那就叫category service点一个auto,好,我们接下来就来进行查询,来查询品牌的名字,Brand service点一个由于我们这直接有品牌ID,所以呢,我们相当于是按照ID查的,我们直接把这个ID给他发过去,那这就是ES model里边我们刚才封装的这个品牌ID。然后呢,他帮我们来查出品牌信息,然后我们把品牌信息我们来封装进去,我们这就叫品牌好,我们需要品牌的名字放在这点一个get name,我们还需要品牌的这个logo图标,点一个get它的logo。那第三步就做好了,还有我们这个分类的名字,同样category service,点一个get by ID,我们都可以直接用ID来查,我们传入这个ides model.get我们的现在是分类IDE,我来查出分类的这个信息,把这个分类信息我们拿过来。
18:14
然后呢,我们将分类的信息我们来设置进去,我们同样的来ES model.set。那主要设置一个分类的名字,Set错了来写一个set分类的名字来,我们把它呢放上去,点一个get name,那这样呢就做好了,那接下来我们更要做的一大步就是要查出当前SKU所有的规格属性,好我们来写一个图度,我们要做到第四步,查询当前SKU。的所有规格属性,而且这些规格属性有一个最大的特点,我们虽然说在保存的时候,商品呢,有非常多的规格,但我们当时在指定的时候,每一种属性它有可能呢是可以用来被检索的,可以被检索的那我们此时就要查出来,不可以被检索的只是一些基本属性信息,那我们就不用查出来,所以我们在这一块要做的是。
19:15
查出当前SQ所有可以被用来检索的规格属性,而且呢,如果我们每次都在这儿查,大家会发现我有八个SQ,我们要查八遍,但实际上这八个SQ这个信息都是一样的,所以呢,我们应该把它提出来放在外边查一遍,因为我们这个规格属性都是按照po来的,所以呢,我们在这应该按照来查询一遍就行了。那好,接下来的这两个复杂操作查询,它的这个检索规格属性和我们这个远程调用,我们就可以来下一节课来做,这是我们基本的一些数据,那把这个数据呢,我们最终第五步我们要发给我们的ES进行保存图do来写上第五步那将。
20:06
数据发送给我们这个ES进行保存,但发送给ES呢,不应该是我们商品服务再来调用,而应该是直接给我们的检索服务,因为检索服务整合了ES,所有对ES的一些操作,我们都应该发送给检索服务,好,我们下节课呢就来完成这些操作。
我来说两句