/// <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 }
/// <summary> /// 根据配送地区编号和支付方式编号取得所有支持的配送方式列表 /// </summary> /// <param name="addressAreaID">配送地区编号</param> /// <param name="paymentCategory">支付类别</param> /// <returns></returns> public static List <ShipTypeInfo> GetSupportedShipTypeList(int addressAreaID, PaymentCategory?paymentCategory) { return(PipelineDA.GetSupportedShipTypeList(addressAreaID, paymentCategory)); }
/// <summary> /// 计算运费 /// </summary> /// <param name="order"></param> private void CalculateShippingAmount(OrderInfo order) { #region 【 step1 设置好各个子单的配送方式 】 List <ShipTypeInfo> allShipTypeList = PipelineDA.GetSupportedShipTypeList(order.Contact.AddressAreaID, (PaymentCategory)order.PaymentCategory); ShipTypeInfo curShipTypeInfo = null; List <ShipTypeInfo> tempShipTypeList = null; List <ShipTypeInfo> subOrderShipTypeList = null; List <ShippingFeeQueryInfo> qryList = new List <ShippingFeeQueryInfo>(); ShippingFeeQueryInfo qry = null; foreach (var kvs in order.SubOrderList) { OrderInfo subOrderInfo = kvs.Value; if (subOrderInfo["WarehouseNumber"] != null) { int subOrderWarehouseNumber = Convert.ToInt32(subOrderInfo["WarehouseNumber"]); tempShipTypeList = allShipTypeList.FindAll(shipType => shipType.OnlyForStockSysNo == subOrderWarehouseNumber && shipType.StoreType == (int)subOrderInfo["StoreType"]); } else { tempShipTypeList = allShipTypeList; } subOrderShipTypeList = null; curShipTypeInfo = null; if (tempShipTypeList != null) { subOrderShipTypeList = new List <ShipTypeInfo>(); subOrderShipTypeList.AddRange(tempShipTypeList); } if (subOrderShipTypeList != null && subOrderShipTypeList.Count > 0) { subOrderShipTypeList.Sort((x, y) => x.Priority.CompareTo(y.Priority)); curShipTypeInfo = subOrderShipTypeList[0]; } if (curShipTypeInfo != null) { subOrderInfo.ShipTypeID = curShipTypeInfo.ShipTypeID; subOrderInfo["ShipTypeName"] = curShipTypeInfo.ShipTypeName; subOrderInfo["ShipTypeDesc"] = string.Format("{0}:{1}出库直邮", 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.ShipTypeID.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 = 0m; } } order.ShippingAmount = order.SubOrderList.Sum(x => x.Value.ShippingAmount); #endregion }