Browse Source

1)订单sku层级保存买家支付运费和收入打包费

2)实收金额明细
3)创建采购单,关联订单,改价  以SKU件数比例计算运费
4)  SKU级别备注
5)调整订单成本表和订单成本明细表字段
updatebug
shanji 2 years ago
parent
commit
3b6a181ebb
  1. 10
      BBWYB.Server.API/Controllers/OrderController.cs
  2. 61
      BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
  3. 9
      BBWYB.Server.Business/Order/OrderBusiness.cs
  4. 209
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  5. 7
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  6. 10
      BBWYB.Server.Model/Db/Order/Order.cs
  7. 21
      BBWYB.Server.Model/Db/Order/OrderCost.cs
  8. 92
      BBWYB.Server.Model/Db/Order/OrderCostDetail.cs
  9. 17
      BBWYB.Server.Model/Db/Order/OrderSku.cs
  10. 11
      BBWYB.Server.Model/Dto/Request/Order/EditOrderSkuRemarkRequest.cs
  11. 5
      BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs
  12. 10
      QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs
  13. 5
      QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs
  14. 4
      SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs
  15. 5
      SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs
  16. 5
      SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs

10
BBWYB.Server.API/Controllers/OrderController.cs

@ -72,5 +72,15 @@ namespace BBWYB.Server.API.Controllers
{ {
orderBusiness.EditVenderRemark(request); orderBusiness.EditVenderRemark(request);
} }
/// <summary>
/// 修改订单SKU备注
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditOrderSkuRemark([FromBody] EditOrderSkuRemarkRequest request)
{
orderBusiness.EditOrderSkuRemark(request);
}
} }
} }

61
BBWYB.Server.Business/Extensions/OrderAmountExtension.cs

@ -0,0 +1,61 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Business.Extensions
{
public static class OrderAmountExtension
{
/// <summary>
/// 计算订单sku明细的成本和利润
/// </summary>
/// <param name="ocd">订单SKU明细成本对象</param>
/// <param name="skuProductAmount">sku商品金额(收入)</param>
/// <param name="skuBuyerPayFreight">sku买家支付运费(收入)</param>
/// <param name="skuInPackAmount">sku实收打包费(收入)</param>
/// <param name="skuPurchaseProductAmount">sku采购货款(支出)</param>
/// <param name="skuPurchaseFreight">sku采购运费(支出)</param>
/// <param name="skuOutPackAmount">sku支出打包费(支出)</param>
/// <param name="skuDeliveryExpressFreight">sku发货运费(支出)</param>
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总成本
}
/// <summary>
/// 计算订单的成本和利润
/// </summary>
/// <param name="oc"></param>
/// <param name="orderAmount">订单金额(包含买家支付运费和收入打包费)</param>
/// <param name="purchaseProductAmount">采购货款</param>
/// <param name="purchaseFreight">采购运费</param>
/// <param name="outPackAmount">支出打包费</param>
/// <param name="deliveryExpressFreight">发货运费</param>
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;
}
}
}

9
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -97,6 +97,7 @@ namespace BBWYB.Server.Business
//ExpressName = o.ExpressName, //ExpressName = o.ExpressName,
IsPurchased = o.IsPurchased, IsPurchased = o.IsPurchased,
BuyerAccount = o.BuyerAccount, BuyerAccount = o.BuyerAccount,
InPackAmount = o.InPackAmount,
ContactName = ocs.ContactName, ContactName = ocs.ContactName,
Address = ocs.Address, Address = ocs.Address,
@ -322,5 +323,13 @@ namespace BBWYB.Server.Business
{ {
fsql.Update<Order>(request.OrderId).Set(o => o.VenderRemark, request.VenderRemark).ExecuteAffrows(); fsql.Update<Order>(request.OrderId).Set(o => o.VenderRemark, request.VenderRemark).ExecuteAffrows();
} }
public void EditOrderSkuRemark(EditOrderSkuRemarkRequest request)
{
fsql.Update<OrderSku>().Set(osku => osku.Remark, request.Remark)
.Where(osku => osku.OrderId == request.OrderId)
.Where(osku => osku.SkuId == request.SkuId)
.ExecuteAffrows();
}
} }
} }

