Пример #1
0
        /// <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
        }