修改购买问题

master
kanade 3 years ago
parent 6a22539973
commit 2789da64e3

@ -58,7 +58,7 @@ func UpdateOrderAddr(c *gin.Context) {
var goodsList []order_preview.GoodsDetail var goodsList []order_preview.GoodsDetail
dbc.DB.Find(&goodsList, "order_id = ?", p.OrderID) dbc.DB.Find(&goodsList, "order_id = ?", p.OrderID)
for _, v := range goodsList { for _, v := range goodsList {
if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 { if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 || v.VendorID == 4000 {
continue continue
} }
if checkIsDelivery(addr.Province, addr.City, v.FreightID) == false { if checkIsDelivery(addr.Province, addr.City, v.FreightID) == false {
@ -104,8 +104,9 @@ func UpdateOrderAddr(c *gin.Context) {
jg := make(map[*goods.Sku]uint) jg := make(map[*goods.Sku]uint)
ojg := make(map[*goods.Sku]uint) ojg := make(map[*goods.Sku]uint)
sjg := make(map[*goods.Sku]uint) sjg := make(map[*goods.Sku]uint)
supplySkus := make(map[*goods.Sku]uint)
for _, v := range goodsList { for _, v := range goodsList {
if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 { if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 || v.VendorID == 4000 {
var sku goods.Sku var sku goods.Sku
{ {
if err = dbc.DB.First(&sku, "id = ?", v.SkuID).Error; err != nil { if err = dbc.DB.First(&sku, "id = ?", v.SkuID).Error; err != nil {
@ -120,6 +121,8 @@ func UpdateOrderAddr(c *gin.Context) {
ojg[&sku] = v.Quantity ojg[&sku] = v.Quantity
case 3000: case 3000:
sjg[&sku] = v.Quantity sjg[&sku] = v.Quantity
case 4000:
supplySkus[&sku] = v.Quantity
} }
continue continue
} }
@ -198,6 +201,27 @@ func UpdateOrderAddr(c *gin.Context) {
} }
} }
} }
if len(supplySkus) > 0 {
unitMap, err := SupplyExpressFee(supplySkus, addr.GetAddress())
if err != nil {
back.Fail(c, err.Error())
return
}
for _, v := range goodsList {
if value, ok := unitMap[v.SkuID]; ok {
expressTotalFee = expressTotalFee.Add(value)
if err = tx.Model(&v).Updates(map[string]interface{}{
"express_fee": value,
"actual_amount": v.ActualAmount.Sub(v.ExpressFee).Add(value).Round(2),
}).Error; err != nil {
back.Err(c, err.Error())
tx.Rollback()
return
}
}
}
}
err = tx.Model(&previewOrderInfo).Updates(map[string]interface{}{ err = tx.Model(&previewOrderInfo).Updates(map[string]interface{}{
"express_total_fee": expressTotalFee, "express_total_fee": expressTotalFee,

@ -1,6 +1,7 @@
package order_preview package order_preview
import ( import (
"errors"
"fmt" "fmt"
"recook/configs" "recook/configs"
"recook/internal/back" "recook/internal/back"
@ -13,6 +14,7 @@ import (
"recook/internal/model/vend" "recook/internal/model/vend"
"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/tools" "recook/tools"
"strconv" "strconv"
"time" "time"
@ -94,9 +96,10 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
goodsTotalAmount := decimal.NewFromFloat(0.0) goodsTotalAmount := decimal.NewFromFloat(0.0)
goodsTotalCommission := decimal.NewFromFloat(0.0) goodsTotalCommission := decimal.NewFromFloat(0.0)
preOrderGoodsList := make([]*order_preview.GoodsDetail, 0, 0) preOrderGoodsList := make([]*order_preview.GoodsDetail, 0, 0)
jg := make(map[*goods.Sku]uint) // 自营商品计算运费 jg := make(map[*goods.Sku]uint) // 自营商品计算运费
ojg := make(map[*goods.Sku]uint) // pop商品计算运费 ojg := make(map[*goods.Sku]uint) // pop商品计算运费
sjg := make(map[*goods.Sku]uint) // 沙马供应链计算运费 sjg := make(map[*goods.Sku]uint) // 沙马供应链计算运费
supplySkus := make(map[*goods.Sku]uint) // 瑞库客供应链计算运费
cost := decimal.Zero cost := decimal.Zero
{ {
for _, v := range trolleyInfoList { for _, v := range trolleyInfoList {
@ -126,8 +129,8 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
} }
if sku.ThirdPartyType != 0 && !configs.IsProductionEnv() { if sku.ThirdPartyType != 0 && !configs.IsProductionEnv() {
back.Fail(c, "测试服不支持购买") //back.Fail(c, "测试服不支持购买")
return //return
} }
cost = cost.Add(sku.PurchasePrice.Mul(decimal.NewFromInt(int64(v.Quantity)))) cost = cost.Add(sku.PurchasePrice.Mul(decimal.NewFromInt(int64(v.Quantity))))
if gs.VendorID == 1800 { if gs.VendorID == 1800 {
@ -141,6 +144,9 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
if gs.VendorID == 3000 { if gs.VendorID == 3000 {
sjg[&sku] = v.Quantity sjg[&sku] = v.Quantity
} }
if gs.VendorID == 4000 {
supplySkus[&sku] = v.Quantity
}
var promotionGoods promotion.Goods var promotionGoods promotion.Goods
var promotionSku promotion.Sku var promotionSku promotion.Sku
@ -241,7 +247,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
goodsTotalAmount = goodsTotalAmount.Add(one.GoodsAmount) goodsTotalAmount = goodsTotalAmount.Add(one.GoodsAmount)
} }
} }
if (len(jg) != 0 || len(ojg) != 0 || len(sjg) != 0) && p.Address == "" && defaultAddr.ID == 0 { if (len(jg) != 0 || len(ojg) != 0 || len(sjg) != 0 || len(supplySkus) != 0) && p.Address == "" && defaultAddr.ID == 0 {
back.Err(c, "请填写默认收货地址") back.Err(c, "请填写默认收货地址")
return return
} }
@ -251,7 +257,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
IsAddrDelivery := true IsAddrDelivery := true
for _, v := range preOrderGoodsList { // 如果该地区不发货,不用计算运费了 for _, v := range preOrderGoodsList { // 如果该地区不发货,不用计算运费了
if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 { if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 || v.VendorID == 4000 {
continue continue
} }
can, _, _ := computeExpressFeeWithPreviewGoods(v.Quantity, v, defaultAddr.Province, defaultAddr.City) can, _, _ := computeExpressFeeWithPreviewGoods(v.Quantity, v, defaultAddr.Province, defaultAddr.City)
@ -264,7 +270,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
} }
if IsAddrDelivery { // 如果是发货地区,计算每个商品的 if IsAddrDelivery { // 如果是发货地区,计算每个商品的
for _, v := range preOrderGoodsList { // 如果该地区不发货,不用计算运费了 for _, v := range preOrderGoodsList { // 如果该地区不发货,不用计算运费了
if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 { if v.VendorID == 1800 || v.VendorID == 2000 || v.VendorID == 3000 || v.VendorID == 4000 {
continue continue
} }
_, expressFee, _ := computeExpressFeeWithPreviewGoods(v.Quantity, v, defaultAddr.Province, defaultAddr.City) _, expressFee, _ := computeExpressFeeWithPreviewGoods(v.Quantity, v, defaultAddr.Province, defaultAddr.City)
@ -319,6 +325,19 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
} }
} }
} }
if len(supplySkus) > 0 {
unitMap, err := SupplyExpressFee(supplySkus, p.Address)
if err != nil {
back.Fail(c, err.Error())
return
}
for _, v := range preOrderGoodsList {
if value, ok := unitMap[v.SkuID]; ok {
v.ExpressFee = value
expressTotalFee = expressTotalFee.Add(value)
}
}
}
} }
coinTotalAmount := decimal.NewFromFloat(0.0) coinTotalAmount := decimal.NewFromFloat(0.0)
@ -513,3 +532,36 @@ func JdExpressFee(obj map[*goods.Sku]uint, address string) (map[uint]decimal.Dec
} }
return unitMap, nil return unitMap, nil
} }
// SupplyExpressFee @Title 处理运费
func SupplyExpressFee(obj map[*goods.Sku]uint, address string) (map[uint]decimal.Decimal, error) {
var orderFreightFeeItems []supply.OrderFreightFeeItem
mThirdSku := map[string]goods.Sku{}
for k, v := range obj {
thirdSkuId, _ := strconv.ParseUint(k.ThirdPartySkuId, 10, 64)
orderFreightFeeItems = append(orderFreightFeeItems, supply.OrderFreightFeeItem{
SkuId: uint(thirdSkuId),
Quantity: v,
Price: k.PurchasePrice,
})
mThirdSku[k.ThirdPartySkuId] = *k
}
freightFee, err := supply.Api.Order.FreightFee(address, orderFreightFeeItems)
if err != nil {
return nil, err
}
unitMap := make(map[uint]decimal.Decimal)
for _, fee := range freightFee {
if fee.ErrCode == supply.ReplyOrderFreightFeeErrCodeErr {
return nil, errors.New(fee.ErrMsg)
}
skuFee := decimal.NewFromFloat(fee.FreightFee)
oneSkuFee := skuFee.Div(decimal.NewFromInt(int64(len(fee.SkuIds)))).Truncate(2)
for _, skuId := range fee.SkuIds {
skuFee = skuFee.Sub(oneSkuFee)
unitMap[mThirdSku[fmt.Sprintf("%d", skuId)].ID] = oneSkuFee
}
unitMap[mThirdSku[fmt.Sprintf("%d", fee.SkuIds[0])].ID] = oneSkuFee.Add(skuFee)
}
return unitMap, nil
}

Loading…
Cancel
Save