209
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -12,9 +12,9 @@ using SDKAdapter;
using SDKAdapter.OperationPlatform.Models; using SDKAdapter.OperationPlatform.Models;
using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Client;
using SDKAdapter.PurchasePlatform.Models; using SDKAdapter.PurchasePlatform.Models;
using System.Net;
using System.Text; using System.Text;
using Yitter.IdGenerator; using Yitter.IdGenerator;
using BBWYB.Server.Business.Extensions;
namespace BBWYB.Server.Business namespace BBWYB.Server.Business
{ {
@ -189,13 +189,11 @@ namespace BBWYB.Server.Business
if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0) if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0)
throw new BusinessException("缺少下单商品参数"); throw new BusinessException("缺少下单商品参数");
//var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
var isRepurchase = fsql.Select<OrderCost>(dbOrder.Id).Any(); var isRepurchase = fsql.Select<OrderCost>(dbOrder.Id).Any();
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == request.OrderId).ToList(); var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == request.OrderId).ToList();
var extJArray = JsonConvert.DeserializeObject<JArray>(request.Extensions); var extJArray = JsonConvert.DeserializeObject<JArray>(request.Extensions);
//IList<PP_QueryOrderDetailResponse> purchaseOrderSimpleInfoList = new List<PP_QueryOrderDetailResponse>();
List<OrderCostDetail> insertOrderCostDetails = new List<OrderCostDetail>(); List<OrderCostDetail> insertOrderCostDetails = new List<OrderCostDetail>();
List<OrderPurchaseInfo> insertOrderPurchaseInfos = new List<OrderPurchaseInfo>(); List<OrderPurchaseInfo> insertOrderPurchaseInfos = new List<OrderPurchaseInfo>();
@ -214,7 +212,8 @@ namespace BBWYB.Server.Business
IInsert<OrderCost> insertOrderCost = null; IInsert<OrderCost> insertOrderCost = null;
IUpdate<OrderCost> updateOrderCost = null; IUpdate<OrderCost> updateOrderCost = null;
var totalPurchaseAmount = 0M; var totalPurchaseProductAmount = 0M;
var totalPurchaseFreight = 0M;
foreach (var cargoParamGroup in request.CargoParamGroupList) foreach (var cargoParamGroup in request.CargoParamGroupList)
{ {
@ -260,6 +259,9 @@ namespace BBWYB.Server.Business
OrderId = createOrderResponse.OrderId OrderId = createOrderResponse.OrderId
}); });
totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount;
totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount;
foreach (var cargoParam in cargoParamGroup.CargoParamList) foreach (var cargoParam in cargoParamGroup.CargoParamList)
{ {
var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == cargoParam.BelongSkuId); 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); var belongSkuGroups = cargoParamGroup.CargoParamList.GroupBy(p => p.BelongSkuId);
foreach (var belongSkuGroup in belongSkuGroups) foreach (var belongSkuGroup in belongSkuGroups)
{ {
var belongSkuId = belongSkuGroup.Key; var belongSkuId = belongSkuGroup.Key;
var currentOrderSkuProductAmount = 0M; //采购成本
var currentOrderSkuCargoParamList = cargoParamGroup.CargoParamList.Where(p => p.BelongSkuId == belongSkuId); //找当前skuId的采购skuId 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) 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); .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); .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 成本明细 #region 成本明细
var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId); var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId);
var orderCostDetail = new OrderCostDetail() var orderCostDetail = new OrderCostDetail()
{ {
Id = idGenerator.NewLong(), Id = idGenerator.NewLong(),
ConsumableAmount = 0,
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
DeductionQuantity = orderSku.ItemTotal.Value, DeductionQuantity = orderSku.ItemTotal.Value,
DeliveryExpressFreight = 0,
FirstFreight = 0,
//OperationAmount = 0,
InStorageAmount = 0,
OutStorageAmount = 0,
OrderId = request.OrderId, OrderId = request.OrderId,
ProductId = orderSku.ProductId, ProductId = orderSku.ProductId,
PurchaseFreight = currentOrderSkuFreightAmount,
PurchaseOrderId = purchaseOrderSimpleInfo.OrderId, PurchaseOrderId = purchaseOrderSimpleInfo.OrderId,
SkuAmount = currentOrderSkuProductAmount,
TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount,
SkuId = belongSkuId, SkuId = belongSkuId,
StorageAmount = 0,
IsEnabled = true IsEnabled = true
}; };
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentSkuAmount,
currentPurchaseFreight,
0M,
0M);
insertOrderCostDetails.Add(orderCostDetail); insertOrderCostDetails.Add(orderCostDetail);
#endregion #endregion
} }
@ -371,17 +374,14 @@ namespace BBWYB.Server.Business
{ {
OrderId = request.OrderId, OrderId = request.OrderId,
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
DeliveryExpressFreight = 0, IsManualEdited = false
IsManualEdited = false,
PlatformCommissionRatio = 0,
PreferentialAmount = 0,
PurchaseAmount = totalPurchaseAmount,
TotalCost = totalPurchaseAmount
}; };
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio; orderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value,
orderCost.Profit = dbOrder.OrderTotalPrice - totalPurchaseProductAmount,
orderCost.PurchaseAmount - totalPurchaseFreight,
orderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount 0M,
0M);
if (!isRepurchase) if (!isRepurchase)
{ {
insertOrderCost = fsql.Insert(orderCost); insertOrderCost = fsql.Insert(orderCost);
@ -402,8 +402,6 @@ namespace BBWYB.Server.Business
fsql.Transaction(() => fsql.Transaction(() =>
{ {
//deleteOrderCostDetail.ExecuteAffrows();
fsql.Insert(insertOrderCostDetails).ExecuteAffrows(); fsql.Insert(insertOrderCostDetails).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
@ -506,7 +504,9 @@ namespace BBWYB.Server.Business
if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaseOrderId)) if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaseOrderId))
continue; 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); var dbPurchaserOrder = dbPurchaseOrderList.FirstOrDefault(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId);
if (dbPurchaserOrder == null) if (dbPurchaserOrder == null)
{ {
@ -531,6 +531,7 @@ namespace BBWYB.Server.Business
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{ {
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity);
var orderCostDetail = new OrderCostDetail() var orderCostDetail = new OrderCostDetail()
{ {
Id = idGenerator.NewLong(), Id = idGenerator.NewLong(),
@ -540,11 +541,15 @@ namespace BBWYB.Server.Business
OrderId = request.OrderId, OrderId = request.OrderId,
ProductId = dbOrderSku.ProductId, ProductId = dbOrderSku.ProductId,
SkuId = assOrderCostDetail.SkuId, SkuId = assOrderCostDetail.SkuId,
SkuAmount = assOrderCostDetail.SkuAmount,
PurchaseFreight = avgFreight,
TotalCost = assOrderCostDetail.SkuAmount + avgFreight,
PurchaseOrderId = purchaseOrder.PurchaseOrderId 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); insertOrderCostDetailList.Add(orderCostDetail);
} }
} }
@ -560,12 +565,17 @@ namespace BBWYB.Server.Business
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) 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); 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); orderCostDetail = new OrderCostDetail()
dbOrderCostDetail = new OrderCostDetail()
{ {
Id = idGenerator.NewLong(), Id = idGenerator.NewLong(),
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
@ -574,54 +584,53 @@ namespace BBWYB.Server.Business
OrderId = request.OrderId, OrderId = request.OrderId,
ProductId = dbOrderSku.ProductId, ProductId = dbOrderSku.ProductId,
SkuId = assOrderCostDetail.SkuId, SkuId = assOrderCostDetail.SkuId,
SkuAmount = assOrderCostDetail.SkuAmount,
PurchaseFreight = avgFreight,
TotalCost = assOrderCostDetail.SkuAmount + avgFreight,
PurchaseOrderId = purchaseOrder.PurchaseOrderId 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 else
{ updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(orderCostDetail));
dbOrderCostDetail.SkuAmount = assOrderCostDetail.SkuAmount;
dbOrderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity;
dbOrderCostDetail.PurchaseFreight = avgFreight;
dbOrderCostDetail.TotalCost = assOrderCostDetail.SkuAmount + avgFreight;
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderCostDetail));
}
} }
} }
} }
var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId)) //var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId))
.Sum(p => p.PurchaseAmount + p.PurchaseFreight); // .Sum(p => p.PurchaseAmount + p.PurchaseFreight);
var profit = dbOrder.OrderTotalPrice - totalPurchaseAmount - (dbOrderCost?.DeliveryExpressFreight ?? 0); // -orderCost.PlatformCommissionAmount //var profit = dbOrder.OrderTotalPrice - totalPurchaseAmount - (dbOrderCost?.DeliveryExpressFreight ?? 0); // -orderCost.PlatformCommissionAmount
if (dbOrderCost == null) if (dbOrderCost == null)
{ {
dbOrderCost = new OrderCost() dbOrderCost = new OrderCost()
{ {
OrderId = request.OrderId, OrderId = request.OrderId,
DeliveryExpressFreight = 0,
IsManualEdited = false, IsManualEdited = false,
PlatformCommissionAmount = 0,
PlatformCommissionRatio = 0,
PreferentialAmount = 0,
CreateTime = DateTime.Now, 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 else
{ updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
dbOrderCost.PurchaseAmount = totalPurchaseAmount;
dbOrderCost.Profit = profit;
updateOrderCost = fsql.Update<OrderCost>(request.OrderId).Set(oc => oc.PurchaseAmount, totalPurchaseAmount)
.Set(oc => oc.TotalCost, totalPurchaseAmount)
.Set(oc => oc.Profit, profit);
}
fsql.Transaction(() => fsql.Transaction(() =>
{ {
@ -1010,12 +1019,15 @@ namespace BBWYB.Server.Business
if (dbOrderPurchaseRelationInfos.Count() == 0) if (dbOrderPurchaseRelationInfos.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价"); throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价");
var dbOrderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderPurchaseInfo.OrderId).ToList();
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>(); List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
IUpdate<OrderCost> updateOrderCost = null; IUpdate<OrderCost> updateOrderCost = null;
var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.); var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
var totalPurchaseAmount = 0M; var totalPurchaseProductAmount = 0M;
var totalPurchaseFreight = 0M;
foreach (var opi in dbOrderPurchaseInfoList) foreach (var opi in dbOrderPurchaseInfoList)
{ {
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
@ -1025,43 +1037,60 @@ namespace BBWYB.Server.Business
AppToken = purchaseAccount.AppToken, AppToken = purchaseAccount.AppToken,
OrderId = opi.PurchaseOrderId 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 currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList();
var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId); var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId);
foreach (var belongSkuGroup in belongSkuGroups) foreach (var belongSkuGroup in belongSkuGroups)
{ {
var belongSkuId = belongSkuGroup.Key; var belongSkuId = belongSkuGroup.Key;
var currentOrderSkuProductAmount = 0M; //采购成本
var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId 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) 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); .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); .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); var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId);
dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount; var orderSku = dbOrderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId);
dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount; //dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount;
dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; //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<OrderCostDetail>().SetSource(dbOrderSkuDetail)); updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderSkuDetail));
} }
dbOrderCost.TotalCost = dbOrderCost.PurchaseAmount = totalPurchaseAmount; //dbOrderCost.TotalCost = dbOrderCost.PurchaseAmount = totalPurchaseAmount;
dbOrderCost.Profit = dbOrder.OrderTotalPrice - //dbOrderCost.Profit = dbOrder.OrderTotalPrice -
dbOrderCost.PurchaseAmount - // dbOrderCost.PurchaseAmount -
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount // dbOrderCost.DeliveryExpressFreight;
updateOrderCost = fsql.Update<OrderCost>(dbOrderCost.OrderId)
.Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount)
.Set(oc => oc.TotalCost, dbOrderCost.TotalCost) dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M,
.Set(oc => oc.Profit, dbOrderCost.Profit); totalPurchaseProductAmount,
totalPurchaseFreight,
dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M),
dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M));
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
fsql.Transaction(() => fsql.Transaction(() =>
{ {

7
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -111,7 +111,8 @@ namespace BBWYB.Server.Business.Sync
//WaybillNo = qtOrder.DeliveryResponse.WayBillNo, //WaybillNo = qtOrder.DeliveryResponse.WayBillNo,
OrderState = orderState, OrderState = orderState,
ClientOrderId = qtOrder.ClientOrderId, ClientOrderId = qtOrder.ClientOrderId,
BuyerAccount = qtOrder.UserAccount BuyerAccount = qtOrder.UserAccount,
InPackAmount = qtOrder.PackAmount
}; };
JArray belongSkus = null; JArray belongSkus = null;
if (!string.IsNullOrEmpty(qtOrder.Extended)) if (!string.IsNullOrEmpty(qtOrder.Extended))
@ -150,7 +151,9 @@ namespace BBWYB.Server.Business.Sync
Title = qtOrderSku.SkuTitle, Title = qtOrderSku.SkuTitle,
ShopId = shopId, ShopId = shopId,
ProductId = qtOrderSku.ProductId, ProductId = qtOrderSku.ProductId,
BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value<string>("SkuId") == qtOrderSku.SkuId)?.Value<string>("BelongSkuId") ?? string.Empty BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value<string>("SkuId") == qtOrderSku.SkuId)?.Value<string>("BelongSkuId") ?? string.Empty,
InPackAmount = qtOrderSku.PackAmount,
BuyerPayFreight = qtOrderSku.FreightAmount
}); });
} }

