diff --git a/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs b/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs index 3e7a8379..53fc593d 100644 --- a/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/AfterSaleOrder/AfterSaleOrderResponse.cs @@ -119,5 +119,7 @@ namespace BBWY.Client.Models public string Mobile { get; set; } public decimal AfterTotalCost { get; set; } = 0.0M; + + public decimal StorageAmount { get; set; } = 0.0M; } } diff --git a/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs b/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs index 18d36fe6..e4c07218 100644 --- a/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs +++ b/BBWY.Client/Models/AfterSaleOrder/AfterSaleOrder.cs @@ -105,6 +105,8 @@ namespace BBWY.Client.Models public decimal ReissueFreight { get => reissueFreight; set { Set(ref reissueFreight, value); } } public decimal ReissueProductAmount { get => reissueProductAmount; set { Set(ref reissueProductAmount, value); } } + public decimal StorageAmount { get; set; } = 0.0M; + public object Clone() { return this.MemberwiseClone(); diff --git a/BBWY.Client/Views/Order/OrderList.xaml b/BBWY.Client/Views/Order/OrderList.xaml index 4c64b891..800a5f20 100644 --- a/BBWY.Client/Views/Order/OrderList.xaml +++ b/BBWY.Client/Views/Order/OrderList.xaml @@ -348,7 +348,7 @@ + MinHeight="155"> @@ -453,7 +453,7 @@ - @@ -462,7 +462,7 @@ - + --> @@ -495,6 +495,11 @@ + + + + + @@ -749,7 +754,7 @@ - + @@ -764,35 +769,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1071,7 +1047,7 @@ - + @@ -1094,6 +1070,7 @@ + @@ -1106,13 +1083,13 @@ - + - + - + @@ -1139,49 +1116,56 @@ - + + + + + Visibility="{Binding ReissueProductAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> + Visibility="{Binding ReissueFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> + Visibility="{Binding FirstFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> + Visibility="{Binding ConsumableAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> + Visibility="{Binding DeliveryExpressFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> + Visibility="{Binding InStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> - - - + Visibility="{Binding OutStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/> + + + + - - + + - + + + - - + + diff --git a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs index 819861e1..ab4f1e20 100644 --- a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs +++ b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs @@ -1,4 +1,5 @@ using BBWY.Common.Models; +using BBWY.Server.Business.Extensions; using BBWY.Server.Model.Db; using BBWY.Server.Model.Dto; using System; @@ -28,6 +29,7 @@ namespace BBWY.Server.Business Logo = osku.Logo, OrderId = aso.OrderId, OutStorageAmount = aso.OutStorageAmount, + StorageAmount = aso.StorageAmount, ProductHealth = aso.ProductHealth, ProductId = aso.ProductId, ProductResult = aso.ProductResult, @@ -94,6 +96,10 @@ namespace BBWY.Server.Business var afterSaleOrderList = fsql.Select().Where(aso => aso.OrderId == editAfterSaleOrderRequest.OrderId).ToList(); var dbAfterSaleOrder = afterSaleOrderList.FirstOrDefault(aso => aso.Id == editAfterSaleOrderRequest.Id); var dbOrder = fsql.Select(editAfterSaleOrderRequest.OrderId).ToOne(); + var dbOrderCostDetail = fsql.Select().Where(ocd => ocd.OrderId == editAfterSaleOrderRequest.OrderId && + ocd.SkuId == dbAfterSaleOrder.SkuId && + ocd.IsEnabled == true).ToOne(); + var dbOrderCost = fsql.Select(editAfterSaleOrderRequest.OrderId).ToOne(); #region 更新当前服务单属性 dbAfterSaleOrder.ServiceResult = editAfterSaleOrderRequest.ServiceResult; @@ -109,6 +115,7 @@ namespace BBWY.Server.Business dbAfterSaleOrder.RefundInStorageAmount = 0M; dbAfterSaleOrder.ReissueFreight = 0M; dbAfterSaleOrder.ReissueProductAmount = 0M; + dbAfterSaleOrder.StorageAmount = 0M; dbAfterSaleOrder.AfterTotalCost = 0M; if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.维修 || @@ -119,21 +126,39 @@ namespace BBWY.Server.Business dbAfterSaleOrder.ProductHealth = Model.Enums.ProductHealth.客户无退货; dbAfterSaleOrder.ReissueProductAmount = editAfterSaleOrderRequest.ReissueProductAmount; - dbAfterSaleOrder.ReissueFreight = editAfterSaleOrderRequest.ReissueFreight; + + if (dbOrder.StorageType == Model.Enums.StorageType.代发) + dbAfterSaleOrder.ReissueFreight = editAfterSaleOrderRequest.ReissueFreight; //其他单单更新采购运费 + else + dbAfterSaleOrder.DeliveryExpressFreight = editAfterSaleOrderRequest.ReissueFreight; //代发单更新快递费 } - else if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.退货) + else if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.换新) { - if (dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回云仓 || - dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回京仓) + dbAfterSaleOrder.ConsumableAmount = dbOrderCostDetail.ConsumableAmount; + dbAfterSaleOrder.DeliveryExpressFreight = dbOrderCostDetail.DeliveryExpressFreight; + dbAfterSaleOrder.FirstFreight = dbOrderCostDetail.FirstFreight; + dbAfterSaleOrder.ReissueProductAmount = dbOrderCostDetail.SkuAmount; + dbAfterSaleOrder.ReissueFreight = dbOrderCostDetail.PurchaseFreight; + dbAfterSaleOrder.StorageAmount = dbOrderCostDetail.StorageAmount; + if (dbOrder.StorageType == Model.Enums.StorageType.云仓) { - + dbAfterSaleOrder.InStorageAmount = 0.2M * dbOrderCostDetail.DeductionQuantity; + dbAfterSaleOrder.OutStorageAmount = 0.9M * dbOrderCostDetail.DeductionQuantity; + } + else if (dbOrder.StorageType == Model.Enums.StorageType.京仓) + { + dbAfterSaleOrder.InStorageAmount = 1.4M * dbOrderCostDetail.DeductionQuantity; + dbAfterSaleOrder.OutStorageAmount = 1.4M * dbOrderCostDetail.DeductionQuantity; } } + if (dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回云仓 || dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回京仓) + dbAfterSaleOrder.RefundInStorageAmount = 1M; if (dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.可二次销售) { //原sku采购成本 + dbAfterSaleOrder.RefundPurchaseAmount = dbOrderCostDetail.TotalCost; } else if (dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.残次品_无法二次销售 || dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.客户无退货 || @@ -142,9 +167,27 @@ namespace BBWY.Server.Business dbAfterSaleOrder.RefundPurchaseAmount = 0M; } - + dbAfterSaleOrder.AfterTotalCost = dbAfterSaleOrder.ReissueAfterSaleAmount.Value + + dbAfterSaleOrder.ConsumableAmount.Value + + dbAfterSaleOrder.DeliveryExpressFreight.Value + + dbAfterSaleOrder.FirstFreight.Value + + dbAfterSaleOrder.InStorageAmount.Value + + dbAfterSaleOrder.OutStorageAmount.Value + + dbAfterSaleOrder.RefundInStorageAmount.Value + + dbAfterSaleOrder.ReissueFreight.Value + + dbAfterSaleOrder.ReissueProductAmount.Value + + dbAfterSaleOrder.StorageAmount; #endregion + dbOrderCost.CalculationOrderProfitAndCost(dbOrder, afterSaleOrderList); + + fsql.Transaction(() => + { + fsql.Update().SetSource(dbOrderCost).ExecuteAffrows(); + fsql.Update().SetSource(dbAfterSaleOrder).ExecuteAffrows(); + }); } + + } } diff --git a/BBWY.Server.Business/Extensions/OrderCostExtension.cs b/BBWY.Server.Business/Extensions/OrderCostExtension.cs new file mode 100644 index 00000000..94f507ef --- /dev/null +++ b/BBWY.Server.Business/Extensions/OrderCostExtension.cs @@ -0,0 +1,28 @@ +using BBWY.Server.Model.Db; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BBWY.Server.Business.Extensions +{ + public static class OrderCostExtension + { + public static void CalculationOrderProfitAndCost(this OrderCost orderCost, Order order, IList afterSaleOrders) + { + orderCost.AfterTotalCost = afterSaleOrders.Count == 0 ? 0M : afterSaleOrders.Sum(aso => aso.AfterTotalCost); + orderCost.RefundAmount = afterSaleOrders.Count == 0 ? 0M : afterSaleOrders.Sum(aso => aso.RefundAmount ?? 0M); + orderCost.RefundPurchaseAmount = afterSaleOrders.Count == 0M ? 0M : afterSaleOrders.Sum(aso => aso.RefundPurchaseAmount ?? 0); + + //退款之后平台扣点 + orderCost.PlatformCommissionAmount = (order.OrderSellerPrice - orderCost.RefundAmount) * (orderCost.PlatformCommissionRatio); + + orderCost.Profit = order.OrderSellerPrice + order.FreightPrice - orderCost.RefundAmount - + orderCost.PurchaseAmount - + orderCost.DeliveryExpressFreight - + orderCost.PlatformCommissionAmount - + orderCost.AfterTotalCost + + orderCost.RefundPurchaseAmount; + } + } +} diff --git a/BBWY.Server.Business/Order/OrderBusiness.cs b/BBWY.Server.Business/Order/OrderBusiness.cs index b6a7e6f5..522d94e5 100644 --- a/BBWY.Server.Business/Order/OrderBusiness.cs +++ b/BBWY.Server.Business/Order/OrderBusiness.cs @@ -620,13 +620,6 @@ namespace BBWY.Server.Business orderCostDetail.CreateTime = DateTime.Now; orderCostDetail.OrderId = manualCalculationCostRequest.OrderId; orderCostDetail.PurchaseOrderPKId = 0; - //orderCostDetail.TotalCost = orderCostDetail.SkuAmount + - // orderCostDetail.PurchaseFreight + - // orderCostDetail.FirstFreight + - // orderCostDetail.StorageAmount + - // orderCostDetail.ConsumableAmount + - // orderCostDetail.OperationAmount; - //orderCostDetail.UnitCost = orderCostDetail.TotalCost / orderCostDetail.DeductionQuantity; } var totalPurchaseCost = insertOrderCostDetailList.Sum(ocd => ocd.TotalCost); diff --git a/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs b/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs index a5f18258..9dae2dc5 100644 --- a/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs +++ b/BBWY.Server.Model/Db/Order/AfterSaleOrder.cs @@ -133,6 +133,12 @@ namespace BBWY.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal AfterTotalCost { get; set; } = 0.0M; + /// + /// 仓储费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal StorageAmount { get; set; } = 0.0M; + } }