穀粒商城day61-商品服務-API-新增商品-儲存SPU基本資訊+儲存SKU基本資訊+呼叫遠端服務儲存優惠等資訊
1.調整之前生成的實體類
把ID相關的欄位型別都改為Long,把積分價格等相關的欄位型別都改為BigDecimal
然後用@Data註解替代get,set方法
如下圖
2.核心程式碼
service層
SpuInfoServiceImpl
/**
* //TODO 高階部分完善
* @param vo
*/
@Transactional
@Override
public void saveSpuInfo(SpuSaveVo vo) {
//1、儲存spu基本資訊 pms_spu_info
SpuInfoEntity infoEntity = new SpuInfoEntity();
BeanUtils.copyProperties(vo,infoEntity);
infoEntity.setCreateTime(new Date());
infoEntity.setUpdateTime(new Date());
this.saveBaseSpuInfo(infoEntity);
//2、儲存Spu的描述圖片 pms_spu_info_desc
List<String> decript = vo.getDecript();
SpuInfoDescEntity descEntity = new SpuInfoDescEntity();
descEntity.setSpuId(infoEntity.getId());
descEntity.setDecript(String.join(",",decript));
spuInfoDescService.saveSpuInfoDesc(descEntity);
//3、儲存spu的圖片集 pms_spu_images
List<String> images = vo.getImages();
imagesService.saveImages(infoEntity.getId(),images);
//4、儲存spu的規格引數;pms_product_attr_value
List<BaseAttrs> baseAttrs = vo.getBaseAttrs();
List<ProductAttrValueEntity> collect = baseAttrs.stream().map(attr -> {
ProductAttrValueEntity valueEntity = new ProductAttrValueEntity();
valueEntity.setAttrId(attr.getAttrId());
AttrEntity id = attrService.getById(attr.getAttrId());
valueEntity.setAttrName(id.getAttrName());
valueEntity.setAttrValue(attr.getAttrValues());
valueEntity.setQuickShow(attr.getShowDesc());
valueEntity.setSpuId(infoEntity.getId());
return valueEntity;
}).collect(Collectors.toList());
attrValueService.saveProductAttr(collect);
//5、儲存spu的積分資訊;gulimall_sms->sms_spu_bounds
Bounds bounds = vo.getBounds();
SpuBoundTo spuBoundTo = new SpuBoundTo();
BeanUtils.copyProperties(bounds,spuBoundTo);
spuBoundTo.setSpuId(infoEntity.getId());
R r = couponFeignService.saveSpuBounds(spuBoundTo);
if(r.getCode() != 0){
log.error("遠端儲存spu積分資訊失敗");
}
//5、儲存當前spu對應的所有sku資訊;
List<Skus> skus = vo.getSkus();
if(skus!=null && skus.size()>0){
skus.forEach(item->{
String defaultImg = "";
for (Images image : item.getImages()) {
if(image.getDefaultImg() == 1){
defaultImg = image.getImgUrl();
}
}
// private String skuName;
// private BigDecimal price;
// private String skuTitle;
// private String skuSubtitle;
SkuInfoEntity skuInfoEntity = new SkuInfoEntity();
BeanUtils.copyProperties(item,skuInfoEntity);
skuInfoEntity.setBrandId(infoEntity.getBrandId());
skuInfoEntity.setCatalogId(infoEntity.getCatalogId());
skuInfoEntity.setSaleCount(0L);
skuInfoEntity.setSpuId(infoEntity.getId());
skuInfoEntity.setSkuDefaultImg(defaultImg);
//5.1)、sku的基本資訊;pms_sku_info
skuInfoService.saveSkuInfo(skuInfoEntity);
Long skuId = skuInfoEntity.getSkuId();
List<SkuImagesEntity> imagesEntities = item.getImages().stream().map(img -> {
SkuImagesEntity skuImagesEntity = new SkuImagesEntity();
skuImagesEntity.setSkuId(skuId);
skuImagesEntity.setImgUrl(img.getImgUrl());
skuImagesEntity.setDefaultImg(img.getDefaultImg());
return skuImagesEntity;
}).filter(entity->{
//返回true就是需要,false就是剔除
return !StringUtils.isEmpty(entity.getImgUrl());
}).collect(Collectors.toList());
//5.2)、sku的圖片資訊;pms_sku_image
skuImagesService.saveBatch(imagesEntities);
//TODO 沒有圖片路徑的無需儲存
List<Attr> attr = item.getAttr();
List<SkuSaleAttrValueEntity> skuSaleAttrValueEntities = attr.stream().map(a -> {
SkuSaleAttrValueEntity attrValueEntity = new SkuSaleAttrValueEntity();
BeanUtils.copyProperties(a, attrValueEntity);
attrValueEntity.setSkuId(skuId);
return attrValueEntity;
}).collect(Collectors.toList());
//5.3)、sku的銷售屬性資訊:pms_sku_sale_attr_value
skuSaleAttrValueService.saveBatch(skuSaleAttrValueEntities);
// //5.4)、sku的優惠、滿減等資訊;gulimall_sms->sms_sku_ladder\sms_sku_full_reduction\sms_member_price
SkuReductionTo skuReductionTo = new SkuReductionTo();
BeanUtils.copyProperties(item,skuReductionTo);
skuReductionTo.setSkuId(skuId);
if(skuReductionTo.getFullCount() >0 || skuReductionTo.getFullPrice().compareTo(new BigDecimal("0")) == 1){
R r1 = couponFeignService.saveSkuReduction(skuReductionTo);
if(r1.getCode() != 0){
log.error("遠端儲存sku優惠資訊失敗");
}
}
});
}
}
介面,為了呼叫遠端服務
package com.atguigu.gulimall.product.feign;
import com.atguigu.common.to.SkuReductionTo;
import com.atguigu.common.to.SpuBoundTo;
import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
/**
* 1、CouponFeignService.saveSpuBounds(spuBoundTo);
* 1)、@RequestBody將這個物件轉為json。
* 2)、找到gulimall-coupon服務,給/coupon/spubounds/save傳送請求。
* 將上一步轉的json放在請求體位置,傳送請求;
* 3)、對方服務收到請求。請求體裡有json資料。
* (@RequestBody SpuBoundsEntity spuBounds);將請求體的json轉為SpuBoundsEntity;
* 只要json資料模型是相容的。雙方服務無需使用同一個to
* @param spuBoundTo
* @return
*/
@PostMapping("/coupon/spubounds/save")
R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);
@PostMapping("/coupon/skufullreduction/saveinfo")
R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
SkuFullReductionServiceImpl
@Override
public void saveSkuReduction(SkuReductionTo skuReductionTo) {
SkuLadderEntity skuLadderEntity = new SkuLadderEntity();
skuLadderEntity.setSkuId(skuReductionTo.getSkuId());
skuLadderEntity.setDiscount(skuReductionTo.getDiscount());
skuLadderEntity.setAddOther(skuReductionTo.getCountStatus());
skuLadderEntity.setFullCount(skuReductionTo.getFullCount());
SkuFullReductionEntity skuFullReductionEntity = new SkuFullReductionEntity();
BeanUtils.copyProperties(skuReductionTo,skuFullReductionEntity);
this.save(skuFullReductionEntity);
List<MemberPrice> memberPrices = skuReductionTo.getMemberPrice();
List<MemberPriceEntity> memberPriceEntities = memberPrices.stream().map(memberPrice -> {
MemberPriceEntity memberPriceEntity = new MemberPriceEntity();
memberPriceEntity.setAddOther(1);
memberPriceEntity.setMemberLevelName(memberPrice.getName());
memberPriceEntity.setMemberPrice(memberPrice.getPrice());
memberPriceEntity.setMemberLevelId(memberPrice.getId());
memberPriceEntity.setSkuId(skuReductionTo.getSkuId());
return memberPriceEntity;
}).filter(item ->{
return item.getMemberPrice().compareTo(new BigDecimal("0")) == 1;
}).collect(Collectors.toList());
memberPriceService.saveBatch(memberPriceEntities);
}
3.測試
新增compound用於一次性批量啟動
設定記憶體
開始新增
基本資訊
基本引數
設定sku資訊
折扣積分啥的
後臺接收到的vo
資料庫中為了檢視未提交的資料,可修改隔離級別為讀未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
相關文章
- 本地MinIO儲存服務Java遠端呼叫上傳檔案Java
- 儲存服務質量優化優化
- 從物件儲存服務同步資料到Elasticsearch物件Elasticsearch
- 服務端指南 資料儲存篇 | MySQL(02) 儲存引擎的 InnoDB 與 MyISAM 之爭服務端MySql儲存引擎
- NFS共享儲存服務NFS
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- 華為雲學院乾貨:物件儲存服務:便捷管理儲存資源物件
- mysql儲存地理資訊的方法MySql
- NFS儲存服務及部署NFS
- 服務端指南 資料儲存篇 | 聊聊 MongoDB 使用場景服務端MongoDB
- 服務端指南 資料儲存篇 | 聊聊 Redis 使用場景服務端Redis
- 訊息資料庫Message DB:PostgreSQL的事件儲存和訊息儲存 - Eventide Blog資料庫SQL事件IDE
- 企業如何做好資訊儲存
- 資訊的儲存及整數表示
- 小米大資料儲存服務的資料治理實踐大資料
- 資料儲存--檔案儲存
- 物件儲存服務的Lambda特性物件
- 物件儲存服務的加密特性物件加密
- 密碼、手機等隱私資訊的儲存方式密碼
- redis儲存使用者登入資訊Redis
- Laravel 自定義配置資訊的儲存方式Laravel
- 數值資訊的機器級儲存
- 為什麼京東上的商品評論視訊不能直接儲存?怎麼樣可以快速儲存
- 物件儲存服務的壓縮特性物件
- 物件儲存服務的事件通知特性物件事件
- 物件儲存服務OBS obsfs掛載物件
- 使用MinIO搭建物件儲存服務物件
- 物件儲存服務(Object Storage Service,OBS)物件Object
- 【RocketMQ】訊息的儲存MQ
- 快速整合華為AGC雲端儲存服務-AndroidGCAndroid
- Cocos|快速整合華為AGC雲端儲存服務GC
- Nodejs:使用Mongodb儲存和提供後端CRD服務NodeJSMongoDB後端
- 谷歌瀏覽器檢視本地儲存資訊谷歌瀏覽器
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程
- 騰訊雲物件儲存COS新品釋出——智慧分層儲存,自動優化您的儲存成本物件優化
- 華為雲OBS物件儲存服務:值得擁有的貼心的儲存管家物件
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 資料儲存(歸檔解檔,沙河儲存)