修复了商品规格参数和销售属性混乱、商品上架页面销售属性自定义不显示、新增规格属性关联时关联保存出错bug

develop
ddyd 1 week ago
parent 7c7d2ef980
commit 0f5db1893a

@ -5,11 +5,7 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.bookstore.bookmall.coupon.entity.SpuBoundsEntity;
import com.bookstore.bookmall.coupon.service.SpuBoundsService;
@ -57,7 +53,7 @@ public class SpuBoundsController {
/**
*
*/
@RequestMapping("/save")
@PostMapping("/save")
//@RequiresPermissions("coupon:spubounds:save")
public R save(@RequestBody SpuBoundsEntity spuBounds){
spuBoundsService.save(spuBounds);

@ -4,6 +4,7 @@ import java.util.Arrays;
import java.util.Map;
import com.bookstore.bookmall.product.vo.SpuSaveVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -59,8 +60,10 @@ public class SpuInfoController {
*/
@RequestMapping("/save")
//@RequiresPermissions("product:spuinfo:save")
public R save(@RequestBody SpuInfoEntity spuInfo){
spuInfoService.save(spuInfo);
public R save(@RequestBody SpuSaveVo vo){
//spuInfoService.save(spuInfo);
spuInfoService.saveSpuInfo(vo);
return R.ok();
}

@ -0,0 +1,14 @@
package com.bookstore.bookmall.product.feign;
import com.bookstore.common.to.SpuBoundsTo;
import com.bookstore.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient("book-coupon")
public interface CouponFeignService {
@PostMapping("/coupon/spubounds/save")
R saveSpuBounds(@RequestBody SpuBoundsTo spuBoundsTo);
}

@ -5,6 +5,7 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/*
@ -46,6 +47,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableFeignClients(basePackages = "com.bookstore.bookmall.product.feign")
@MapperScan("com.bookstore.bookmall.product.dao")
@EnableDiscoveryClient
@SpringBootApplication

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.bookstore.common.utils.PageUtils;
import com.bookstore.bookmall.product.entity.ProductAttrValueEntity;
import java.util.List;
import java.util.Map;
/**
@ -16,5 +17,7 @@ import java.util.Map;
public interface ProductAttrValueService extends IService<ProductAttrValueEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveProductAttr(List<ProductAttrValueEntity> collect);
}

@ -16,5 +16,7 @@ import java.util.Map;
public interface SkuInfoService extends IService<SkuInfoEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveSkuInfo(SkuInfoEntity skuInfoEntity);
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.bookstore.common.utils.PageUtils;
import com.bookstore.bookmall.product.entity.SpuImagesEntity;
import java.util.List;
import java.util.Map;
/**
@ -16,5 +17,7 @@ import java.util.Map;
public interface SpuImagesService extends IService<SpuImagesEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveImages(Long id, List<String> images);
}

@ -16,5 +16,7 @@ import java.util.Map;
public interface SpuInfoDescService extends IService<SpuInfoDescEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveSpuInfoDesc(SpuInfoDescEntity descEntity);
}

@ -1,6 +1,7 @@
package com.bookstore.bookmall.product.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bookstore.bookmall.product.vo.SpuSaveVo;
import com.bookstore.common.utils.PageUtils;
import com.bookstore.bookmall.product.entity.SpuInfoEntity;
@ -16,5 +17,9 @@ import java.util.Map;
public interface SpuInfoService extends IService<SpuInfoEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveSpuInfo(SpuSaveVo vo);
void saveBaseSpuInfo(SpuInfoEntity spuInfoEntity);
}

@ -1,6 +1,8 @@
package com.bookstore.bookmall.product.service.impl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -26,4 +28,9 @@ public class ProductAttrValueServiceImpl extends ServiceImpl<ProductAttrValueDao
return new PageUtils(page);
}
@Override
public void saveProductAttr(List<ProductAttrValueEntity> collect) {
this.saveBatch(collect);
}
}

@ -26,4 +26,9 @@ public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoDao, SkuInfoEntity> i
return new PageUtils(page);
}
@Override
public void saveSkuInfo(SkuInfoEntity skuInfoEntity) {
this.baseMapper.insert(skuInfoEntity);
}
}

@ -1,7 +1,12 @@
package com.bookstore.bookmall.product.service.impl;
import org.springframework.stereotype.Service;
import java.awt.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -26,4 +31,19 @@ public class SpuImagesServiceImpl extends ServiceImpl<SpuImagesDao, SpuImagesEnt
return new PageUtils(page);
}
@Override
public void saveImages(Long id, List<String> images) {
if (images != null && images.size() > 0) {
List<SpuImagesEntity> collect = images.stream().map((image) -> {
SpuImagesEntity ImagesEntity = new SpuImagesEntity();
ImagesEntity.setId(id);
ImagesEntity.setImgUrl(image);
return ImagesEntity;
}).collect(Collectors.toList());
this.saveBatch(collect);
}
}
}

@ -11,6 +11,7 @@ import com.bookstore.common.utils.Query;
import com.bookstore.bookmall.product.dao.SpuInfoDescDao;
import com.bookstore.bookmall.product.entity.SpuInfoDescEntity;
import com.bookstore.bookmall.product.service.SpuInfoDescService;
import org.springframework.transaction.annotation.Transactional;
@Service("spuInfoDescService")
@ -26,4 +27,10 @@ public class SpuInfoDescServiceImpl extends ServiceImpl<SpuInfoDescDao, SpuInfoD
return new PageUtils(page);
}
@Transactional
@Override
public void saveSpuInfoDesc(SpuInfoDescEntity descEntity) {
this.baseMapper.insert(descEntity);
}
}

@ -1,7 +1,22 @@
package com.bookstore.bookmall.product.service.impl;
import com.bookstore.bookmall.product.entity.*;
import com.bookstore.bookmall.product.feign.CouponFeignService;
import com.bookstore.bookmall.product.service.*;
import com.bookstore.bookmall.product.vo.*;
import com.bookstore.common.to.SpuBoundsTo;
import com.fasterxml.jackson.databind.annotation.JsonAppend;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -9,13 +24,29 @@ import com.bookstore.common.utils.PageUtils;
import com.bookstore.common.utils.Query;
import com.bookstore.bookmall.product.dao.SpuInfoDao;
import com.bookstore.bookmall.product.entity.SpuInfoEntity;
import com.bookstore.bookmall.product.service.SpuInfoService;
import org.springframework.transaction.annotation.Transactional;
@Service("spuInfoService")
public class SpuInfoServiceImpl extends ServiceImpl<SpuInfoDao, SpuInfoEntity> implements SpuInfoService {
@Autowired
SpuInfoDescService DescService;
@Autowired
SpuImagesService imagesService;
@Autowired
AttrService attrService;
@Autowired
ProductAttrValueService valueService;
@Autowired
SkuInfoService skuInfoService;
@Autowired
SkuImagesService skuImagesService;
@Autowired
SkuSaleAttrValueService skuSaleAttrValueService;
@Autowired
CouponFeignService couponFeignService;
@Override
public PageUtils queryPage(Map<String, Object> params) {
IPage<SpuInfoEntity> page = this.page(
@ -26,4 +57,118 @@ public class SpuInfoServiceImpl extends ServiceImpl<SpuInfoDao, SpuInfoEntity> i
return new PageUtils(page);
}
//商品保存
//基本信息在pms_spu_info
//描述信息在pms_spu_info_desc
//sku: spu销售属性笛卡尔积得出了sku
@Transactional
@Override
public void saveSpuInfo(SpuSaveVo vo) {
//1、保存基本信息 pms_spu_info
SpuInfoEntity spuInfoEntity = new SpuInfoEntity();
BeanUtils.copyProperties(vo, spuInfoEntity);
spuInfoEntity.setCreateTime(new Date());
spuInfoEntity.setUpdateTime(new Date());
this.saveBaseSpuInfo(spuInfoEntity);
//2、保存spu的描述图片 pms_spu_images
List<String> decript = vo.getDecript();
SpuInfoDescEntity DescEntity = new SpuInfoDescEntity();
DescEntity.setSpuId(spuInfoEntity.getId());
DescEntity.setDecript(String.join(",",decript));
DescService.saveSpuInfoDesc(DescEntity);
//3、保存spu的图片集 pms_spu_images
List<String> images = vo.getImages();
imagesService.saveImages(spuInfoEntity.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 byId = attrService.getById(attr.getAttrId());
valueEntity.setAttrName(byId.getAttrName());
valueEntity.setAttrValue(attr.getAttrValues());
valueEntity.setQuickShow(attr.getShowDesc());
valueEntity.setSpuId(spuInfoEntity.getId());
return valueEntity;
}).collect(Collectors.toList());
valueService.saveProductAttr(collect);
//保存spu的积分信息mall-sms-> sms_spu_bounds
Bounds bounds = vo.getBounds();
SpuBoundsTo spuBoundsTo = new SpuBoundsTo();
BeanUtils.copyProperties(bounds, spuBoundsTo);
spuBoundsTo.setSpuId(spuInfoEntity.getId());
couponFeignService.saveSpuBounds(spuBoundsTo);
//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;
//5.1 sku的基本属性(pms_sku_info)id 名字标题副标题价格默认图片分类id
SkuInfoEntity skuInfoEntity = new SkuInfoEntity();
BeanUtils.copyProperties(item, skuInfoEntity);
skuInfoEntity.setBrandId(spuInfoEntity.getBrandId());
skuInfoEntity.setCatalogId(spuInfoEntity.getCatalogId());
skuInfoEntity.setSaleCount(0L);
skuInfoEntity.setSpuId(spuInfoEntity.getId());
skuInfoEntity.setSkuDefaultImg(defaultImg);
skuInfoService.saveSkuInfo(skuInfoEntity);
//5.2 sku的图片信息: pms_sku_images
Long skuId = skuInfoEntity.getSkuId();
List<SkuImagesEntity> skuImagesEntities = item.getImages().stream().map(image -> {
SkuImagesEntity skuImagesEntity = new SkuImagesEntity();
skuImagesEntity.setSkuId(skuId);
skuImagesEntity.setImgUrl(image.getImgUrl());
skuImagesEntity.setDefaultImg(image.getDefaultImg());
return skuImagesEntity;
}).collect(Collectors.toList());
skuImagesService.saveBatch(skuImagesEntities);
//5.3 sku的销售属性信息 pms_sku_sale_attr_value
List<Attr> attr = item.getAttr();
List<SkuSaleAttrValueEntity> skuSaleAttrValueEntities = attr.stream().map(a -> {
SkuSaleAttrValueEntity skuSaleAttrValueEntity = new SkuSaleAttrValueEntity();
BeanUtils.copyProperties(skuSaleAttrValueEntity, a);
skuSaleAttrValueEntity.setSkuId(skuId);
return skuSaleAttrValueEntity;
}).collect(Collectors.toList());
skuSaleAttrValueService.saveBatch(skuSaleAttrValueEntities);
//5.4 sku的优惠满减信息
});
}
}
public void saveBaseSpuInfo(SpuInfoEntity spuInfoEntity) {
this.baseMapper.insert(spuInfoEntity);
}
}

@ -0,0 +1,21 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class Attr {
private Long attrId;
private String attrName;
private String attrValue;
}

@ -0,0 +1,23 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class BaseAttrs {
private Long attrId;
private String attrValues;
private int showDesc;
}

@ -0,0 +1,23 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class Bounds {
private BigDecimal buyBounds;
private BigDecimal growBounds;
}

@ -0,0 +1,21 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class Images {
private String imgUrl;
private int defaultImg;
}

@ -0,0 +1,23 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class MemberPrice {
private Long id;
private String name;
private BigDecimal price;
}

@ -0,0 +1,35 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class Skus {
private List<Attr> attr;
private String skuName;
private BigDecimal price;
private String skuTitle;
private String skuSubtitle;
private List<Images> images;
private List<String> descar;
private int fullCount;
private BigDecimal discount;
private int countStatus;
private BigDecimal fullPrice;
private BigDecimal reducePrice;
private int priceStatus;
private List<MemberPrice> memberPrice;
}

@ -0,0 +1,34 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.bookmall.product.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class SpuSaveVo {
private String spuName;
private String spuDescription;
private Long catalogId;
private Long brandId;
private BigDecimal weight;
private int publishStatus;
private List<String> decript;
private List<String> images;
private Bounds bounds;
private List<BaseAttrs> baseAttrs;
private List<Skus> skus;
}

@ -0,0 +1,23 @@
/**
* Copyright 2019 bejson.com
*/
package com.bookstore.common.to;
import lombok.Data;
import java.math.BigDecimal;
/**
* Auto-generated: 2019-11-26 10:50:34
*
* @author bejson.com (i@bejson.com)
* @website http://www.bejson.com/java2pojo/
*/
@Data
public class MemberPrice {
private Long id;
private String name;
private BigDecimal price;
}

@ -0,0 +1,16 @@
package com.bookstore.common.to;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class skuReductionTo {
private int fullCount;
private BigDecimal discount;
private int countStatus;
private BigDecimal fullPrice;
private BigDecimal reducePrice;
private int priceStatus;
}

@ -0,0 +1,12 @@
package com.bookstore.common.to;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SpuBoundsTo {
private Long spuId;
private BigDecimal buyBounds;
private BigDecimal growBounds;
}
Loading…
Cancel
Save