Commit e86214015d6bdfe199e0daecb3c74538713bfe8b

Authored by puhui999
1 parent 35daee84

fix: 完善商品管理

Showing 15 changed files with 96 additions and 99 deletions
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/ProductConstants.java
@@ -7,22 +7,6 @@ package cn.iocoder.yudao.module.product.enums; @@ -7,22 +7,6 @@ package cn.iocoder.yudao.module.product.enums;
7 */ 7 */
8 public interface ProductConstants { 8 public interface ProductConstants {
9 9
10 - // TODO @puhui999:这个变量,可以放到 CategoryDO 的实体里  
11 - /**  
12 - * 父分类编号 - 根分类  
13 - */  
14 - Long PARENT_ID_NULL = 0L;  
15 - /**  
16 - * 限定分类层级  
17 - */  
18 - int CATEGORY_LEVEL = 2;  
19 -  
20 - // TODO @puhui999:这个变量,必要项不大哈  
21 - /**  
22 - * SPU 分页 tab 个数  
23 - */  
24 - int SPU_TAB_COUNTS = 5;  
25 -  
26 /** 10 /**
27 * 警戒库存 TODO 警戒库存暂时为 10,后期需要使用常量或者数据库配置替换 11 * 警戒库存 TODO 警戒库存暂时为 10,后期需要使用常量或者数据库配置替换
28 */ 12 */
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/spu/ProductSpuPageTabEnum.java deleted
1 -package cn.iocoder.yudao.module.product.enums.spu;  
2 -  
3 -import cn.iocoder.yudao.framework.common.core.IntArrayValuable;  
4 -import lombok.AllArgsConstructor;  
5 -import lombok.Getter;  
6 -  
7 -import java.util.Arrays;  
8 -  
9 -// TODO @puhui999:这种非关键的枚举,要不直接写在 ProductSpuPageReqVO 里。类似 public static final Integer TAB_TYPE_FOR_SALE = 0; // 出售中商品  
10 -/**  
11 - * 商品 spu Tabs 标签枚举类型  
12 - *  
13 - * @author HUIHUI  
14 - */  
15 -@Getter  
16 -@AllArgsConstructor  
17 -public enum ProductSpuPageTabEnum implements IntArrayValuable {  
18 -  
19 - FOR_SALE(0,"出售中商品"),  
20 - IN_WAREHOUSE(1,"仓库中商品"),  
21 - SOLD_OUT(2,"已售空商品"),  
22 - ALERT_STOCK(3,"警戒库存"),  
23 - RECYCLE_BIN(4,"商品回收站");  
24 -  
25 - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductSpuPageTabEnum::getType).toArray();  
26 - /**  
27 - * 状态  
28 - */  
29 - private final Integer type;  
30 - /**  
31 - * 状态名  
32 - */  
33 - private final String name;  
34 -  
35 - @Override  
36 - public int[] array() {  
37 - return ARRAYS;  
38 - }  
39 -  
40 -}  
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuExportReqVO.java
1 package cn.iocoder.yudao.module.product.controller.admin.spu.vo; 1 package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
2 2
3 -import cn.iocoder.yudao.framework.common.validation.InEnum;  
4 -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuPageTabEnum;  
5 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
6 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
7 import lombok.Data; 5 import lombok.Data;
@@ -12,6 +10,11 @@ import java.time.LocalDateTime; @@ -12,6 +10,11 @@ import java.time.LocalDateTime;
12 10
13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 11 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 12
  13 +/**
  14 + * 商品Spu导出 Request VO,参数和 ProductSpuPageReqVO 是一致的
  15 + *
  16 + * @author HUIHUI
  17 + */
15 @Schema(description = "管理后台 - 商品Spu导出 Request VO,参数和 ProductSpuPageReqVO 是一致的") 18 @Schema(description = "管理后台 - 商品Spu导出 Request VO,参数和 ProductSpuPageReqVO 是一致的")
16 @Data 19 @Data
17 @NoArgsConstructor 20 @NoArgsConstructor
@@ -22,7 +25,6 @@ public class ProductSpuExportReqVO { @@ -22,7 +25,6 @@ public class ProductSpuExportReqVO {
22 private String name; 25 private String name;
23 26
24 @Schema(description = "前端请求的tab类型", example = "1") 27 @Schema(description = "前端请求的tab类型", example = "1")
25 - @InEnum(ProductSpuPageTabEnum.class)  
26 private Integer tabType; 28 private Integer tabType;
27 29
28 @Schema(description = "商品分类编号", example = "100") 30 @Schema(description = "商品分类编号", example = "100")
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuPageReqVO.java
@@ -2,14 +2,12 @@ package cn.iocoder.yudao.module.product.controller.admin.spu.vo; @@ -2,14 +2,12 @@ package cn.iocoder.yudao.module.product.controller.admin.spu.vo;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import cn.iocoder.yudao.framework.common.validation.InEnum; 4 import cn.iocoder.yudao.framework.common.validation.InEnum;
5 -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuPageTabEnum;  
6 import io.swagger.v3.oas.annotations.media.Schema; 5 import io.swagger.v3.oas.annotations.media.Schema;
7 import lombok.Data; 6 import lombok.Data;
8 import lombok.EqualsAndHashCode; 7 import lombok.EqualsAndHashCode;
9 import lombok.ToString; 8 import lombok.ToString;
10 import org.springframework.format.annotation.DateTimeFormat; 9 import org.springframework.format.annotation.DateTimeFormat;
11 10
12 -import javax.validation.constraints.NotNull;  
13 import java.time.LocalDateTime; 11 import java.time.LocalDateTime;
14 12
15 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -25,11 +23,35 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @@ -25,11 +23,35 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
25 @ToString(callSuper = true) 23 @ToString(callSuper = true)
26 public class ProductSpuPageReqVO extends PageParam { 24 public class ProductSpuPageReqVO extends PageParam {
27 25
  26 + /**
  27 + * 出售中商品
  28 + */
  29 + public static final Integer FOR_SALE = 0;
  30 +
  31 + /**
  32 + * 仓库中商品
  33 + */
  34 + public static final Integer IN_WAREHOUSE = 1;
  35 +
  36 + /**
  37 + * 已售空商品
  38 + */
  39 + public static final Integer SOLD_OUT = 2;
  40 +
  41 + /**
  42 + * 警戒库存
  43 + */
  44 + public static final Integer ALERT_STOCK = 3;
  45 +
  46 + /**
  47 + * 商品回收站
  48 + */
  49 + public static final Integer RECYCLE_BIN = 4;
  50 +
28 @Schema(description = "商品名称", example = "清凉小短袖") 51 @Schema(description = "商品名称", example = "清凉小短袖")
29 private String name; 52 private String name;
30 53
31 @Schema(description = "前端请求的tab类型", required = true, example = "1") 54 @Schema(description = "前端请求的tab类型", required = true, example = "1")
32 - @InEnum(ProductSpuPageTabEnum.class)  
33 private Integer tabType; 55 private Integer tabType;
34 56
35 @Schema(description = "商品分类编号", example = "1") 57 @Schema(description = "商品分类编号", example = "1")
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuRespVO.java
@@ -9,7 +9,7 @@ import java.time.LocalDateTime; @@ -9,7 +9,7 @@ import java.time.LocalDateTime;
9 9
10 /** 10 /**
11 * 商品 SPU Response VO 11 * 商品 SPU Response VO
12 - * TODO 移除ProductSpuPageRespVO相关应用跟换为ProductSpuRespVO已继承ProductSpuBaseVO 补全表格展示所需属性 12 + *
13 * @author HUIHUI 13 * @author HUIHUI
14 */ 14 */
15 @Schema(description = "管理后台 - 商品 SPU Response VO") 15 @Schema(description = "管理后台 - 商品 SPU Response VO")
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/category/ProductCategoryDO.java
@@ -19,6 +19,16 @@ import lombok.*; @@ -19,6 +19,16 @@ import lombok.*;
19 @NoArgsConstructor 19 @NoArgsConstructor
20 @AllArgsConstructor 20 @AllArgsConstructor
21 public class ProductCategoryDO extends BaseDO { 21 public class ProductCategoryDO extends BaseDO {
  22 +
  23 + /**
  24 + * 父分类编号 - 根分类
  25 + */
  26 + public static final Long PARENT_ID_NULL = 0L;
  27 + /**
  28 + * 限定分类层级
  29 + */
  30 + public static final int CATEGORY_LEVEL = 2;
  31 +
22 /** 32 /**
23 * 分类编号 33 * 分类编号
24 */ 34 */
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java
@@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReq @@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReq
10 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; 10 import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
11 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.ProductConstants; 12 import cn.iocoder.yudao.module.product.enums.ProductConstants;
13 -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuPageTabEnum;  
14 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; 13 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
15 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 14 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
16 import org.apache.ibatis.annotations.Mapper; 15 import org.apache.ibatis.annotations.Mapper;
@@ -119,25 +118,25 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> { @@ -119,25 +118,25 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
119 */ 118 */
120 static void appendTabQuery(Integer tabType, LambdaQueryWrapperX<ProductSpuDO> queryWrapper) { 119 static void appendTabQuery(Integer tabType, LambdaQueryWrapperX<ProductSpuDO> queryWrapper) {
121 // 出售中商品 120 // 出售中商品
122 - if (ObjectUtil.equals(ProductSpuPageTabEnum.FOR_SALE.getType(), tabType)) { 121 + if (ObjectUtil.equals(ProductSpuPageReqVO.FOR_SALE, tabType)) {
123 queryWrapper.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()); 122 queryWrapper.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus());
124 } 123 }
125 // 仓储中商品 124 // 仓储中商品
126 - if (ObjectUtil.equals(ProductSpuPageTabEnum.IN_WAREHOUSE.getType(), tabType)) { 125 + if (ObjectUtil.equals(ProductSpuPageReqVO.IN_WAREHOUSE, tabType)) {
127 queryWrapper.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus()); 126 queryWrapper.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus());
128 } 127 }
129 // 已售空商品 128 // 已售空商品
130 - if (ObjectUtil.equals(ProductSpuPageTabEnum.SOLD_OUT.getType(), tabType)) { 129 + if (ObjectUtil.equals(ProductSpuPageReqVO.SOLD_OUT, tabType)) {
131 queryWrapper.eqIfPresent(ProductSpuDO::getStock, 0); 130 queryWrapper.eqIfPresent(ProductSpuDO::getStock, 0);
132 } 131 }
133 // 警戒库存 132 // 警戒库存
134 - if (ObjectUtil.equals(ProductSpuPageTabEnum.ALERT_STOCK.getType(), tabType)) { 133 + if (ObjectUtil.equals(ProductSpuPageReqVO.ALERT_STOCK, tabType)) {
135 queryWrapper.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK) 134 queryWrapper.le(ProductSpuDO::getStock, ProductConstants.ALERT_STOCK)
136 // 如果库存触发警戒库存且状态为回收站的话则不在警戒库存列表展示 135 // 如果库存触发警戒库存且状态为回收站的话则不在警戒库存列表展示
137 .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()); 136 .notIn(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus());
138 } 137 }
139 // 回收站 138 // 回收站
140 - if (ObjectUtil.equals(ProductSpuPageTabEnum.RECYCLE_BIN.getType(), tabType)) { 139 + if (ObjectUtil.equals(ProductSpuPageReqVO.RECYCLE_BIN, tabType)) {
141 queryWrapper.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()); 140 queryWrapper.eqIfPresent(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus());
142 } 141 }
143 } 142 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java
@@ -16,6 +16,7 @@ import java.util.List; @@ -16,6 +16,7 @@ import java.util.List;
16 import java.util.Objects; 16 import java.util.Objects;
17 17
18 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 18 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  19 +import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.PARENT_ID_NULL;
19 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*; 20 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
20 21
21 /** 22 /**
@@ -69,7 +70,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { @@ -69,7 +70,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
69 70
70 private void validateParentProductCategory(Long id) { 71 private void validateParentProductCategory(Long id) {
71 // 如果是根分类,无需验证 72 // 如果是根分类,无需验证
72 - if (Objects.equals(id, ProductConstants.PARENT_ID_NULL)) { 73 + if (Objects.equals(id, PARENT_ID_NULL)) {
73 return; 74 return;
74 } 75 }
75 // 父分类不存在 76 // 父分类不存在
@@ -78,7 +79,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { @@ -78,7 +79,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
78 throw exception(CATEGORY_PARENT_NOT_EXISTS); 79 throw exception(CATEGORY_PARENT_NOT_EXISTS);
79 } 80 }
80 // 父分类不能是二级分类 81 // 父分类不能是二级分类
81 - if (!Objects.equals(category.getParentId(), ProductConstants.PARENT_ID_NULL)) { 82 + if (!Objects.equals(category.getParentId(), PARENT_ID_NULL)) {
82 throw exception(CATEGORY_PARENT_NOT_FIRST_LEVEL); 83 throw exception(CATEGORY_PARENT_NOT_FIRST_LEVEL);
83 } 84 }
84 } 85 }
@@ -108,17 +109,16 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { @@ -108,17 +109,16 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
108 109
109 @Override 110 @Override
110 public Integer getCategoryLevel(Long id) { 111 public Integer getCategoryLevel(Long id) {
111 - if (Objects.equals(id, ProductConstants.PARENT_ID_NULL)) { 112 + if (Objects.equals(id, PARENT_ID_NULL)) {
112 return 0; 113 return 0;
113 } 114 }
114 - // TODO @puhui999:for 的原因,是因为避免脏数据,导致可能的死循环。一般不会超过 100 层哈  
115 int level = 1; 115 int level = 1;
116 - // fix: 循环次数不确定改为while循环  
117 - while (true){ 116 + // for 的原因,是因为避免脏数据,导致可能的死循环。一般不会超过 100 层哈
  117 + for (int i = 0; i < 100; i++) {
118 ProductCategoryDO category = productCategoryMapper.selectById(id); 118 ProductCategoryDO category = productCategoryMapper.selectById(id);
119 // 如果没有父节点,break 结束 119 // 如果没有父节点,break 结束
120 if (category == null 120 if (category == null
121 - || Objects.equals(category.getParentId(), ProductConstants.PARENT_ID_NULL)) { 121 + || Objects.equals(category.getParentId(), PARENT_ID_NULL)) {
122 break; 122 break;
123 } 123 }
124 // 继续递归父节点 124 // 继续递归父节点
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java
@@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; @@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
14 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; 14 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
15 import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; 15 import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper;
16 import cn.iocoder.yudao.module.product.enums.ProductConstants; 16 import cn.iocoder.yudao.module.product.enums.ProductConstants;
17 -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuPageTabEnum;  
18 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; 17 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
19 import cn.iocoder.yudao.module.product.service.brand.ProductBrandService; 18 import cn.iocoder.yudao.module.product.service.brand.ProductBrandService;
20 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService; 19 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService;
@@ -29,6 +28,7 @@ import java.util.*; @@ -29,6 +28,7 @@ import java.util.*;
29 28
30 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
31 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue; 30 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue;
  31 +import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.CATEGORY_LEVEL;
32 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*; 32 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
33 33
34 /** 34 /**
@@ -129,7 +129,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -129,7 +129,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
129 private void validateCategory(Long id) { 129 private void validateCategory(Long id) {
130 categoryService.validateCategory(id); 130 categoryService.validateCategory(id);
131 // 校验层级 131 // 校验层级
132 - if (categoryService.getCategoryLevel(id) != ProductConstants.CATEGORY_LEVEL) { 132 + if (categoryService.getCategoryLevel(id) < CATEGORY_LEVEL) {
133 throw exception(SPU_SAVE_FAIL_CATEGORY_LEVEL_ERROR); 133 throw exception(SPU_SAVE_FAIL_CATEGORY_LEVEL_ERROR);
134 } 134 }
135 } 135 }
@@ -237,17 +237,17 @@ public class ProductSpuServiceImpl implements ProductSpuService { @@ -237,17 +237,17 @@ public class ProductSpuServiceImpl implements ProductSpuService {
237 237
238 @Override 238 @Override
239 public Map<Integer, Long> getTabsCount() { 239 public Map<Integer, Long> getTabsCount() {
240 - Map<Integer, Long> counts = new HashMap<>(ProductConstants.SPU_TAB_COUNTS); 240 + Map<Integer, Long> counts = new HashMap<>(5);
241 // 查询销售中的商品数量 241 // 查询销售中的商品数量
242 - counts.put(ProductSpuPageTabEnum.FOR_SALE.getType(), productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus())); 242 + counts.put(ProductSpuPageReqVO.FOR_SALE, productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus()));
243 // 查询仓库中的商品数量 243 // 查询仓库中的商品数量
244 - counts.put(ProductSpuPageTabEnum.IN_WAREHOUSE.getType(), productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus())); 244 + counts.put(ProductSpuPageReqVO.IN_WAREHOUSE, productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.DISABLE.getStatus()));
245 // 查询售空的商品数量 245 // 查询售空的商品数量
246 - counts.put(ProductSpuPageTabEnum.SOLD_OUT.getType(), productSpuMapper.selectCount(ProductSpuDO::getStock, 0)); 246 + counts.put(ProductSpuPageReqVO.SOLD_OUT, productSpuMapper.selectCount(ProductSpuDO::getStock, 0));
247 // 查询触发警戒库存的商品数量 247 // 查询触发警戒库存的商品数量
248 - counts.put(ProductSpuPageTabEnum.ALERT_STOCK.getType(), productSpuMapper.selectCount()); 248 + counts.put(ProductSpuPageReqVO.ALERT_STOCK, productSpuMapper.selectCount());
249 // 查询回收站中的商品数量 249 // 查询回收站中的商品数量
250 - counts.put(ProductSpuPageTabEnum.RECYCLE_BIN.getType(), productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus())); 250 + counts.put(ProductSpuPageReqVO.RECYCLE_BIN, productSpuMapper.selectCount(ProductSpuDO::getStatus, ProductSpuStatusEnum.RECYCLE.getStatus()));
251 return counts; 251 return counts;
252 } 252 }
253 253
yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImplTest.java
@@ -18,9 +18,8 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq @@ -18,9 +18,8 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
18 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 18 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
19 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; 19 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
20 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 20 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
21 - 21 +import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.PARENT_ID_NULL;
22 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.CATEGORY_NOT_EXISTS; 22 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.CATEGORY_NOT_EXISTS;
23 -import static cn.iocoder.yudao.module.product.enums.ProductConstants.PARENT_ID_NULL;  
24 import static org.junit.jupiter.api.Assertions.*; 23 import static org.junit.jupiter.api.Assertions.*;
25 24
26 /** 25 /**
yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
@@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateR @@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateR
14 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; 14 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
15 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; 15 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
16 import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; 16 import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper;
17 -import cn.iocoder.yudao.module.product.enums.spu.ProductSpuPageTabEnum;  
18 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; 17 import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum;
19 import cn.iocoder.yudao.module.product.service.brand.ProductBrandServiceImpl; 18 import cn.iocoder.yudao.module.product.service.brand.ProductBrandServiceImpl;
20 import cn.iocoder.yudao.module.product.service.category.ProductCategoryServiceImpl; 19 import cn.iocoder.yudao.module.product.service.category.ProductCategoryServiceImpl;
@@ -318,7 +317,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -318,7 +317,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
318 productSpuMapper.insertBatch(createReqVOs); 317 productSpuMapper.insertBatch(createReqVOs);
319 // 调用 318 // 调用
320 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); 319 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
321 - productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.ALERT_STOCK.getType()); 320 + productSpuPageReqVO.setTabType(ProductSpuPageReqVO.ALERT_STOCK);
322 321
323 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); 322 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
324 323
@@ -366,7 +365,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -366,7 +365,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
366 productSpuMapper.insertBatch(createReqVOs); 365 productSpuMapper.insertBatch(createReqVOs);
367 // 调用 366 // 调用
368 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); 367 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
369 - productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.ALERT_STOCK.getType()); 368 + productSpuPageReqVO.setTabType(ProductSpuPageReqVO.ALERT_STOCK);
370 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); 369 PageResult<ProductSpuDO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO);
371 assertEquals(createReqVOs.size(), spuPage.getTotal()); 370 assertEquals(createReqVOs.size(), spuPage.getTotal());
372 } 371 }
@@ -407,11 +406,11 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { @@ -407,11 +406,11 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
407 // 调用 406 // 调用
408 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); 407 ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO();
409 // 查询条件 按需打开 408 // 查询条件 按需打开
410 - //productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.ALERT_STOCK.getType());  
411 - //productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.RECYCLE_BIN.getType());  
412 - //productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.FOR_SALE.getType());  
413 - //productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.IN_WAREHOUSE.getType());  
414 - //productSpuPageReqVO.setTabType(ProductSpuPageTabEnum.SOLD_OUT.getType()); 409 + //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.ALERT_STOCK);
  410 + //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.RECYCLE_BIN);
  411 + //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.FOR_SALE);
  412 + //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.IN_WAREHOUSE);
  413 + //productSpuPageReqVO.setTabType(ProductSpuPageReqVO.SOLD_OUT);
415 //productSpuPageReqVO.setName(createReqVO.getName()); 414 //productSpuPageReqVO.setName(createReqVO.getName());
416 //productSpuPageReqVO.setCategoryId(createReqVO.getCategoryId()); 415 //productSpuPageReqVO.setCategoryId(createReqVO.getCategoryId());
417 416
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressTemplateController.java
1 package cn.iocoder.yudao.module.trade.controller.admin.delivery; 1 package cn.iocoder.yudao.module.trade.controller.admin.delivery;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.*; 6 import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.*;
@@ -71,6 +72,15 @@ public class DeliveryExpressTemplateController { @@ -71,6 +72,15 @@ public class DeliveryExpressTemplateController {
71 return success(DeliveryExpressTemplateConvert.INSTANCE.convertList(list)); 72 return success(DeliveryExpressTemplateConvert.INSTANCE.convertList(list));
72 } 73 }
73 74
  75 + @GetMapping("/list-all-simple")
  76 + @Operation(summary = "获取快递模版精简信息列表", description = "主要用于前端的下拉选项")
  77 + public CommonResult<List<DeliveryExpressTemplateSimpleRespVO>> getSimpleTemplateList() {
  78 + // 获取运费模版列表,只要开启状态的
  79 + List<DeliveryExpressTemplateDO> list = deliveryExpressTemplateService.getDeliveryExpressTemplateList();
  80 + // 排序后,返回给前端
  81 + return success(DeliveryExpressTemplateConvert.INSTANCE.convertList(list));
  82 + }
  83 +
74 @GetMapping("/page") 84 @GetMapping("/page")
75 @Operation(summary = "获得快递运费模板分页") 85 @Operation(summary = "获得快递运费模板分页")
76 @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')") 86 @PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')")
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/expresstemplate/DeliveryExpressTemplateSimpleRespVO.java
@@ -2,19 +2,19 @@ package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstempla @@ -2,19 +2,19 @@ package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstempla
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.*; 4 import lombok.*;
  5 +
  6 +import javax.validation.constraints.NotNull;
5 import java.time.LocalDateTime; 7 import java.time.LocalDateTime;
6 8
7 -// TODO @jason:simplae 是不是不用继承 DeliveryExpressTemplateBaseVO,直接 id name 属性就够了。  
8 @Schema(description = "管理后台 - 快递运费模板 精简 Response VO") 9 @Schema(description = "管理后台 - 快递运费模板 精简 Response VO")
9 @Data 10 @Data
10 -@EqualsAndHashCode(callSuper = true)  
11 @ToString(callSuper = true) 11 @ToString(callSuper = true)
12 -public class DeliveryExpressTemplateSimpleRespVO extends DeliveryExpressTemplateBaseVO { 12 +public class DeliveryExpressTemplateSimpleRespVO {
13 13
14 @Schema(description = "编号,自增", required = true, example = "371") 14 @Schema(description = "编号,自增", required = true, example = "371")
15 private Long id; 15 private Long id;
16 16
17 - @Schema(description = "创建时间", required = true)  
18 - private LocalDateTime createTime; 17 + @Schema(description = "模板名称", required = true, example = "王五")
  18 + private String name;
19 19
20 } 20 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateService.java
@@ -57,6 +57,13 @@ public interface DeliveryExpressTemplateService { @@ -57,6 +57,13 @@ public interface DeliveryExpressTemplateService {
57 List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(Collection<Long> ids); 57 List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(Collection<Long> ids);
58 58
59 /** 59 /**
  60 + * 获得快递运费模板列表
  61 + *
  62 + * @return 快递运费模板列表
  63 + */
  64 + List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList();
  65 +
  66 + /**
60 * 获得快递运费模板分页 67 * 获得快递运费模板分页
61 * 68 *
62 * @param pageReqVO 分页查询 69 * @param pageReqVO 分页查询
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateServiceImpl.java
@@ -198,6 +198,11 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla @@ -198,6 +198,11 @@ public class DeliveryExpressTemplateServiceImpl implements DeliveryExpressTempla
198 } 198 }
199 199
200 @Override 200 @Override
  201 + public List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList() {
  202 + return expressTemplateMapper.selectList();
  203 + }
  204 +
  205 + @Override
201 public PageResult<DeliveryExpressTemplateDO> getDeliveryExpressTemplatePage(DeliveryExpressTemplatePageReqVO pageReqVO) { 206 public PageResult<DeliveryExpressTemplateDO> getDeliveryExpressTemplatePage(DeliveryExpressTemplatePageReqVO pageReqVO) {
202 return expressTemplateMapper.selectPage(pageReqVO); 207 return expressTemplateMapper.selectPage(pageReqVO);
203 } 208 }