506583276@qq.com 2 years ago
parent
commit
26d504388b
  1. 20
      BBWYB.Server.API/Controllers/OrderController.cs
  2. 2
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  3. 61
      BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
  4. 14
      BBWYB.Server.Business/Order/OrderBusiness.cs
  5. 250
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  6. 7
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  7. 10
      BBWYB.Server.Model/Db/Order/Order.cs
  8. 21
      BBWYB.Server.Model/Db/Order/OrderCost.cs
  9. 92
      BBWYB.Server.Model/Db/Order/OrderCostDetail.cs
  10. 6
      BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs
  11. 17
      BBWYB.Server.Model/Db/Order/OrderSku.cs
  12. 11
      BBWYB.Server.Model/Dto/Request/Order/EditOrderSkuRemarkRequest.cs
  13. 24
      BBWYB.Server.Model/Dto/Request/Order/QiKuPublishPackAmountRequest.cs
  14. 2
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssociationPurchaseOrderRequest.cs
  15. 5
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/CargoParamRequest.cs
  16. 3
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs
  17. 5
      BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs
  18. 2
      BBWYB.Server.Model/Dto/Response/PurchaseOrder/AssociationPurchaseOrderResponse.cs
  19. 38
      BBWYB.Server.Model/Dto/Response/PurchaseOrder/PreviewOrderResponse.cs
  20. 10
      QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_OrderProductResponse.cs
  21. 5
      QuanTan.SDK/Models/Supplier/Response/Order/QuanTan_Supplier_QueryOrderResponse.cs
  22. 4
      SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs
  23. 5
      SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderProductSkuResponse.cs
  24. 5
      SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs

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

@ -72,5 +72,25 @@ namespace BBWYB.Server.API.Controllers
{
orderBusiness.EditVenderRemark(request);
}
/// <summary>
/// 修改订单SKU备注
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditOrderSkuRemark([FromBody] EditOrderSkuRemarkRequest request)
{
orderBusiness.EditOrderSkuRemark(request);
}
/// <summary>
/// 齐库推送打包费
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void QiKuPublishPackAmount([FromBody] QiKuPublishPackAmountRequest request)
{
orderBusiness.QiKuPublishPackAmount(request);
}
}
}

2
BBWYB.Server.API/Controllers/PurchaseOrderController.cs

@ -6,7 +6,7 @@ using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
//[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class PurchaseOrderController : BaseApiController
{
private PurchaseOrderBusiness purchaseOrderBusiness;

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

14
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,18 @@ namespace BBWYB.Server.Business
{
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();
}
public void QiKuPublishPackAmount(QiKuPublishPackAmountRequest request)
{
}
}
}

