添加订单

master
kanade 3 years ago
parent 949c2d8272
commit ef5bb922c1

@ -16,6 +16,7 @@ import (
"recook/internal/model/user" "recook/internal/model/user"
"recook/internal/v2/lib/jcook" "recook/internal/v2/lib/jcook"
"recook/internal/v2/lib/shama" "recook/internal/v2/lib/shama"
"recook/internal/v2/lib/supply"
"recook/internal/v2/model/jyy" "recook/internal/v2/model/jyy"
goods2 "recook/internal/v2/model/recook/goods" goods2 "recook/internal/v2/model/recook/goods"
"recook/tools" "recook/tools"
@ -94,7 +95,7 @@ func SubmitOrder(c *gin.Context) {
return return
} }
if !configs.IsProductionEnv() { if !configs.IsProductionEnv() {
if goodsInfo.ThirdPartyType != 0 { if goodsInfo.ThirdPartyType != 0 && goodsInfo.ThirdPartyType != goods2.RecookGoodsInfoThirdPartyTypeSupply {
back.Fail(c, "测试环境无法购买") back.Fail(c, "测试环境无法购买")
return return
} }
@ -242,6 +243,18 @@ func SubmitOrder(c *gin.Context) {
} }
orderCopy.Kind = 3 orderCopy.Kind = 3
orderCopy.ShaMaOrderID = resp.OrderID orderCopy.ShaMaOrderID = resp.OrderID
case 4000:
channelOrderID := strconv.Itoa(int(orderCopy.ID))
thirdPartyOrderSn, err := SupplyOrderSubmit(tx, c.ClientIP(), data, vendor, previewOrderAddr, fData, channelOrderID)
if err != nil {
log.Println("订单生成失败:", err.Error())
back.Err(c, err.Error())
tx.Rollback()
return
}
orderCopy.Kind = 4
orderCopy.ThirdPartyType = goods2.RecookGoodsInfoThirdPartyTypeSupply
orderCopy.ThirdPartyOrderSn = thirdPartyOrderSn
} }
} }
if condition { if condition {
@ -431,67 +444,61 @@ func ShaMaOrderSubmit(tx *gorm.DB, ip string, data map[uint][]order_preview.Good
return resp, nil return resp, nil
} }
func SupplyOrderSubmit(tx *gorm.DB, ip string, data map[uint][]order_preview.GoodsDetail, vendor uint, previewOrderAddr order_preview.Addr, fData map[uint]decimal.Decimal, channelOrderID string) (jcook.OrderSubmitResp, error) { func SupplyOrderSubmit(tx *gorm.DB, ip string, data map[uint][]order_preview.GoodsDetail, vendor uint, previewOrderAddr order_preview.Addr, fData map[uint]decimal.Decimal, channelOrderID string) (supplyOrderSn string, err error) {
client := jcook.GetClient()
t := make([]jcook.LogisticsInfo, 0)
orderFee := decimal.Zero orderFee := decimal.Zero
var freightFeeItems []supply.OrderFreightFeeItem
for _, j := range data[vendor] { for _, j := range data[vendor] {
var sku goods.Sku var sku goods.Sku
if err := tx.First(&sku, "id = ?", j.SkuID).Error; err != nil { if err := tx.First(&sku, "id = ?", j.SkuID).Error; err != nil {
return jcook.OrderSubmitResp{}, err return supplyOrderSn, errors.New("商品错误")
} }
cid, _ := strconv.Atoi(sku.ThirdPartySkuId) supplySkuId, _ := strconv.Atoi(sku.ThirdPartySkuId)
t = append(t, jcook.LogisticsInfo{
SkuID: uint(cid), freightFeeItems = append(freightFeeItems, supply.OrderFreightFeeItem{
SkuId: uint(supplySkuId),
Quantity: j.Quantity, Quantity: j.Quantity,
SkuPrice: sku.PurchasePrice, Price: sku.PurchasePrice,
}) })
amount := sku.PurchasePrice.Mul(decimal.NewFromInt(int64(j.Quantity)))
orderFee = orderFee.Add(amount) orderFee = orderFee.Add(sku.PurchasePrice.Mul(decimal.NewFromInt(int64(j.Quantity))))
} }
addr := previewOrderAddr.Province + previewOrderAddr.City + previewOrderAddr.District + previewOrderAddr.Address addr := previewOrderAddr.Province + previewOrderAddr.City + previewOrderAddr.District + previewOrderAddr.Address
req1 := jcook.OrderSubmitReq{ freightFees, err := supply.Api.Order.FreightFee(addr, freightFeeItems)
Address: addr, if err != nil {
SkuList: t, return
OrderFee: orderFee,
Receiver: jcook.OrderReceiver{
Name: previewOrderAddr.ReceiverName,
Mobile: previewOrderAddr.Mobile,
},
FreightFee: fData[vendor],
UserIp: ip,
ChannelOrderID: channelOrderID,
} }
var resp jcook.OrderSubmitResp
if err := client.Exec(req1, &resp); err != nil { var orderFreightFees []supply.OrderFreightFee
if err.Error() == "商品价格不匹配" { totalFreightFee := decimal.Zero
go func() { for _, freightFee := range freightFees {
rq := jcook.SkuPriceReq{} orderFreightFees = append(orderFreightFees, supply.OrderFreightFee{
for _, info := range t { SkuIds: freightFee.SkuIds,
rq.SkuIDSet = append(rq.SkuIDSet, info.SkuID) FreightFee: decimal.NewFromFloat(freightFee.FreightFee),
} })
var res []jcook.SkuPriceResp totalFreightFee = totalFreightFee.Add(decimal.NewFromFloat(freightFee.FreightFee))
if err := client.Exec(rq, &res); err != nil {
return
}
if len(res) == 0 {
return
}
for _, t := range res {
var sku goods2.RecookGoodsSkuModel
if err := mysql.Db.Table(sku.TableName()).Where("third_party_sku_id = ? and third_party_type=3", t.SkuID).Updates(map[string]interface{}{
"purchase_price": t.SupplyPrice,
}).Error; err != nil {
log.Println(err.Error())
return
}
}
}()
return jcook.OrderSubmitResp{}, errors.New("价格变动,请重新下单")
}
return jcook.OrderSubmitResp{}, err
} }
return resp, nil if fData[vendor].Cmp(totalFreightFee) != 0 {
return supplyOrderSn, errors.New("运费错误")
}
submit, err := supply.Api.Order.Submit(supply.OrderSubmit{
ChannelOrderSn: channelOrderID,
Address: addr,
Skus: freightFeeItems,
Receiver: supply.Receiver{
Name: previewOrderAddr.ReceiverName,
Mobile: previewOrderAddr.Mobile,
Email: "shangmenghaishi@163.com",
ZipCode: "315000",
},
OrderFee: orderFee,
FreightFees: orderFreightFees,
UserIp: ip,
})
if err != nil {
return supplyOrderSn, err
}
return submit.OrderSn, nil
} }
func GetVirtualID() uint { func GetVirtualID() uint {

@ -55,6 +55,8 @@ type Information struct {
Cost decimal.Decimal `json:"cost"` Cost decimal.Decimal `json:"cost"`
JCookStatus int `gorm:"column:jcook_status" json:"jcook_status"` JCookStatus int `gorm:"column:jcook_status" json:"jcook_status"`
ShaMaOrderID uint `gorm:"column:shama_order_id" json:"-"` ShaMaOrderID uint `gorm:"column:shama_order_id" json:"-"`
ThirdPartyType uint // 第三方类型
ThirdPartyOrderSn string // 第三方订单编号
OrderType uint `gorm:"column:order_type" json:"-"` OrderType uint `gorm:"column:order_type" json:"-"`
CanPay bool `gorm:"column:can_pay" json:"-"` CanPay bool `gorm:"column:can_pay" json:"-"`
OrderSku []GoodsDetail `json:"-" gorm:"foreignKey:order_id"` OrderSku []GoodsDetail `json:"-" gorm:"foreignKey:order_id"`

@ -4,6 +4,7 @@ import "github.com/shopspring/decimal"
const ( const (
orderFreightFee = "/order/freight_fee" // 获取运费 orderFreightFee = "/order/freight_fee" // 获取运费
orderSubmit = "/order/submit" // 提交订单
ReplyOrderFreightFeeErrCodeNone = 0 // 无错误 ReplyOrderFreightFeeErrCodeNone = 0 // 无错误
ReplyOrderFreightFeeErrCodeErr = 1 // 有错误 ReplyOrderFreightFeeErrCodeErr = 1 // 有错误
@ -32,3 +33,34 @@ func (o *order) FreightFee(address string, skus []OrderFreightFeeItem) (result [
}, &result) }, &result)
return return
} }
type OrderSubmit struct {
ChannelOrderSn string `json:"channelOrderSn"` // 订单编号
Address string `json:"address"` // 配送地址
Skus []OrderFreightFeeItem `json:"skus"` // sku信息
Receiver Receiver `json:"receiver"` // 收货信息
OrderFee decimal.Decimal `json:"orderFee"` // 订单金额
FreightFees []OrderFreightFee `json:"freightFees"` // 运费
UserIp string `json:"userIp"` // 用户ip
}
type OrderFreightFee struct {
SkuIds []uint `json:"skuIds"` // skuIds
FreightFee decimal.Decimal `json:"freightFee"` // 运费
}
type Receiver struct {
Name string `json:"name"` // 姓名
Mobile string `json:"mobile"` // 手机号
Email string `json:"email"` // 邮箱
ZipCode string `json:"zipCode"` // 邮编
}
type ReplyOrderSubmit struct {
OrderSn string `json:"orderSn"`
ChannelOrderSn string `json:"channelOrderSn"`
}
// Submit @Title 提交订单
func (o *order) Submit(data OrderSubmit) (result ReplyOrderSubmit, err error) {
err = exec(orderSubmit, data, &result)
return
}

@ -466,7 +466,6 @@ func (s *supplyLogic) Adopt(data AdoptSkuInfo) error {
return nil return nil
}) })
} }
return nil
} }
// SyncPrice @Title 同步价格 // SyncPrice @Title 同步价格

@ -12,7 +12,7 @@ const (
RecookThirdPartySupplySupplyStatusUp = 1 // 上架 RecookThirdPartySupplySupplyStatusUp = 1 // 上架
RecookThirdPartySupplySupplyStatusDown = 2 // 下架 RecookThirdPartySupplySupplyStatusDown = 2 // 下架
RecookThirdPartySupplyVendorId = 3000 RecookThirdPartySupplyVendorId = 4000
) )
type RecookThirdPartySupply struct { type RecookThirdPartySupply struct {

Loading…
Cancel
Save