From 4a2cb33cd7d295b6d98bcb3ab0335793a70ef4fd Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 12 Dec 2022 23:40:23 +0800 Subject: [PATCH] =?UTF-8?q?product=EF=BC=9A=E4=BC=98=E5=8C=96=E5=95=86?= =?UTF-8?q?=E5=93=81=E5=B1=9E=E6=80=A7=E5=80=BC=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProductPropertyValueController.java | 5 ++- .../ProductPropertyAndValueRespVO.java | 6 +-- .../property/ProductPropertyValueService.java | 13 +----- .../ProductPropertyValueServiceImpl.java | 45 +++++++++++-------- .../service/sku/ProductSkuServiceImpl.java | 6 +-- .../service/spu/ProductSpuServiceImpl.java | 7 +-- .../src/api/mall/product/property.js | 14 ++---- .../src/views/mall/product/property/index.vue | 16 +------ .../src/views/mall/product/property/value.vue | 33 +------------- 9 files changed, 46 insertions(+), 99 deletions(-) diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java index cef79e674..fec327946 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.Produc import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValuePageReqVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueUpdateReqVO; +import cn.iocoder.yudao.module.product.convert.propertyvalue.ProductPropertyValueConvert; import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -57,13 +58,13 @@ public class ProductPropertyValueController { @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) @PreAuthorize("@ss.hasPermission('product:property:query')") public CommonResult getProperty(@RequestParam("id") Long id) { - return success(productPropertyValueService.getPropertyValue(id)); + return success(ProductPropertyValueConvert.INSTANCE.convert(productPropertyValueService.getPropertyValue(id))); } @GetMapping("/page") @ApiOperation("获得属性值分页") @PreAuthorize("@ss.hasPermission('product:property:query')") public CommonResult> getPropertyValuePage(@Valid ProductPropertyValuePageReqVO pageVO) { - return success(productPropertyValueService.getPropertyValueListPage(pageVO)); + return success(ProductPropertyValueConvert.INSTANCE.convertPage(productPropertyValueService.getPropertyValuePage(pageVO))); } } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/vo/property/ProductPropertyAndValueRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/vo/property/ProductPropertyAndValueRespVO.java index e9abab56b..a739bc0f2 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/vo/property/ProductPropertyAndValueRespVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/vo/property/ProductPropertyAndValueRespVO.java @@ -3,16 +3,12 @@ package cn.iocoder.yudao.module.product.controller.admin.property.vo.property; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; import java.util.List; @ApiModel("管理后台 - 商品属性项 + 属性值 Response VO") @Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ProductPropertyAndValueRespVO extends ProductPropertyBaseVO { +public class ProductPropertyAndValueRespVO { @ApiModelProperty(value = "属性项的编号", required = true, example = "1024") private Long id; diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueService.java index 8cf4cce2a..605e40d93 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueService.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.product.service.property; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValuePageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueUpdateReqVO; import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO; import cn.iocoder.yudao.module.product.service.property.bo.ProductPropertyValueDetailRespBO; @@ -46,7 +45,7 @@ public interface ProductPropertyValueService { * @param id 编号 * @return 属性值 */ - ProductPropertyValueRespVO getPropertyValue(Long id); + ProductPropertyValueDO getPropertyValue(Long id); /** * 根据属性项编号数组,获得属性值列表 @@ -64,14 +63,6 @@ public interface ProductPropertyValueService { */ List getPropertyValueDetailList(Collection ids); - /** - * 根据属性项编号,获得属性值数组 - * - * @param propertyIds 属性项编号数组 - * @return 属性值 - */ - List getPropertyValueListByPropertyId(List propertyIds); - /** * 根据属性项编号,活的属性值数量 * @@ -86,7 +77,7 @@ public interface ProductPropertyValueService { * @param pageReqVO 查询条件 * @return 属性值的分页 */ - PageResult getPropertyValueListPage(ProductPropertyValuePageReqVO pageReqVO); + PageResult getPropertyValuePage(ProductPropertyValuePageReqVO pageReqVO); /** * 删除指定属性项编号下的属性值们 diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueServiceImpl.java index 8671a40e9..c58d74b95 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueServiceImpl.java @@ -4,14 +4,12 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValuePageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueUpdateReqVO; import cn.iocoder.yudao.module.product.convert.propertyvalue.ProductPropertyValueConvert; import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO; import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO; import cn.iocoder.yudao.module.product.dal.mysql.property.ProductPropertyValueMapper; import cn.iocoder.yudao.module.product.service.property.bo.ProductPropertyValueDetailRespBO; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -24,6 +22,7 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PROPERTY_VALUE_EXISTS; +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.PROPERTY_VALUE_NOT_EXISTS; /** * 商品属性值 Service 实现类 @@ -43,34 +42,47 @@ public class ProductPropertyValueServiceImpl implements ProductPropertyValueServ @Override public Long createPropertyValue(ProductPropertyValueCreateReqVO createReqVO) { + // 校验名字唯一 if (productPropertyValueMapper.selectByName(createReqVO.getPropertyId(), createReqVO.getName()) != null) { throw exception(PROPERTY_VALUE_EXISTS); } - ProductPropertyValueDO convert = ProductPropertyValueConvert.INSTANCE.convert(createReqVO); - productPropertyValueMapper.insert(convert); - return convert.getId(); + + // 新增 + ProductPropertyValueDO value = ProductPropertyValueConvert.INSTANCE.convert(createReqVO); + productPropertyValueMapper.insert(value); + return value.getId(); } @Override public void updatePropertyValue(ProductPropertyValueUpdateReqVO updateReqVO) { - ProductPropertyValueDO productPropertyValueDO = productPropertyValueMapper.selectByName(updateReqVO.getPropertyId(), updateReqVO.getName()); + validatePropertyValueExists(updateReqVO.getId()); + // 校验名字唯一 + ProductPropertyValueDO productPropertyValueDO = productPropertyValueMapper.selectByName + (updateReqVO.getPropertyId(), updateReqVO.getName()); if (productPropertyValueDO != null && !productPropertyValueDO.getId().equals(updateReqVO.getId())) { throw exception(PROPERTY_VALUE_EXISTS); } - ProductPropertyValueDO convert = ProductPropertyValueConvert.INSTANCE.convert(updateReqVO); - productPropertyValueMapper.updateById(convert); + + // 更新 + ProductPropertyValueDO updateObj = ProductPropertyValueConvert.INSTANCE.convert(updateReqVO); + productPropertyValueMapper.updateById(updateObj); } @Override public void deletePropertyValue(Long id) { + validatePropertyValueExists(id); productPropertyValueMapper.deleteById(id); } + private void validatePropertyValueExists(Long id) { + if (productPropertyValueMapper.selectById(id) == null) { + throw exception(PROPERTY_VALUE_NOT_EXISTS); + } + } + @Override - public ProductPropertyValueRespVO getPropertyValue(Long id) { - ProductPropertyValueDO productPropertyValueDO = productPropertyValueMapper.selectOne(new LambdaQueryWrapper() - .eq(ProductPropertyValueDO::getId, id)); - return ProductPropertyValueConvert.INSTANCE.convert(productPropertyValueDO); + public ProductPropertyValueDO getPropertyValue(Long id) { + return productPropertyValueMapper.selectById(id); } @Override @@ -95,19 +107,14 @@ public class ProductPropertyValueServiceImpl implements ProductPropertyValueServ return ProductPropertyValueConvert.INSTANCE.convertList(values, keys); } - @Override - public List getPropertyValueListByPropertyId(List propertyIds) { - return ProductPropertyValueConvert.INSTANCE.convertList(productPropertyValueMapper.selectList("property_id", propertyIds)); - } - @Override public Integer getPropertyValueCountByPropertyId(Long propertyId) { return productPropertyValueMapper.selectCountByPropertyId(propertyId); } @Override - public PageResult getPropertyValueListPage(ProductPropertyValuePageReqVO pageReqVO) { - return ProductPropertyValueConvert.INSTANCE.convertPage(productPropertyValueMapper.selectPage(pageReqVO)); + public PageResult getPropertyValuePage(ProductPropertyValuePageReqVO pageReqVO) { + return productPropertyValueMapper.selectPage(pageReqVO); } @Override diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java index 4f3d2ebed..3ed659f15 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java @@ -1,13 +1,12 @@ package cn.iocoder.yudao.module.product.service.sku; import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO; -import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuBaseVO; import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO; import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert; import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO; +import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO; import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.mysql.sku.ProductSkuMapper; import cn.iocoder.yudao.module.product.enums.ErrorCodeConstants; @@ -25,6 +24,7 @@ import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*; @@ -95,7 +95,7 @@ public class ProductSkuServiceImpl implements ProductSkuService { } // 2. 校验,一个 SKU 下,没有重复的属性。校验方式是,遍历每个 SKU ,看看是否有重复的属性 propertyId - Map propertyValueMap = CollectionUtils.convertMap(productPropertyValueService.getPropertyValueListByPropertyId(new ArrayList<>(propertyIds)), ProductPropertyValueRespVO::getId); + Map propertyValueMap = convertMap(productPropertyValueService.getPropertyValueListByPropertyId(propertyIds), ProductPropertyValueDO::getId); skus.forEach(sku -> { Set skuPropertyIds = convertSet(sku.getProperties(), propertyItem -> propertyValueMap.get(propertyItem.getValueId()).getPropertyId()); if (skuPropertyIds.size() != sku.getProperties().size()) { diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java index 01c69ec49..b878a106e 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.product.controller.admin.property.vo.ProductPropertyViewRespVO; -import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuBaseVO; import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO; import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuRespVO; @@ -15,6 +14,7 @@ import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppSpuPageRespVO; import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert; import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO; +import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO; import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; @@ -34,6 +34,7 @@ import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; /** @@ -141,7 +142,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { } Map> propertyMaps = properties.stream().collect(Collectors.groupingBy(ProductSkuBaseVO.Property::getPropertyId)); - List propertyValueList = productPropertyValueService.getPropertyValueListByPropertyId(new ArrayList<>(propertyMaps.keySet())); + List propertyValueList = productPropertyValueService.getPropertyValueListByPropertyId(propertyMaps.keySet()); List propertyList = productPropertyService.getPropertyList(propertyMaps.keySet()); // 装载组装过后的属性 List productPropertyViews = new ArrayList<>(); @@ -151,7 +152,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { productPropertyViewRespVO.setName(p.getName()); List propertyValues = new ArrayList<>(); // 转换成map是为了能快速获取 - Map propertyValueMaps = CollectionUtils.convertMap(propertyValueList, ProductPropertyValueRespVO::getId); + Map propertyValueMaps = convertMap(propertyValueList, ProductPropertyValueDO::getId); propertyMaps.get(p.getId()).forEach(pv -> { ProductPropertyViewRespVO.Tuple2 tuple2 = new ProductPropertyViewRespVO.Tuple2(pv.getValueId(), propertyValueMaps.get(pv.getValueId()).getName()); propertyValues.add(tuple2); diff --git a/yudao-ui-admin/src/api/mall/product/property.js b/yudao-ui-admin/src/api/mall/product/property.js index f8ec1c63a..f0172fb13 100644 --- a/yudao-ui-admin/src/api/mall/product/property.js +++ b/yudao-ui-admin/src/api/mall/product/property.js @@ -63,17 +63,6 @@ export function getPropertyListAndValue(query) { }) } - -// 导出属性项 Excel -export function exportPropertyExcel(query) { - return request({ - url: '/product/property/export-excel', - method: 'get', - params: query, - responseType: 'blob' - }) -} - // ------------------------ 属性值 ------------------- // 获得属性值分页 @@ -119,3 +108,6 @@ export function deletePropertyValue(id) { method: 'delete' }) } + +export class exportPropertyExcel { +} diff --git a/yudao-ui-admin/src/views/mall/product/property/index.vue b/yudao-ui-admin/src/views/mall/product/property/index.vue index b3b8d4566..26906a1e7 100644 --- a/yudao-ui-admin/src/views/mall/product/property/index.vue +++ b/yudao-ui-admin/src/views/mall/product/property/index.vue @@ -6,12 +6,6 @@ - - - - - @@ -41,12 +35,12 @@ + -