功能介绍
- 加入商品
- 更新商品数
- 查询商品数
- 移除商品
- 单选/取消
- 全选/取消
- 购物车列表
学习目标
- 购物车模块的设计思想
有哪些注意要点 - 如何封装一个高复用的购物车核心方法
各类功能都会使用这个方法 - 解决浮点型商业运算中丢失精度的问题
主要是价格计算,不能有任何问题
数据表设计
之前的章节已经有介绍了,但是我开始怀疑这种关系型数据库对每个人购物车的这种存储方式并不是特别有优秀,这个等我了解一下非关系型数据库再说
购物车接口设计
- 购物车List列表
/cart/list.do
http://localhost:8080/cart/list.do
注意点:
需要先登录
NEED_LOGIN(10,”NEED_LOGIN”)表示需要登录的错误编码
价格的单位是元,保留小数后2位
request
无参数,需要登录状态
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":1,
"userId":13,
"productId":1,
"quantity":1,
"productName":"iphone7",
"productSubtitle":"双十一促销",
"productMainImage":"mainimage.jpg",
"productPrice":7199.22,
"productStatus":1,
"productTotalPrice":7199.22,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
},
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":10198.33
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 购物车添加商品
/cart/add.do
http://localhost:8080/cart/add.do?productId=1&count=10
请注意这个字段,超过库存数量会返回这样的标识”limitQuantity”
失败的:LIMIT_NUM_FAIL 成功的:LIMIT_NUM_SUCCESS
(这里的失败成功标识就不要太纠结了,我也不太喜欢这样,感觉所有接口没有统一的命名方法,公司里面会有更加好的规范吧)
request
productId,
count
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":1,
"userId":13,
"productId":1,
"quantity":1,
"productName":"iphone7",
"productSubtitle":"双十一促销",
"productMainImage":"mainimage.jpg",
"productPrice":7199.22,
"productStatus":1,
"productTotalPrice":7199.22,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
},
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":10198.33
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 更新购物车某个产品的数量
/cart/update.do
http://localhost:8080/cart/update.do?product=1&count=2
相应内容同接口2
request
productId,
count
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":1,
"userId":13,
"productId":1,
"quantity":1,
"productName":"iphone7",
"productSubtitle":"双十一促销",
"productMainImage":"mainimage.jpg",
"productPrice":7199.22,
"productStatus":1,
"productTotalPrice":7199.22,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
},
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":10198.33
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 移除购物车某个产品
/cart/delete_product.do
http://localhost:8080/cart/delete_product.do?productIds=1,3
request
productIds
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":2999.11
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 购物车选中某个商品
/cart/select.do
http://localhost:8080/cart/select.do?productId=1
选中或者取消选中会引起总价的变化,通过调用高复用核心方法来重新给出VoList
request
productId
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":2999.11
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 购物车取消选中某个商品
/cart/un_select.do
http://localhost:8080/cart/un_select.do?productId=2
注意返回值中的cartTotalPrice,如果反选之后总价的变化
request
productId
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":2999.11
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 查询购物车中里的产品数量
/cart/get_cart_product_count.do
http://localhost:8080/cart/get_cart_product_count.do
未登录返回0
request
无
response
success
{
"status":0,
"data":0
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 购物车全选
/cart/select_all.do
http://localhost:8080/cart/select_all.do
注意返回值中的cartTotalPrice的变化
request
无
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":true,
"cartTotalPrice":2999.11
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
- 购物车取消全选
/cart/un_select_all.do
http://localhost:8080/cart/un_select_all.do
注意返回值中的cartTotalPrice的变化
request
无
response
success
{
"status":0,
"data":{
"cartProductVolist":{
{
"id":2,
"userId":13,
"productId":2,
"quantity":1,
"productName":"oppo R8",
"productSubtitle":"oppo促销进行中",
"productMainImage":"mainimage.jpg",
"productPrice":2999.11,
"productStatus":1,
"productTotalPrice":2999.11,
"productStock":86,
"productChecked":1,
"limitQuantity":"LIMIT_NUM_SUCCESS"
}
},
"allChecked":false,
"cartTotalPrice":2999.11
}
}
fail
{
"status":10,
"msg":"用户未登录,请登录"
}
小结
接口定义完后就可以按照接口来开发了···一样的套路