mall:调整部分 Spu、Sku、Property、Group、Shop 的表设计

This commit is contained in:
YunaiV 2022-07-31 13:13:26 +08:00
parent 2340f09c68
commit 9577f9b17d
19 changed files with 401 additions and 91 deletions

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.product.enums.delivery;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 配送方式枚举
*
* @author 芋道源码
*/
@Getter
@AllArgsConstructor
public enum DeliveryModeEnum implements IntArrayValuable {
SHOP_DELIVERY(1, "商家配送"),
USER_PICK_UP(2, "用户自提");
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DeliveryModeEnum::getMode).toArray();
/**
* 配送方式
*/
private final Integer mode;
/**
* 状态名
*/
private final String name;
@Override
public int[] array() {
return ARRAYS;
}
}

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.product.enums.group;
import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 商品分组的样式枚举
*
* @author 芋道源码
*/
@Getter
@AllArgsConstructor
public enum ProductGroupStyleEnum implements IntArrayValuable {
ONE(1, "每列一个"),
TWO(2, "每列两个"),
THREE(2, "每列三个"),;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductGroupStyleEnum::getStyle).toArray();
/**
* 列表样式
*/
private final Integer style;
/**
* 状态名
*/
private final String name;
@Override
public int[] array() {
return ARRAYS;
}
}

View File

@ -6,7 +6,7 @@ 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.sku.vo.*;
import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import cn.iocoder.yudao.module.product.service.sku.ProductSkuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;

View File

@ -10,7 +10,7 @@ import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.*;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
/**
* 商品sku Convert

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.product.dal.dataobject.category;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.product.dal.dataobject.shop.ShopDO;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
@ -38,6 +39,12 @@ public class ProductCategoryDO extends BaseDO {
* 父分类编号
*/
private Long parentId;
/**
* 店铺编号
*
* 关联 {@link ShopDO#getId()}
*/
private Long shopId;
/**
* 分类名称
*/

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.product.dal.dataobject.delivery;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 配送模板 SPU DO
*
* @author 芋道源码
*/
@TableName("delivery_template")
@KeySequence("delivery_template_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeliveryTemplateDO extends BaseDO {
/**
* 编号自增
*/
@TableId
private Long id;
}

View File

@ -0,0 +1,50 @@
package cn.iocoder.yudao.module.product.dal.dataobject.group;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.product.dal.dataobject.shop.ShopDO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 商品分组的绑定 DO
*
* @author 芋道源码
*/
@TableName("product_group_bind")
@KeySequence("product_group_bind_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductGroupBindDO extends BaseDO {
/**
* 编号自增
*/
@TableId
private Long id;
/**
* 店铺编号
*
* 关联 {@link ShopDO#getId()}
*/
private Long shopId;
/**
* 商品分组编号
*
* 关联 {@link ProductGroupDO#getId()}
*/
private Long groupId;
/**
* 商品 SPU 编号
*
* 关联 {@link ProductSpuDO#getId()}
*/
private Long spuId;
}

