添加订单

master
kanade 3 years ago
parent 949c2d8272
commit ef5bb922c1

@ -16,6 +16,7 @@ import (
"recook/internal/model/user"
"recook/internal/v2/lib/jcook"
"recook/internal/v2/lib/shama"
"recook/internal/v2/lib/supply"
"recook/internal/v2/model/jyy"
goods2 "recook/internal/v2/model/recook/goods"
"recook/tools"
@ -94,7 +95,7 @@ func SubmitOrder(c *gin.Context) {
return
}
if !configs.IsProductionEnv() {
if goodsInfo.ThirdPartyType != 0 {
if goodsInfo.ThirdPartyType != 0 && goodsInfo.ThirdPartyType != goods2.RecookGoodsInfoThirdPartyTypeSupply {
back.Fail(c, "测试环境无法购买")
return
}
@ -242,6 +243,18 @@ func SubmitOrder(c *gin.Context) {
}
orderCopy.Kind = 3
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 {
@ -431,67 +444,61 @@ func ShaMaOrderSubmit(tx *gorm.DB, ip string, data map[uint][]order_preview.Good
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) {
client := jcook.GetClient()
t := make([]jcook.LogisticsInfo, 0)
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) {
orderFee := decimal.Zero
var freightFeeItems []supply.OrderFreightFeeItem
for _, j := range data[vendor] {
var sku goods.Sku
if err := tx.First(&sku, "id = ?", j.SkuID).Error; err != nil {
return jcook.OrderSubmitResp{}, err
return supplyOrderSn, errors.New("商品错误")
}
cid, _ := strconv.Atoi(sku.ThirdPartySkuId)
t = append(t, jcook.LogisticsInfo{
SkuID: uint(cid),
supplySkuId, _ := strconv.Atoi(sku.ThirdPartySkuId)
freightFeeItems = append(freightFeeItems, supply.OrderFreightFeeItem{
SkuId: uint(supplySkuId),
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
req1 := jcook.OrderSubmitReq{
Address: addr,
SkuList: t,
OrderFee: orderFee,
Receiver: jcook.OrderReceiver{
Name: previewOrderAddr.ReceiverName,
Mobile: previewOrderAddr.Mobile,
},
FreightFee: fData[vendor],
UserIp: ip,
ChannelOrderID: channelOrderID,
freightFees, err := supply.Api.Order.FreightFee(addr, freightFeeItems)
if err != nil {
return
}
var resp jcook.OrderSubmitResp
if err := client.Exec(req1, &resp); err != nil {
if err.Error() == "商品价格不匹配" {
go func() {
rq := jcook.SkuPriceReq{}
for _, info := range t {
rq.SkuIDSet = append(rq.SkuIDSet, info.SkuID)
}
var res []jcook.SkuPriceResp
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
var orderFreightFees []supply.OrderFreightFee
totalFreightFee := decimal.Zero
for _, freightFee := range freightFees {
orderFreightFees = append(orderFreightFees, supply.OrderFreightFee{
SkuIds: freightFee.SkuIds,
FreightFee: decimal.NewFromFloat(freightFee.FreightFee),
})
totalFreightFee = totalFreightFee.Add(decimal.NewFromFloat(freightFee.FreightFee))
}
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 {

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

@ -4,6 +4,7 @@ import "github.com/shopspring/decimal"
const (
orderFreightFee = "/order/freight_fee" // 获取运费
orderSubmit = "/order/submit" // 提交订单
ReplyOrderFreightFeeErrCodeNone = 0 // 无错误
ReplyOrderFreightFeeErrCodeErr = 1 // 有错误
@ -32,3 +33,34 @@ func (o *order) FreightFee(address string, skus []OrderFreightFeeItem) (result [
}, &result)
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
}
// SyncPrice @Title 同步价格

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

Loading…
Cancel
Save