商城分析(怎么在修改商品窗口里面进行保存商品信息)
这次我们来写写怎么更新商品信息。
我们上一次写的是如何打开编辑后,显示以前商品参数的回显,回显是有了,但是如果我们要更改参数并且保存的话,那应该怎么做呢?其实这是一个商品参数更新的功能。
我们先看看这里,我们修改了商品的参数,并且点击保存,然后它显示的是保存失败。为什么会保存失败呢?因为我们没有编写对应的更新方法。
可以看到下面浏览器报的错误,下面总共有两个错误,一个是图片的错误(jpg),另外一个就是这个保存的错误,他错误在什么地方呢?405参数就是请求失败的意思,我们可以看一下他的请求方式是PUT,而我们之前写的请求方式都是Get或者Post,所以我们要在后端写上Put的请求方式
可以看到这些参数都是它的返回参数。也就是用户修改完这些数据之后传过来的整体数据,你需要有个东西去接收,但是需要什么实体类去接收呢?这个你就要看这里面有什么参数,然后实体类里面有什么参数。但是你要想清楚,就是你保存完这些信息之后,会返回一个什么值,你要去前端那里看,
可以看到前端这里,http里面的方法都是说了向后端传送的方法,然后有个then,这个then就是执行保存成功后要做的方法,他这里只是写返回一个成功或者失败,没有其他返回值,所以我们可以去写后端代码了。
我们可以看到浏览器传过来的参数这里,这些刚好又全部是SpuBo里面的参数,所以我们可以用SpuBo来接收。
看看我们编写的这个方法,为什么要用RequestBody而不是用RquestParam去接收,因为我们接收的是一个json对象,你也可以看到浏览器这么多数值,这些数字值组合成一个类,我们要接收的是这些所有数值组装成的类,所以也是需要用到RequestBody
只要更新和响应成功,我就要返回一个204,所以最终我们只需要返回一个204状态码就可以了,因为他前端那里是用了message.success方法,所以如果我们返回一个204,这也是代表一个成功方法,他就会做出对应的响应,保存失败也是一样的道理。
他这一次更新要涉及到四个的数据表,注意,这四张表是有先后顺序的,因为id层层相扣。
我们更新一次数据涉及到很多方法,为什么这么说呢?因为在一个表单里面,你修改数据的时候可能是新增了一个数据,也有可能是删除了一个数据,也有可能是修改了一个数据,但是如果我们把增删改的方法都添加到后台业务逻辑当中,那这个代码量是相当大,为了方便我们倒不如直接把原来的表删了,然后把数据重新新增上去。如果涉及很多数据表,我们要考虑这些数据表操作的先后顺序,是先操作哪个表,然后再操作哪个表,一般我们的规则就是删除的时候,先删子表,再删主表。新增的时候,先新增主表,再新增子表。
下面我们先从删除开始做起,我们先删除库存表,先来看看这些表的关联数据:
先获取spu的id
才能通过spu的id获取sku的id
然后通过sku的id获取当前数据的stock库存量信息。
虽然传入的spu的id只有一个,但是查出来的sku的id有多个,但是每一个sku的id对应一个库存,所以可以用遍历方法通过每一条sku的id删除库存。
如何通过Spu删除Sku信息呢?我们可以去获取Spu信息然后去删除Sku,
这里解释一下为什么可以通过Spu的id去删除Sku,因为我们在输入表单的时候,
从上面这几张图我们可以看出Spu的生成方式,每一个品牌,商品分类,还有一个Sku列表等等信息生成一个Spu的id,所以我们如果删掉特定一个SpuId对应的所有信息,那么也包括它这个特定的Sku信息,因为在我们的修改编辑的表单窗口中,一个SpuId的所有信息都在表单里面包括Sku列表,所以要更改这个SpuId数据里面的全部信息,删除掉Sku列表也不为过,把新的数据新增上去即可。
我们应该如何去新增Sku这一块呢?
可以看看浏览器,返回的参数,你Sku的数值很多,也是要一个个传进来,所以你需要用遍历方法去传。
所以我们需要用到这个遍历方法,也包括库存,库存也是需要根据Sku的id去新增。但是你可以看到这个方法在其他类里面我们该如何去使用它呢?
我们可以采用提炼的方法,也就是把这个方法单独提炼出来作为一个函数,给他取上函数名,函数名就是这个方法的作用,然后我们再在自己的那里面去使用这个函数。
可以看到这个方法没了,变成了这样,这不就是简洁多了吗?
因为在同一个类里面,所以我们直接用this就可以调用。
最后两个我们就直接进行更新就行了。
可以看到他这个更新方法的介绍,为什么我们不直接把这个更新方法用在更新SKU和库存Store上呢?因为Sku和库存都是列表型的,而我们这个方法只适用于某一条数据,所以不太适合。
但是这里要注意,有些东西是不能更新的,比如创建时间,最后一次更新时间,是否上架,是否有效等等。
所以我们要设置成这样,除了最后一次修改时间能改之外,其他的都要设置为null,为什么要设置为null呢?因为要防止别人去篡改。
最后还有个事务不要忘记了
测试一下,点击保存
本文地址:https://blog.csdn.net/Andre_dong/article/details/109642892
上一篇: Android--APP性能测试工具GT的使用总结
下一篇: 推荐系统--系统架构