Beispiel #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
        }
Beispiel #2
0
 /// <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
        }