Commit af71a19241c37271ec5241cd6b9908ff8ea8cb79

Authored by YunaiV
1 parent 964f8cb3

trade:【商品】sku 表增加 spu_name 字段,冗余

yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/sku/dto/ProductSkuRespDTO.java
@@ -19,7 +19,7 @@ public class ProductSkuRespDTO { @@ -19,7 +19,7 @@ public class ProductSkuRespDTO {
19 */ 19 */
20 private Long id; 20 private Long id;
21 /** 21 /**
22 - * 商品 SKU 名字 22 + * SPU 名字
23 */ 23 */
24 private String name; 24 private String name;
25 /** 25 /**
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/sku/ProductSkuConvert.java
@@ -32,7 +32,13 @@ public interface ProductSkuConvert { @@ -32,7 +32,13 @@ public interface ProductSkuConvert {
32 32
33 List<ProductSkuRespVO> convertList(List<ProductSkuDO> list); 33 List<ProductSkuRespVO> convertList(List<ProductSkuDO> list);
34 34
35 - List<ProductSkuDO> convertSkuDOList(List<ProductSkuCreateOrUpdateReqVO> list); 35 + List<ProductSkuDO> convertList06(List<ProductSkuCreateOrUpdateReqVO> list);
  36 +
  37 + default List<ProductSkuDO> convertList06(List<ProductSkuCreateOrUpdateReqVO> list, String spuName) {
  38 + List<ProductSkuDO> result = convertList06(list);
  39 + result.forEach(item -> item.setSpuName(spuName));
  40 + return result;
  41 + }
36 42
37 ProductSkuRespDTO convert02(ProductSkuDO bean); 43 ProductSkuRespDTO convert02(ProductSkuDO bean);
38 44
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/sku/ProductSkuDO.java
@@ -36,17 +36,18 @@ public class ProductSkuDO extends BaseDO { @@ -36,17 +36,18 @@ public class ProductSkuDO extends BaseDO {
36 @TableId 36 @TableId
37 private Long id; 37 private Long id;
38 /** 38 /**
39 - * 商品 SKU 名字  
40 - */  
41 - @Deprecated // TODO 芋艿:参考有赞,不需要 sku 的标题  
42 - private String name;  
43 - /**  
44 * SPU 编号 39 * SPU 编号
45 * <p> 40 * <p>
46 * 关联 {@link ProductSpuDO#getId()} 41 * 关联 {@link ProductSpuDO#getId()}
47 */ 42 */
48 private Long spuId; 43 private Long spuId;
49 /** 44 /**
  45 + * SPU 名字
  46 + *
  47 + * 冗余 {@link ProductSkuDO#getSpuName()}
  48 + */
  49 + private String spuName;
  50 + /**
50 * 规格值数组,JSON 格式 51 * 规格值数组,JSON 格式
51 */ 52 */
52 @TableField(typeHandler = PropertyTypeHandler.class) 53 @TableField(typeHandler = PropertyTypeHandler.class)
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuService.java
@@ -55,17 +55,19 @@ public interface ProductSkuService { @@ -55,17 +55,19 @@ public interface ProductSkuService {
55 * 批量创建 SKU 55 * 批量创建 SKU
56 * 56 *
57 * @param spuId 商品 SPU 编号 57 * @param spuId 商品 SPU 编号
  58 + * @para spuName 商品 SPU 名称
58 * @param list SKU 对象集合 59 * @param list SKU 对象集合
59 */ 60 */
60 - void createSkus(Long spuId, List<ProductSkuCreateOrUpdateReqVO> list); 61 + void createSkus(Long spuId, String spuName, List<ProductSkuCreateOrUpdateReqVO> list);
61 62
62 /** 63 /**
63 * 根据 SPU 编号,批量更新它的 SKU 信息 64 * 根据 SPU 编号,批量更新它的 SKU 信息
64 * 65 *
65 * @param spuId SPU 编码 66 * @param spuId SPU 编码
  67 + * @para spuName 商品 SPU 名称
66 * @param skus SKU 的集合 68 * @param skus SKU 的集合
67 */ 69 */
68 - void updateSkus(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skus); 70 + void updateSkus(Long spuId, String spuName, List<ProductSkuCreateOrUpdateReqVO> skus);
69 71
70 /** 72 /**
71 * 更新 SKU 库存(增量) 73 * 更新 SKU 库存(增量)
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java
@@ -119,9 +119,9 @@ public class ProductSkuServiceImpl implements ProductSkuService { @@ -119,9 +119,9 @@ public class ProductSkuServiceImpl implements ProductSkuService {
119 } 119 }
120 120
121 @Override 121 @Override
122 - public void createSkus(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skuCreateReqList) { 122 + public void createSkus(Long spuId, String spuName, List<ProductSkuCreateOrUpdateReqVO> skuCreateReqList) {
123 // 批量插入 SKU 123 // 批量插入 SKU
124 - List<ProductSkuDO> skuDOList = ProductSkuConvert.INSTANCE.convertSkuDOList(skuCreateReqList); 124 + List<ProductSkuDO> skuDOList = ProductSkuConvert.INSTANCE.convertList06(skuCreateReqList, spuName);
125 skuDOList.forEach(v -> v.setSpuId(spuId)); 125 skuDOList.forEach(v -> v.setSpuId(spuId));
126 productSkuMapper.insertBatch(skuDOList); 126 productSkuMapper.insertBatch(skuDOList);
127 } 127 }
@@ -148,7 +148,7 @@ public class ProductSkuServiceImpl implements ProductSkuService { @@ -148,7 +148,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
148 148
149 @Override 149 @Override
150 @Transactional 150 @Transactional
151 - public void updateSkus(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skus) { 151 + public void updateSkus(Long spuId, String spuName, List<ProductSkuCreateOrUpdateReqVO> skus) {
152 // 查询 SPU 下已经存在的 SKU 的集合 152 // 查询 SPU 下已经存在的 SKU 的集合
153 List<ProductSkuDO> existsSkus = productSkuMapper.selectListBySpuId(spuId); 153 List<ProductSkuDO> existsSkus = productSkuMapper.selectListBySpuId(spuId);
154 // 构建规格与 SKU 的映射关系; 154 // 构建规格与 SKU 的映射关系;
@@ -168,7 +168,7 @@ public class ProductSkuServiceImpl implements ProductSkuService { @@ -168,7 +168,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
168 List<ProductSkuDO> updateSkus = new ArrayList<>(); 168 List<ProductSkuDO> updateSkus = new ArrayList<>();
169 List<Long> deleteSkus = new ArrayList<>(); 169 List<Long> deleteSkus = new ArrayList<>();
170 170
171 - List<ProductSkuDO> allUpdateSkus = ProductSkuConvert.INSTANCE.convertSkuDOList(skus); 171 + List<ProductSkuDO> allUpdateSkus = ProductSkuConvert.INSTANCE.convertList06(skus, spuName);
172 allUpdateSkus.forEach(p -> { 172 allUpdateSkus.forEach(p -> {
173 String propertiesKey = p.getProperties() == null? "null": p.getProperties().stream().map(m -> String.valueOf(m.getValueId())).collect(Collectors.joining()); 173 String propertiesKey = p.getProperties() == null? "null": p.getProperties().stream().map(m -> String.valueOf(m.getValueId())).collect(Collectors.joining());
174 // 1、找得到的,进行更新 174 // 1、找得到的,进行更新
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java
@@ -79,7 +79,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -79,7 +79,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
79 spu.setTotalStock(CollectionUtils.getSumValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getStock, Integer::sum)); 79 spu.setTotalStock(CollectionUtils.getSumValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getStock, Integer::sum));
80 productSpuMapper.insert(spu); 80 productSpuMapper.insert(spu);
81 // 插入 SKU 81 // 插入 SKU
82 - productSkuService.createSkus(spu.getId(), skuCreateReqList); 82 + productSkuService.createSkus(spu.getId(), spu.getName(), skuCreateReqList);
83 // 返回 83 // 返回
84 return spu.getId(); 84 return spu.getId();
85 } 85 }
@@ -105,7 +105,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -105,7 +105,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
105 updateObj.setTotalStock(CollectionUtils.getSumValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getStock, Integer::sum)); 105 updateObj.setTotalStock(CollectionUtils.getSumValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getStock, Integer::sum));
106 productSpuMapper.updateById(updateObj); 106 productSpuMapper.updateById(updateObj);
107 // 批量更新 SKU 107 // 批量更新 SKU
108 - productSkuService.updateSkus(updateObj.getId(), updateReqVO.getSkus()); 108 + productSkuService.updateSkus(updateObj.getId(), updateObj.getName(), updateReqVO.getSkus());
109 } 109 }
110 110
111 @Override 111 @Override
yudao-ui-admin/src/views/mall/product/spu/save.vue
@@ -80,15 +80,6 @@ @@ -80,15 +80,6 @@
80 <ImageUpload v-model="scope.row.picUrl" :limit="1" :isShowTip="false" style="width: 100px; height: 50px"/> 80 <ImageUpload v-model="scope.row.picUrl" :limit="1" :isShowTip="false" style="width: 100px; height: 50px"/>
81 </template> 81 </template>
82 </el-table-column> 82 </el-table-column>
83 - <template v-if="this.specSwitch">  
84 - <el-table-column label="sku名称" :render-header="addRedStar" key="91">  
85 - <template slot-scope="scope">  
86 - <el-form-item :prop="'rates.'+ scope.$index + '.name'" :rules="[{required: true, trigger: 'change'}]">  
87 - <el-input v-model="scope.row.name"/>  
88 - </el-form-item>  
89 - </template>  
90 - </el-table-column>  
91 - </template>  
92 <el-table-column label="市场价(元)" :render-header="addRedStar" key="92"> 83 <el-table-column label="市场价(元)" :render-header="addRedStar" key="92">
93 <template slot-scope="scope"> 84 <template slot-scope="scope">
94 <el-form-item :prop="'rates.'+ scope.$index + '.marketPrice'" :rules="[{required: true, trigger: 'change'}]"> 85 <el-form-item :prop="'rates.'+ scope.$index + '.marketPrice'" :rules="[{required: true, trigger: 'change'}]">