spu+sku统一接口文档说明
# spu+sku v1.0统一接口说明(RestFul风格)
- 改造目的:将现系统product单规格购买改为传统spu+sku多规格购买,电商都是基于产品服务的,所以此项改动巨大,后面不定期的框架升级做准备。
- 紧急程度:一般(必要时,介意稳定后解决冲突和上线准备)
- 大体概述:现系统的product对象可以说是即是spu也是sku,通俗来说即满足产品属性也满足库存属性,我们做的就是将原product的字段集合拆分为产品属性集合和库存属性集合,从设计角度来思考,库存属性只应该考虑product的库存字段相关属性,其他都为spu字段。但从实际开发中,某些业务场景是针对sku这个颗粒度上的,导致拆和不拆分没啥区别,配置项及其复杂。还有就是套餐问题,其实宏观来看具体套餐就是一个sku,是多个单品sku的集合,所以在设计上来说如果有套餐就必须存在sku->stock 一对多关系的中间表,还有就是页面实现的困难,具体指这个规格的选择,目前暂定规格库中选取。
------
几大难度:
1.拆分product--->spu+sku
2.套餐中间表 sku--->stock
3.规格库和页面实现
4.拆表sql编写 准备
------
服务器地址:
测试机:10.60.1.150:8081
启安本地 :10.60.1.226
-------
1.拆分实现(拆的过细就没有必要有这项需求)
sku:id、combination、code、barCode、spuId、salesPrice、giftPackageReward、cashBackReward、stock
spu:id、title、subtitle、weight、costPrice、category、type、tag等
-------
2.套餐实现
sku->skuDetail
当sku.combination=1时,说明是套餐类型的sku,在中间表skuDetail中找到该sku的套餐里的单品(数量+sku)
-------
3.规格实现
手写吧,长度不超过15
-------
4.sql编写准备工作
测试机数据库 pro2spu 和 pro2sku文件以及proline2skudetail,对应的产品匹配到spu的sql执行语句,产品匹配到sku的sql执行语句,套餐子表匹配到skuDetail的sql执行语句,这些都是初始化表后第一时间的数据同步语句,原表必要备份和保留。
pro2spu
INSERT INTO `abc_spu` (
`id`,
`activity_status`,
`actual_sales_count`,
`actual_sum_value`,
`ad_image`,
`add_Cart`,
`add_virtual_value`,
`allocation_price`,
`appointment_notice`,
`bigImage`,
`bonus_money_cheng_ben`,
`brand`,
`business_card_status`,
`buy_integral`,
`buy_now`,
`buy_roles`,
`claim_status`,
`convert_integral`,
`cost_price`,
`create_date`,
`creator`,
`discount_num`,
`discount_num_day`,
`discount_num_day_of_member`,
`discount_num_of_member`,
`end_time`,
`feature`,
`file`,
`integral`,
`integral_statu`,
`market_price`,
`modifier`,
`modify_date`,
`myFile1`,
`myImage2`,
`myImage3`,
`number`,
`priority`,
`pro_Type`,
`product_effect`,
`product_statuses`,
`purchase_status`,
`pvValue`,
`recommend_products`,
`recommend_status`,
`remark`,
`sale_status`,
`sales_count`,
`sales_price`,
`scheduled`,
`shopping_tip`,
`show_real`,
`show_roles`,
`start_time`,
`status`,
`store_id`,
`store_name`,
`subtitle`,
`title`,
`type`,
`unit_price`,
`use_info`,
`video_img_url`,
`video_url`,
`virtual_status`,
`weight`,
`whether_sync`,
`wms_sync`,
`year_sum_value`,
`category_id`,
`tag_id`,
`unit_id`
) SELECT
`id`,
`activity_status`,
`actual_sales_count`,
`actual_sum_value`,
`ad_image`,
`add_Cart`,
`add_virtual_value`,
`allocationprice`,
`appointment_notice`,
`bigImage`,
`bonusMoneyChengben` ,
`brand`,
`business_card_status`,
`buy_integral`,
`buy_now`,
`buy_roles`,
`claim_status`,
`convert_integral`,
`costprice` `cost_price`,
`create_date`,
`creator`,
`discount_num`,
`discount_num_day`,
`discount_num_day_of_member`,
`discount_num_of_member`,
`end_time`,
`feature`,
`file`,
`integral`,
`integral_statu`,
`market_price`,
`modifier`,
`modify_date`,
`myFile1`,
`myImage2`,
`myImage3`,
`number`,
`priority`,
`pro_Type`,
`product_effect`,
`product_statuses`,
`purchase_status`,
`pvValue`,
`recommend_products`,
`recommend_status`,
`remark`,
`sale_status`,
`sales_count`,
`salesprice` `sales_price`,
`scheduled`,
`shopping_tip`,
`show_real`,
`show_roles`,
`start_time`,
`status`,
`store_id`,
`store_name`,
`name` `subtitle`,
`name` `title`,
`type`,
`unitprice` `unit_price`,
`use_info`,
`video_img_url`,
`video_url`,
`virtual_status`,
`weight`,
`whether_sync`,
`wms_sync`,
`year_sum_value`,
`category_id`,
`tag_id`,
`unit_id`
FROM
abc_product
pro2sku
INSERT INTO `abc_sku` (
`id`,
`bar_code`,
`cash_back_reward`,
`code`,
`combination`,
`create_date`,
`creator`,
`gift_package_reward`,
`modifier`,
`modify_date`,
`sales_price`,
`spu_id`,
`status`,
`stock_lower`,
`stock_upper`
) SELECT
null,
`barCode`,
`cash_back_reward`,
`code`,
`isProduct_package`,
`create_date`,
`creator`,
`gift_package_reward`,
`modifier`,
`modify_date`,
`salesprice`,
id `spu_id`,
`status`,
`stock_lower`,
`stock_upper`
FROM
abc_product
proline2skudetail
INSERT INTO `abc_sku_detail` (
`id`,
`count`,
`create_date`,
`creator`,
`modifier`,
`modify_date`,
`sku_left`,
`status`
) SELECT
NULL,
`productCount`,
`create_date`,
`creator`,
`modifier`,
`modify_date`,
`productId`,
`status`
FROM
abc_product_line;
-------
表A-统一接口说明
| 编号 | 作用 | 老接口 | 新接口 | 方式 | 传参 | 反参 |
| :--: | :-----------: | :------------------: | :--------------------------: | :--: | :---------------------: | ----- |
| 1 | 获取商品详情页 | 无 | cSpu/info/{id}| GET | id={id} 必传 int签到类型 spuId | 看表C |
| 2 | 添加购物车 | 无 | cShopCart/cAdd?skuId={skuId} | POST | skuId int 必传 sku的id | 0失败1成功 |
| 3 | 提交订单 | 无 | cSalesOrder/clientAddSalesOrder | POST | salesOrderInfoReqVO 看表G| - |
表B-传参说明(无)
------
表C-反参说明
| 编号 | 说明 | 举例 |
| :--: | --------------------------------------------------------- | ------------------------------------------------------------ |
| 1 | res.data 是 Spu 对象| 看表D|
------
表D-Spu (spu)对象属性(大多数字段同product,含sku)
|字段|意义|举例|
|-|-|-|
|id|id标识|90572|
|title|标题|xxx商品|
|subtitle|副标题|标签说明|
|weight|重量||
|priority|排序权重||
|remark|备注|xx|
|adImage|广告图|[1,-1,-1,1,0,0,0]|
|unit|产品单位||
|status|状态||
|category|分类||
|type|类型||
|tag|标签||
|salesPrice|销售价|int型|
|saleStatus|销售状态|int型|
|showRoles|展示角色集|int型|
|buyRoles|购买角色集|int型|
|actualSalesCount|实际销量|int型|
|unitPrice|单价|int型|
|brand|品牌||
|buyNow|立即购买标识||
|addCart|购物车标识||
|skus|sku集|sku的集合|
表E-Sku(sku)对象属性
|字段|意义|举例|
|-|-|-|
|id|ID||
|combination|套餐标识|0否1是|
|code|类型||
|barCode|条形码|-|
|spuId|supid|-|
|salesPrice|销售价|-|
|giftPackageReward|礼包奖励-|
|cashBackReward|返现奖励|-|
|stock|库存|-|
|statue|状态|-|
表F-CReissuePanelVO(移动端补签面板)对象属性 (部分字段意义参考CSignInCurRoundInfoVO 表D 一致性)
|字段|意义|举例|
|-|-|-|
|customerId|用户唯一id标识|90572|
|type|签到类型 |0日常|
|startTime|开始时间|"2021-05-12 14:54:23"|
|endTime|结束时间|"2021-05-19 14:54:22"|
|curTime|当前时间|"2021-05-18 14:54:22"|
|curRoundStatus|本轮签到状态|-1当前角色不支持 0未开始 1进行中 2已结束|
|details|名字集合|List<CReissuePanelDetailVO> 每个明细属性查看表G|
表G-ClientSalesOrderInfoReqVO(移动端订单封装)对象属性
|字段|意义|举例|
|-|-|-|
|customerId|用户唯一id标识|90572|
|submissionMethod| 提交方式 |0购物车1立即提交|
|systemSource| ||
|isDianmeiApp| ||
|addressId| ||
|uuid|||
|userIntoOrder| ||
|skuId| ||
|skuCount| ||
|payType| ||
|orderMessage| ||
|deliveryMode| ||
|couponId| ||
|userId| ||
|userIdCode| ||
|orderSourceType| ||
|selectShopCartIds|已选择好的skuid集合 ||