Commit 810c7ed040242de3672494d6c366532757a70d9e

Authored by puhui999
1 parent c233ce1a

完善商品管理

sql/mysql/optional/mall.sql
@@ -163,19 +163,20 @@ COMMIT; @@ -163,19 +163,20 @@ COMMIT;
163 -- Table structure for product_property 163 -- Table structure for product_property
164 -- ---------------------------- 164 -- ----------------------------
165 DROP TABLE IF EXISTS `product_property`; 165 DROP TABLE IF EXISTS `product_property`;
166 -CREATE TABLE `product_property` (  
167 - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',  
168 - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规格名称',  
169 - `status` tinyint NULL DEFAULT NULL COMMENT '状态: 0 开启 ,1 禁用',  
170 - `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
171 - `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  
172 - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',  
173 - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',  
174 - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',  
175 - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',  
176 - PRIMARY KEY (`id`) USING BTREE,  
177 - INDEX `idx_name`(`name`(32) ASC) USING BTREE COMMENT '规格名称索引'  
178 -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '规格名称'; 166 +CREATE TABLE `product_property` (
  167 + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  168 + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '规格名称',
  169 + `status` tinyint DEFAULT NULL COMMENT '状态: 0 开启 ,1 禁用',
  170 + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  171 + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  172 + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
  173 + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
  174 + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
  175 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  176 + `remark` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  177 + PRIMARY KEY (`id`) USING BTREE,
  178 + KEY `idx_name` (`name`(32)) USING BTREE COMMENT '规格名称索引'
  179 +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='规格名称';
179 180
180 -- ---------------------------- 181 -- ----------------------------
181 -- Records of product_property 182 -- Records of product_property
@@ -187,19 +188,20 @@ COMMIT; @@ -187,19 +188,20 @@ COMMIT;
187 -- Table structure for product_property_value 188 -- Table structure for product_property_value
188 -- ---------------------------- 189 -- ----------------------------
189 DROP TABLE IF EXISTS `product_property_value`; 190 DROP TABLE IF EXISTS `product_property_value`;
190 -CREATE TABLE `product_property_value` (  
191 - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',  
192 - `property_id` bigint NULL DEFAULT NULL COMMENT '规格键id',  
193 - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规格值名字',  
194 - `status` tinyint NULL DEFAULT NULL COMMENT '状态: 1 开启 ,2 禁用',  
195 - `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
196 - `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  
197 - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',  
198 - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',  
199 - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',  
200 - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',  
201 - PRIMARY KEY (`id`) USING BTREE  
202 -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '规格值'; 191 +CREATE TABLE `product_property_value` (
  192 + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  193 + `property_id` bigint DEFAULT NULL COMMENT '规格键id',
  194 + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '规格值名字',
  195 + `status` tinyint DEFAULT NULL COMMENT '状态: 1 开启 ,2 禁用',
  196 + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  197 + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  198 + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
  199 + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
  200 + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
  201 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  202 + `remark` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  203 + PRIMARY KEY (`id`) USING BTREE
  204 +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='规格值';
203 205
204 -- ---------------------------- 206 -- ----------------------------
205 -- Records of product_property_value 207 -- Records of product_property_value
@@ -325,3 +327,36 @@ INSERT INTO `ruoyi-vue-pro`.`system_menu` (`id`, `name`, `permission`, `type`, ` @@ -325,3 +327,36 @@ INSERT INTO `ruoyi-vue-pro`.`system_menu` (`id`, `name`, `permission`, `type`, `
325 INSERT INTO `ruoyi-vue-pro`.`system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2028, 'Banner更新', 'market:banner:update', 3, 3, 2025, '', '', '', 0, b'1', b'1', '', '2022-08-01 14:56:14', '', '2022-08-01 14:56:14', b'0'); 327 INSERT INTO `ruoyi-vue-pro`.`system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2028, 'Banner更新', 'market:banner:update', 3, 3, 2025, '', '', '', 0, b'1', b'1', '', '2022-08-01 14:56:14', '', '2022-08-01 14:56:14', b'0');
326 INSERT INTO `ruoyi-vue-pro`.`system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2029, 'Banner删除', 'market:banner:delete', 3, 4, 2025, '', '', '', 0, b'1', b'1', '', '2022-08-01 14:56:14', '', '2022-08-01 14:56:14', b'0'); 328 INSERT INTO `ruoyi-vue-pro`.`system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2029, 'Banner删除', 'market:banner:delete', 3, 4, 2025, '', '', '', 0, b'1', b'1', '', '2022-08-01 14:56:14', '', '2022-08-01 14:56:14', b'0');
327 329
  330 +INSERT INTO `system_dict_data`(`sort`,`label`,`value`,`dict_type`,`status`,`color_type`,`css_class`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) VALUES
  331 + (1,'打',2,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  332 + (1,'盒',3,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  333 + (1,'袋',4,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  334 + (1,'箱',5,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  335 + (1,'套',6,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  336 + (1,'包',7,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  337 + (1,'双',8,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  338 + (1,'卷',9,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  339 + (1,'张',10,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  340 + (1,'克',11,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  341 + (1,'千克',12,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  342 + (1,'毫克',13,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  343 + (1,'微克',14,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  344 + (1,'吨',15,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  345 + (1,'升',16,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  346 + (1,'毫升',17,'product_unit',0,'','','',1, NOW(),1, NOW(),0),
  347 + (1, '平方米', 18, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  348 + (1, '平方千米', 19, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  349 + (1, '平方英里', 20, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  350 + (1, '平方码', 21, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  351 + (1, '平方英尺', 22, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  352 + (1, '立方米', 23, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  353 + (1, '立方厘米', 24, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  354 + (1, '立方英寸', 25, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  355 + (1, '米', 26, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  356 + (1, '千米', 27, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  357 + (1, '厘米', 28, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  358 + (1, '毫米', 29, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  359 + (1, '英寸', 30, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  360 + (1, '英尺', 31, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  361 + (1, '码', 32, 'product_unit', 0, '', '', '', 1, NOW(), 1, NOW(), 0),
  362 + (1,'个',1,'product_unit',0,'','','',1, NOW(),1, NOW(),0);
328 \ No newline at end of file 363 \ No newline at end of file
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/spu/ProductSpuTabTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.product.enums.spu;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +/**
  7 + * 商品spu标签枚举类型
  8 + *
  9 + * @author HUIHUI
  10 + */
  11 +@Getter
  12 +@AllArgsConstructor
  13 +public enum ProductSpuTabTypeEnum {
  14 + FOR_SALE(0,"出售中商品"),
  15 + IN_WAREHOUSE(1,"仓库中商品"),
  16 + SOLD_OUT(2,"已售空商品"),
  17 + ALERT_STOCK(3,"警戒库存"),
  18 + RECYCLE_BIN(4,"商品回收站");
  19 + /**
  20 + * 状态
  21 + */
  22 + private final Integer type;
  23 + /**
  24 + * 状态名
  25 + */
  26 + private final String name;
  27 +}
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java
@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*; @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
21 import javax.annotation.Resource; 21 import javax.annotation.Resource;
22 import javax.validation.Valid; 22 import javax.validation.Valid;
23 import java.util.List; 23 import java.util.List;
  24 +import java.util.Map;
24 25
25 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 27 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -54,6 +55,14 @@ public class ProductSpuController { @@ -54,6 +55,14 @@ public class ProductSpuController {
54 return success(true); 55 return success(true);
55 } 56 }
56 57
  58 + @PutMapping("/updateStatus")
  59 + @Operation(summary = "更新商品 SPU Status")
  60 + @PreAuthorize("@ss.hasPermission('product:spu:update')")
  61 + public CommonResult<Boolean> updateStatus(@Valid @RequestBody ProductSpuUpdateStatusReqVO updateReqVO) {
  62 + productSpuService.updateStatus(updateReqVO);
  63 + return success(true);
  64 + }
  65 +
57 @DeleteMapping("/delete") 66 @DeleteMapping("/delete")
58 @Operation(summary = "删除商品 SPU") 67 @Operation(summary = "删除商品 SPU")
59 @Parameter(name = "id", description = "编号", required = true, example = "1024") 68 @Parameter(name = "id", description = "编号", required = true, example = "1024")
@@ -85,5 +94,11 @@ public class ProductSpuController { @@ -85,5 +94,11 @@ public class ProductSpuController {
85 public CommonResult<PageResult<ProductSpuPageRespVO>> getSpuPage(@Valid ProductSpuPageReqVO pageVO) { 94 public CommonResult<PageResult<ProductSpuPageRespVO>> getSpuPage(@Valid ProductSpuPageReqVO pageVO) {
86 return success(ProductSpuConvert.INSTANCE.convertPage(productSpuService.getSpuPage(pageVO))); 95 return success(ProductSpuConvert.INSTANCE.convertPage(productSpuService.getSpuPage(pageVO)));
87 } 96 }
  97 + @GetMapping("/tabsCount")
  98 + @Operation(summary = "获得商品 SPU tabsCount")
  99 + @PreAuthorize("@ss.hasPermission('product:spu:query')")
  100 + public CommonResult<Map<Integer, Long>> getTabsCount() {
  101 + return success(productSpuService.getTabsCount());
  102 + }
88 103
89 } 104 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java
@@ -5,6 +5,11 @@ import io.swagger.v3.oas.annotations.media.Schema; @@ -5,6 +5,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data; 5 import lombok.Data;
6 import lombok.EqualsAndHashCode; 6 import lombok.EqualsAndHashCode;
7 import lombok.ToString; 7 import lombok.ToString;
  8 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
8 13
9 @Schema(description = "管理后台 - 商品 SPU 分页 Request VO") 14 @Schema(description = "管理后台 - 商品 SPU 分页 Request VO")
10 @Data 15 @Data
@@ -15,7 +20,11 @@ public class ProductSpuPageReqVO extends PageParam { @@ -15,7 +20,11 @@ public class ProductSpuPageReqVO extends PageParam {
15 @Schema(description = "商品名称", example = "yutou") 20 @Schema(description = "商品名称", example = "yutou")
16 private String name; 21 private String name;
17 22
18 - @Schema(description = "分类编号", example = "1")  
19 - private Long categoryId; 23 + @Schema(description = "前端请求的tab类型", example = "1")
  24 + private Integer tabType;
  25 +
  26 + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
  27 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  28 + private LocalDateTime[] createTime;
20 29
21 } 30 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuUpdateStatusReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
  2 +
  3 +import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +import javax.validation.Valid;
  10 +import javax.validation.constraints.NotNull;
  11 +import java.util.List;
  12 +
  13 +@Schema(description = "管理后台 - 商品 SPU Status 更新 Request VO")
  14 +@Data
  15 +public class ProductSpuUpdateStatusReqVO{
  16 +
  17 + @Schema(description = "商品编号", required = true, example = "1")
  18 + @NotNull(message = "商品编号不能为空")
  19 + private Long id;
  20 +
  21 + @Schema(description = "商品状态", required = true, example = "1")
  22 + @NotNull(message = "商品状态不能为空")
  23 + private Integer status;
  24 +
  25 +
  26 +}
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java
1 package cn.iocoder.yudao.module.product.dal.mysql.spu; 1 package cn.iocoder.yudao.module.product.dal.mysql.spu;
2 2
  3 +import cn.hutool.core.util.ObjUtil;
  4 +import cn.hutool.core.util.StrUtil;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  8 +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
6 import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO; 9 import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO;
7 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; 10 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
8 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; 11 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
  12 +import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
  13 +import cn.iocoder.yudao.module.product.enums.spu.ProductSpuTabTypeEnum;
9 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 14 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
10 import org.apache.ibatis.annotations.Mapper; 15 import org.apache.ibatis.annotations.Mapper;
11 16
  17 +import java.util.Map;
12 import java.util.Objects; 18 import java.util.Objects;
13 import java.util.Set; 19 import java.util.Set;
14 20
@@ -20,29 +26,51 @@ import java.util.Set; @@ -20,29 +26,51 @@ import java.util.Set;
20 @Mapper 26 @Mapper
21 public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> { 27 public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
22 28
  29 + //default PageResult<ProductSpuDO> selectPage(ProductSpuPageReqVO reqVO) {
  30 + // return selectPage(reqVO, new LambdaQueryWrapperX<ProductSpuDO>()
  31 + // .likeIfPresent(ProductSpuDO::getName, reqVO.getName())
  32 + // .orderByDesc(ProductSpuDO::getSort));
  33 + //}
23 default PageResult<ProductSpuDO> selectPage(ProductSpuPageReqVO reqVO) { 34 default PageResult<ProductSpuDO> selectPage(ProductSpuPageReqVO reqVO) {
24 return selectPage(reqVO, new LambdaQueryWrapperX<ProductSpuDO>() 35 return selectPage(reqVO, new LambdaQueryWrapperX<ProductSpuDO>()
  36 + // 商品名称
25 .likeIfPresent(ProductSpuDO::getName, reqVO.getName()) 37 .likeIfPresent(ProductSpuDO::getName, reqVO.getName())
26 - .eqIfPresent(ProductSpuDO::getCategoryId, reqVO.getCategoryId()) 38 + .betweenIfPresent(ProductSpuDO::getCreateTime, reqVO.getCreateTime())
  39 + // 出售中商品
  40 + .eq(ProductSpuTabTypeEnum.FOR_SALE.getType().equals(reqVO.getTabType()),ProductSpuDO::getStatus,ProductSpuStatusEnum.ENABLE.getStatus())
  41 + // 仓储中商品
  42 + .eq(ProductSpuTabTypeEnum.IN_WAREHOUSE.getType().equals(reqVO.getTabType()),ProductSpuDO::getStatus,ProductSpuStatusEnum.DISABLE.getStatus())
  43 + // 已售空商品
  44 + .eq(ProductSpuTabTypeEnum.SOLD_OUT.getType().equals(reqVO.getTabType()),ProductSpuDO::getStock,0)
  45 + // TODO 警戒库存暂时为 10,后期需要使用常量或者数据库配置替换
  46 + .le(ProductSpuTabTypeEnum.ALERT_STOCK.getType().equals(reqVO.getTabType()),ProductSpuDO::getStock,10)
  47 + // 回收站
  48 + .eq(ProductSpuTabTypeEnum.RECYCLE_BIN.getType().equals(reqVO.getTabType()),ProductSpuDO::getStatus,ProductSpuStatusEnum.RECYCLE.getStatus())
27 .orderByDesc(ProductSpuDO::getSort)); 49 .orderByDesc(ProductSpuDO::getSort));
28 } 50 }
29 51
30 - default PageResult<ProductSpuDO> selectPage(ProductSpuPageReqVO reqVO, Set<Long> alarmStockSpuIds) {  
31 - return selectPage(reqVO, new LambdaQueryWrapperX<ProductSpuDO>()  
32 - .likeIfPresent(ProductSpuDO::getName, reqVO.getName())  
33 - .eqIfPresent(ProductSpuDO::getCategoryId, reqVO.getCategoryId())  
34 - .inIfPresent(ProductSpuDO::getId, alarmStockSpuIds) // 库存告警  
35 - .orderByDesc(ProductSpuDO::getSort));  
36 - }  
37 -  
38 - default PageResult<ProductSpuDO> selectPage(AppProductSpuPageReqVO pageReqVO, Integer status) { 52 + /**
  53 + * 获得商品 SPU 分页,提供给用户 App 使用
  54 + */
  55 + default PageResult<ProductSpuDO> selectPage(AppProductSpuPageReqVO pageReqVO, Set<Long> categoryIds) {
39 LambdaQueryWrapperX<ProductSpuDO> query = new LambdaQueryWrapperX<ProductSpuDO>() 56 LambdaQueryWrapperX<ProductSpuDO> query = new LambdaQueryWrapperX<ProductSpuDO>()
40 - .eqIfPresent(ProductSpuDO::getCategoryId, pageReqVO.getCategoryId())  
41 - .eqIfPresent(ProductSpuDO::getStatus, status); 57 + .likeIfPresent(ProductSpuDO::getName, pageReqVO.getKeyword()) // 关键字匹配,目前只匹配商品名
  58 + .inIfPresent(ProductSpuDO::getCategoryId, categoryIds); // 分类
  59 + query.eq(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()) // 上架状态
  60 + .gt(ProductSpuDO::getStock, 0); // 有库存
  61 + // 推荐类型的过滤条件
  62 + if (ObjUtil.equal(pageReqVO.getRecommendType(), AppProductSpuPageReqVO.RECOMMEND_TYPE_HOT)) {
  63 + query.eq(ProductSpuDO::getRecommendHot, true);
  64 + }
42 // 排序逻辑 65 // 排序逻辑
43 - if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_PRICE)) {  
44 - } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_SALES_COUNT)) {  
45 - query.orderBy(true, pageReqVO.getSortAsc(), ProductSpuDO::getSalesCount); 66 + if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_SALES_COUNT)) {
  67 + query.last(String.format(" ORDER BY (sales_count + virtual_sales_count) %s, sort DESC, id DESC",
  68 + pageReqVO.getSortAsc() ? "ASC" : "DESC"));
  69 + } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_PRICE)) {
  70 + query.orderBy(true, pageReqVO.getSortAsc(), ProductSpuDO::getPrice)
  71 + .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId);
  72 + } else {
  73 + query.orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId);
46 } 74 }
47 return selectPage(pageReqVO, query); 75 return selectPage(pageReqVO, query);
48 } 76 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java
@@ -75,7 +75,7 @@ public interface ProductSpuService { @@ -75,7 +75,7 @@ public interface ProductSpuService {
75 List<ProductSpuDO> getSpuList(); 75 List<ProductSpuDO> getSpuList();
76 76
77 /** 77 /**
78 - * 获得商品 SPU 分页 78 + * 获得商品 SPU 分页,提供给挂你兰后台使用
79 * 79 *
80 * @param pageReqVO 分页查询 80 * @param pageReqVO 分页查询
81 * @return 商品spu分页 81 * @return 商品spu分页
@@ -83,13 +83,12 @@ public interface ProductSpuService { @@ -83,13 +83,12 @@ public interface ProductSpuService {
83 PageResult<ProductSpuDO> getSpuPage(ProductSpuPageReqVO pageReqVO); 83 PageResult<ProductSpuDO> getSpuPage(ProductSpuPageReqVO pageReqVO);
84 84
85 /** 85 /**
86 - * 获得商品 SPU 分页 86 + * 获得商品 SPU 分页,提供给用户 App 使用
87 * 87 *
88 * @param pageReqVO 分页查询 88 * @param pageReqVO 分页查询
89 - * @param status 状态  
90 * @return 商品 SPU 分页 89 * @return 商品 SPU 分页
91 */ 90 */
92 - PageResult<ProductSpuDO> getSpuPage(AppProductSpuPageReqVO pageReqVO, Integer status); 91 + PageResult<ProductSpuDO> getSpuPage(AppProductSpuPageReqVO pageReqVO);
93 92
94 /** 93 /**
95 * 更新商品 SPU 库存(增量) 94 * 更新商品 SPU 库存(增量)
@@ -105,4 +104,18 @@ public interface ProductSpuService { @@ -105,4 +104,18 @@ public interface ProductSpuService {
105 * @return {@link ProductSpuDetailRespVO} 104 * @return {@link ProductSpuDetailRespVO}
106 */ 105 */
107 ProductSpuDetailRespVO getSpuDetail(Long id); 106 ProductSpuDetailRespVO getSpuDetail(Long id);
  107 +
  108 + /**
  109 + * 更新状态
  110 + *
  111 + * @param updateReqVO 更新请求签证官
  112 + */
  113 + void updateStatus(ProductSpuUpdateStatusReqVO updateReqVO);
  114 +
  115 + /**
  116 + * 获取spu列表标签对应的Count数量
  117 + *
  118 + * @return {@link Map}<{@link Integer}, {@link Integer}>
  119 + */
  120 + Map<Integer, Long> getTabsCount();
108 } 121 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java
1 package cn.iocoder.yudao.module.product.service.spu; 1 package cn.iocoder.yudao.module.product.service.spu;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.convert.Convert;
  5 +import cn.hutool.core.util.ObjectUtil;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  8 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  9 +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
6 import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO; 10 import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateOrUpdateReqVO;
7 import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuRespVO; 11 import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuRespVO;
8 -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuCreateReqVO;  
9 -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuDetailRespVO;  
10 -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO;  
11 -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateReqVO; 12 +import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*;
12 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; 13 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
13 import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert; 14 import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert;
14 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; 15 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
@@ -16,11 +17,13 @@ import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; @@ -16,11 +17,13 @@ import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
16 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; 17 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
17 import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; 18 import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper;
18 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; 19 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
  20 +import cn.iocoder.yudao.module.product.enums.spu.ProductSpuTabTypeEnum;
19 import cn.iocoder.yudao.module.product.service.brand.ProductBrandService; 21 import cn.iocoder.yudao.module.product.service.brand.ProductBrandService;
20 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService; 22 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService;
21 import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService; 23 import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService;
22 import cn.iocoder.yudao.module.product.service.property.bo.ProductPropertyValueDetailRespBO; 24 import cn.iocoder.yudao.module.product.service.property.bo.ProductPropertyValueDetailRespBO;
23 import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; 25 import cn.iocoder.yudao.module.product.service.sku.ProductSkuService;
  26 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
24 import org.springframework.context.annotation.Lazy; 27 import org.springframework.context.annotation.Lazy;
25 import org.springframework.stereotype.Service; 28 import org.springframework.stereotype.Service;
26 import org.springframework.transaction.annotation.Transactional; 29 import org.springframework.transaction.annotation.Transactional;
@@ -62,7 +65,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -62,7 +65,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
62 public Long createSpu(ProductSpuCreateReqVO createReqVO) { 65 public Long createSpu(ProductSpuCreateReqVO createReqVO) {
63 // 校验分类 TODO 暂不清楚为什么只能选择第三层的结点 66 // 校验分类 TODO 暂不清楚为什么只能选择第三层的结点
64 //validateCategory(createReqVO.getCategoryId()); 67 //validateCategory(createReqVO.getCategoryId());
65 - // 校验品牌 TODO 暂不校验 68 + // 校验品牌 TODO 暂不校验,前端没有做品牌选择
66 //brandService.validateProductBrand(createReqVO.getBrandId()); 69 //brandService.validateProductBrand(createReqVO.getBrandId());
67 70
68 List<ProductSkuCreateOrUpdateReqVO> skuSaveReqList = createReqVO.getSkus(); 71 List<ProductSkuCreateOrUpdateReqVO> skuSaveReqList = createReqVO.getSkus();
@@ -84,14 +87,13 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -84,14 +87,13 @@ public class ProductSpuServiceImpl implements ProductSpuService {
84 public void updateSpu(ProductSpuUpdateReqVO updateReqVO) { 87 public void updateSpu(ProductSpuUpdateReqVO updateReqVO) {
85 // 校验 SPU 是否存在 88 // 校验 SPU 是否存在
86 validateSpuExists(updateReqVO.getId()); 89 validateSpuExists(updateReqVO.getId());
87 - // 校验分类  
88 - validateCategory(updateReqVO.getCategoryId());  
89 - // 校验品牌  
90 - brandService.validateProductBrand(updateReqVO.getBrandId()); 90 + // 校验分类 TODO 暂不清楚为什么只能选择第三层的结点
  91 + //validateCategory(updateReqVO.getCategoryId());
  92 + // 校验品牌 TODO 暂不校验,前端没有做品牌选择
  93 + //brandService.validateProductBrand(updateReqVO.getBrandId());
91 // 校验SKU 94 // 校验SKU
92 List<ProductSkuCreateOrUpdateReqVO> skuSaveReqList = updateReqVO.getSkus(); 95 List<ProductSkuCreateOrUpdateReqVO> skuSaveReqList = updateReqVO.getSkus();
93 productSkuService.validateSkuList(skuSaveReqList, updateReqVO.getSpecType()); 96 productSkuService.validateSkuList(skuSaveReqList, updateReqVO.getSpecType());
94 -  
95 // 更新 SPU 97 // 更新 SPU
96 ProductSpuDO updateObj = ProductSpuConvert.INSTANCE.convert(updateReqVO); 98 ProductSpuDO updateObj = ProductSpuConvert.INSTANCE.convert(updateReqVO);
97 initSpuFromSkus(updateObj, skuSaveReqList); 99 initSpuFromSkus(updateObj, skuSaveReqList);
@@ -176,21 +178,13 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -176,21 +178,13 @@ public class ProductSpuServiceImpl implements ProductSpuService {
176 178
177 @Override 179 @Override
178 public PageResult<ProductSpuDO> getSpuPage(ProductSpuPageReqVO pageReqVO) { 180 public PageResult<ProductSpuDO> getSpuPage(ProductSpuPageReqVO pageReqVO) {
179 - // 库存告警的 SPU 编号的集合 TODO 一个接口一个接口来  
180 - Set<Long> alarmStockSpuIds = null;  
181 - //if (Boolean.TRUE.equals(pageReqVO.getAlarmStock())) {  
182 - // alarmStockSpuIds = CollectionUtils.convertSet(productSkuService.getSkuListByAlarmStock(), ProductSkuDO::getSpuId);  
183 - // if (CollUtil.isEmpty(alarmStockSpuIds)) {  
184 - // return PageResult.empty();  
185 - // }  
186 - //}  
187 - // 分页查询  
188 - return productSpuMapper.selectPage(pageReqVO, alarmStockSpuIds); 181 + return productSpuMapper.selectPage(pageReqVO);
189 } 182 }
190 183
191 @Override 184 @Override
192 - public PageResult<ProductSpuDO> getSpuPage(AppProductSpuPageReqVO pageReqVO, Integer status) {  
193 - return productSpuMapper.selectPage(pageReqVO, status); 185 + public PageResult<ProductSpuDO> getSpuPage(AppProductSpuPageReqVO pageReqVO) {
  186 + //return productSpuMapper.selectPage(pageReqVO); TODO 有差异接口接受参数类型不对
  187 + return null;
194 } 188 }
195 189
196 @Override 190 @Override
@@ -211,15 +205,45 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -211,15 +205,45 @@ public class ProductSpuServiceImpl implements ProductSpuService {
211 List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId()); 205 List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId());
212 if (CollUtil.isNotEmpty(skus)){ 206 if (CollUtil.isNotEmpty(skus)){
213 List<ProductSkuRespVO> skuRespVoS = ProductSkuConvert.INSTANCE.convertList(skus); 207 List<ProductSkuRespVO> skuRespVoS = ProductSkuConvert.INSTANCE.convertList(skus);
214 - // 获取所有的属性值id  
215 - Set<Long> valueIds = skus.stream().flatMap(p -> p.getProperties().stream()).map(ProductSkuDO.Property::getValueId).collect(Collectors.toSet());  
216 - List<ProductPropertyValueDetailRespBO> valueDetailList = productPropertyValueService.getPropertyValueDetailList(valueIds);  
217 - Map<Long, String> stringMap = valueDetailList.stream().collect(Collectors.toMap(ProductPropertyValueDetailRespBO::getValueId, ProductPropertyValueDetailRespBO::getValueName));  
218 - // 设置属性值名称  
219 - skuRespVoS.stream().flatMap(p -> p.getProperties().stream()).forEach(item ->item.setValueName(stringMap.get(item.getValueId()))); 208 + // 非多规格,不需要处理
  209 + if (ObjectUtil.equal(productSpuDetailRespVO.getSpecType(), true)) {
  210 + // 获取所有的属性值id
  211 + Set<Long> valueIds = skus.stream().flatMap(p -> p.getProperties().stream()).map(ProductSkuDO.Property::getValueId).collect(Collectors.toSet());
  212 + List<ProductPropertyValueDetailRespBO> valueDetailList = productPropertyValueService.getPropertyValueDetailList(valueIds);
  213 + Map<Long, String> stringMap = valueDetailList.stream().collect(Collectors.toMap(ProductPropertyValueDetailRespBO::getValueId, ProductPropertyValueDetailRespBO::getValueName));
  214 + // 设置属性值名称
  215 + skuRespVoS.stream().flatMap(p -> p.getProperties().stream()).forEach(item ->item.setValueName(stringMap.get(item.getValueId())));
  216 + }
220 productSpuDetailRespVO.setSkus(skuRespVoS); 217 productSpuDetailRespVO.setSkus(skuRespVoS);
221 } 218 }
222 return productSpuDetailRespVO; 219 return productSpuDetailRespVO;
223 } 220 }
224 221
  222 + @Override
  223 + @Transactional(rollbackFor = Exception.class)
  224 + public void updateStatus(ProductSpuUpdateStatusReqVO updateReqVO) {
  225 + // 校验存在
  226 + validateSpuExists(updateReqVO.getId());
  227 + // 更新状态
  228 + ProductSpuDO productSpuDO = productSpuMapper.selectById(updateReqVO.getId()).setStatus(updateReqVO.getStatus());
  229 + productSpuMapper.updateById(productSpuDO);
  230 +
  231 + }
  232 +
  233 + @Override
  234 + public Map<Integer, Long> getTabsCount() {
  235 + Map<Integer, Long> map = new HashMap<>();
  236 + // 查询销售中的商品数量
  237 + map.put(ProductSpuTabTypeEnum.FOR_SALE.getType(), productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()));
  238 + // 查询仓库中的商品数量
  239 + map.put(ProductSpuTabTypeEnum.IN_WAREHOUSE.getType(),productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus()));
  240 + // 查询售空的商品数量
  241 + map.put(ProductSpuTabTypeEnum.SOLD_OUT.getType(),productSpuMapper.selectCount(ProductSpuDO::getStock, 0));
  242 + // 查询触发警戒库存的商品数量 TODO 警戒库存暂时为 10,后期需要使用常量或者数据库配置替换
  243 + map.put(ProductSpuTabTypeEnum.ALERT_STOCK.getType(),productSpuMapper.selectCount(new LambdaQueryWrapperX<ProductSpuDO>().le(ProductSpuDO::getStock, 10)));
  244 + // 查询回收站中的商品数量
  245 + map.put(ProductSpuTabTypeEnum.RECYCLE_BIN.getType(),productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()));
  246 + return map;
  247 + }
  248 +
225 } 249 }
yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
@@ -189,7 +189,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -189,7 +189,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
189 }); 189 });
190 productSpuMapper.insert(createReqVO); 190 productSpuMapper.insert(createReqVO);
191 191
192 - Set<Long> alarmStockSpuIds = SetUtils.asSet(createReqVO.getId()); 192 + //Set<Long> alarmStockSpuIds = SetUtils.asSet(createReqVO.getId()); TODO 查询接口已改变没有使用到这个变量
193 193
194 List<ProductSkuDO> productSpuDOS = Arrays.asList(randomPojo(ProductSkuDO.class, o -> { 194 List<ProductSkuDO> productSpuDOS = Arrays.asList(randomPojo(ProductSkuDO.class, o -> {
195 o.setSpuId(createReqVO.getId()); 195 o.setSpuId(createReqVO.getId());
@@ -204,7 +204,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -204,7 +204,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
204 //productSpuPageReqVO.setAlarmStock(true); 204 //productSpuPageReqVO.setAlarmStock(true);
205 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); 205 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
206 206
207 - PageResult<ProductSpuPageRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, alarmStockSpuIds)); 207 + PageResult<ProductSpuPageRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO));
208 Assertions.assertIterableEquals(result.getList(), spuPage.getList()); 208 Assertions.assertIterableEquals(result.getList(), spuPage.getList());
209 assertEquals(spuPage.getTotal(), result.getTotal()); 209 assertEquals(spuPage.getTotal(), result.getTotal());
210 } 210 }
@@ -249,14 +249,15 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -249,14 +249,15 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
249 249
250 // 调用 250 // 调用
251 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); 251 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
  252 + // TODO 已暂时没有相关属性,等用到时再添加
252 //productSpuPageReqVO.setAlarmStock(false); 253 //productSpuPageReqVO.setAlarmStock(false);
253 //productSpuPageReqVO.setBrandId(brandId); 254 //productSpuPageReqVO.setBrandId(brandId);
254 //productSpuPageReqVO.setStatus(ProductSpuStatusEnum.ENABLE.getStatus()); 255 //productSpuPageReqVO.setStatus(ProductSpuStatusEnum.ENABLE.getStatus());
255 - productSpuPageReqVO.setCategoryId(categoryId); 256 + //productSpuPageReqVO.setCategoryId(categoryId);
256 257
257 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); 258 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
258 259
259 - PageResult<ProductSpuPageRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, (Set<Long>) null)); 260 + PageResult<ProductSpuPageRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO));
260 assertEquals(result, spuPage); 261 assertEquals(result, spuPage);
261 } 262 }
262 263