250
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
{
@ -96,6 +96,8 @@ namespace BBWYB.Server.Business
var productAmount = 0M;
var totalAmount = 0M;
var previewAmountGroupByPurchaserList = new List<PreviewAmountGroupByPurchaser>();
foreach (var cargoParamGroup in request.CargoParamGroupList)
{
var purchaseAccount = request.PurchaseAccountList.FirstOrDefault(pa => pa.PurchasePlatformId == cargoParamGroup.PurchasePlatform);
@ -133,6 +135,16 @@ namespace BBWYB.Server.Business
freightAmount += response.FreightAmount;
productAmount += response.ProductAmount;
totalAmount += response.TotalAmount;
previewAmountGroupByPurchaserList.Add(new PreviewAmountGroupByPurchaser()
{
FreightAmount = response.FreightAmount,
ProductAmount = response.ProductAmount,
TotalAmount = response.TotalAmount,
PurchasePlatform = cargoParamGroup.PurchasePlatform,
PurchaserId = cargoParamGroup.PurchaserId,
PurchaserName = cargoParamGroup.PurchaserName
});
}
catch (Exception ex)
{
@ -147,7 +159,8 @@ namespace BBWYB.Server.Business
Extensions = JsonConvert.SerializeObject(extJArray),
FreightAmount = freightAmount,
ProductAmount = productAmount,
TotalAmount = totalAmount
TotalAmount = totalAmount,
PreviewAmountGroupByPurchaserList = previewAmountGroupByPurchaserList
};
}
@ -176,13 +189,11 @@ namespace BBWYB.Server.Business
if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0)
throw new BusinessException("缺少下单商品参数");
//var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
var isRepurchase = fsql.Select<OrderCost>(dbOrder.Id).Any();
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == request.OrderId).ToList();
var extJArray = JsonConvert.DeserializeObject<JArray>(request.Extensions);
//IList<PP_QueryOrderDetailResponse> purchaseOrderSimpleInfoList = new List<PP_QueryOrderDetailResponse>();
List<OrderCostDetail> insertOrderCostDetails = new List<OrderCostDetail>();
List<OrderPurchaseInfo> insertOrderPurchaseInfos = new List<OrderPurchaseInfo>();
@ -201,7 +212,8 @@ namespace BBWYB.Server.Business
IInsert<OrderCost> insertOrderCost = null;
IUpdate<OrderCost> updateOrderCost = null;
var totalPurchaseAmount = 0M;
var totalPurchaseProductAmount = 0M;
var totalPurchaseFreight = 0M;
foreach (var cargoParamGroup in request.CargoParamGroupList)
{
@ -235,12 +247,10 @@ namespace BBWYB.Server.Business
Platform = (AdapterEnums.PlatformType)purchaseAccount.PurchasePlatformId,
PurchaseMode = (AdapterEnums.PurchaseMode)request.PurchaseOrderMode,
Extensions = extJson.Value<string>("OrderTradeTypeCode"),
Remark = request.Remark,
Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark,
OrderProductParamList = orderProductParamList
});
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{
AppKey = purchaseAccount.AppKey,
@ -249,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);
@ -269,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
}
@ -331,7 +345,8 @@ namespace BBWYB.Server.Business
PurchaserName = cargoParamGroup.PurchaserName,
ShopId = request.ShopId,
BelongSkuIds = string.Join(",", belongSkuGroups.Select(bsg => bsg.Key)),
IsEnabled = true
IsEnabled = true,
Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark
};
insertOrderPurchaseInfos.Add(orderPurchaserInfo);
#endregion
@ -359,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);
@ -382,12 +394,14 @@ namespace BBWYB.Server.Business
fsql.Transaction(() =>
{
//deleteOrderCostDetail.ExecuteAffrows();
if (updatePurchaseOrderIdList.Count() > 0)
fsql.Update<OrderPurchaseInfo>(updatePurchaseOrderIdList).Set(opi => opi.IsEnabled, false).ExecuteAffrows();
if (updateOrderCostDetailIdList.Count() > 0)
fsql.Update<OrderCostDetail>(updateOrderCostDetailIdList).Set(ocd => ocd.IsEnabled, false).ExecuteAffrows();
});
fsql.Transaction(() =>
{
fsql.Insert(insertOrderCostDetails).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
@ -425,7 +439,7 @@ namespace BBWYB.Server.Business
PurchasePlatform = purchaseOrder.PurchasePlatform.Value,
PurchaserId = purchaseOrder.PurchaserId,
PurchaserName = purchaseOrder.PurchaserName,
PurchaserOrderId = purchaseOrder.PurchaseOrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
IsEnabled = purchaseOrder.IsEnabled,
PurchaseMethod = purchaseOrder.PurchaseMethod.Value
};
@ -470,6 +484,9 @@ namespace BBWYB.Server.Business
var dbPurchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList();
var dbInvalidPurchaseOrderIdList = dbPurchaseOrderList.Where(opi => !opi.IsEnabled).Select(opi => opi.PurchaseOrderId).ToList();
if (request.AssociationPurchaseOrderList.Any(x => dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId)))
throw new BusinessException("关联采购单时不能包含历史采购单");
var dbOrderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId).ToList();
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
@ -484,11 +501,13 @@ namespace BBWYB.Server.Business
foreach (var purchaseOrder in request.AssociationPurchaseOrderList)
{
if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaserOrderId))
if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaseOrderId))
continue;
var avgFreight = purchaseOrder.PurchaseFreight / purchaseOrder.AssocationOrderCostDetailList.Count();
var dbPurchaserOrder = dbPurchaseOrderList.FirstOrDefault(x => x.PurchaseOrderId == purchaseOrder.PurchaserOrderId);
var totalQuantity = purchaseOrder.AssocationOrderCostDetailList.Sum(x => x.PurchaseQuantity);
var dbPurchaserOrder = dbPurchaseOrderList.FirstOrDefault(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId);
if (dbPurchaserOrder == null)
{
dbPurchaserOrder = new OrderPurchaseInfo()
@ -501,7 +520,7 @@ namespace BBWYB.Server.Business
BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId)),
CreateTime = DateTime.Now,
PurchaseMethod = Enums.PurchaseMethod.,
PurchaseOrderId = purchaseOrder.PurchaserOrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchasePlatform = purchaseOrder.PurchasePlatform,
PurchaserId = purchaseOrder.PurchaserId,
PurchaserName = purchaseOrder.PurchaserName,
@ -512,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(),
@ -521,10 +541,15 @@ namespace BBWYB.Server.Business
OrderId = request.OrderId,
ProductId = dbOrderSku.ProductId,
SkuId = assOrderCostDetail.SkuId,
PurchaseFreight = avgFreight,
TotalCost = assOrderCostDetail.SkuAmount + avgFreight,
PurchaseOrderId = purchaseOrder.PurchaserOrderId
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);
}
}
@ -540,45 +565,72 @@ namespace BBWYB.Server.Business
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{
var dbOrderCostDetail = dbOrderCostDetailList.FirstOrDefault(ocd => ocd.SkuId == assOrderCostDetail.SkuId);
dbOrderCostDetail.SkuAmount = assOrderCostDetail.SkuAmount;
dbOrderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity;
dbOrderCostDetail.PurchaseFreight = avgFreight;
dbOrderCostDetail.TotalCost = assOrderCostDetail.SkuAmount + avgFreight;
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderCostDetail));
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
var orderCostDetail = dbOrderCostDetailList.FirstOrDefault(ocd => ocd.SkuId == assOrderCostDetail.SkuId &&
ocd.PurchaseOrderId == purchaseOrder.PurchaseOrderId);
var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity);
if (orderCostDetail == null)
{
orderCostDetail = new OrderCostDetail()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
DeductionQuantity = assOrderCostDetail.PurchaseQuantity,
IsEnabled = true,
OrderId = request.OrderId,
ProductId = dbOrderSku.ProductId,
SkuId = assOrderCostDetail.SkuId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId
};
}
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
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(orderCostDetail));
}
}
}
var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaserOrderId))
.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<OrderCost>(request.OrderId).Set(oc => oc.PurchaseAmount, totalPurchaseAmount)
.Set(oc => oc.TotalCost, totalPurchaseAmount)
.Set(oc => oc.Profit, profit);
}
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
fsql.Transaction(() =>
{
@ -967,12 +1019,15 @@ namespace BBWYB.Server.Business
if (dbOrderPurchaseRelationInfos.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价");
var dbOrderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderPurchaseInfo.OrderId).ToList();
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
IUpdate<OrderCost> 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()
@ -982,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<OrderCostDetail>().SetSource(dbOrderSkuDetail));
}
dbOrderCost.TotalCost = dbOrderCost.PurchaseAmount = totalPurchaseAmount;
dbOrderCost.Profit = dbOrder.OrderTotalPrice -
dbOrderCost.PurchaseAmount -
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
updateOrderCost = fsql.Update<OrderCost>(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<OrderCost>().SetSource(dbOrderCost);
fsql.Transaction(() =>
{

7
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<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)")]
public decimal? OrderSellerPrice { get; set; } = 0.00M;
/// <summary>
/// 实收打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InPackAmount { get; set; } = 0.00M;
/// <summary>
/// 订单状态
/// </summary>
@ -98,8 +104,6 @@ namespace BBWYB.Server.Model.Db
public string PurchaseRemark { get; set; }
/// <summary>
/// 商家优惠金额(商家承担)
/// </summary>
@ -227,6 +231,6 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "int(1)", MapType = typeof(int?))]
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)")]
public decimal? PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 总成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
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)]
public long Id { get; set; }
/// <summary>
/// 耗材费
/// </summary>
[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;
/// <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;
/// <summary>
/// 操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OperationAmount { get; set; } = 0.00M;
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 出库操作费
/// </summary>
[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; }
/// <summary>
@ -94,33 +68,75 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; } = 0.00M;
///// <summary>
///// sku毛利
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal? SkuGrossProfit { get; set; } = 0.00M;
/// <summary>
/// 支出打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
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)]
public string SkuId { get; set; }
/// <summary>
/// 仓储费
/// 成本总计
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? StorageAmount { get; set; } = 0.00M;
public decimal? TotalCost { get; set; } = 0.00M;
/*
/// <summary>
/// 成本总计
/// 头程运费
/// </summary>
[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>
[Column(DbType = "decimal(20,2)")]
public decimal? UnitCost { get; set; } = 0.00M;
*/
}
}