View File

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.product.dal.dataobject.group;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.product.dal.dataobject.shop.ShopDO;
import cn.iocoder.yudao.module.product.enums.group.ProductGroupStyleEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -26,7 +29,42 @@ public class ProductGroupDO extends BaseDO {
*/
@TableId
private Long id;
// TODO 芋艿字段补全
/**
* 店铺编号
*
* 关联 {@link ShopDO#getId()}
*/
private Long shopId;
/**
* 分组名称
*/
private String name;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 商品数量
*/
private Integer count;
/**
* 排序
*/
private Integer sort;
/**
* 风格用于 APP 首页展示商品的样式
*
* 枚举 {@link ProductGroupStyleEnum}
*/
private Integer style;
/**
* 是否默认
*
* true - 系统默认不允许删除
* false - 自定义允许删除
*/
private Boolean defaulted;
}

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.product.dal.dataobject.property;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.product.dal.dataobject.shop.ShopDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -27,15 +28,23 @@ public class ProductPropertyDO extends BaseDO {
*/
@TableId
private Long id;
/**
* 店铺编号
*
* 关联 {@link ShopDO#getId()}
*/
private Long shopId;
/**
* 规格名称
*/
private String name;
/**
* 状态 0 开启 1 禁用
* 状态
*
* {@link CommonStatusEnum}
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
// TODO 芋艿rule规格属性 (发布商品时 SKU 关联)规格参数(搜索商品时 Category 关联搜索)
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.product.dal.dataobject.property;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
@ -28,9 +29,9 @@ public class ProductPropertyValueDO extends BaseDO {
@TableId
private Long id;
/**
* 规格键 id
* 规格键编号
*
* TODO @franky加个 关联 {@link ProductPropertyDO#getId()} 这样就能更好的知道
* 关联 {@link ProductPropertyDO#getId()}
*/
private Long propertyId;
/**
@ -38,7 +39,9 @@ public class ProductPropertyValueDO extends BaseDO {
*/
private String name;
/**
* 状态 1 开启 2 禁用
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;

View File

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.product.dal.dataobject.shop;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
// TODO 芋艿待设计
/**
* 店铺 DO
*
* @author 芋道源码
*/
@TableName("shop")
@KeySequence("shop_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ShopDO extends BaseDO {
private Long id;
}

View File

@ -0,0 +1,112 @@
package cn.iocoder.yudao.module.product.dal.dataobject.sku;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
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.spu.ProductSpuDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.*;
import java.util.List;
/**
* 商品 SKU DO
*
* @author 芋道源码
*/
@TableName("product_sku")
@KeySequence("product_sku_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductSkuDO extends BaseDO {
/**
* 商品 SKU 编号自增
*/
@TableId
private Long id;
/**
* 商品 SKU 名字
*/
private String name;
/**
* SPU 编号
*
* 关联 {@link ProductSpuDO#getId()}
*/
private Long spuId;
/**
* 规格值数组JSON 格式
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Property> properties;
/**
* 销售价格单位
*/
private Integer price;
/**
* 原价单位
*/
private Integer originalPrice;
/**
* SKU 的条形码
*/
private String barCode;
/**
* 图片地址
*/
private String picUrl;
/**
* SKU 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 购买中的库存
*
* 商品 SKU 被下单时未付款的商品 SKU 数量
*/
private Integer stocks;
/**
* 实际库存
*/
private Integer actualStocks;
/**
* 商品重量单位kg 千克
*/
private Double weight;
/**
* 商品体积单位m^3 平米
*/
private Double volume;
@Data
public static class Property {
/**
* 属性编号
*
* 关联 {@link ProductPropertyDO#getId()}
*/
private Long propertyId;
/**
* 属性值编号
*
* 关联 {@link ProductPropertyValueDO#getId()}
*/
private Long valueId;
}
}

View File

@ -1,64 +0,0 @@
package cn.iocoder.yudao.module.product.dal.dataobject.spu;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 商品sku DO
*
* @author 芋道源码
*/
@TableName("product_sku")
@KeySequence("product_sku_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductSkuDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* spu编号
*/
private Long spuId;
/**
* 规格值数组-json格式 [{propertId: , valueId: }, {propertId: , valueId: }]
*/
// TODO franky可以定义一个内部的 Property 然后 List<Property>
private String properties;
/**
* 销售价格单位
*/
private Integer price;
/**
* 原价单位
*/
private Integer originalPrice;
/**
* 成本价单位
*/
private Integer costPrice;
/**
* 条形码
*/
private String barCode;
/**
* 图片地址
*/
private String picUrl;
/**
* 状态 0-正常 1-禁用
*/
private Integer status;
}

View File

@ -4,7 +4,10 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO;
import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
import cn.iocoder.yudao.module.product.dal.dataobject.group.ProductGroupDO;
import cn.iocoder.yudao.module.product.dal.dataobject.delivery.DeliveryTemplateDO;
import cn.iocoder.yudao.module.product.dal.dataobject.shop.ShopDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import cn.iocoder.yudao.module.product.enums.delivery.DeliveryModeEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@ -34,6 +37,16 @@ public class ProductSpuDO extends BaseDO {
*/
@TableId
private Long id;
/**
* 店铺编号
*
* 关联 {@link ShopDO#getId()}
*/
private Long shopId;
// ========== 基本信息 =========
/**
* 商品名称
*/
@ -58,13 +71,6 @@ public class ProductSpuDO extends BaseDO {
* 关联 {@link ProductBrandDO#getId()}
*/
private Long brandId;
/**
* 商品分组编号数组
*
* 关联 {@link ProductGroupDO#getId()}
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Long> groupIds;
/**
* 商品图片地址数组
*/
@ -80,6 +86,9 @@ public class ProductSpuDO extends BaseDO {
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
// ========== SKU 相关字段 =========
/**
* 价格单位使用
*
@ -87,14 +96,29 @@ public class ProductSpuDO extends BaseDO {
*/
private Integer price;
/**
* 库存数量
* 库存
*
* 基于其对应的 {@link ProductSkuDO#getPrice()} 求和
* 基于其对应的 {@link ProductSkuDO#getActualStocks()} 求和
*/
private Integer quantity;
private Integer totalStocks;
/**
* 已销售数量
*/
private Integer soldNum;
// ========== 物流相关字段 =========
// TODO 芋艿配送方式商家配送商家自提
// TODO 芋艿运费设置如果选择了 商家配送 配送方式则选择运费设置编号
/**
* 配送方式
*
* 枚举 {@link DeliveryModeEnum}
*/
private Integer deliveryMode;
/**
* 配置模板编号
*
* 关联 {@link DeliveryTemplateDO#getId()}
*/
private Long deliveryTemplateId;
}

View File

@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuExportReqVO;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuPageReqVO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

View File

@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuCreateR
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuExportReqVO;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuPageReqVO;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.ProductSkuUpdateReqVO;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import javax.validation.Valid;
import java.util.Collection;

View File

@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.product.controller.admin.property.vo.ProductPrope
import cn.iocoder.yudao.module.product.controller.admin.propertyvalue.vo.ProductPropertyValueRespVO;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.*;
import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.mysql.sku.ProductSkuMapper;
import cn.iocoder.yudao.module.product.enums.ErrorCodeConstants;
import cn.iocoder.yudao.module.product.service.property.ProductPropertyService;

View File

@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppSpuPageReqVO;
import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppSpuPageRespVO;
import cn.iocoder.yudao.module.product.convert.sku.ProductSkuConvert;
import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
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.service.category.ProductCategoryService;

View File

@ -8,7 +8,7 @@ import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.product.controller.admin.sku.vo.*;
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
import cn.iocoder.yudao.module.product.dal.mysql.sku.ProductSkuMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;