diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs index 3f6e849..cb78d09 100644 --- a/BBWYB.Server.API/Controllers/OrderController.cs +++ b/BBWYB.Server.API/Controllers/OrderController.cs @@ -72,5 +72,15 @@ namespace BBWYB.Server.API.Controllers { orderBusiness.EditVenderRemark(request); } + + /// + /// 修改订单SKU备注 + /// + /// + [HttpPost] + public void EditOrderSkuRemark([FromBody] EditOrderSkuRemarkRequest request) + { + orderBusiness.EditOrderSkuRemark(request); + } } } diff --git a/BBWYB.Server.Business/Extensions/OrderAmountExtension.cs b/BBWYB.Server.Business/Extensions/OrderAmountExtension.cs new file mode 100644 index 0000000..b5becfd --- /dev/null +++ b/BBWYB.Server.Business/Extensions/OrderAmountExtension.cs @@ -0,0 +1,61 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Business.Extensions +{ + public static class OrderAmountExtension + { + /// + /// 计算订单sku明细的成本和利润 + /// + /// 订单SKU明细成本对象 + /// sku商品金额(收入) + /// sku买家支付运费(收入) + /// sku实收打包费(收入) + /// sku采购货款(支出) + /// sku采购运费(支出) + /// sku支出打包费(支出) + /// sku发货运费(支出) + public static void CalculationOrderCostDetailCostAndProfit(this OrderCostDetail ocd, + decimal skuProductAmount, + decimal skuBuyerPayFreight, + decimal skuInPackAmount, + decimal skuPurchaseProductAmount, + decimal skuPurchaseFreight, + decimal skuOutPackAmount, + decimal skuDeliveryExpressFreight) + { + ocd.SkuAmount = skuPurchaseProductAmount; + ocd.PurchaseFreight = skuPurchaseFreight; + ocd.OutPackAmount = skuOutPackAmount; + ocd.DeliveryExpressFreight = skuDeliveryExpressFreight; + ocd.TotalCost = ocd.SkuAmount + ocd.PurchaseFreight + ocd.OutPackAmount + ocd.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费 + ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本 + } + + /// + /// 计算订单的成本和利润 + /// + /// + /// 订单金额(包含买家支付运费和收入打包费) + /// 采购货款 + /// 采购运费 + /// 支出打包费 + /// 发货运费 + public static void CalculationOrderCostCostAndProfit(this OrderCost oc, + decimal orderAmount, + decimal purchaseProductAmount, + decimal purchaseFreight, + decimal outPackAmount, + decimal deliveryExpressFreight) + { + oc.PurchaseAmount = purchaseProductAmount + purchaseFreight; //兼容以前 + + oc.SkuAmount = purchaseProductAmount; + oc.PurchaseFreight = purchaseFreight; + oc.OutPackAmount = outPackAmount; + oc.DeliveryExpressFreight = deliveryExpressFreight; + oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight; + oc.Profit = orderAmount - oc.TotalCost; + } + } +} diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 74791a5..c058f66 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -97,6 +97,7 @@ namespace BBWYB.Server.Business //ExpressName = o.ExpressName, IsPurchased = o.IsPurchased, BuyerAccount = o.BuyerAccount, + InPackAmount = o.InPackAmount, ContactName = ocs.ContactName, Address = ocs.Address, @@ -322,5 +323,13 @@ namespace BBWYB.Server.Business { fsql.Update(request.OrderId).Set(o => o.VenderRemark, request.VenderRemark).ExecuteAffrows(); } + + public void EditOrderSkuRemark(EditOrderSkuRemarkRequest request) + { + fsql.Update().Set(osku => osku.Remark, request.Remark) + .Where(osku => osku.OrderId == request.OrderId) + .Where(osku => osku.SkuId == request.SkuId) + .ExecuteAffrows(); + } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index b09ed1d..07e253d 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -12,9 +12,9 @@ using SDKAdapter; using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; -using System.Net; using System.Text; using Yitter.IdGenerator; +using BBWYB.Server.Business.Extensions; namespace BBWYB.Server.Business { @@ -189,13 +189,11 @@ namespace BBWYB.Server.Business if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0) throw new BusinessException("缺少下单商品参数"); - //var deleteOrderCostDetail = fsql.Delete().Where(ocd => ocd.OrderId == dbOrder.Id); var isRepurchase = fsql.Select(dbOrder.Id).Any(); var orderSkus = fsql.Select().Where(osku => osku.Price != 0 && osku.OrderId == request.OrderId).ToList(); var extJArray = JsonConvert.DeserializeObject(request.Extensions); - //IList purchaseOrderSimpleInfoList = new List(); List insertOrderCostDetails = new List(); List insertOrderPurchaseInfos = new List(); @@ -214,7 +212,8 @@ namespace BBWYB.Server.Business IInsert insertOrderCost = null; IUpdate updateOrderCost = null; - var totalPurchaseAmount = 0M; + var totalPurchaseProductAmount = 0M; + var totalPurchaseFreight = 0M; foreach (var cargoParamGroup in request.CargoParamGroupList) { @@ -260,6 +259,9 @@ namespace BBWYB.Server.Business OrderId = createOrderResponse.OrderId }); + totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount; + totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount; + foreach (var cargoParam in cargoParamGroup.CargoParamList) { var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == cargoParam.BelongSkuId); @@ -280,49 +282,50 @@ namespace BBWYB.Server.Business } - totalPurchaseAmount += purchaseOrderSimpleInfo.TotalAmount; - + //采购单总件数,由于1688运费只存在订单层,sku层没有运费,所以需要以订单总件数为基础等比计算采购运费 + var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity); var belongSkuGroups = cargoParamGroup.CargoParamList.GroupBy(p => p.BelongSkuId); foreach (var belongSkuGroup in belongSkuGroups) { var belongSkuId = belongSkuGroup.Key; - var currentOrderSkuProductAmount = 0M; //采购成本 var currentOrderSkuCargoParamList = cargoParamGroup.CargoParamList.Where(p => p.BelongSkuId == belongSkuId); //找当前skuId的采购skuId + var currentSkuAmount = 0M; //采购成本 + var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和 + var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * + (1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费 + foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) { - var purchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) .Sum(p => p.ProductAmount); - var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) .Sum(p => p.Quantity); - currentOrderSkuProductAmount += purchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity / purchaseSkuTotalQuantity); - } - var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / belongSkuGroups.Count(); //采购运费(按sku数均分) + currentSkuAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity / currentPurchaseSkuTotalQuantity); + //currentPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount * (1.0M * currentOrderSkuCargo.Quantity / purchaseSkuTotalQuantity); + } #region 成本明细 var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId); var orderCostDetail = new OrderCostDetail() { Id = idGenerator.NewLong(), - ConsumableAmount = 0, CreateTime = DateTime.Now, DeductionQuantity = orderSku.ItemTotal.Value, - DeliveryExpressFreight = 0, - FirstFreight = 0, - //OperationAmount = 0, - InStorageAmount = 0, - OutStorageAmount = 0, OrderId = request.OrderId, ProductId = orderSku.ProductId, - PurchaseFreight = currentOrderSkuFreightAmount, PurchaseOrderId = purchaseOrderSimpleInfo.OrderId, - SkuAmount = currentOrderSkuProductAmount, - TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount, SkuId = belongSkuId, - StorageAmount = 0, IsEnabled = true }; + orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value, + orderSku.BuyerPayFreight ?? 0M, + orderSku.InPackAmount ?? 0M, + currentSkuAmount, + currentPurchaseFreight, + 0M, + 0M); insertOrderCostDetails.Add(orderCostDetail); #endregion } @@ -371,17 +374,14 @@ namespace BBWYB.Server.Business { OrderId = request.OrderId, CreateTime = DateTime.Now, - DeliveryExpressFreight = 0, - IsManualEdited = false, - PlatformCommissionRatio = 0, - PreferentialAmount = 0, - PurchaseAmount = totalPurchaseAmount, - TotalCost = totalPurchaseAmount + IsManualEdited = false }; - //orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio; - orderCost.Profit = dbOrder.OrderTotalPrice - - orderCost.PurchaseAmount - - orderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount + orderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, + totalPurchaseProductAmount, + totalPurchaseFreight, + 0M, + 0M); + if (!isRepurchase) { insertOrderCost = fsql.Insert(orderCost); @@ -402,8 +402,6 @@ namespace BBWYB.Server.Business fsql.Transaction(() => { - //deleteOrderCostDetail.ExecuteAffrows(); - fsql.Insert(insertOrderCostDetails).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows(); @@ -506,7 +504,9 @@ namespace BBWYB.Server.Business if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaseOrderId)) continue; - var avgFreight = purchaseOrder.PurchaseFreight / purchaseOrder.AssocationOrderCostDetailList.Count(); + var totalQuantity = purchaseOrder.AssocationOrderCostDetailList.Sum(x => x.PurchaseQuantity); + + var dbPurchaserOrder = dbPurchaseOrderList.FirstOrDefault(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId); if (dbPurchaserOrder == null) { @@ -531,6 +531,7 @@ namespace BBWYB.Server.Business foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) { var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); + var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity); var orderCostDetail = new OrderCostDetail() { Id = idGenerator.NewLong(), @@ -540,11 +541,15 @@ namespace BBWYB.Server.Business OrderId = request.OrderId, ProductId = dbOrderSku.ProductId, SkuId = assOrderCostDetail.SkuId, - SkuAmount = assOrderCostDetail.SkuAmount, - PurchaseFreight = avgFreight, - TotalCost = assOrderCostDetail.SkuAmount + avgFreight, PurchaseOrderId = purchaseOrder.PurchaseOrderId }; + orderCostDetail.CalculationOrderCostDetailCostAndProfit(dbOrderSku.Price.Value * dbOrderSku.ItemTotal.Value, + dbOrderSku.BuyerPayFreight ?? 0M, + dbOrderSku.InPackAmount ?? 0M, + assOrderCostDetail.SkuAmount, + purchaseFreight, + 0M, + 0M); insertOrderCostDetailList.Add(orderCostDetail); } } @@ -560,12 +565,17 @@ namespace BBWYB.Server.Business foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) { - var dbOrderCostDetail = dbOrderCostDetailList.FirstOrDefault(ocd => ocd.SkuId == assOrderCostDetail.SkuId && + var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); + + var orderCostDetail = dbOrderCostDetailList.FirstOrDefault(ocd => ocd.SkuId == assOrderCostDetail.SkuId && ocd.PurchaseOrderId == purchaseOrder.PurchaseOrderId); - if (dbOrderCostDetail == null) + + var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity); + + + if (orderCostDetail == null) { - var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); - dbOrderCostDetail = new OrderCostDetail() + orderCostDetail = new OrderCostDetail() { Id = idGenerator.NewLong(), CreateTime = DateTime.Now, @@ -574,54 +584,53 @@ namespace BBWYB.Server.Business OrderId = request.OrderId, ProductId = dbOrderSku.ProductId, SkuId = assOrderCostDetail.SkuId, - SkuAmount = assOrderCostDetail.SkuAmount, - PurchaseFreight = avgFreight, - TotalCost = assOrderCostDetail.SkuAmount + avgFreight, PurchaseOrderId = purchaseOrder.PurchaseOrderId }; - insertOrderCostDetailList.Add(dbOrderCostDetail); } + orderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity; + orderCostDetail.CalculationOrderCostDetailCostAndProfit(dbOrderSku.Price.Value * dbOrderSku.ItemTotal.Value, + dbOrderSku.BuyerPayFreight ?? 0M, + dbOrderSku.InPackAmount ?? 0M, + assOrderCostDetail.SkuAmount, + purchaseFreight, + orderCostDetail.OutPackAmount ?? 0M, + orderCostDetail.DeliveryExpressFreight ?? 0M); + + if (orderCostDetail == null) + insertOrderCostDetailList.Add(orderCostDetail); else - { - dbOrderCostDetail.SkuAmount = assOrderCostDetail.SkuAmount; - dbOrderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity; - dbOrderCostDetail.PurchaseFreight = avgFreight; - dbOrderCostDetail.TotalCost = assOrderCostDetail.SkuAmount + avgFreight; - updateOrderCostDetailList.Add(fsql.Update().SetSource(dbOrderCostDetail)); - } + updateOrderCostDetailList.Add(fsql.Update().SetSource(orderCostDetail)); } } } - var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId)) - .Sum(p => p.PurchaseAmount + p.PurchaseFreight); - var profit = dbOrder.OrderTotalPrice - totalPurchaseAmount - (dbOrderCost?.DeliveryExpressFreight ?? 0); // -orderCost.PlatformCommissionAmount + //var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId)) + // .Sum(p => p.PurchaseAmount + p.PurchaseFreight); + //var profit = dbOrder.OrderTotalPrice - totalPurchaseAmount - (dbOrderCost?.DeliveryExpressFreight ?? 0); // -orderCost.PlatformCommissionAmount if (dbOrderCost == null) { dbOrderCost = new OrderCost() { OrderId = request.OrderId, - DeliveryExpressFreight = 0, IsManualEdited = false, - PlatformCommissionAmount = 0, - PlatformCommissionRatio = 0, - PreferentialAmount = 0, CreateTime = DateTime.Now, - PurchaseAmount = totalPurchaseAmount, - TotalCost = totalPurchaseAmount, - Profit = profit }; - insertOrderCost = fsql.Insert(dbOrderCost); } + + var totalPurchaseProductAmount = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseAmount); + var totalPurchaseFreight = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseFreight); + var totalOutPackAmount = dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount); + dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, + totalPurchaseProductAmount, + totalPurchaseFreight, + totalOutPackAmount ?? 0M, + 0M); + + if (dbOrderCost == null) + insertOrderCost = fsql.Insert(dbOrderCost); else - { - dbOrderCost.PurchaseAmount = totalPurchaseAmount; - dbOrderCost.Profit = profit; - updateOrderCost = fsql.Update(request.OrderId).Set(oc => oc.PurchaseAmount, totalPurchaseAmount) - .Set(oc => oc.TotalCost, totalPurchaseAmount) - .Set(oc => oc.Profit, profit); - } + updateOrderCost = fsql.Update().SetSource(dbOrderCost); fsql.Transaction(() => { @@ -1010,12 +1019,15 @@ namespace BBWYB.Server.Business if (dbOrderPurchaseRelationInfos.Count() == 0) throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价"); + var dbOrderSkus = fsql.Select().Where(osku => osku.OrderId == orderPurchaseInfo.OrderId).ToList(); + List> updateOrderCostDetailList = new List>(); IUpdate updateOrderCost = null; var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); - var totalPurchaseAmount = 0M; + var totalPurchaseProductAmount = 0M; + var totalPurchaseFreight = 0M; foreach (var opi in dbOrderPurchaseInfoList) { var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() @@ -1025,43 +1037,60 @@ namespace BBWYB.Server.Business AppToken = purchaseAccount.AppToken, OrderId = opi.PurchaseOrderId }); - totalPurchaseAmount += purchaseOrderSimpleInfo.TotalAmount; + totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount; + totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount; + + var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity); var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList(); var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId); foreach (var belongSkuGroup in belongSkuGroups) { var belongSkuId = belongSkuGroup.Key; - var currentOrderSkuProductAmount = 0M; //采购成本 var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId + var currentOrderSkuProductAmount = 0M; //采购成本 + var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和 + var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * + (1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费 foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) { - var purchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) + var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) .Sum(p => p.ProductAmount); - var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) + var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) .Sum(p => p.Quantity); - currentOrderSkuProductAmount += purchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / purchaseSkuTotalQuantity); + currentOrderSkuProductAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / currentPurchaseSkuTotalQuantity); } - var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / belongSkuGroups.Count(); //采购运费(按sku数均分) - var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId); - dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount; - dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount; - dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; + var orderSku = dbOrderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId); + //dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount; + //dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount; + //dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; + + dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value, + orderSku.BuyerPayFreight ?? 0M, + orderSku.InPackAmount ?? 0M, + currentOrderSkuProductAmount, + currentPurchaseFreight ?? 0M, + dbOrderSkuDetail.OutPackAmount ?? 0M, + dbOrderSkuDetail.DeductionQuantity ?? 0M); updateOrderCostDetailList.Add(fsql.Update().SetSource(dbOrderSkuDetail)); } - dbOrderCost.TotalCost = dbOrderCost.PurchaseAmount = totalPurchaseAmount; - dbOrderCost.Profit = dbOrder.OrderTotalPrice - - dbOrderCost.PurchaseAmount - - dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount - updateOrderCost = fsql.Update(dbOrderCost.OrderId) - .Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount) - .Set(oc => oc.TotalCost, dbOrderCost.TotalCost) - .Set(oc => oc.Profit, dbOrderCost.Profit); + //dbOrderCost.TotalCost = dbOrderCost.PurchaseAmount = totalPurchaseAmount; + //dbOrderCost.Profit = dbOrder.OrderTotalPrice - + // dbOrderCost.PurchaseAmount - + // dbOrderCost.DeliveryExpressFreight; + + + dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, + totalPurchaseProductAmount, + totalPurchaseFreight, + dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M), + dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M)); + updateOrderCost = fsql.Update().SetSource(dbOrderCost); fsql.Transaction(() => { diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index b968e70..7f11983 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -111,7 +111,8 @@ namespace BBWYB.Server.Business.Sync //WaybillNo = qtOrder.DeliveryResponse.WayBillNo, OrderState = orderState, ClientOrderId = qtOrder.ClientOrderId, - BuyerAccount = qtOrder.UserAccount + BuyerAccount = qtOrder.UserAccount, + InPackAmount = qtOrder.PackAmount }; JArray belongSkus = null; if (!string.IsNullOrEmpty(qtOrder.Extended)) @@ -150,7 +151,9 @@ namespace BBWYB.Server.Business.Sync Title = qtOrderSku.SkuTitle, ShopId = shopId, ProductId = qtOrderSku.ProductId, - BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty + BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, + InPackAmount = qtOrderSku.PackAmount, + BuyerPayFreight = qtOrderSku.FreightAmount }); } diff --git a/BBWYB.Server.Model/Db/Order/Order.cs b/BBWYB.Server.Model/Db/Order/Order.cs index 73f5b0f..2e2dfe8 100644 --- a/BBWYB.Server.Model/Db/Order/Order.cs +++ b/BBWYB.Server.Model/Db/Order/Order.cs @@ -56,6 +56,12 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal? OrderSellerPrice { get; set; } = 0.00M; + /// + /// 实收打包费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? InPackAmount { get; set; } = 0.00M; + /// /// 订单状态 /// @@ -98,8 +104,6 @@ namespace BBWYB.Server.Model.Db public string PurchaseRemark { get; set; } - - /// /// 商家优惠金额(商家承担) /// @@ -227,6 +231,6 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "int(1)", MapType = typeof(int?))] public PackConfigState? PackConfigState { get; set; } -} + } } diff --git a/BBWYB.Server.Model/Db/Order/OrderCost.cs b/BBWYB.Server.Model/Db/Order/OrderCost.cs index 7f8e117..038f932 100644 --- a/BBWYB.Server.Model/Db/Order/OrderCost.cs +++ b/BBWYB.Server.Model/Db/Order/OrderCost.cs @@ -58,8 +58,29 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal? PurchaseAmount { get; set; } = 0.00M; + /// + /// 总成本 + /// [Column(DbType = "decimal(20,2)")] public decimal? TotalCost { get; set; } = 0.00M; + + /// + /// 货款成本 + /// + [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? OutPackAmount { get; set; } = 0.00M; } } diff --git a/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs b/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs index 6f4b31f..51dbc04 100644 --- a/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs +++ b/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs @@ -12,11 +12,7 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "bigint(1)", IsPrimary = true)] public long Id { get; set; } - /// - /// 耗材费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal? ConsumableAmount { get; set; } = 0.00M; + [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } @@ -33,35 +29,15 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal? DeliveryExpressFreight { get; set; } = 0.00M; - /// - /// 头程运费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal? FirstFreight { get; set; } = 0.00M; - - /// - /// 入库操作费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal? InStorageAmount { get; set; } = 0.00M; - + public bool? IsEnabled { get; set; } = false; - /// - /// 操作费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal? OperationAmount { get; set; } = 0.00M; [Column(StringLength = 50)] public string OrderId { get; set; } - /// - /// 出库操作费 - /// - [Column(DbType = "decimal(20,2)")] - public decimal? OutStorageAmount { get; set; } = 0.00M; + [Column(StringLength = 50)] public string ProductId { get; set; } @@ -84,8 +60,6 @@ namespace BBWYB.Server.Model.Db [Column(StringLength = 100)] public string PurchaseOrderId { get; set; } - - public long? ShopId { get; set; } /// @@ -94,20 +68,22 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal? SkuAmount { get; set; } = 0.00M; - ///// - ///// sku毛利 - ///// - //[Column(DbType = "decimal(20,2)")] - //public decimal? SkuGrossProfit { get; set; } = 0.00M; - - [Column(StringLength = 50)] - public string SkuId { get; set; } + /// + /// 支出打包费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OutPackAmount { get; set; } = 0.00M; /// - /// 仓储费 + /// SKU利润 /// [Column(DbType = "decimal(20,2)")] - public decimal? StorageAmount { get; set; } = 0.00M; + public decimal? Profit { get; set; } = 0.00M; + + + [Column(StringLength = 50)] + public string SkuId { get; set; } + /// /// 成本总计 @@ -115,12 +91,52 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal? TotalCost { get; set; } = 0.00M; + + + /* + /// + /// 头程运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? FirstFreight { get; set; } = 0.00M; + + /// + /// 耗材费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? ConsumableAmount { get; set; } = 0.00M; + + /// + /// 入库操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? InStorageAmount { get; set; } = 0.00M; + + /// + /// 出库操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OutStorageAmount { get; set; } = 0.00M; + + /// + /// 操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OperationAmount { get; set; } = 0.00M; + + /// + /// 仓储费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? StorageAmount { get; set; } = 0.00M; + + /// /// 单件采购成本(不含发货运费) /// [Column(DbType = "decimal(20,2)")] public decimal? UnitCost { get; set; } = 0.00M; - + */ } } diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index b11e856..cbab706 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -76,6 +76,23 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "int(1)", MapType = typeof(int?))] public Enums.PackConfigState? PackConfigState { get; set; } - } + /// + /// 买家支付运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? BuyerPayFreight { get; set; } = 0.00M; + + /// + /// 实收打包费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? InPackAmount { get; set; } = 0.00M; + + /// + /// SKU备注 + /// + [Column(StringLength = 500)] + public string Remark { get; set; } + } } diff --git a/BBWYB.Server.Model/Dto/Request/Order/EditOrderSkuRemarkRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/EditOrderSkuRemarkRequest.cs new file mode 100644 index 0000000..b0fd3e0 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/Order/EditOrderSkuRemarkRequest.cs @@ -0,0 +1,11 @@ +namespace BBWYB.Server.Model.Dto +{ + public class EditOrderSkuRemarkRequest + { + public string OrderId { get; set; } + + public string SkuId { get; set; } + + public string Remark { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs index 0af21b8..5456bf6 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs @@ -109,6 +109,11 @@ /// public bool IsPurchased { get; set; } + /// + /// 实收打包费 + /// + public decimal InPackAmount { get; set; } + /// /// 收货人信息 /// diff --git a/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs index f7a1b76..310c21a 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs @@ -43,6 +43,16 @@ /// public decimal TotalPrice { get; set; } + /// + /// 打包费 + /// + public decimal PackingCharge { get; set; } + + /// + /// 单个sku打包费 + /// + public decimal PackingChargeSingle { get; set; } + public QuanTan_Supplier_OrderProductSkuResponse SkuInfo { get; set; } } diff --git a/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs b/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs index 8221d40..f507110 100644 --- a/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs +++ b/QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs @@ -32,6 +32,11 @@ /// public decimal TotalPostage { get; set; } + /// + /// 打包费 + /// + public decimal PackingCharge { get; set; } + /// /// 订单总额 /// diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index 43e9de9..132580e 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -142,6 +142,7 @@ namespace SDKAdapter.OperationPlatform.Client OrderSource = qto.Source, OrderTotalAmount = qto.TotalPrice, PaidInAmount = qto.TotalPrice, + PackAmount = qto.PackingCharge, PayType = 0, IsPay = qto.Paid == 1, PreferentialAmount = 0, @@ -157,7 +158,8 @@ namespace SDKAdapter.OperationPlatform.Client SkuPrice = qtosku.SkuInfo.Price, SkuTitle = qtosku.SkuInfo.Title, ProductAmount = qtosku.ProductPrice, - FreightAmount = qtosku.PostagePrice + FreightAmount = qtosku.PostagePrice, + PackAmount = qtosku.PackingCharge }).ToList(), DeliveryResponse = new OP_OrderDeliveryResponse() { diff --git a/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs index 1bab393..15306d4 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs @@ -35,5 +35,10 @@ public decimal ProductAmount { get; set; } public decimal FreightAmount { get; set; } + + /// + /// 打包费 + /// + public decimal PackAmount { get; set; } } } diff --git a/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs index af788af..38aacd1 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs @@ -89,6 +89,11 @@ /// public decimal FreightAmount { get; set; } + /// + /// 订单打包费 + /// + public decimal PackAmount { get; set; } + /// /// 买家备注 ///