/// <summary> /// 新增结算商品 /// </summary> /// <param name="e"></param> /// <returns></returns> public bool AddSettleProduct(SettleProductEntity e) { string sql = @"Insert into SettlementOrderProducts(SettlementCode,spu,Sku,Quantity,UnitPrice,RmbUnitPrice,TaxRate,RmbAmount,Amount,RmbTaxAmount,TaxAmount,RmbSettlementAmount,SettlementAmount,IsBearDuty,Commission) Values(@SettlementCode,@spu,@Sku,@Quantity,@UnitPrice,@RmbUnitPrice,@TaxRate,@RmbAmount,@Amount,@RmbTaxAmount,@TaxAmount,@RmbSettlementAmount,@SettlementAmount,@IsBearDuty,@Commission);"; var parameters = DbSFO2OMain.CreateParameterCollection(); parameters.Append("@SettlementCode", e.SettlementCode); parameters.Append("@spu", e.Spu); parameters.Append("@Sku", e.Sku); parameters.Append("@Quantity", e.Quantity); parameters.Append("@UnitPrice", e.UnitPrice); parameters.Append("@RmbUnitPrice", e.RmbUnitPrice); parameters.Append("@TaxRate", e.TaxRate); parameters.Append("@RmbAmount", e.RmbAmount); parameters.Append("@Amount", e.Amount); parameters.Append("@RmbTaxAmount", e.RmbTaxAmount); parameters.Append("@TaxAmount", e.TaxAmount); parameters.Append("@RmbSettlementAmount", e.RmbSettlementAmount); parameters.Append("@SettlementAmount", e.SettlementAmount); parameters.Append("@IsBearDuty", e.IsBearDuty); parameters.Append("@Commission", e.Commission); return(DbSFO2OMain.ExecuteSqlNonQuery(sql, parameters) > 0); }
/// <summary> /// 生成订单结算单 /// </summary> /// <param name="userId"></param> /// <param name="language"></param> /// <param name="orderCode"></param> /// <returns></returns> public bool GenerateSettleForOrder(int userId, int language, string orderCode) { var skus = dal.GetOrderSkuEntities(userId, language, orderCode); if (skus == null || !skus.Any() || skus.FirstOrDefault().OrderStatus != OrderStatusEnum.Complete.As(0)) { LogHelper.Error(string.Format("未能生产结算单 orderCode:{0}", orderCode)); throw new SFO2OException("无效订单!"); } SettleOrderInfoEntity settle = null; List <SettleProductEntity> productList = null; var settles = new Dictionary <SettleOrderInfoEntity, List <SettleProductEntity> >(); int index = 1; foreach (var m in skus.GroupBy(n => n.SupplierId)) { var settlementCode = settleBll.BuildSettleCode(orderCode, index); index++; var order = m.FirstOrDefault(); if (order == null) { LogHelper.Error(string.Format("订单结算单生产失败:订单信息错误!{0}", orderCode)); throw new SFO2OException("订单信息错误!"); } var now = DateTime.Now; var creater = "webuser(确认订单)"; productList = new List <SettleProductEntity>(); settle = new SettleOrderInfoEntity(); foreach (var sku in m) { var product = new SettleProductEntity(); product.SettlementCode = settlementCode; product.Spu = sku.Spu; product.Sku = sku.Sku; product.Quantity = sku.Quantity - sku.RefundQuantity;//有效商品数量 if (sku.Quantity - sku.RefundQuantity == 0) { continue; } product.UnitPrice = sku.UnitPrice; product.RmbUnitPrice = sku.PayUnitPrice; product.TaxRate = sku.TaxRate; product.RmbAmount = (sku.Quantity - sku.RefundQuantity) * sku.PayUnitPrice; //有效商品数量×人民币单价 product.Amount = (sku.Quantity - sku.RefundQuantity) * sku.UnitPrice; //有效商品数量×港币单价 //税金(人民币) product.RmbTaxAmount = sku.IsBearDuty == 1 ? (sku.Quantity - sku.RefundQuantity) * sku.PayUnitPrice * sku.TaxRate / 100M : 0; //有效商品【商家承担】×港币单价*税率 :0 //税金 product.TaxAmount = sku.IsBearDuty == 1 ? (sku.Quantity - sku.RefundQuantity) * sku.UnitPrice * sku.TaxRate / 100M : 0; //有效商品【商家承担】×港币单价*税率 :0 //结算金额(人民币) product.RmbSettlementAmount = product.RmbAmount * (1 - sku.Commission / 100M) - product.RmbTaxAmount; //结算金额 product.SettlementAmount = product.Amount * (1 - sku.Commission / 100M) - product.TaxAmount; //有促销费用承担 if (sku.PromotionId > 0) { product.RmbSettlementAmount += (sku.Quantity - sku.RefundQuantity) * (sku.OriginalRMBPrice - product.RmbUnitPrice) * (1 - (sku.PromotionCost / 100M)) * (1 - (sku.Commission / 100M)); product.SettlementAmount += (sku.Quantity - sku.RefundQuantity) * (sku.OriginalPrice - product.UnitPrice) * (1 - (sku.PromotionCost / 100M)) * (1 - (sku.Commission / 100M)); } product.Commission = sku.Commission; product.IsBearDuty = sku.IsBearDuty; productList.Add(product);//添加到临时对象 } settle.SettlementCode = settlementCode; //结算单号 settle.OrderCode = orderCode; //订单编号 settle.SupplierId = m.Key; //商家id settle.SettlementStatus = 2; //结算单状态:1:待确认 2:待付款 3:付款完成 settle.SettlementType = 1; // 结算单类型:1订单,2退款退货,3仅退款 settle.ExchangeRate = order.ExchangeRate; // 汇率 // 商品总金额(人民币) settle.RmbProductTotalAmount = m.Sum(n => (n.Quantity - n.RefundQuantity) * n.PayUnitPrice); //有效商品×人民币单价 // 商品总金额 settle.ProductTotalAmount = m.Sum(n => (n.Quantity - n.RefundQuantity) * n.UnitPrice); //有效商品×港币单价 //商家承担商品税总金额(人民币) settle.RmbSupplierBearDutyAmount = m.Where(n => n.IsBearDuty == 1).Sum(n => (n.Quantity - n.RefundQuantity) * n.PayUnitPrice * (n.TaxRate / 100)); //有效商品【商家承担】×人民币单价*税率 //商家承担商品税总金额 settle.SupplierBearDutyAmount = m.Where(n => n.IsBearDuty == 1).Sum(n => (n.Quantity - n.RefundQuantity) * n.UnitPrice * (n.TaxRate / 100)); //有效商品【商家承担】×港币单价*税率 // 结算总金额(人民币) settle.RmbSettlementAmount = productList.Sum(n => n.RmbSettlementAmount); //商品总金额+商家承担商品税总金额(人民币) // 结算总金额 settle.SettlementAmount = productList.Sum(n => n.SettlementAmount); //商品总金额+商家承担商品税总金额 //平台承担商品税总金额 settle.RmbBearDutyAmount = 0; //m.Where(n => n.IsBearDuty != 1).Sum(n => (n.Quantity - n.RefundQuantity) * n.PayUnitPrice * n.TaxRate);//有效商品【非商家承担】×港币单价*税率 settle.BearDutyAmount = 0; //m.Where(n => n.IsBearDuty != 1).Sum(n => (n.Quantity - n.RefundQuantity) * n.UnitPrice * n.TaxRate);//有效商品【非商家承担】×人民币单价*税率 settle.CreateTime = now; settle.CreateBy = creater; settle.RmbOtherAmount = 0M; settle.OtherAmount = -0M; settles.Add(settle, productList);//添加到参数 } return(settleBll.AddSettleBatch(settles)); }