From 0c1f19090b02dbefb30ed2bd4595ebafa10b03f7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 13 Jun 2022 07:32:19 +0800 Subject: [PATCH] 1 --- BBWY.Client/APIServices/OrderService.cs | 24 ++- .../Response/Order/ExportOrderResponse.cs | 2 +- .../Models/Order/ManualEditCostOrderSku.cs | 203 ++++++++++++++++++ BBWY.Client/Models/Order/Order.cs | 5 + .../ViewModels/Order/OrderListViewModel.cs | 52 ++++- BBWY.Client/Views/MainWindow.xaml | 2 +- .../Views/Order/ManualCalculationCost.xaml | 151 ++++++++++++- .../Views/Order/ManualCalculationCost.xaml.cs | 56 +++-- BBWY.Client/Views/Order/OrderList.xaml | 41 +++- .../Views/Order/RelationPurchaseOrder.xaml | 2 +- BBWY.Client/Views/Order/SD.xaml.cs | 6 +- BBWY.Server.Business/Order/OrderBusiness.cs | 55 +++-- .../Statistics/StatisticsBusiness.cs | 2 +- BBWY.Server.Model/Db/Order/OrderCostDetail.cs | 170 ++++++++------- .../Order/ManualCalculationCostRequest.cs | 69 ++++-- BBWY.Server.Model/MappingProfiles.cs | 1 + 16 files changed, 678 insertions(+), 163 deletions(-) create mode 100644 BBWY.Client/Models/Order/ManualEditCostOrderSku.cs diff --git a/BBWY.Client/APIServices/OrderService.cs b/BBWY.Client/APIServices/OrderService.cs index 5745a981..829f88be 100644 --- a/BBWY.Client/APIServices/OrderService.cs +++ b/BBWY.Client/APIServices/OrderService.cs @@ -3,6 +3,7 @@ using BBWY.Common.Http; using BBWY.Common.Models; using System; using System.Collections.Generic; +using System.Linq; using System.Net.Http; namespace BBWY.Client.APIServices @@ -94,10 +95,12 @@ namespace BBWY.Client.APIServices /// 手动计算成本 /// /// - /// 是否设置仓储类型 + /// /// + /// + /// /// - public ApiResponse ManualCalculationCost(string orderId, bool isSetStorageType, StorageType storageType, decimal purchaseCost, decimal deliveryExpressFreight, decimal platformCommissionRatio) + public ApiResponse ManualCalculationCost(string orderId, bool isSetStorageType, StorageType storageType, IList manualEditCostOrderSkuList, decimal platformCommissionRatio) { return SendRequest(globalContext.BBYWApiHost, "api/order/ManualCalculationCost", new @@ -105,8 +108,21 @@ namespace BBWY.Client.APIServices orderId, isSetStorageType, storageType, - purchaseCost, - deliveryExpressFreight, + OrderCostDetailList = manualEditCostOrderSkuList.Select(osku => new + { + SkuId = osku.Id, + osku.ConsumableAmount, + osku.DeliveryExpressFreight, + osku.FirstFreight, + DeductionQuantity = osku.ItemTotal, + osku.OperationAmount, + osku.PurchaseFreight, + osku.ProductId, + osku.SkuAmount, + osku.StorageAmount, + osku.TotalCost, + osku.UnitCost + }), platformCommissionRatio }, null, HttpMethod.Post); } diff --git a/BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs b/BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs index 4c3ad4ff..deb232e0 100644 --- a/BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs @@ -69,7 +69,7 @@ namespace BBWY.Client.Models public override string ToString() { - //日期,店铺订单号,SKU编码,代发下单单号,售价,采购金额,头程费用,仓储服务费,快递费,平台扣点,补差金额,利润,利润率,收件人联系方式 + //日期,店铺订单号,SKU编码,代发下单单号,售价,商品成本,头程费用,仓储服务费,快递费,平台扣点,补差金额,利润,利润率,收件人联系方式 return $"{OrderStartTime:yyyy-MM-dd HH:mm:ss},{OrderId},{SkuIds},{StorageType},{PurchaseOrderIds},{OrderTotalPrice},{PurchaseSkuAmount},{FirstFreight},{StorageAmount},{DeliveryExpressFreight},{PlatformCommissionAmount},{FreightPrice},{Profit},{ProfitRatio},{ConsigneeStr}"; } } diff --git a/BBWY.Client/Models/Order/ManualEditCostOrderSku.cs b/BBWY.Client/Models/Order/ManualEditCostOrderSku.cs new file mode 100644 index 00000000..d9276363 --- /dev/null +++ b/BBWY.Client/Models/Order/ManualEditCostOrderSku.cs @@ -0,0 +1,203 @@ +using System; + +namespace BBWY.Client.Models +{ + public class ManualEditCostOrderSku : NotifyObject + { + + /// + /// 发货运费 + /// + private decimal deliveryExpressFreight; + private string deliveryExpressFreightStr; + + /// + /// 单件成本 + /// + private decimal unitCost; + + /// + /// Sku成本(商品成本) + /// + private decimal skuAmount; + private string skuAmountStr; + + /// + /// 采购运费 + /// + private decimal purchaseFreight; + private string purchaseFreightStr; + + /// + /// 头程运费 + /// + private decimal firstFreight; + private string firstFreightStr; + + /// + /// 操作费 + /// + private decimal operationAmount; + private string operationAmountStr; + + /// + /// 耗材费 + /// + private decimal consumableAmount; + private string consumableAmountStr; + + /// + /// 仓储费 + /// + private decimal storageAmount; + private string storageAmountStr; + + /// + /// 总计(不含发货运费) + /// + private decimal totalCost; + + /// + /// SkuId + /// + public string Id { get; set; } + + public int ItemTotal { get; set; } + + public string ProductId { get; set; } + + public string ProductItemNum { get; set; } + + public double Price { get; set; } + + /// + /// Sku标题 + /// + public string Title { get; set; } + + public string Logo { get; set; } + public decimal DeliveryExpressFreight + { + get => deliveryExpressFreight; set + { + if (Set(ref deliveryExpressFreight, value)) + { + OnAmountChanged?.Invoke(); + } + } + } + public decimal UnitCost { get => unitCost; set { Set(ref unitCost, value); } } + public decimal SkuAmount + { + get => skuAmount; set + { + if (Set(ref skuAmount, value)) + { + CalculationCost(); + } + } + } + public decimal PurchaseFreight { get => purchaseFreight; set { if (Set(ref purchaseFreight, value)) { CalculationCost(); } } } + public decimal FirstFreight { get => firstFreight; set { if (Set(ref firstFreight, value)) { CalculationCost(); } } } + public decimal OperationAmount { get => operationAmount; set { if (Set(ref operationAmount, value)) { CalculationCost(); } } } + public decimal ConsumableAmount { get => consumableAmount; set { if (Set(ref consumableAmount, value)) { CalculationCost(); } } } + public decimal StorageAmount { get => storageAmount; set { if (Set(ref storageAmount, value)) { CalculationCost(); } } } + public decimal TotalCost + { + get => totalCost; set + { + if (Set(ref totalCost, value)) + { + OnAmountChanged?.Invoke(); + } + } + } + + private void CalculationCost() + { + TotalCost = SkuAmount + PurchaseFreight + FirstFreight + OperationAmount + ConsumableAmount + StorageAmount; + UnitCost = ItemTotal == 0 ? 0 : TotalCost / ItemTotal; + } + + public Action OnAmountChanged { get; set; } + + public string SkuAmountStr + { + get => skuAmountStr; set + { + if (Set(ref skuAmountStr, value)) + { + if (decimal.TryParse(skuAmountStr, out decimal d)) + SkuAmount = d; + } + } + } + public string PurchaseFreightStr + { + get => purchaseFreightStr; set + { + if (Set(ref purchaseFreightStr, value)) + { + if (decimal.TryParse(purchaseFreightStr, out decimal d)) + PurchaseFreight = d; + } + } + } + public string FirstFreightStr + { + get => firstFreightStr; set + { + if (Set(ref firstFreightStr, value)) + { + if (decimal.TryParse(firstFreightStr, out decimal d)) + FirstFreight = d; + } + } + } + public string ConsumableAmountStr + { + get => consumableAmountStr; set + { + if (Set(ref consumableAmountStr, value)) + { + if (decimal.TryParse(consumableAmountStr, out decimal d)) + ConsumableAmount = d; + } + } + } + public string StorageAmountStr + { + get => storageAmountStr; set + { + if (Set(ref storageAmountStr, value)) + { + if (decimal.TryParse(storageAmountStr, out decimal d)) + StorageAmount = d; + } + } + } + public string OperationAmountStr + { + get => operationAmountStr; set + { + if (Set(ref operationAmountStr, value)) + { + if (decimal.TryParse(operationAmountStr, out decimal d)) + OperationAmount = d; + } + } + } + + public string DeliveryExpressFreightStr + { + get => deliveryExpressFreightStr; set + { + if (Set(ref deliveryExpressFreightStr, value)) + { + if (decimal.TryParse(deliveryExpressFreightStr, out decimal d)) + DeliveryExpressFreight = d; + } + } + } + } +} diff --git a/BBWY.Client/Models/Order/Order.cs b/BBWY.Client/Models/Order/Order.cs index e1ecbd67..20ebe5a1 100644 --- a/BBWY.Client/Models/Order/Order.cs +++ b/BBWY.Client/Models/Order/Order.cs @@ -80,6 +80,11 @@ namespace BBWY.Client.Models /// public decimal FreightPrice { get; set; } + /// + /// 实收金额 + /// + public decimal ActualAmount { get { return OrderSellerPrice + FreightPrice; } } + /// /// 商家优惠金额 /// diff --git a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs index 2619f803..05908e2e 100644 --- a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs +++ b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs @@ -313,7 +313,7 @@ namespace BBWY.Client.ViewModels } else if (storageType == StorageType.SD) { - var sd = new SD(orderId, true, order.VenderRemark, order.Flag, string.Empty, null, string.Empty, string.Empty); + var sd = new SD(orderId, true, order.VenderRemark, order.Flag, string.Empty, null, string.Empty, string.Empty, 0M, 0M); sd.Closed += Sd_Closed; sd.ShowDialog(); } @@ -432,7 +432,7 @@ namespace BBWY.Client.ViewModels } else if (order.StorageType == StorageType.SD) { - var sd = new SD(order.Id, false, order.VenderRemark, order.Flag, order.SDKey, order.SDPayChannel, order.SDPayBillNo, order.SDOperator); + var sd = new SD(order.Id, false, order.VenderRemark, order.Flag, order.SDKey, order.SDPayChannel, order.SDPayBillNo, order.SDOperator, order.OrderCost.SDCommissionAmount, order.OrderCost.DeliveryExpressFreight); sd.Closed += Sd_Closed; sd.ShowDialog(); } @@ -475,7 +475,42 @@ namespace BBWY.Client.ViewModels } else { - var manualCalculationCost = new ManualCalculationCost(orderId, isSetStorageType, storageType); + var order = OrderList.FirstOrDefault(o => o.Id == orderId); + var orderSkuList = order.ItemList.Select(osku => new ManualEditCostOrderSku() + { + Id = osku.Id, + ItemTotal = osku.ItemTotal, + Logo = osku.Logo, + Price = osku.Price, + Title = osku.Title, + ProductId = osku.ProductId, + ProductItemNum = osku.ProductItemNum + }).ToList(); + foreach (var manualEditCostOrderSku in orderSkuList) + { + var orderCostDetailList = order.OrderCostDetailGroupList?.FirstOrDefault(g => g.SkuId == manualEditCostOrderSku.Id)?.Items; + if (orderCostDetailList != null && orderCostDetailList.Count > 0) + { + manualEditCostOrderSku.ConsumableAmount = orderCostDetailList.Sum(ocd => ocd.ConsumableAmount); + manualEditCostOrderSku.DeliveryExpressFreight = orderCostDetailList.Sum(ocd => ocd.DeliveryExpressFreight); + manualEditCostOrderSku.FirstFreight = orderCostDetailList.Sum(ocd => ocd.FirstFreight); + manualEditCostOrderSku.OperationAmount = orderCostDetailList.Sum(ocd => ocd.OperationAmount); + manualEditCostOrderSku.PurchaseFreight = orderCostDetailList.Sum(ocd => ocd.PurchaseFreight); + manualEditCostOrderSku.SkuAmount = orderCostDetailList.Sum(ocd => ocd.SkuAmount); + manualEditCostOrderSku.StorageAmount = orderCostDetailList.Sum(ocd => ocd.StorageAmount); + manualEditCostOrderSku.TotalCost = orderCostDetailList.Sum(ocd => ocd.TotalCost); + manualEditCostOrderSku.UnitCost = orderCostDetailList.FirstOrDefault().UnitCost; + } + manualEditCostOrderSku.ConsumableAmountStr = manualEditCostOrderSku.ConsumableAmount.ToString(); + manualEditCostOrderSku.DeliveryExpressFreightStr = manualEditCostOrderSku.DeliveryExpressFreight.ToString(); + manualEditCostOrderSku.FirstFreightStr = manualEditCostOrderSku.FirstFreight.ToString(); + manualEditCostOrderSku.OperationAmountStr = manualEditCostOrderSku.OperationAmount.ToString(); + manualEditCostOrderSku.PurchaseFreightStr = manualEditCostOrderSku.PurchaseFreight.ToString(); + manualEditCostOrderSku.SkuAmountStr = manualEditCostOrderSku.SkuAmount.ToString(); + manualEditCostOrderSku.StorageAmountStr = manualEditCostOrderSku.StorageAmount.ToString(); + } + + var manualCalculationCost = new ManualCalculationCost(orderId, isSetStorageType, storageType, orderSkuList); manualCalculationCost.Closed += ManualCalculationCost_Closed; manualCalculationCost.ShowDialog(); } @@ -491,11 +526,14 @@ namespace BBWY.Client.ViewModels var orderId = manualCalculationCost.OrderId; var storageType = manualCalculationCost.StorageType; var isSetStorageType = manualCalculationCost.IsSetStorageType; - var purchaseCost = manualCalculationCost.PurchaseCost; - var deliveryExpressFreight = manualCalculationCost.DeliveryExpressFreight; + var manualEditCostOrderSkuList = manualCalculationCost.ManualEditCostOrderSkuList; IsLoading = true; - Task.Factory.StartNew(() => orderService.ManualCalculationCost(orderId, isSetStorageType, storageType, purchaseCost, deliveryExpressFreight, globalContext.User.Shop.PlatformCommissionRatio ?? 0.05M)).ContinueWith(r => + Task.Factory.StartNew(() => orderService.ManualCalculationCost(orderId, + isSetStorageType, + storageType, + manualEditCostOrderSkuList, + globalContext.User.Shop.PlatformCommissionRatio ?? 0.05M)).ContinueWith(r => { var response = r.Result; if (!response.Success) @@ -631,7 +669,7 @@ namespace BBWY.Client.ViewModels try { var list = r.Data.Select(x => x.ToString()).ToList(); - list.Insert(0, "日期,店铺订单号,SKU编码,仓储类型,代发下单单号,售价,采购金额,头程费用,仓储服务费,快递费,平台扣点,补差金额,利润,利润率,收件人联系方式,售后类型,售后与特殊情况备注"); + list.Insert(0, "日期,店铺订单号,SKU编码,仓储类型,代发下单单号,售价,商品成本,头程费用,仓储服务费,快递费,平台扣点,补差金额,利润,利润率,收件人联系方式,售后类型,售后与特殊情况备注"); System.IO.File.WriteAllLines(ssaveFileName, list, Encoding.UTF8); App.Current.Dispatcher.Invoke(() => MessageBox.Show("导出完成", "导出")); } diff --git a/BBWY.Client/Views/MainWindow.xaml b/BBWY.Client/Views/MainWindow.xaml index dd8432cf..9700d262 100644 --- a/BBWY.Client/Views/MainWindow.xaml +++ b/BBWY.Client/Views/MainWindow.xaml @@ -26,7 +26,7 @@ - + diff --git a/BBWY.Client/Views/Order/ManualCalculationCost.xaml b/BBWY.Client/Views/Order/ManualCalculationCost.xaml index 9cf1e0c4..2311dd60 100644 --- a/BBWY.Client/Views/Order/ManualCalculationCost.xaml +++ b/BBWY.Client/Views/Order/ManualCalculationCost.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:BBWY.Client.Views.Order" xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls" mc:Ignorable="d" - Title="手动计算成本" Height="450" Width="300" + Title="手动计算成本" Height="450" Width="1100" Style="{StaticResource bwstyle}" MinButtonVisibility="Collapsed" MaxButtonVisibility="Collapsed"> @@ -21,7 +21,140 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/BBWY.Client/Views/Order/ManualCalculationCost.xaml.cs b/BBWY.Client/Views/Order/ManualCalculationCost.xaml.cs index a5dab168..d798e5dc 100644 --- a/BBWY.Client/Views/Order/ManualCalculationCost.xaml.cs +++ b/BBWY.Client/Views/Order/ManualCalculationCost.xaml.cs @@ -1,5 +1,7 @@ using BBWY.Client.Models; using BBWY.Controls; +using System.Collections.Generic; +using System.Linq; using System.Windows; namespace BBWY.Client.Views.Order @@ -15,13 +17,20 @@ namespace BBWY.Client.Views.Order public StorageType StorageType { get; private set; } - public decimal PurchaseCost { get; private set; } + public List ManualEditCostOrderSkuList { get; set; } - public decimal DeliveryExpressFreight { get; private set; } - - public ManualCalculationCost(string orderId, bool isSetStorageType, StorageType storageType) + public ManualCalculationCost(string orderId, bool isSetStorageType, StorageType storageType, IList manualEditCostOrderSkuList) { InitializeComponent(); + this.DataContext = this; + ManualEditCostOrderSkuList = new List(); + ManualEditCostOrderSkuList.AddRange(manualEditCostOrderSkuList); + foreach (var manualEditCostOrderSku in ManualEditCostOrderSkuList) + manualEditCostOrderSku.OnAmountChanged = () => + { + txtTotalCost.Text = ManualEditCostOrderSkuList.Sum(osku => osku.TotalCost).ToString(); + txtTotalDeliveryExpressFreight.Text = ManualEditCostOrderSkuList.Sum(osku => osku.DeliveryExpressFreight).ToString(); + }; this.OrderId = orderId; this.IsSetStorageType = isSetStorageType; this.StorageType = storageType; @@ -32,11 +41,14 @@ namespace BBWY.Client.Views.Order { txt_StorageType.Text = $"{this.StorageType}-手动计算成本"; - if (StorageType != StorageType.云仓 && StorageType != StorageType.京仓) - { - txtFirstFreight.Visibility = Visibility.Collapsed; - this.Height = 290; - } + //if (StorageType != StorageType.云仓 && StorageType != StorageType.京仓) + //{ + // txtFirstFreight.Visibility = Visibility.Collapsed; + // this.Height = 290; + //} + + txtTotalCost.Text = ManualEditCostOrderSkuList.Sum(osku => osku.TotalCost).ToString(); + txtTotalDeliveryExpressFreight.Text = ManualEditCostOrderSkuList.Sum(osku => osku.DeliveryExpressFreight).ToString(); } private void btn_fillFromLately_Click(object sender, System.Windows.RoutedEventArgs e) @@ -46,22 +58,22 @@ namespace BBWY.Client.Views.Order private void btn_Save_Click(object sender, System.Windows.RoutedEventArgs e) { - if (!decimal.TryParse(txtSkuAmount.Text, out decimal skuAmount) || - !decimal.TryParse(txtFeright.Text, out decimal feright) || - !decimal.TryParse(txtDeliveryExpressFreight.Text, out decimal deliveryExpressFreight)) - { - MessageBox.Show("请填写完整信息", "手动编辑成本"); - return; - } + //if (!decimal.TryParse(txtSkuAmount.Text, out decimal skuAmount) || + // !decimal.TryParse(txtFeright.Text, out decimal feright) || + // !decimal.TryParse(txtDeliveryExpressFreight.Text, out decimal deliveryExpressFreight)) + //{ + // MessageBox.Show("请填写完整信息", "手动编辑成本"); + // return; + //} - decimal.TryParse(txtFirstFreight.Text, out decimal firstFreight); - decimal.TryParse(txtOperationAmount.Text, out decimal operationAmount); - decimal.TryParse(txtConsumableAmount.Text, out decimal consumableAmount); - decimal.TryParse(txtStorageAmount.Text, out decimal storageAmount); + //decimal.TryParse(txtFirstFreight.Text, out decimal firstFreight); + //decimal.TryParse(txtOperationAmount.Text, out decimal operationAmount); + //decimal.TryParse(txtConsumableAmount.Text, out decimal consumableAmount); + //decimal.TryParse(txtStorageAmount.Text, out decimal storageAmount); - this.PurchaseCost = skuAmount + feright + firstFreight + operationAmount + consumableAmount + storageAmount; - this.DeliveryExpressFreight = deliveryExpressFreight; + //this.PurchaseCost = skuAmount + feright + firstFreight + operationAmount + consumableAmount + storageAmount; + //this.DeliveryExpressFreight = deliveryExpressFreight; this.DialogResult = true; this.Close(); } diff --git a/BBWY.Client/Views/Order/OrderList.xaml b/BBWY.Client/Views/Order/OrderList.xaml index 47191fc1..1dd8c044 100644 --- a/BBWY.Client/Views/Order/OrderList.xaml +++ b/BBWY.Client/Views/Order/OrderList.xaml @@ -482,7 +482,7 @@ CommandParameter="{Binding OrderDropShipping.PurchaseOrderId}"/> - + @@ -495,10 +495,30 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -510,12 +530,12 @@ + Style="{StaticResource NoScrollViewListBoxStyle}" Foreground="{StaticResource Text.Color}"> - - + + @@ -527,7 +547,7 @@ - + @@ -550,7 +570,8 @@ + ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}" + Foreground="{StaticResource Text.Color}"> diff --git a/BBWY.Client/Views/Order/RelationPurchaseOrder.xaml b/BBWY.Client/Views/Order/RelationPurchaseOrder.xaml index f477bcf1..dfaeecbe 100644 --- a/BBWY.Client/Views/Order/RelationPurchaseOrder.xaml +++ b/BBWY.Client/Views/Order/RelationPurchaseOrder.xaml @@ -138,7 +138,7 @@ - + ().Where(ocd => orderIdList.Contains(ocd.OrderId)).ToList().Map>(); + var orderCostDetailList = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList().Map>(); foreach (var order in orderList) order.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList(); #endregion @@ -242,13 +242,14 @@ namespace BBWY.Server.Business var orderIdList = orderSourceList.Select(o => o.OrderId).ToList(); var orderSkuList = fsql.Select().Where(osku => orderIdList.Contains(osku.OrderId)).ToList(); - var orderCostDetailGroup = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId)).GroupBy(ocd => ocd.OrderId).ToList(g => new - { - OrderId = g.Key, - SkuAmount = g.Sum(g.Value.SkuAmount), - FirstFreight = g.Sum(g.Value.FirstFreight), - StorageAmount = g.Sum(g.Value.StorageAmount) - }); + var orderCostDetailGroup = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true) + .GroupBy(ocd => ocd.OrderId).ToList(g => new + { + OrderId = g.Key, + SkuAmount = g.Sum(g.Value.SkuAmount), + FirstFreight = g.Sum(g.Value.FirstFreight), + StorageAmount = g.Sum(g.Value.StorageAmount) + }); foreach (var order in orderSourceList) { @@ -333,7 +334,7 @@ namespace BBWY.Server.Business var orderSkuList = fsql.Select().Where(osku => osku.OrderId == orderId).ToList().Map>(); var orderCouponList = fsql.Select().Where(oc => oc.OrderId == orderId).ToList().Map>(); - var orderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == orderId).ToList().Map>(); + var orderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == orderId && ocd.IsEnabled == true).ToList().Map>(); orderResponse.ItemList = orderSkuList; orderResponse.OrderCouponList = orderCouponList; @@ -415,7 +416,7 @@ namespace BBWY.Server.Business throw new BusinessException("库存为零不能自动计算成本"); var orderCost = fsql.Select(autoCalculationCostRequest.OrderId).ToOne(); - var orderCostDetails = fsql.Select().Where(ocd => ocd.OrderId == autoCalculationCostRequest.OrderId).ToList(); + var orderCostDetails = fsql.Select().Where(ocd => ocd.OrderId == autoCalculationCostRequest.OrderId && ocd.IsEnabled == true).ToList(); IUpdate orderUpdate = null; IUpdate updateOrderCost = null; @@ -558,13 +559,35 @@ namespace BBWY.Server.Business var dbOrder = fsql.Select(manualCalculationCostRequest.OrderId).ToOne(); if (dbOrder == null) throw new BusinessException($"订单号{manualCalculationCostRequest.OrderId}不存在"); + if (manualCalculationCostRequest.OrderCostDetailList == null || manualCalculationCostRequest.OrderCostDetailList.Count() == 0) + throw new BusinessException($"缺少明细信息"); IUpdate orderUpdate = null; IUpdate updateOrderCost = null; IInsert insertOrderCost = null; + List insertOrderCostDetailList = new List(); + if (manualCalculationCostRequest.IsSetStorageType) orderUpdate = fsql.Update(manualCalculationCostRequest.OrderId).Set(o => o.StorageType, manualCalculationCostRequest.StorageType); + insertOrderCostDetailList.AddRange(manualCalculationCostRequest.OrderCostDetailList.Map>()); + foreach (var orderCostDetail in insertOrderCostDetailList) + { + orderCostDetail.Id = idGenerator.NewLong(); + 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); + var totalDeliveryExpressFreight = insertOrderCostDetailList.Sum(ocd => ocd.DeliveryExpressFreight); var orderCost = fsql.Select(manualCalculationCostRequest.OrderId).ToOne(); if (orderCost == null) @@ -577,8 +600,8 @@ namespace BBWY.Server.Business PlatformCommissionRatio = manualCalculationCostRequest.PlatformCommissionRatio, PreferentialAmount = dbOrder.PreferentialAmount, Profit = 0, - PurchaseAmount = manualCalculationCostRequest.PurchaseCost, - DeliveryExpressFreight = manualCalculationCostRequest.DeliveryExpressFreight, + PurchaseAmount = totalPurchaseCost, + DeliveryExpressFreight = totalDeliveryExpressFreight, CreateTime = DateTime.Now, IsManualEdited = true }; @@ -592,8 +615,8 @@ namespace BBWY.Server.Business } else { - orderCost.PurchaseAmount = manualCalculationCostRequest.PurchaseCost; - orderCost.DeliveryExpressFreight = manualCalculationCostRequest.DeliveryExpressFreight; + orderCost.PurchaseAmount = totalPurchaseCost; + orderCost.DeliveryExpressFreight = totalDeliveryExpressFreight; orderCost.Profit = dbOrder.OrderSellerPrice + dbOrder.FreightPrice - orderCost.PurchaseAmount - @@ -605,9 +628,11 @@ namespace BBWY.Server.Business fsql.Transaction(() => { + fsql.Update().Set(ocd => ocd.IsEnabled, false).Where(ocd => ocd.OrderId == manualCalculationCostRequest.OrderId).ExecuteAffrows(); orderUpdate?.ExecuteAffrows(); insertOrderCost?.ExecuteAffrows(); updateOrderCost?.ExecuteAffrows(); + fsql.Insert(insertOrderCostDetailList).ExecuteAffrows(); }); } @@ -1029,7 +1054,7 @@ namespace BBWY.Server.Business if (interfaceCanceledOrderIdList.Count() > 0 && dbOrderList.Any(dbOrder => interfaceCanceledOrderIdList.Contains(dbOrder.Id) && dbOrder.OrderState != Enums.OrderState.已取消)) { - dbOrderCostDetailList = fsql.Select().Where(ocd => interfaceCanceledOrderIdList.Contains(ocd.OrderId)).ToList(); + dbOrderCostDetailList = fsql.Select().Where(ocd => interfaceCanceledOrderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList(); } var orderSkuIds = new List(); diff --git a/BBWY.Server.Business/Statistics/StatisticsBusiness.cs b/BBWY.Server.Business/Statistics/StatisticsBusiness.cs index 22538288..de1c31ff 100644 --- a/BBWY.Server.Business/Statistics/StatisticsBusiness.cs +++ b/BBWY.Server.Business/Statistics/StatisticsBusiness.cs @@ -88,7 +88,7 @@ namespace BBWY.Server.Business //查询orderSku var orderSkuList = fsql.Select().Where(osku => orderIdList.Contains(osku.OrderId)).ToList(); //查询成本明细 - var orderCostDetailList = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId)).ToList(); + var orderCostDetailList = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList(); detailList = new List(); var totalSDOrderCost = 0M; diff --git a/BBWY.Server.Model/Db/Order/OrderCostDetail.cs b/BBWY.Server.Model/Db/Order/OrderCostDetail.cs index 42a6790a..d259b2e1 100644 --- a/BBWY.Server.Model/Db/Order/OrderCostDetail.cs +++ b/BBWY.Server.Model/Db/Order/OrderCostDetail.cs @@ -5,88 +5,92 @@ namespace BBWY.Server.Model.Db { [Table(Name = "ordercostdetail", DisableSyncStructure = true)] - public partial class OrderCostDetail { - - [Column(DbType = "bigint(1)", IsPrimary = true)] - public long Id { get; set; } - - [Column(DbType = "datetime")] - public DateTime? CreateTime { get; set; } - - /// - /// 扣减数量 - /// - [Column(DbType = "int(1)")] - public int DeductionQuantity { get; set; } = 0; - - /// - /// 发货运费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal DeliveryExpressFreight { get; set; } = 0.00M; - - [Column(StringLength = 50)] - public string OrderId { get; set; } - - [Column(StringLength = 50)] - public string ProductId { get; set; } - - /// - /// 单件成本 - /// - [Column(DbType = "decimal(20,2)")] - public decimal UnitCost { get; set; } = 0.00M; - - /// - /// 采购单流水Id - /// - [Column(DbType = "bigint(1)")] - public long PurchaseOrderPKId { get; set; } - - [Column(StringLength = 50)] - public string SkuId { get; set; } - - /// - /// Sku成本(商品成本) - /// - [Column(DbType = "decimal(20,2)")] - public decimal SkuAmount { get; set; } = 0.00M; - - /// - /// 采购运费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal PurchaseFreight { get; set; } = 0.00M; - - /// - /// 头程运费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal FirstFreight { get; set; } = 0.00M; - - /// - /// 操作费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal OperationAmount { get; set; } = 0.00M; - - /// - /// 耗材费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal ConsumableAmount { get; set; } = 0.00M; - - /// - /// 仓储费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal StorageAmount { get; set; } = 0.00M; - - /// - /// 总计(不含发货运费) - /// - [Column(DbType = "decimal(20,2)")] - public decimal TotalCost { get; set; } = 0.00M; - } + public partial class OrderCostDetail + { + + [Column(DbType = "bigint(1)", IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 扣减数量 + /// + [Column(DbType = "int(1)")] + public int DeductionQuantity { get; set; } = 0; + + /// + /// 发货运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal DeliveryExpressFreight { get; set; } = 0.00M; + + [Column(StringLength = 50)] + public string OrderId { get; set; } + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 单件成本 + /// + [Column(DbType = "decimal(20,2)")] + public decimal UnitCost { get; set; } = 0.00M; + + /// + /// 采购单流水Id + /// + [Column(DbType = "bigint(1)")] + public long PurchaseOrderPKId { get; set; } + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// Sku成本(商品成本) + /// + [Column(DbType = "decimal(20,2)")] + public decimal SkuAmount { get; set; } = 0.00M; + + /// + /// 采购运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal PurchaseFreight { get; set; } = 0.00M; + + /// + /// 头程运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal FirstFreight { get; set; } = 0.00M; + + /// + /// 操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal OperationAmount { get; set; } = 0.00M; + + /// + /// 耗材费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal ConsumableAmount { get; set; } = 0.00M; + + /// + /// 仓储费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal StorageAmount { get; set; } = 0.00M; + + /// + /// 总计(不含发货运费) + /// + [Column(DbType = "decimal(20,2)")] + public decimal TotalCost { get; set; } = 0.00M; + + [Column(DbType = "bit")] + public bool IsEnabled { get; set; } = true; + } } diff --git a/BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs b/BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs index ac39dc6a..401cb347 100644 --- a/BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs +++ b/BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs @@ -1,4 +1,6 @@ -namespace BBWY.Server.Model.Dto +using System.Collections.Generic; + +namespace BBWY.Server.Model.Dto { public class ManualCalculationCostRequest { @@ -8,19 +10,60 @@ public Enums.StorageType? StorageType { get; set; } - /// - /// 采购成本 - /// - public decimal PurchaseCost { get; set; } + ///// + ///// 采购成本 + ///// + //public decimal PurchaseCost { get; set; } + + ///// + ///// 发货运费 + ///// + //public decimal DeliveryExpressFreight { get; set; } - /// - /// 发货运费 - /// - public decimal DeliveryExpressFreight { get; set; } + public IList OrderCostDetailList { get; set; } - /// - /// 平台扣点 - /// - public decimal PlatformCommissionRatio { get; set; } + /// + /// 平台扣点 + /// + public decimal PlatformCommissionRatio { get; set; } } + + public class OrderCostDetailRequest + { + public int DeductionQuantity { get; set; } = 0; + + public decimal DeliveryExpressFreight { get; set; } = 0.00M; + + public string ProductId { get; set; } + + public string SkuId { get; set; } + + public decimal SkuAmount { get; set; } = 0.00M; + + public decimal PurchaseFreight { get; set; } = 0.00M; + + /// + /// 头程运费 + /// + public decimal FirstFreight { get; set; } = 0.00M; + + /// + /// 操作费 + /// + public decimal OperationAmount { get; set; } = 0.00M; + + /// + /// 耗材费 + /// + public decimal ConsumableAmount { get; set; } = 0.00M; + + /// + /// 仓储费 + /// + public decimal StorageAmount { get; set; } = 0.00M; + + public decimal TotalCost { get; set; } = 0M; + + public decimal UnitCost { get; set; } = 0M; + } } diff --git a/BBWY.Server.Model/MappingProfiles.cs b/BBWY.Server.Model/MappingProfiles.cs index 58d291c2..d93206b7 100644 --- a/BBWY.Server.Model/MappingProfiles.cs +++ b/BBWY.Server.Model/MappingProfiles.cs @@ -25,6 +25,7 @@ namespace BBWY.Server.Model CreateMap(); CreateMap(); + CreateMap(); CreateMap(); CreateMap(); CreateMap();