10
BBWYB.Server.Model/Db/Order/Order.cs

@ -56,6 +56,12 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? OrderSellerPrice { get; set; } = 0.00M; public decimal? OrderSellerPrice { get; set; } = 0.00M;
/// <summary>
/// 实收打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InPackAmount { get; set; } = 0.00M;
/// <summary> /// <summary>
/// 订单状态 /// 订单状态
/// </summary> /// </summary>
@ -98,8 +104,6 @@ namespace BBWYB.Server.Model.Db
public string PurchaseRemark { get; set; } public string PurchaseRemark { get; set; }
/// <summary> /// <summary>
/// 商家优惠金额(商家承担) /// 商家优惠金额(商家承担)
/// </summary> /// </summary>
@ -227,6 +231,6 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "int(1)", MapType = typeof(int?))] [Column(DbType = "int(1)", MapType = typeof(int?))]
public PackConfigState? PackConfigState { get; set; } public PackConfigState? PackConfigState { get; set; }
} }
} }

21
BBWYB.Server.Model/Db/Order/OrderCost.cs

@ -58,8 +58,29 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? PurchaseAmount { get; set; } = 0.00M; public decimal? PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 总成本
/// </summary>
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? TotalCost { get; set; } = 0.00M; public decimal? TotalCost { get; set; } = 0.00M;
/// <summary>
/// 货款成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; } = 0.00M;
/// <summary>
/// 采购成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseFreight { get; set; } = 0.00M;
/// <summary>
/// 支出打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OutPackAmount { get; set; } = 0.00M;
} }
} }

