|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package order_preview
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
"recook/configs"
|
|
|
|
|
"recook/internal/back"
|
|
|
|
@ -13,6 +14,7 @@ import (
|
|
|
|
|
"recook/internal/model/vend"
|
|
|
|
|
"recook/internal/v2/lib/jcook"
|
|
|
|
|
"recook/internal/v2/lib/shama"
|
|
|
|
|
"recook/internal/v2/lib/supply"
|
|
|
|
|
"recook/tools"
|
|
|
|
|
"strconv"
|
|
|
|
|
"time"
|
|
|
|
@ -94,9 +96,10 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
|
|
|
|
|
goodsTotalAmount := decimal.NewFromFloat(0.0)
|
|
|
|
|
goodsTotalCommission := decimal.NewFromFloat(0.0)
|
|
|
|
|
preOrderGoodsList := make([]*order_preview.GoodsDetail, 0, 0)
|
|
|
|
|
jg := make(map[*goods.Sku]uint) // 自营商品计算运费
|
|
|
|
|
ojg := make(map[*goods.Sku]uint) // pop商品计算运费
|
|
|
|
|
sjg := make(map[*goods.Sku]uint) // 沙马供应链计算运费
|
|
|
|
|
jg := make(map[*goods.Sku]uint) // 自营商品计算运费
|
|
|
|
|
ojg := make(map[*goods.Sku]uint) // pop商品计算运费
|
|
|
|
|
sjg := make(map[*goods.Sku]uint) // 沙马供应链计算运费
|
|
|
|
|
supplySkus := make(map[*goods.Sku]uint) // 瑞库客供应链计算运费
|
|
|
|
|
cost := decimal.Zero
|
|
|
|
|
{
|
|
|
|
|
for _, v := range trolleyInfoList {
|
|
|
|
@ -126,8 +129,8 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if sku.ThirdPartyType != 0 && !configs.IsProductionEnv() {
|
|
|
|
|
back.Fail(c, "测试服不支持购买")
|
|
|
|
|
return
|
|
|
|
|
//back.Fail(c, "测试服不支持购买")
|
|
|
|
|
//return
|
|
|
|
|
}
|
|
|
|
|
cost = cost.Add(sku.PurchasePrice.Mul(decimal.NewFromInt(int64(v.Quantity))))
|
|
|
|
|
if gs.VendorID == 1800 {
|
|
|
|
@ -141,6 +144,9 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
|
|
|
|
|
if gs.VendorID == 3000 {
|
|
|
|
|
sjg[&sku] = v.Quantity
|
|
|
|
|
}
|
|
|
|
|
if gs.VendorID == 4000 {
|
|
|
|
|
supplySkus[&sku] = v.Quantity
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var promotionGoods promotion.Goods
|
|
|
|
|
var promotionSku promotion.Sku
|
|
|
|
@ -241,7 +247,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
|
|
|
|
|
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, "请填写默认收货地址")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
@ -251,7 +257,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
|
|
|
|
|
IsAddrDelivery := true
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
can, _, _ := computeExpressFeeWithPreviewGoods(v.Quantity, v, defaultAddr.Province, defaultAddr.City)
|
|
|
|
@ -264,7 +270,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
|
|
|
|
|
}
|
|
|
|
|
if IsAddrDelivery { // 如果是发货地区,计算每个商品的
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
_, 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)
|
|
|
|
@ -513,3 +532,36 @@ func JdExpressFee(obj map[*goods.Sku]uint, address string) (map[uint]decimal.Dec
|
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|