Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
File: MyBll.cs Progetto: radtek/Shop
        /// <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));
        }