92
BBWYB.Server.Model/Db/Order/OrderCostDetail.cs

@ -12,11 +12,7 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "bigint(1)", IsPrimary = true)] [Column(DbType = "bigint(1)", IsPrimary = true)]
public long Id { get; set; } public long Id { get; set; }
/// <summary>
/// 耗材费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ConsumableAmount { get; set; } = 0.00M;
[Column(DbType = "datetime")] [Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; } public DateTime? CreateTime { get; set; }
@ -33,35 +29,15 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? DeliveryExpressFreight { get; set; } = 0.00M; public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 头程运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 入库操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InStorageAmount { get; set; } = 0.00M;
public bool? IsEnabled { get; set; } = false; public bool? IsEnabled { get; set; } = false;
/// <summary>
/// 操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OperationAmount { get; set; } = 0.00M;
[Column(StringLength = 50)] [Column(StringLength = 50)]
public string OrderId { get; set; } public string OrderId { get; set; }
/// <summary>
/// 出库操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OutStorageAmount { get; set; } = 0.00M;
[Column(StringLength = 50)] [Column(StringLength = 50)]
public string ProductId { get; set; } public string ProductId { get; set; }
@ -84,8 +60,6 @@ namespace BBWYB.Server.Model.Db
[Column(StringLength = 100)] [Column(StringLength = 100)]
public string PurchaseOrderId { get; set; } public string PurchaseOrderId { get; set; }
public long? ShopId { get; set; } public long? ShopId { get; set; }
/// <summary> /// <summary>
@ -94,33 +68,75 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; } = 0.00M; public decimal? SkuAmount { get; set; } = 0.00M;
///// <summary> /// <summary>
///// sku毛利 /// 支出打包费
///// </summary> /// </summary>
//[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
//public decimal? SkuGrossProfit { get; set; } = 0.00M; public decimal? OutPackAmount { get; set; } = 0.00M;
/// <summary>
/// SKU利润
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? Profit { get; set; } = 0.00M;
[Column(StringLength = 50)] [Column(StringLength = 50)]
public string SkuId { get; set; } public string SkuId { get; set; }
/// <summary> /// <summary>
/// 仓储费 /// 成本总计
/// </summary> /// </summary>
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? StorageAmount { get; set; } = 0.00M; public decimal? TotalCost { get; set; } = 0.00M;
/*
/// <summary> /// <summary>
/// 成本总计 /// 头程运费
/// </summary> /// </summary>
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? TotalCost { get; set; } = 0.00M; public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 耗材费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ConsumableAmount { get; set; } = 0.00M;
/// <summary>
/// 入库操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 出库操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OperationAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary> /// <summary>
/// 单件采购成本(不含发货运费) /// 单件采购成本(不含发货运费)
/// </summary> /// </summary>
[Column(DbType = "decimal(20,2)")] [Column(DbType = "decimal(20,2)")]
public decimal? UnitCost { get; set; } = 0.00M; public decimal? UnitCost { get; set; } = 0.00M;
*/
} }
} }

