|
|
|
@ -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 {
|
|
|
|
|