6
BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs

@ -94,6 +94,12 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "bit")]
public bool IsEnabled { get; set; } = true;
/// <summary>
/// 꽃뭔데구鬧
/// </summary>
[Column(StringLength = 500)]
public string Remark { get; set; }
}
}

17
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; }
/// <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; }
}
}

24
BBWYB.Server.Model/Dto/Request/Order/QiKuPublishPackAmountRequest.cs

@ -0,0 +1,24 @@
namespace BBWYB.Server.Model.Dto
{
public class QiKuPublishPackAmountRequest
{
/// <summary>
///来源店铺 sku
/// </summary>
public string SkuId { get; set; }
/// <summary>
/// 拳探id
/// </summary>
public string OrderId { get; set; }
/// <summary>
/// 打折后费用
/// </summary>
public decimal? DiscountPrice { get; set; }
/// <summary>
/// sku 打包数量
/// </summary>
public int SkuCount { get; set; }
}
}

2
BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssociationPurchaseOrderRequest.cs

@ -10,7 +10,7 @@
/// <summary>
/// 采购单号
/// </summary>
public string PurchaserOrderId { get; set; }
public string PurchaseOrderId { get; set; }
public Enums.Platform PurchasePlatform { get; set; }

5
BBWYB.Server.Model/Dto/Request/PurchaseOrder/CargoParamRequest.cs