17
BBWYB.Server.Model/Db/Order/OrderSku.cs

@ -76,6 +76,23 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "int(1)", MapType = typeof(int?))] [Column(DbType = "int(1)", MapType = typeof(int?))]
public Enums.PackConfigState? PackConfigState { get; set; } public Enums.PackConfigState? PackConfigState { get; set; }
/// <summary>
/// 买家支付运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? BuyerPayFreight { get; set; } = 0.00M;
/// <summary>
/// 实收打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InPackAmount { get; set; } = 0.00M;
/// <summary>
/// SKU备注
/// </summary>
[Column(StringLength = 500)]
public string Remark { get; set; }
} }
} }

11
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; }
}
}

5
BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs

@ -109,6 +109,11 @@
/// </summary> /// </summary>
public bool IsPurchased { get; set; } public bool IsPurchased { get; set; }
/// <summary>
/// 实收打包费
/// </summary>
public decimal InPackAmount { get; set; }
/// <summary> /// <summary>
/// 收货人信息 /// 收货人信息
/// </summary> /// </summary>

10
QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs

@ -43,6 +43,16 @@
/// </summary> /// </summary>
public decimal TotalPrice { get; set; } public decimal TotalPrice { get; set; }
/// <summary>
/// 打包费
/// </summary>
public decimal PackingCharge { get; set; }
/// <summary>
/// 单个sku打包费
/// </summary>
public decimal PackingChargeSingle { get; set; }
public QuanTan_Supplier_OrderProductSkuResponse SkuInfo { get; set; } public QuanTan_Supplier_OrderProductSkuResponse SkuInfo { get; set; }
} }

