/// <summary> /// 计算运费 /// </summary> /// <param name="order"></param> private void CalculateShippingAmount(OrderInfo order) { #region 【 step1 设置好各个子单的配送方式 】 List <ShipTypeInfo> allShipTypeList = PipelineDA.GetSupportedShipTypeList(order.Contact.AddressAreaID, (PaymentCategory)order.PaymentCategory); List <int> stockSysNoList = order.SubOrderList.Values.Where(x => x["WarehouseNumber"] != null && (int)x["WarehouseNumber"] > 0) .Select(x => Convert.ToInt32(x["WarehouseNumber"])) .Distinct() .ToList(); List <SimpleStockInfo> stockList = PipelineDA.QueryStockInfoList(stockSysNoList); List <ShippingFeeQueryInfo> qryList = new List <ShippingFeeQueryInfo>(); ShippingFeeQueryInfo qry = null; ShipTypeInfo curShipTypeInfo = null; //SimpleStockInfo curStockInfo = null; foreach (var kvs in order.SubOrderList) { OrderInfo subOrderInfo = kvs.Value; if (subOrderInfo["WarehouseNumber"] != null && (int)subOrderInfo["WarehouseNumber"] > 0) { //curStockInfo = stockList.Find(x => x.SysNo == Convert.ToInt32(subOrderInfo["WarehouseNumber"])); //判断是否是外贸型仓库,如果是外贸型仓库,配送方式由系统决定,否则由用户选择决定 //if (curStockInfo.StockType == 0 || curStockInfo.StockType == 1) //{ // curShipTypeInfo = PipelineDA.Pipeline_GetMerchantStockShippingType(Convert.ToInt32(kvs.Key.Split('|')[0]), Convert.ToInt32(subOrderInfo["WarehouseNumber"])); //} //else //{ curShipTypeInfo = allShipTypeList.Find(x => x.ShipTypeSysNo.ToString() == subOrderInfo.ShipTypeID); //} } if (curShipTypeInfo != null) { subOrderInfo.ShipTypeID = curShipTypeInfo.ShipTypeID; subOrderInfo["ShipTypeName"] = curShipTypeInfo.ShipTypeName; subOrderInfo["ShipTypeDesc"] = string.Format("{1}出库({0})", curShipTypeInfo.ShipTypeName , subOrderInfo["WarehouseName"]); qry = new ShippingFeeQueryInfo(); qry.TransID = kvs.Key; qry.SoAmount = subOrderInfo.TotalProductAmount; qry.SoTotalWeight = subOrderInfo.TotalWeight; qry.SOSingleMaxWeight = subOrderInfo.MaxWeight; qry.AreaId = subOrderInfo.Contact.AddressAreaID; qry.CustomerSysNo = subOrderInfo.Customer.SysNo; qry.IsUseDiscount = 0; qry.SubShipTypeList = curShipTypeInfo.ShipTypeSysNo.ToString(); qry.SellType = Convert.ToInt32(subOrderInfo["SellerType"]); qry.MerchantSysNo = Convert.ToInt32(kvs.Key.Split('|')[0]); qry.ShipTypeId = 0; qryList.Add(qry); } } #endregion #region 【 开始计算运费 】 List <ShippingInfo> shipFeeList = PipelineDA.GetAllShippingFee(qryList); ShippingInfo curShippingInfo = null; foreach (var kvs in order.SubOrderList) { curShippingInfo = shipFeeList.Find(x => x.TransID == kvs.Key && x.ShippingTypeID.ToString() == kvs.Value.ShipTypeID); if (curShippingInfo != null) { kvs.Value.ShippingAmount = curShippingInfo.ShippingPrice; //+curShippingInfo.ShippingPackageFee; } } order.ShippingAmount = order.SubOrderList.Sum(x => x.Value.ShippingAmount); #endregion }