generateOrder允许空商品列表

This commit is contained in:
gazebo
2019-12-05 15:45:33 +08:00
parent 6066e49014
commit d40a8cf035

View File

@@ -314,7 +314,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
} }
deliveryAddress = addressList[0] deliveryAddress = addressList[0]
if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 { if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 {
return nil, nil, fmt.Errorf("送货地址:%s不在门店%s的配送范围", deliveryAddress.DetailAddress, storeDetail.Name) return nil, nil, fmt.Errorf("当前送货地址不在门店%s的配送范围", storeDetail.Name)
} }
// 营业状态及时间检查 // 营业状态及时间检查
@@ -339,94 +339,91 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
return nil, nil, fmt.Errorf("门店:%s不在营业时间范围", storeDetail.Name) return nil, nil, fmt.Errorf("门店:%s不在营业时间范围", storeDetail.Name)
} }
skus := formalizeSkus(jxOrder.Skus)
if len(skus) == 0 {
return nil, nil, fmt.Errorf("商品列表为空")
}
var skuIDs []int
for _, v := range skus {
skuIDs = append(skuIDs, v.SkuID)
}
// storeSkuList, err := dao.GetStoresSkusInfo(db, []int{jxOrder.StoreID}, skuIDs)
// if err != nil {
// return nil, nil, err
// }
// storeSkuMap := make(map[int]*model.StoreSkuBind)
// for _, v := range storeSkuList {
// storeSkuMap[v.SkuID] = v
// }
storeSkuInfo, err := cms.GetStoreSkus(ctx, jxOrder.StoreID, skuIDs, true, "", true, false, map[string]interface{}{
"actVendorID": model.VendorIDJX,
}, 0, model.UnlimitedPageSize)
if err != nil {
return nil, nil, err
}
storeSkuMap := make(map[int]*cms.StoreSkuExt)
for _, v1 := range storeSkuInfo.SkuNames {
for _, v2 := range v1.Skus {
storeSkuMap[v2.SkuID] = v2
}
}
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
if err != nil {
return nil, nil, err
}
skuMap := make(map[int]*model.SkuAndName)
for _, v := range skuList {
skuMap[v.ID] = v
}
outJxOrder2 := *jxOrder outJxOrder2 := *jxOrder
outJxOrder2.Skus = nil outJxOrder2.Skus = nil
outJxOrder2.OrderPrice = 0 outJxOrder2.OrderPrice = 0
outJxOrder2.Weight = 0 outJxOrder2.Weight = 0
outJxOrder = &outJxOrder2 outJxOrder = &outJxOrder2
outJxOrder.StoreName = storeDetail.Name outJxOrder.StoreName = storeDetail.Name
for _, v := range skus {
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
if sku := skuMap[v.SkuID]; sku != nil {
jxSku := &JxSkuInfo{
SkuID: v.SkuID,
Price: int64(storeSkuBind.JxPrice),
Count: v.Count,
SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价
Weight: sku.Weight,
Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0),
}
if storeSkuBind.ActPrice != 0 && storeSkuBind.ActPrice < storeSkuBind.JxPrice {
jxSku.SalePrice = int64(storeSkuBind.ActPrice)
jxSku.Count = 1
outJxOrder.Skus = append(outJxOrder.Skus, jxSku) skus := formalizeSkus(jxOrder.Skus)
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice // 允许空商品列表(一般用于测试配送地址,门店信息是否合适)
outJxOrder.Weight += jxSku.Count * jxSku.Weight if len(skus) > 0 {
if v.Count-1 > 0 { var skuIDs []int
jxSku2 := *jxSku for _, v := range skus {
jxSku2.SalePrice = jxSku.Price skuIDs = append(skuIDs, v.SkuID)
jxSku2.Count = v.Count - 1 }
storeSkuInfo, err := cms.GetStoreSkus(ctx, jxOrder.StoreID, skuIDs, true, "", true, false, map[string]interface{}{
"actVendorID": model.VendorIDJX,
}, 0, model.UnlimitedPageSize)
if err != nil {
return nil, nil, err
}
storeSkuMap := make(map[int]*cms.StoreSkuExt)
for _, v1 := range storeSkuInfo.SkuNames {
for _, v2 := range v1.Skus {
storeSkuMap[v2.SkuID] = v2
}
}
jxSku = &jxSku2 skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
} else { if err != nil {
jxSku = nil return nil, nil, err
}
skuMap := make(map[int]*model.SkuAndName)
for _, v := range skuList {
skuMap[v.ID] = v
}
for _, v := range skus {
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
if sku := skuMap[v.SkuID]; sku != nil {
jxSku := &JxSkuInfo{
SkuID: v.SkuID,
Price: int64(storeSkuBind.JxPrice),
Count: v.Count,
SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价
Weight: sku.Weight,
Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0),
}
if storeSkuBind.ActPrice != 0 && storeSkuBind.ActPrice < storeSkuBind.JxPrice {
jxSku.SalePrice = int64(storeSkuBind.ActPrice)
jxSku.Count = 1
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
outJxOrder.Weight += jxSku.Count * jxSku.Weight
if v.Count-1 > 0 {
jxSku2 := *jxSku
jxSku2.SalePrice = jxSku.Price
jxSku2.Count = v.Count - 1
jxSku = &jxSku2
} else {
jxSku = nil
}
}
if jxSku != nil {
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
outJxOrder.Weight += jxSku.Count * jxSku.Weight
} }
}
if jxSku != nil {
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
outJxOrder.Weight += jxSku.Count * jxSku.Weight
} }
} }
} }
} sort.Sort(JxSkuInfoList(outJxOrder.Skus))
sort.Sort(JxSkuInfoList(outJxOrder.Skus)) outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat),
jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), model.CoordinateTypeMars, outJxOrder.Weight, checkTime)
model.CoordinateTypeMars, outJxOrder.Weight, checkTime); err == nil { } else {
outJxOrder.FreightPrice = 0 outJxOrder.FreightPrice = 0
}
if err == nil {
outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice
outJxOrder.ActualPayPrice = outJxOrder.TotalPrice outJxOrder.ActualPayPrice = outJxOrder.TotalPrice
} else {
outJxOrder = nil
deliveryAddress = nil
} }
return outJxOrder, deliveryAddress, err return outJxOrder, deliveryAddress, err
} }