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.
151 lines
3.6 KiB
151 lines
3.6 KiB
package shopping_trolley
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jinzhu/gorm"
|
|
"recook/internal/back"
|
|
"recook/internal/dbc"
|
|
"recook/internal/model/goods"
|
|
"recook/internal/model/shopping_trolley"
|
|
"recook/internal/model/user"
|
|
"recook/internal/v2/lib/jcook"
|
|
"recook/tools"
|
|
"strconv"
|
|
)
|
|
|
|
type addCartParam struct {
|
|
UserID uint `json:"userID"`
|
|
SkuID uint `json:"skuID" validate:"required"`
|
|
Quantity uint `json:"quantity" validate:"required"`
|
|
Address string `json:"address"`
|
|
}
|
|
|
|
/*
|
|
先判断这个商品以前是否加入过购物车 加入过则直接加数据 没有加入过则创建
|
|
*/
|
|
func Create(c *gin.Context) {
|
|
var p addCartParam
|
|
err := tools.ParseParams(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
if p.UserID == 0 {
|
|
back.Suc(c, "操作成功", nil)
|
|
return
|
|
}
|
|
|
|
if p.Quantity > 50 {
|
|
back.Fail(c, "单件最多拍50件")
|
|
return
|
|
}
|
|
|
|
/*找到购物车是否有了这个品牌*/
|
|
var shoppingTrolleyInfo shopping_trolley.Information
|
|
err = dbc.DB.First(&shoppingTrolleyInfo, "user_id = ? AND sku_id = ?", p.UserID, p.SkuID).Error
|
|
if err != nil && false == gorm.IsRecordNotFoundError(err) {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var sku goods.Sku
|
|
err = dbc.DB.First(&sku, "id = ?", p.SkuID).Error
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
if sku.ThirdPartyType == 3 {
|
|
var defaultAddr user.Addr
|
|
err = dbc.DB.First(&defaultAddr, "user_id = ? AND is_default = 1", p.UserID).Error
|
|
if err != nil && false == gorm.IsRecordNotFoundError(err) {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
if p.Address == "" {
|
|
p.Address = defaultAddr.Province + defaultAddr.Address
|
|
}
|
|
|
|
if p.Address == "" {
|
|
back.Err(c, "请填写默认收货地址")
|
|
return
|
|
}
|
|
|
|
id, _ := strconv.Atoi(sku.ThirdPartySkuId)
|
|
client := jcook.GetClient()
|
|
req := jcook.SkuStockReq{
|
|
Address: p.Address,
|
|
SkuList: []jcook.SkuQuantity{
|
|
{
|
|
SkuID: uint(id),
|
|
Quantity: p.Quantity,
|
|
},
|
|
},
|
|
}
|
|
var resp []jcook.SkuStockResp
|
|
if err = client.Exec(req, &resp); err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
if resp[0].StockState == 0 {
|
|
back.Err(c, "该地区无商品")
|
|
return
|
|
}
|
|
}
|
|
|
|
inventory := sku.Inventory
|
|
// 判断商品在不在活动里
|
|
//var promotionSku promotion.Sku
|
|
//{
|
|
// var promotionGoods promotion.Goods
|
|
// dbc.DB.First(&(promotionGoods), "goods_id = ? AND promotion_start_date = ?", sku.GoodsID, time.Now().Format("2006-01-02"))
|
|
// if promotionGoods.ID == 0 {
|
|
// //不是活动
|
|
// tomorrow := time.Now().Add(24 * time.Hour)
|
|
// dbc.DB.First(&(promotionGoods), "goods_id = ? AND promotion_start_date = ?", sku.GoodsID, tomorrow.Format("2006-01-02"))
|
|
// }
|
|
// if promotionGoods.ID > 0 {
|
|
// //是活动
|
|
// dbc.DB.First(&promotionSku, "promotion_goods_id = ? AND sku_id = ?", promotionGoods.ID, sku.ID)
|
|
// inventory = promotionSku.Inventory
|
|
//
|
|
// }
|
|
//}
|
|
|
|
quan := p.Quantity + shoppingTrolleyInfo.Quantity
|
|
|
|
if quan > inventory {
|
|
back.Fail(c, "超出库存")
|
|
return
|
|
}
|
|
|
|
if quan > 50 {
|
|
quan = 50
|
|
}
|
|
|
|
if shoppingTrolleyInfo.ID > 0 {
|
|
if err := dbc.DB.Model(&shoppingTrolleyInfo).
|
|
Updates(shopping_trolley.Information{Quantity: quan}).Error; err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
} else {
|
|
var info goods.Information
|
|
dbc.DB.Select("id, brand_id").First(&info, "id = ?", sku.GoodsID)
|
|
|
|
shoppingTrolleyInfo = shopping_trolley.Information{
|
|
UserID: p.UserID,
|
|
BrandID: info.BrandID,
|
|
GoodsID: info.ID,
|
|
SkuID: p.SkuID,
|
|
Quantity: p.Quantity,
|
|
}
|
|
if err := dbc.DB.Create(&shoppingTrolleyInfo).Error; err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
}
|
|
|
|
back.Suc(c, "操作成功", &shoppingTrolleyInfo)
|
|
}
|