diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 266e9c0da..4569be178 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -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 }