修改购买问题

master
kanade 3 years ago
parent 6a22539973
commit 2789da64e3

@ -58,7 +58,7 @@ func UpdateOrderAddr(c *gin.Context) {
var goodsList []order_preview.GoodsDetail
dbc.DB.Find(&goodsList, "order_id = ?", p.OrderID)
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
}
if checkIsDelivery(addr.Province, addr.City, v.FreightID) == false {
@ -104,8 +104,9 @@ func UpdateOrderAddr(c *gin.Context) {
jg := make(map[*goods.Sku]uint)
ojg := make(map[*goods.Sku]uint)
sjg := make(map[*goods.Sku]uint)
supplySkus := make(map[*goods.Sku]uint)
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
{
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
case 3000:
sjg[&sku] = v.Quantity
case 4000:
supplySkus[&sku] = v.Quantity
}
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{}{
"express_total_fee": expressTotalFee,

@ -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"
@ -97,6 +99,7 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
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
}

Loading…
Cancel
Save