5
QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs

@ -32,6 +32,11 @@
/// </summary> /// </summary>
public decimal TotalPostage { get; set; } public decimal TotalPostage { get; set; }
/// <summary>
/// 打包费
/// </summary>
public decimal PackingCharge { get; set; }
/// <summary> /// <summary>
/// 订单总额 /// 订单总额
/// </summary> /// </summary>

4
SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs

@ -142,6 +142,7 @@ namespace SDKAdapter.OperationPlatform.Client
OrderSource = qto.Source, OrderSource = qto.Source,
OrderTotalAmount = qto.TotalPrice, OrderTotalAmount = qto.TotalPrice,
PaidInAmount = qto.TotalPrice, PaidInAmount = qto.TotalPrice,
PackAmount = qto.PackingCharge,
PayType = 0, PayType = 0,
IsPay = qto.Paid == 1, IsPay = qto.Paid == 1,
PreferentialAmount = 0, PreferentialAmount = 0,
@ -157,7 +158,8 @@ namespace SDKAdapter.OperationPlatform.Client
SkuPrice = qtosku.SkuInfo.Price, SkuPrice = qtosku.SkuInfo.Price,
SkuTitle = qtosku.SkuInfo.Title, SkuTitle = qtosku.SkuInfo.Title,
ProductAmount = qtosku.ProductPrice, ProductAmount = qtosku.ProductPrice,
FreightAmount = qtosku.PostagePrice FreightAmount = qtosku.PostagePrice,
PackAmount = qtosku.PackingCharge
}).ToList(), }).ToList(),
DeliveryResponse = new OP_OrderDeliveryResponse() DeliveryResponse = new OP_OrderDeliveryResponse()
{ {

5
SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs

@ -35,5 +35,10 @@
public decimal ProductAmount { get; set; } public decimal ProductAmount { get; set; }
public decimal FreightAmount { get; set; } public decimal FreightAmount { get; set; }
/// <summary>
/// 打包费
/// </summary>
public decimal PackAmount { get; set; }
} }
} }

5
SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs

@ -89,6 +89,11 @@
/// </summary> /// </summary>
public decimal FreightAmount { get; set; } public decimal FreightAmount { get; set; }
/// <summary>
/// 订单打包费
/// </summary>
public decimal PackAmount { get; set; }
/// <summary> /// <summary>
/// 买家备注 /// 买家备注
/// </summary> /// </summary>

Loading…
Cancel
Save