时里院子市集
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

4.4 KiB

后端多规格功能适配指南

概述

前端已完成商品多规格功能集成,需要后端相应适配以支持完整的多规格商品流程。

需要适配的API接口

1. 商品规格查询接口

接口: GET /shop/shop-goods-spec 当前问题: 参数模型中缺少 goodsId 字段 需要修改:

// ShopGoodsSpecParam 类需要添加 goodsId 字段
public class ShopGoodsSpecParam extends PageParam {
    private Long goodsId;  // 添加此字段
    private Long id;
    private String keywords;
    // ... getter/setter
}

2. 商品SKU查询接口

接口: GET /shop/shop-goods-sku 当前问题: 参数模型中缺少 goodsId 字段 需要修改:

// ShopGoodsSkuParam 类需要添加 goodsId 字段
public class ShopGoodsSkuParam extends PageParam {
    private Long goodsId;  // 添加此字段
    private Long id;
    private String keywords;
    // ... getter/setter
}

3. 购物车接口适配

当前购物车数据结构:

interface CartItem {
  goodsId: number;
  name: string;
  price: string;
  image: string;
  quantity: number;
  addTime: number;
  skuId?: number;        // 新增SKU ID
  specInfo?: string;     // 新增规格信息
}

后端需要适配:

  • 购物车存储时支持 skuIdspecInfo 字段
  • 购物车查询时返回完整的SKU信息
  • 价格计算时优先使用SKU价格

4. 订单创建接口适配

前端订单数据结构:

interface OrderGoodsItem {
  goodsId: number;
  quantity: number;
  skuId?: number;        // SKU ID
  specInfo?: string;     // 规格信息字符串
}

后端需要处理:

  • 订单商品项支持SKU信息
  • 库存扣减时根据SKU进行
  • 价格计算时使用SKU价格
  • 订单详情显示规格信息

数据库表结构检查

1. 购物车表 (如果有)

确保包含以下字段:

ALTER TABLE shop_cart ADD COLUMN sku_id BIGINT COMMENT 'SKU ID';
ALTER TABLE shop_cart ADD COLUMN spec_info VARCHAR(500) COMMENT '规格信息';

2. 订单商品表

确保包含以下字段:

-- shop_order_goods 表应该已有这些字段
-- sku_id BIGINT COMMENT 'SKU ID'
-- spec VARCHAR(255) COMMENT '商品规格'

业务逻辑适配

1. 库存管理

  • 单规格商品:使用 shop_goods.stock
  • 多规格商品:使用 shop_goods_sku.stock
  • 下单时根据是否有SKU选择对应的库存扣减逻辑

2. 价格计算

  • 单规格商品:使用 shop_goods.price
  • 多规格商品:使用 shop_goods_sku.price
  • 订单金额计算时优先使用SKU价格

3. 规格数据组织

后端查询规格时需要按商品ID过滤:

// 示例查询逻辑
public List<ShopGoodsSpec> listByGoodsId(Long goodsId) {
    return shopGoodsSpecMapper.selectList(
        new QueryWrapper<ShopGoodsSpec>()
            .eq("goods_id", goodsId)
            .orderByAsc("spec_name", "spec_value")
    );
}

前端调用示例

1. 加载商品规格

// 前端会这样调用
listShopGoodsSpec({ goodsId: 123 })
listShopGoodsSku({ goodsId: 123 })

2. 创建订单

// 单规格商品
{
  goodsItems: [{
    goodsId: 123,
    quantity: 2
  }]
}

// 多规格商品
{
  goodsItems: [{
    goodsId: 123,
    quantity: 2,
    skuId: 456,
    specInfo: "颜色:红色|尺寸:L"
  }]
}

测试建议

  1. 创建测试数据:

    • 创建一个多规格商品
    • 添加规格组(颜色、尺寸等)
    • 生成对应的SKU数据
  2. 测试场景:

    • 商品详情页规格加载
    • 规格选择和SKU匹配
    • 加入购物车(多规格)
    • 立即购买(多规格)
    • 订单创建和支付
  3. 边界情况:

    • SKU库存为0的处理
    • 规格数据不完整的处理
    • 单规格和多规格商品混合购买

注意事项

  1. 向后兼容: 确保单规格商品的现有功能不受影响
  2. 数据一致性: SKU价格和库存与主商品数据的同步
  3. 性能优化: 规格和SKU数据的查询优化
  4. 错误处理: 规格选择错误、库存不足等异常情况的处理

完成检查清单

  • ShopGoodsSpecParam 添加 goodsId 字段
  • ShopGoodsSkuParam 添加 goodsId 字段
  • 规格查询接口支持按商品ID过滤
  • SKU查询接口支持按商品ID过滤
  • 购物车接口支持SKU信息
  • 订单创建接口支持SKU信息
  • 库存扣减逻辑适配多规格
  • 价格计算逻辑适配多规格
  • 测试多规格商品完整流程