public void Calculate(ref OrderInfo order) { GetAllSaleGift(ref order); #region 给赠品赋税率,运输方式等 List <int> giftSysNoList = order.GiftItemList.Select(x => x.ProductSysNo).Distinct().ToList <int>(); List <ProductEntryInfo> allProductEntryInfoList = PipelineDA.GetProductEntryInfo(giftSysNoList); foreach (OrderGiftItem giftItem in order.GiftItemList) { ProductEntryInfo entryInfo = allProductEntryInfoList.Find(f => f.ProductSysNo == giftItem.ProductSysNo); if (entryInfo != null) { giftItem["ProductStoreType"] = (int)entryInfo.ProductStoreType; //giftItem["TariffRate"] = entryInfo.TariffRate; } else { giftItem["ProductStoreType"] = (int)ProductStoreType.Narmal; // giftItem["TariffRate"] = 0; } } #endregion //加价购和赠品都属于赠品,都按赠品获取,之后按销售价格区分拆开 order.PlusPriceItemList = order.GiftItemList.FindAll(m => m.UnitSalePrice > 0m); order.GiftItemList = order.GiftItemList.FindAll(m => m.UnitSalePrice == 0m); PrcessorCustomerSelectGift(ref order); PrcessorCustomerSelectPlusPrice(ref order); }
/// <summary> /// 计算关税 /// </summary> /// <param name="order"></param> private void CalculateTrariffAmount(OrderInfo order, Dictionary <string, List <OrderItem> > dicSubOrderItem) { OrderInfo subOrderInfo; List <ProductEntryInfo> allProductEntryInfoList = null; List <int> allItemSysNoList = dicSubOrderItem.SelectMany(kvs => kvs.Value.Select(item => item.ProductSysNo)) .Distinct() .ToList(); if (allItemSysNoList.Count > 0) { allProductEntryInfoList = PipelineDA.GetProductEntryInfo(allItemSysNoList); } decimal totalTrariffAmountSum = 0m; decimal subOrderTrariffAmountSum = 0m; if (allProductEntryInfoList != null && allProductEntryInfoList.Count > 0) { foreach (var kvs in order.SubOrderList) { subOrderInfo = kvs.Value; subOrderTrariffAmountSum = 0m; //循环计算子单中每个item的关税 foreach (var item in dicSubOrderItem[kvs.Key]) { CalculateOrderItemTrariffAmount(item, order, subOrderInfo, allProductEntryInfoList); subOrderTrariffAmountSum += item.UnitTaxFee * item.UnitQuantity; } //单笔订单关税金额小于50元的免征关税 if (subOrderTrariffAmountSum <= 50m) { subOrderTrariffAmountSum = 0m; dicSubOrderItem[kvs.Key].ForEach(item => { //满足关税免征条件,给出免征提示,并记录下原始关税计算金额 item["Tariff-Free-Flag"] = "1"; item.UnitTaxFee = 0m; }); } kvs.Value.TaxAmount = subOrderTrariffAmountSum; totalTrariffAmountSum += subOrderTrariffAmountSum; } } order.TaxAmount = totalTrariffAmountSum; }