generateOrder允许空商品列表
This commit is contained in:
@@ -314,7 +314,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
}
|
||||
deliveryAddress = addressList[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)
|
||||
}
|
||||
|
||||
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.Skus = nil
|
||||
outJxOrder2.OrderPrice = 0
|
||||
outJxOrder2.Weight = 0
|
||||
outJxOrder = &outJxOrder2
|
||||
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)
|
||||
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
|
||||
skus := formalizeSkus(jxOrder.Skus)
|
||||
// 允许空商品列表(一般用于测试配送地址,门店信息是否合适)
|
||||
if len(skus) > 0 {
|
||||
var skuIDs []int
|
||||
for _, v := range skus {
|
||||
skuIDs = append(skuIDs, v.SkuID)
|
||||
}
|
||||
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
|
||||
} else {
|
||||
jxSku = nil
|
||||
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
|
||||
}
|
||||
|
||||
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))
|
||||
if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
|
||||
jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat),
|
||||
model.CoordinateTypeMars, outJxOrder.Weight, checkTime); err == nil {
|
||||
sort.Sort(JxSkuInfoList(outJxOrder.Skus))
|
||||
outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
|
||||
jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat),
|
||||
model.CoordinateTypeMars, outJxOrder.Weight, checkTime)
|
||||
} else {
|
||||
outJxOrder.FreightPrice = 0
|
||||
}
|
||||
if err == nil {
|
||||
outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice
|
||||
outJxOrder.ActualPayPrice = outJxOrder.TotalPrice
|
||||
} else {
|
||||
outJxOrder = nil
|
||||
deliveryAddress = nil
|
||||
}
|
||||
return outJxOrder, deliveryAddress, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user