1.编辑按钮点击事件
在商品详情页,每一个商品后面,都会有一个编辑按钮:
点击这个按钮,就会打开一个商品编辑窗口,我们看下它所绑定的点击事件:(在item/Goods.vue)
对应的方法:
因为在商品列表页面,只有spu的基本信息:id、标题、品牌、商品分类等。比较复杂的商品详情(spuDetail)和sku信息都没有,编辑页面要回显数据,就需要查询这些内容。
-
请求方式:GET
-
请求路径:/spu/detail/{id}
-
请求参数:id,应该是spu的id
-
** * 根据spuid查询SpuDetail信息 * @param spuId * @return */ @GetMapping("spu/detail/{spuId}") public ResponseEntity<SpuDetail> querySpuDetailBySpuId(@PathVariable("spuId")Long spuId){ SpuDetail spuDetail = this.goodsService.querySpuDetailBySpuId(spuId); if (spuDetail == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(spuDetail); }
(2)GoodsServiceImpl中添加方法
/** * 根据spuId查询spuDetail * @param spuId * @return */ @Override public SpuDetail querySpuDetailBySpuId(Long spuId) { return this.spuDetailMapper.selectByPrimaryKey(spuId); }
3.查询Sku
分析:
-
-
请求路径:/sku/list
-
请求参数:id,应该是spu的id
-
(1)在GoodsController中添加方法
/** * 根据spuid查询sku相关信息 * @param spuId * @return */ @GetMapping("sku/list") public ResponseEntity<List<Sku>> querySkusBySpuId(@RequestParam("id")Long spuId){ List<Sku> skus = this.goodsService.querySkusBySpuId(spuId); if (CollectionUtils.isEmpty(skus)) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(skus); }
(2)GoodsServiceImpl中添加方法
/** * 根据spuId查询sku的集合 * @param spuId * @return */ public List<Sku> querySkusBySpuId(Long spuId) { Sku sku = new Sku(); sku.setSpuId(spuId); List<Sku> skus = this.skuMapper.select(sku); skus.forEach(s -> { Stock stock = this.stockMapper.selectByPrimaryKey(s.getId()); s.setStock(stock.getStock()); }); return skus; }
4.页面回显效果
重启微服务
5.商品修改后台代码实现
随便修改点数据,然后点击保存。接下来,我们编写后台,实现修改商品接口。
(1)GoodsController
-
-
请求路径:/
-
请求参数:Spu对象
-
/** * 修改商品 * @param spuBo * @return */ @PutMapping("goods") public ResponseEntity<Void> updateGoods(@RequestBody SpuBo spuBo){ this.goodsService.updateGoods(spuBo); return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); }
(2)GoodsServiceImpl中添加方法
@Override @Transactional public void updateGoods(SpuBo spu) { // 查询以前sku Sku sku=new Sku(); sku.setSpuId(spu.getId()); List<Sku> skus = this.skuMapper.select(sku); // 如果以前存在,则删除 if(!CollectionUtils.isEmpty(skus)) { List<Long> ids = skus.stream().map(s -> s.getId()).collect(Collectors.toList()); // 删除以前库存 Example example = new Example(Stock.class); example.createCriteria().andIn("skuId", ids); this.stockMapper.deleteByExample(example); // 删除以前的sku Sku record = new Sku(); record.setSpuId(spu.getId()); this.skuMapper.delete(record); } // 新增sku和库存 saveSkuAndStock(spu); // 更新spu spu.setLastUpdateTime(new Date()); spu.setCreateTime(null); //不能更新的内容,设置为null spu.setValid(null); spu.setSaleable(null); this.spuMapper.updateByPrimaryKeySelective(spu); // 更新spu详情 this.spuDetailMapper.updateByPrimaryKeySelective(spu.getSpuDetail()); }
6.最终效果图
查看数据库: