فهرست منبع

mall + product:review 评论接口

YunaiV 1 سال پیش
والد
کامیت
f2d803c111
14فایلهای تغییر یافته به همراه92 افزوده شده و 119 حذف شده
  1. 15 2
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java
  2. 25 2
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java
  3. 4 4
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/property/ProductPropertyDO.java
  4. 4 4
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/property/ProductPropertyValueDO.java
  5. 1 0
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/comment/ProductCommentMapper.java
  6. 2 2
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java
  7. 12 7
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImpl.java
  8. 7 8
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java
  9. 9 25
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java
  10. 5 54
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java
  11. 1 0
      yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java
  12. 5 10
      yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/TradeOrderRespDTO.java
  13. 0 1
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressTemplateController.java
  14. 2 0
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java

+ 15 - 2
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java

@@ -6,7 +6,9 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*;
 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
+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.service.sku.ProductSkuService;
 import cn.iocoder.yudao.module.product.service.spu.ProductSpuService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -22,8 +24,10 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
 
 /**
  * 商品 SPU 相关接口
@@ -38,6 +42,8 @@ public class ProductSpuController {
 
     @Resource
     private ProductSpuService productSpuService;
+    @Resource
+    private ProductSkuService productSkuService;
 
     @PostMapping("/create")
     @Operation(summary = "创建商品 SPU")
@@ -58,7 +64,7 @@ public class ProductSpuController {
     @Operation(summary = "更新商品 SPU Status")
     @PreAuthorize("@ss.hasPermission('product:spu:update')")
     public CommonResult<Boolean> updateStatus(@Valid @RequestBody ProductSpuUpdateStatusReqVO updateReqVO) {
-        productSpuService.updateStatus(updateReqVO);
+        productSpuService.updateSpuStatus(updateReqVO);
         return success(true);
     }
 
@@ -76,7 +82,14 @@ public class ProductSpuController {
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('product:spu:query')")
     public CommonResult<ProductSpuDetailRespVO> getSpuDetail(@RequestParam("id") Long id) {
-        return success(productSpuService.getSpuDetail(id));
+        // 获得商品 SPU
+        ProductSpuDO spu = productSpuService.getSpu(id);
+        if (spu == null) {
+            throw exception(SPU_NOT_EXISTS);
+        }
+        // 查询商品 SKU
+        List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId());
+        return success(ProductSpuConvert.INSTANCE.convertForSpuDetailRespVO(spu, skus));
     }
 
     @GetMapping("/get-simple-list")

+ 25 - 2
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java

@@ -6,7 +6,11 @@ import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuDetail
 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageItemRespVO;
 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
+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.enums.spu.ProductSpuStatusEnum;
+import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService;
+import cn.iocoder.yudao.module.product.service.sku.ProductSkuService;
 import cn.iocoder.yudao.module.product.service.spu.ProductSpuService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -19,8 +23,12 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.List;
 
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_ENABLE;
+import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
 
 @Tag(name = "用户 APP - 商品 SPU")
 @RestController
@@ -30,6 +38,10 @@ public class AppProductSpuController {
 
     @Resource
     private ProductSpuService productSpuService;
+    @Resource
+    private ProductSkuService productSkuService;
+    @Resource
+    private ProductPropertyValueService productPropertyValueService;
 
     @GetMapping("/page")
     @Operation(summary = "获得商品 SPU 分页")
@@ -38,12 +50,23 @@ public class AppProductSpuController {
         return success(ProductSpuConvert.INSTANCE.convertPageForGetSpuPage(pageResult));
     }
 
-    // TODO 芋艿:等会看看
     @GetMapping("/get-detail")
     @Operation(summary = "获得商品 SPU 明细")
     @Parameter(name = "id", description = "编号", required = true)
     public CommonResult<AppProductSpuDetailRespVO> getSpuDetail(@RequestParam("id") Long id) {
-        return success(productSpuService.getAppProductSpuDetail(id));
+        // 获得商品 SPU
+        ProductSpuDO spu = productSpuService.getSpu(id);
+        if (spu == null) {
+            throw exception(SPU_NOT_EXISTS);
+        }
+        if (!ProductSpuStatusEnum.isEnable(spu.getStatus())) {
+            throw exception(SPU_NOT_ENABLE);
+        }
+
+        // 查询商品 SKU
+        List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId());
+        // 拼接
+        return success(ProductSpuConvert.INSTANCE.convertForGetSpuDetail(spu, skus));
     }
 
 }

+ 4 - 4
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/property/ProductPropertyDO.java

@@ -22,13 +22,13 @@ import lombok.*;
 public class ProductPropertyDO extends BaseDO {
 
     /**
-     * 默认属性id
+     * SPU 单规格时,默认属性 id
      */
-    public static final Long PROPERTY_ID = 0L;
+    public static final Long ID_DEFAULT = 0L;
     /**
-     * 默认属性名字
+     * SPU 单规格时,默认属性名字
      */
-    public static final String PROPERTY_NAME = "默认";
+    public static final String NAME_DEFAULT = "默认";
 
     /**
      * 主键

+ 4 - 4
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/property/ProductPropertyValueDO.java

@@ -23,13 +23,13 @@ import lombok.*;
 public class ProductPropertyValueDO extends BaseDO {
 
     /**
-     * 默认属性值id
+     * SPU 单规格时,默认属性值 id
      */
-    public static final Long VALUE_ID = 0L;
+    public static final Long ID_DEFAULT = 0L;
     /**
-     * 默认属性值名字
+     * SPU 单规格时,默认属性值名字
      */
-    public static final String VALUE_NAME = "默认";
+    public static final String NAME_DEFAULT = "默认";
 
     /**
      * 主键

+ 1 - 0
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/comment/ProductCommentMapper.java

@@ -35,6 +35,7 @@ public interface ProductCommentMapper extends BaseMapperX<ProductCommentDO> {
                 .orderByDesc(ProductCommentDO::getId));
     }
 
+    // TODO 芋艿:在看看这块
     static void appendTabQuery(LambdaQueryWrapperX<ProductCommentDO> queryWrapper, Integer type) {
         // 构建好评查询语句
         if (ObjectUtil.equal(type, AppCommentPageReqVO.FAVOURABLE_COMMENT)) {

+ 2 - 2
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java

@@ -68,8 +68,8 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
             throw exception(CATEGORY_EXISTS_CHILDREN);
         }
         // 校验分类是否绑定了 SPU
-        Long count = productSpuService.getSpuCountByCategoryId(id);
-        if (0 != count) {
+        Long spuCount = productSpuService.getSpuCountByCategoryId(id);
+        if (spuCount > 0) {
             throw exception(CATEGORY_HAVE_BIND_SPU);
         }
         // 删除

+ 12 - 7
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImpl.java

@@ -31,6 +31,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
 import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND;
 
+// TODO @芋艿:详细 review 下
 /**
  * 商品评论 Service 实现类
  *
@@ -73,13 +74,17 @@ public class ProductCommentServiceImpl implements ProductCommentService {
     public Map<String, Long> getCommentPageTabsCount(Long spuId, Boolean visible) {
         Map<String, Long> countMap = new HashMap<>(4);
         // 查询商品 id = spuId 的所有评论数量
-        countMap.put(AppCommentPageReqVO.ALL_COUNT, productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.ALL));
+        countMap.put(AppCommentPageReqVO.ALL_COUNT,
+                productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.ALL));
         // 查询商品 id = spuId 的所有好评数量
-        countMap.put(AppCommentPageReqVO.FAVOURABLE_COMMENT_COUNT, productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.FAVOURABLE_COMMENT));
+        countMap.put(AppCommentPageReqVO.FAVOURABLE_COMMENT_COUNT,
+                productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.FAVOURABLE_COMMENT));
         // 查询商品 id = spuId 的所有中评数量
-        countMap.put(AppCommentPageReqVO.MEDIOCRE_COMMENT_COUNT, productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.MEDIOCRE_COMMENT));
+        countMap.put(AppCommentPageReqVO.MEDIOCRE_COMMENT_COUNT,
+                productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.MEDIOCRE_COMMENT));
         // 查询商品 id = spuId 的所有差评数量
-        countMap.put(AppCommentPageReqVO.NEGATIVE_COMMENT_COUNT, productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.NEGATIVE_COMMENT));
+        countMap.put(AppCommentPageReqVO.NEGATIVE_COMMENT_COUNT,
+                productCommentMapper.selectTabCount(spuId, visible, AppCommentPageReqVO.NEGATIVE_COMMENT));
         return countMap;
     }
 
@@ -101,13 +106,14 @@ public class ProductCommentServiceImpl implements ProductCommentService {
 
     @Override
     public void createComment(ProductCommentDO productComment, Boolean system) {
+        // TODO @puhui999:这里不区分是否为 system;直接都校验
         if (!system) {
-            // TODO 判断订单是否存在 fix
+            // TODO 判断订单是否存在 fix;
+            // TODO @puhui999:改成 order 那有个 comment 接口,哪里校验下;商品评论这里不校验订单是否存在哈
             TradeOrderRespDTO order = tradeOrderApi.getOrder(productComment.getOrderId());
             if (null == order) {
                 throw exception(ORDER_NOT_FOUND);
             }
-            // TODO 判断 SPU 是否存在 fix
             ProductSpuDO spu = productSpuService.getSpu(productComment.getSpuId());
             if (null == spu) {
                 throw exception(SPU_NOT_EXISTS);
@@ -147,5 +153,4 @@ public class ProductCommentServiceImpl implements ProductCommentService {
         return productComment;
     }
 
-
 }

+ 7 - 8
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java

@@ -83,21 +83,20 @@ public class ProductSkuServiceImpl implements ProductSkuService {
         if (CollUtil.isEmpty(skus)) {
             throw exception(SKU_NOT_EXISTS);
         }
-        // 单规格处理
+        // 单规格,赋予单规格默认属性
         if (ObjectUtil.equal(specType, false)) {
             ProductSkuCreateOrUpdateReqVO skuVO = skus.get(0);
-            // 赋予单规格默认属性
             List<ProductSkuBaseVO.Property> properties = new ArrayList<>();
             ProductSkuBaseVO.Property property = new ProductSkuBaseVO.Property();
-            property.setPropertyId(ProductPropertyDO.PROPERTY_ID);
-            property.setPropertyName(ProductPropertyDO.PROPERTY_NAME);
-            property.setValueId(ProductPropertyValueDO.VALUE_ID);
-            property.setValueName(ProductPropertyValueDO.VALUE_NAME);
+            property.setPropertyId(ProductPropertyDO.ID_DEFAULT);
+            property.setPropertyName(ProductPropertyDO.NAME_DEFAULT);
+            property.setValueId(ProductPropertyValueDO.ID_DEFAULT);
+            property.setValueName(ProductPropertyValueDO.NAME_DEFAULT);
             properties.add(property);
             skuVO.setProperties(properties);
-            // 单规格不需要后续的校验
-            return;
+            return; // 单规格不需要后续的校验
         }
+
         // 1、校验属性项存在
         Set<Long> propertyIds = skus.stream().filter(p -> p.getProperties() != null)
                 // 遍历多个 Property 属性

+ 9 - 25
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java

@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.product.service.spu;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*;
-import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuDetailRespVO;
 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
 
@@ -107,40 +106,25 @@ public interface ProductSpuService {
     void updateSpuStock(Map<Long, Integer> stockIncrCounts);
 
     /**
-     * 得到spu详细
+     * 更新 SPU 状态
      *
-     * @param id id
-     * @return {@link ProductSpuDetailRespVO}
+     * @param updateReqVO 更新请求
      */
-    ProductSpuDetailRespVO getSpuDetail(Long id);
+    void updateSpuStatus(ProductSpuUpdateStatusReqVO updateReqVO);
 
     /**
-     * 更新状态
+     * 获取 SPU 列表标签对应的 Count 数量
      *
-     * @param updateReqVO 更新请求签证官
-     */
-    void updateStatus(ProductSpuUpdateStatusReqVO updateReqVO);
-
-    /**
-     * 获取spu列表标签对应的Count数量
-     *
-     * @return {@link Map}<{@link Integer}, {@link Integer}>
+     * @return Count 数量
      */
     Map<Integer, Long> getTabsCount();
 
     /**
-     * 通过分类 id 查询 spu 个数
+     * 通过分类 categoryId 查询 SPU 个数
      *
-     * @param id 分类 id
-     * @return spu
+     * @param categoryId 分类 categoryId
+     * @return SPU 数量
      */
-    Long getSpuCountByCategoryId(Long id);
+    Long getSpuCountByCategoryId(Long categoryId);
 
-    /**
-     * 通过 spu id 获取商品 SPU 明细
-     *
-     * @param id id
-     * @return 用户 App - 商品 SPU 明细
-     */
-    AppProductSpuDetailRespVO getAppProductSpuDetail(Long id);
 }

+ 5 - 54
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java

@@ -7,21 +7,15 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryListReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*;
-import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuDetailRespVO;
 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
-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.category.ProductCategoryDO;
-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;
 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
 import cn.iocoder.yudao.module.product.service.brand.ProductBrandService;
 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService;
 import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService;
-import cn.iocoder.yudao.module.product.service.property.bo.ProductPropertyValueDetailRespBO;
 import cn.iocoder.yudao.module.product.service.sku.ProductSkuService;
 import com.google.common.collect.Maps;
 import org.springframework.context.annotation.Lazy;
@@ -114,9 +108,9 @@ public class ProductSpuServiceImpl implements ProductSpuService {
         spu.setPrice(getMinValue(skus, ProductSkuCreateOrUpdateReqVO::getPrice));
         // sku 单价最低的商品的市场价格
         spu.setMarketPrice(getMinValue(skus, ProductSkuCreateOrUpdateReqVO::getMarketPrice));
-        // sku单价最低的商品的成本价格
+        // sku 单价最低的商品的成本价格
         spu.setCostPrice(getMinValue(skus, ProductSkuCreateOrUpdateReqVO::getCostPrice));
-        // sku单价最低的商品的条形码
+        // sku 单价最低的商品的条形码
         spu.setBarCode(getMinValue(skus, ProductSkuCreateOrUpdateReqVO::getBarCode));
         // skus 库存总数
         spu.setStock(getSumValue(skus, ProductSkuCreateOrUpdateReqVO::getStock, Integer::sum));
@@ -213,21 +207,9 @@ public class ProductSpuServiceImpl implements ProductSpuService {
         stockIncrCounts.forEach((id, incCount) -> productSpuMapper.updateStock(id, incCount));
     }
 
-    @Override
-    public ProductSpuDetailRespVO getSpuDetail(Long id) {
-        // 获得商品 SPU
-        ProductSpuDO spu = getSpu(id);
-        if (spu == null) {
-            throw exception(SPU_NOT_EXISTS);
-        }
-        // 查询商品 SKU
-        List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId());
-        return ProductSpuConvert.INSTANCE.convertForSpuDetailRespVO(spu, skus);
-    }
-
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateStatus(ProductSpuUpdateStatusReqVO updateReqVO) {
+    public void updateSpuStatus(ProductSpuUpdateStatusReqVO updateReqVO) {
         // 校验存在
         validateSpuExists(updateReqVO.getId());
 
@@ -258,39 +240,8 @@ public class ProductSpuServiceImpl implements ProductSpuService {
     }
 
     @Override
-    public Long getSpuCountByCategoryId(Long id) {
-        return productSpuMapper.selectCount(ProductSpuDO::getCategoryId, id);
-    }
-
-    @Override
-    public AppProductSpuDetailRespVO getAppProductSpuDetail(Long id) {
-        // 获得商品 SPU
-        ProductSpuDO spu = getSpu(id);
-        if (spu == null) {
-            throw exception(SPU_NOT_EXISTS);
-        }
-        if (!ProductSpuStatusEnum.isEnable(spu.getStatus())) {
-            throw exception(SPU_NOT_ENABLE);
-        }
-
-        // 查询商品 SKU
-        List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId());
-        List<ProductPropertyValueDetailRespBO> propertyValues = new ArrayList<>();
-        // 单规格商品 赋予默认属性值
-        if (ObjectUtil.equal(spu.getSpecType(), false)) {
-            ProductPropertyValueDetailRespBO respBO = new ProductPropertyValueDetailRespBO();
-            respBO.setPropertyId(ProductPropertyDO.PROPERTY_ID);
-            respBO.setPropertyName(ProductPropertyDO.PROPERTY_NAME);
-            respBO.setValueId(ProductPropertyValueDO.VALUE_ID);
-            respBO.setValueName(ProductPropertyValueDO.VALUE_NAME);
-            propertyValues.add(respBO);
-        } else {
-            // 多规格商品则查询商品属性
-            propertyValues = productPropertyValueService
-                    .getPropertyValueDetailList(ProductSkuConvert.INSTANCE.convertPropertyValueIds(skus));
-        }
-        // 拼接
-        return ProductSpuConvert.INSTANCE.convertForGetSpuDetail(spu, skus, propertyValues);
+    public Long getSpuCountByCategoryId(Long categoryId) {
+        return productSpuMapper.selectCount(ProductSpuDO::getCategoryId, categoryId);
     }
 
 }

+ 1 - 0
yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java

@@ -34,6 +34,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
+// TODO 芋艿:单测详细 review 下
 /**
  * {@link ProductCommentServiceImpl} 的单元测试类
  *

+ 5 - 10
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/TradeOrderRespDTO.java

@@ -23,26 +23,24 @@ public class TradeOrderRespDTO {
     private Long id;
     /**
      * 订单流水号
-     * <p>
+     *
      * 例如说,1146347329394184195
      */
     private String no;
     /**
      * 订单类型
-     * <p>
+     *
      * 枚举 {@link TradeOrderTypeEnum}
      */
     private Integer type;
     /**
      * 订单来源
-     * <p>
+     *
      * 枚举 {@link TerminalEnum}
      */
     private Integer terminal;
     /**
      * 用户编号
-     * <p>
-     * 关联 MemberUserDO 的 id 编号
      */
     private Long userId;
     /**
@@ -55,7 +53,7 @@ public class TradeOrderRespDTO {
     private String userRemark;
     /**
      * 订单状态
-     * <p>
+     *
      * 枚举 {@link TradeOrderStatusEnum}
      */
     private Integer status;
@@ -73,7 +71,7 @@ public class TradeOrderRespDTO {
     private LocalDateTime cancelTime;
     /**
      * 取消类型
-     * <p>
+     *
      * 枚举 {@link TradeOrderCancelTypeEnum}
      */
     private Integer cancelType;
@@ -83,9 +81,6 @@ public class TradeOrderRespDTO {
     private String remark;
     /**
      * 是否评价
-     * <p>
-     * true - 已评价
-     * false - 未评价
      */
     private Boolean commentStatus;
 

+ 0 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressTemplateController.java

@@ -70,7 +70,6 @@ public class DeliveryExpressTemplateController {
         return success(DeliveryExpressTemplateConvert.INSTANCE.convertList(list));
     }
 
-    // TODO @puhui999:DeliveryExpressTemplateRespVO 搞个 simple 的哈 fix
     @GetMapping("/list-all-simple")
     @Operation(summary = "获取快递模版精简信息列表", description = "主要用于前端的下拉选项")
     public CommonResult<List<DeliveryExpressTemplateSimpleRespVO>> getSimpleTemplateList() {

+ 2 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java

@@ -100,6 +100,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private AdminUserApi adminUserApi;
     @Resource
     private NotifyMessageSendApi notifyMessageSendApi;
+
     @Resource
     private TradeOrderProperties tradeOrderProperties;
 
@@ -356,6 +357,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         // TODO 芋艿:发送订单变化的消息
 
         // TODO 芋艿:发送站内信 fix
+        // TODO @puhui999:使用 sendSingleMessageToMember 呀;走模版;不用判断模版是否存在哈
         // 1、获取模版编码为 order_delivery 的模版,判断是否存在 存在放回 true
         if (!notifyMessageSendApi.validateNotifyTemplate("order_delivery")) {
             // 1、1 站内信模版不存在则创建模版