From 3b6a181ebb8872df1c0cbda1ba335c6dacf530b8 Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Mon, 29 May 2023 13:45:23 +0800
Subject: [PATCH] =?UTF-8?q?1=EF=BC=89=E8=AE=A2=E5=8D=95sku=E5=B1=82?=
=?UTF-8?q?=E7=BA=A7=E4=BF=9D=E5=AD=98=E4=B9=B0=E5=AE=B6=E6=94=AF=E4=BB=98?=
=?UTF-8?q?=E8=BF=90=E8=B4=B9=E5=92=8C=E6=94=B6=E5=85=A5=E6=89=93=E5=8C=85?=
=?UTF-8?q?=E8=B4=B9=202=EF=BC=89=E5=AE=9E=E6=94=B6=E9=87=91=E9=A2=9D?=
=?UTF-8?q?=E6=98=8E=E7=BB=86=203=EF=BC=89=E5=88=9B=E5=BB=BA=E9=87=87?=
=?UTF-8?q?=E8=B4=AD=E5=8D=95=EF=BC=8C=E5=85=B3=E8=81=94=E8=AE=A2=E5=8D=95?=
=?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=BB=B7=20=20=E4=BB=A5SKU=E4=BB=B6=E6=95=B0?=
=?UTF-8?q?=E6=AF=94=E4=BE=8B=E8=AE=A1=E7=AE=97=E8=BF=90=E8=B4=B9=204)=20?=
=?UTF-8?q?=20SKU=E7=BA=A7=E5=88=AB=E5=A4=87=E6=B3=A8=205=EF=BC=89?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E8=AE=A2=E5=8D=95=E6=88=90=E6=9C=AC=E8=A1=A8?=
=?UTF-8?q?=E5=92=8C=E8=AE=A2=E5=8D=95=E6=88=90=E6=9C=AC=E6=98=8E=E7=BB=86?=
=?UTF-8?q?=E8=A1=A8=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/OrderController.cs | 10 +
.../Extensions/OrderAmountExtension.cs | 61 +++++
BBWYB.Server.Business/Order/OrderBusiness.cs | 9 +
.../PurchaseOrder/PurchaseOrderBusiness.cs | 209 ++++++++++--------
.../Sync/OrderSyncBusiness.cs | 7 +-
BBWYB.Server.Model/Db/Order/Order.cs | 10 +-
BBWYB.Server.Model/Db/Order/OrderCost.cs | 21 ++
.../Db/Order/OrderCostDetail.cs | 96 ++++----
BBWYB.Server.Model/Db/Order/OrderSku.cs | 19 +-
.../Order/EditOrderSkuRemarkRequest.cs | 11 +
.../Dto/Response/Order/OrderResponse.cs | 5 +
.../QuanTan_Supplier_OrderProductResponse.cs | 10 +
.../QuanTan_Supplier_QueryOrderResponse.cs | 5 +
.../Client/Impl/OP_QuanTanClient.cs | 4 +-
.../Order/OP_OrderProductSkuResponse.cs | 5 +
.../Models/Response/Order/OP_OrderResponse.cs | 5 +
16 files changed, 350 insertions(+), 137 deletions(-)
create mode 100644 BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
create mode 100644 BBWYB.Server.Model/Dto/Request/Order/EditOrderSkuRemarkRequest.cs
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; }
+
///
/// 买家备注
///