@ -44,6 +44,11 @@
public Enums.Platform PurchasePlatform { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 采购商品列表
/// </summary>

3
BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs

@ -7,6 +7,9 @@
/// </summary>
public string Extensions { get; set; }
/// <summary>
/// 采购备注, 即将弃用, 目前保留给WPF版使用
/// </summary>
public string Remark { get; set; }
/// <summary>

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

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

2
BBWYB.Server.Model/Dto/Response/PurchaseOrder/AssociationPurchaseOrderResponse.cs

@ -10,7 +10,7 @@
/// <summary>
/// 采购单号
/// </summary>
public string PurchaserOrderId { get; set; }
public string PurchaseOrderId { get; set; }
public Enums.Platform PurchasePlatform { get; set; }

38
BBWYB.Server.Model/Dto/Response/PurchaseOrder/PreviewOrderResponse.cs

@ -21,5 +21,43 @@
/// 扩展数据 下单需要
/// </summary>
public string Extensions { get; set; }
/// <summary>
/// 以采购商分组的报价金额列表
/// </summary>
public List<PreviewAmountGroupByPurchaser> PreviewAmountGroupByPurchaserList { get; set; }
}
/// <summary>
/// 以采购商分组的报价金额
/// </summary>
public class PreviewAmountGroupByPurchaser
{
/// <summary>
/// 采购商Id
/// </summary>
public string PurchaserId { get; set; }
/// <summary>
/// 采购商名称
/// </summary>
public string PurchaserName { get; set; }
public Enums.Platform PurchasePlatform { get; set; }
/// <summary>
/// 总金额
/// </summary>
public decimal TotalAmount { get; set; }
/// <summary>
/// 货款
/// </summary>
public decimal ProductAmount { get; set; }
/// <summary>
/// 运费
/// </summary>
public decimal FreightAmount { get; set; }
}
}

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

@ -43,6 +43,16 @@
/// </summary>
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; }
}

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

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

4
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()
{

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

@ -35,5 +35,10 @@
public decimal ProductAmount { 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>
public decimal FreightAmount { get; set; }
/// <summary>
/// 订单打包费
/// </summary>
public decimal PackAmount { get; set; }
/// <summary>
/// 买家备注
/// </summary>

Loading…
Cancel
Save