Browse Source

Merge branch 'orderskucost'

yijia
shanji 2 years ago
parent
commit
a94ca9c152
  1. 3
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  2. 83
      BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
  3. 46
      BBWYB.Server.Business/Order/OrderBusiness.cs
  4. 389
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  5. 0
      BBWYB.Server.Model/Db/Order/Cost/OrderCost.cs
  6. 0
      BBWYB.Server.Model/Db/Order/Cost/OrderCostDetail.cs
  7. 62
      BBWYB.Server.Model/Db/Order/Cost/OrderSkuCost.cs
  8. 2
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/SetHistoryPurchaseOrderRequest.cs
  9. 2
      BBWYB.Server.Model/Dto/Response/Order/OrderCostResponse.cs
  10. 9
      BBWYB.Server.Model/Dto/Response/Order/OrderSkuCostResponse.cs
  11. 5
      BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs

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

@ -98,7 +98,8 @@ namespace BBWYB.Server.API.Controllers
[HttpDelete] [HttpDelete]
public void DeletePurchaseOrder([FromBody] DeletePurchaseOrderRequest request) public void DeletePurchaseOrder([FromBody] DeletePurchaseOrderRequest request)
{ {
purchaseOrderBusiness.DeletePurchaseOrder(request); request.IsDelete = true;
purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
} }
/// <summary> /// <summary>

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

@ -8,17 +8,11 @@ namespace BBWYB.Server.Business.Extensions
/// 计算订单sku明细的成本和利润 /// 计算订单sku明细的成本和利润
/// </summary> /// </summary>
/// <param name="ocd">订单SKU明细成本对象</param> /// <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="skuPurchaseProductAmount">sku采购货款(支出)</param>
/// <param name="skuPurchaseFreight">sku采购运费(支出)</param> /// <param name="skuPurchaseFreight">sku采购运费(支出)</param>
/// <param name="skuOutPackAmount">sku支出打包费(支出)</param> /// <param name="skuOutPackAmount">sku支出打包费(支出)</param>
/// <param name="skuDeliveryExpressFreight">sku发货运费(支出)</param> /// <param name="skuDeliveryExpressFreight">sku发货运费(支出)</param>
public static void CalculationOrderCostDetailCostAndProfit(this OrderCostDetail ocd, public static void CalculationOrderCostDetailCostAndProfit(this OrderCostDetail ocd,
decimal skuProductAmount,
decimal skuBuyerPayFreight,
decimal skuInPackAmount,
decimal skuPurchaseProductAmount, decimal skuPurchaseProductAmount,
decimal skuPurchaseFreight, decimal skuPurchaseFreight,
decimal skuOutPackAmount, decimal skuOutPackAmount,
@ -29,7 +23,50 @@ namespace BBWYB.Server.Business.Extensions
ocd.OutPackAmount = skuOutPackAmount; ocd.OutPackAmount = skuOutPackAmount;
ocd.DeliveryExpressFreight = skuDeliveryExpressFreight; ocd.DeliveryExpressFreight = skuDeliveryExpressFreight;
ocd.TotalCost = ocd.SkuAmount + ocd.PurchaseFreight + ocd.OutPackAmount + ocd.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费 ocd.TotalCost = ocd.SkuAmount + ocd.PurchaseFreight + ocd.OutPackAmount + ocd.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费
ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本 //ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
}
/// <summary>
/// 计算订单sku成本和利润
/// </summary>
/// <param name="orderSkuCost">订单SKU明细成本对象</param>
/// <param name="skuProductAmount">sku商品金额(收入)</param>
/// <param name="skuBuyerPayFreight">sku买家支付运费(收入)</param>
/// <param name="skuInPackAmount">sku实收打包费(收入)</param>
/// <param name="orderCostDetailList">订单成本明细列表</param>
public static void CalculationOrderSkuCostAndProfit(this OrderSkuCost orderSkuCost,
decimal skuProductAmount,
decimal skuBuyerPayFreight,
decimal skuInPackAmount,
IList<OrderCostDetail> orderCostDetailList)
{
var currentSkuCostDetailList = orderCostDetailList.Where(ocd => ocd.SkuId == orderSkuCost.SkuId && ocd.IsEnabled == true).ToList();
orderSkuCost.SkuAmount = currentSkuCostDetailList.Sum(ocd => ocd.SkuAmount);
orderSkuCost.PurchaseFreight = currentSkuCostDetailList.Sum(ocd => ocd.PurchaseFreight);
orderSkuCost.OutPackAmount = currentSkuCostDetailList.Sum(ocd => ocd.OutPackAmount);
orderSkuCost.DeliveryExpressFreight = currentSkuCostDetailList.Sum(ocd => ocd.DeliveryExpressFreight);
orderSkuCost.TotalCost = orderSkuCost.SkuAmount +
orderSkuCost.PurchaseFreight +
orderSkuCost.OutPackAmount +
orderSkuCost.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费
orderSkuCost.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - orderSkuCost.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
}
/// <summary>
/// 计算订单sku成本和利润
/// </summary>
/// <param name="orderSkuCost"></param>
/// <param name="orderSku"></param>
/// <param name="orderCostDetailList"></param>
public static void CalculationOrderSkuCostAndProfit(this OrderSkuCost orderSkuCost,
OrderSku orderSku,
IList<OrderCostDetail> orderCostDetailList)
{
orderSkuCost.CalculationOrderSkuCostAndProfit((orderSku.ItemTotal * orderSku.Price) ?? 0M,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
orderCostDetailList);
} }
/// <summary> /// <summary>
@ -41,12 +78,12 @@ namespace BBWYB.Server.Business.Extensions
/// <param name="purchaseFreight">采购运费</param> /// <param name="purchaseFreight">采购运费</param>
/// <param name="outPackAmount">支出打包费</param> /// <param name="outPackAmount">支出打包费</param>
/// <param name="deliveryExpressFreight">发货运费</param> /// <param name="deliveryExpressFreight">发货运费</param>
public static void CalculationOrderCostCostAndProfit(this OrderCost oc, public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount, decimal orderAmount,
decimal purchaseProductAmount, decimal purchaseProductAmount,
decimal purchaseFreight, decimal purchaseFreight,
decimal outPackAmount, decimal outPackAmount,
decimal deliveryExpressFreight) decimal deliveryExpressFreight)
{ {
oc.PurchaseAmount = purchaseProductAmount + purchaseFreight; //兼容以前 oc.PurchaseAmount = purchaseProductAmount + purchaseFreight; //兼容以前
@ -57,5 +94,25 @@ namespace BBWYB.Server.Business.Extensions
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight; oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
oc.Profit = orderAmount - oc.TotalCost; oc.Profit = orderAmount - oc.TotalCost;
} }
/// <summary>
/// 计算订单的成本和利润
/// </summary>
/// <param name="oc"></param>
/// <param name="orderAmount"></param>
/// <param name="orderSkuCostList"></param>
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
IList<OrderSkuCost> orderSkuCostList)
{
var currentOrderSkuCostList = orderSkuCostList.Where(osc => osc.OrderId == oc.OrderId).ToList();
oc.SkuAmount = currentOrderSkuCostList.Sum(osc => osc.SkuAmount);
oc.PurchaseFreight = currentOrderSkuCostList.Sum(osc => osc.PurchaseFreight);
oc.PurchaseAmount = oc.SkuAmount + oc.PurchaseFreight; //兼容以前
oc.OutPackAmount = currentOrderSkuCostList.Sum(osc => osc.OutPackAmount);
oc.DeliveryExpressFreight = currentOrderSkuCostList.Sum(osc => osc.DeliveryExpressFreight);
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
oc.Profit = orderAmount - oc.TotalCost;
}
} }
} }

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

@ -263,9 +263,23 @@ namespace BBWYB.Server.Business
order.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList(); order.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList();
#endregion #endregion
#region 处理订单Sku成本
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => orderIdList.Contains(osc.OrderId)).ToList<OrderSkuCostResponse>();
foreach (var order in orderList)
{
if (order.OrderCost == null)
continue;
order.OrderCost.OrderSkuCostList = orderSkuCostList.Where(osc => osc.OrderId == order.Id).ToList();
foreach (var orderSkuCost in order.OrderCost.OrderSkuCostList)
{
orderSkuCost.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id && ocd.SkuId == orderSkuCost.SkuId).ToList();
}
}
#endregion
#region 处理采购信息 #region 处理采购信息
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>(); var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>();
var purchaserIdList = orderPurchaseInfoList.Where(opi=>!string.IsNullOrEmpty(opi.PurchaserId)).Select(opi => opi.PurchaserId).Distinct().ToList(); var purchaserIdList = orderPurchaseInfoList.Where(opi => !string.IsNullOrEmpty(opi.PurchaserId)).Select(opi => opi.PurchaserId).Distinct().ToList();
var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList<OrderPurchaseSkuInfoResponse>(); var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList<OrderPurchaseSkuInfoResponse>();
foreach (var order in orderList) foreach (var order in orderList)
{ {
@ -559,10 +573,12 @@ namespace BBWYB.Server.Business
var order = orderListResponse.Items.FirstOrDefault(); var order = orderListResponse.Items.FirstOrDefault();
var orderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); var orderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList(); var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
IList<IUpdate<OrderSku>> updates_orderSku = new List<IUpdate<OrderSku>>(); IList<IUpdate<OrderSku>> updates_orderSku = new List<IUpdate<OrderSku>>();
IUpdate<OrderCost> updateOrderCost = null; IUpdate<OrderCost> updateOrderCost = null;
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>(); IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
@ -577,25 +593,32 @@ namespace BBWYB.Server.Business
{ {
foreach (var orderCostDetail in ocdList) foreach (var orderCostDetail in ocdList)
{ {
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderSku.SkuPrice * orderSku.Quantity, orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderCostDetail.SkuAmount ?? 0M,
orderSku.FreightAmount,
orderSku.PackAmount,
orderCostDetail.SkuAmount ?? 0M,
orderCostDetail.PurchaseFreight ?? 0M, orderCostDetail.PurchaseFreight ?? 0M,
orderCostDetail.OutPackAmount ?? 0M, orderCostDetail.OutPackAmount ?? 0M,
orderCostDetail.DeliveryExpressFreight ?? 0M); orderCostDetail.DeliveryExpressFreight ?? 0M);
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>(orderCostDetail.Id).Set(ocd => ocd.Profit, orderCostDetail.Profit)); updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>(orderCostDetail.Id).Set(ocd => ocd.Profit, orderCostDetail.Profit));
} }
} }
var orderSkuCost = orderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
if (orderSkuCost != null)
{
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku.SkuPrice * orderSku.Quantity,
orderSku.FreightAmount,
orderSku.PackAmount,
ocdList);
updateOrderSkuCostList.Add(fsql.Update<OrderSkuCost>(orderSkuCost.Id).Set(osc => osc.Profit, orderSkuCost.Profit));
}
} }
if (orderCost != null) if (orderCost != null)
{ {
orderCost.CalculationOrderCostCostAndProfit(order.OrderTotalAmount, orderCost.CalculationOrderCostAndProfit(order.OrderTotalAmount,
orderCost.SkuAmount ?? 0M, orderCost.SkuAmount ?? 0M,
orderCost.PurchaseFreight ?? 0M, orderCost.PurchaseFreight ?? 0M,
orderCost.OutPackAmount ?? 0M, orderCost.OutPackAmount ?? 0M,
orderCost.DeliveryExpressFreight ?? 0M); orderCost.DeliveryExpressFreight ?? 0M);
updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost); updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost);
} }
@ -619,6 +642,9 @@ namespace BBWYB.Server.Business
foreach (var update in updateOrderCostDetailList) foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows(); update.ExecuteAffrows();
} }
if (updateOrderSkuCostList.Count() > 0)
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}); });
#region 通知C端 #region 通知C端

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

@ -264,6 +264,8 @@ namespace BBWYB.Server.Business
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId).ToList(); var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId).ToList();
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList(); var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList();
foreach (var cargoParamGroup in request.CargoParamGroupList) foreach (var cargoParamGroup in request.CargoParamGroupList)
{ {
@ -293,19 +295,10 @@ namespace BBWYB.Server.Business
if (dbOrder.IntoStoreType == Enums.IntoStoreType.) if (dbOrder.IntoStoreType == Enums.IntoStoreType.)
notifyQikuPackSchemeParamList = new List<QiKuPackTaskSkuPurchaseSchemeIdRequest>(); notifyQikuPackSchemeParamList = new List<QiKuPackTaskSkuPurchaseSchemeIdRequest>();
//#region 待更新
//IList<long> updateOrderCostDetailIdList = fsql.Select<OrderCostDetail>()
// .Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true)
// .ToList(ocd => ocd.Id);
//IList<long> updatePurchaseOrderIdList = fsql.Select<OrderPurchaseInfo>()
// .Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true)
// .ToList(opi => opi.Id);
//#endregion
IInsert<OrderCost> insertOrderCost = null; IInsert<OrderCost> insertOrderCost = null;
IUpdate<OrderCost> updateOrderCost = null; IUpdate<OrderCost> updateOrderCost = null;
//var totalPurchaseProductAmount = 0M; List<OrderSkuCost> insertOrderSkuCostList = new List<OrderSkuCost>();
//var totalPurchaseFreight = 0M; IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
foreach (var cargoParamGroup in request.CargoParamGroupList) foreach (var cargoParamGroup in request.CargoParamGroupList)
{ {
@ -414,10 +407,7 @@ namespace BBWYB.Server.Business
SkuId = belongSkuId, SkuId = belongSkuId,
IsEnabled = true IsEnabled = true
}; };
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value, orderCostDetail.CalculationOrderCostDetailCostAndProfit(currentSkuAmount,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentSkuAmount,
currentPurchaseFreight, currentPurchaseFreight,
0M, 0M,
0M); 0M);
@ -496,6 +486,32 @@ namespace BBWYB.Server.Business
#endregion #endregion
} }
#region 订单Sku成本
var allOrderCostDetail = orderCostDetailList.Union(insertOrderCostDetails).ToList();
foreach (var orderSku in orderSkus)
{
var orderSkuCost = orderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
if (orderSkuCost == null)
{
orderSkuCost = new OrderSkuCost()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
OrderId = request.OrderId,
SkuId = orderSku.SkuId
};
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, allOrderCostDetail);
insertOrderSkuCostList.Add(orderSkuCost);
}
else
{
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, allOrderCostDetail);
var update = fsql.Update<OrderSkuCost>().SetSource(orderSkuCost);
updateOrderSkuCostList.Add(update);
}
}
#endregion
#region 订单成本 #region 订单成本
var orderCost = new OrderCost() var orderCost = new OrderCost()
{ {
@ -504,13 +520,15 @@ namespace BBWYB.Server.Business
IsManualEdited = false IsManualEdited = false
}; };
var totalPurchaseProductAmount = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.SkuAmount); //var totalPurchaseProductAmount = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.SkuAmount);
var totalPurchaseFreight = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.PurchaseFreight); //var totalPurchaseFreight = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.PurchaseFreight);
orderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, //orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value,
totalPurchaseProductAmount ?? 0M, // totalPurchaseProductAmount ?? 0M,
totalPurchaseFreight ?? 0M, // totalPurchaseFreight ?? 0M,
0M, // 0M,
0M); // 0M);
orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, orderSkuCostList.Union(insertOrderSkuCostList).ToList());
if (!isRepurchase) if (!isRepurchase)
{ {
@ -541,10 +559,6 @@ namespace BBWYB.Server.Business
fsql.Transaction(() => fsql.Transaction(() =>
{ {
//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();
if (updatePurchaseTimeLimitTaskOrderSkuList.Count() > 0) if (updatePurchaseTimeLimitTaskOrderSkuList.Count() > 0)
{ {
fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now) fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now)
@ -555,11 +569,14 @@ namespace BBWYB.Server.Business
.Where(t => t.TaskType == Enums.TimeLimitTaskType.) .Where(t => t.TaskType == Enums.TimeLimitTaskType.)
.ExecuteAffrows(); .ExecuteAffrows();
} }
if (insertOrderCostDetails.Count() > 0)
fsql.Insert(insertOrderCostDetails).ExecuteAffrows(); fsql.Insert(insertOrderCostDetails).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows(); if (insertOrderPurchaseInfos.Count() > 0)
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows(); if (insertOrderPurchaseSkuInfos.Count() > 0)
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
if (insertOrderPurchaseRelationInfoList.Count() > 0)
fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows();
updateOrderCost?.ExecuteAffrows(); updateOrderCost?.ExecuteAffrows();
insertOrderCost?.ExecuteAffrows(); insertOrderCost?.ExecuteAffrows();
if (updatePurchaseTimeSchemeIdList.Count() > 0) if (updatePurchaseTimeSchemeIdList.Count() > 0)
@ -568,7 +585,13 @@ namespace BBWYB.Server.Business
.SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark) .SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark)
.Set(o => o.IsPurchased, true) .Set(o => o.IsPurchased, true)
.ExecuteAffrows(); .ExecuteAffrows();
//.Set(o => o.PackConfigState, Enums.PackConfigState.待配置) if (insertOrderSkuCostList.Count() > 0)
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
if (updateOrderSkuCostList.Count() > 0)
{
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}
}); });
} }
@ -691,7 +714,7 @@ namespace BBWYB.Server.Business
var dbOrderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId).ToList(); 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 dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var dbOrderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList();
List<OrderPurchaseInfo> insertOrderPurchaseInfoList = new List<OrderPurchaseInfo>(); List<OrderPurchaseInfo> insertOrderPurchaseInfoList = new List<OrderPurchaseInfo>();
@ -704,6 +727,9 @@ namespace BBWYB.Server.Business
IInsert<OrderCost> insertOrderCost = null; IInsert<OrderCost> insertOrderCost = null;
IUpdate<OrderCost> updateOrderCost = null; IUpdate<OrderCost> updateOrderCost = null;
List<OrderSkuCost> insertOrderSkuCostList = new List<OrderSkuCost>();
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
List<string> updatePurchaseTimeLimitTaskOrderSkuList = new List<string>(); List<string> updatePurchaseTimeLimitTaskOrderSkuList = new List<string>();
List<QiKuPackTaskSkuPurchaseSchemeIdRequest> notifyQikuPackSchemeParamList = new List<QiKuPackTaskSkuPurchaseSchemeIdRequest>(); List<QiKuPackTaskSkuPurchaseSchemeIdRequest> notifyQikuPackSchemeParamList = new List<QiKuPackTaskSkuPurchaseSchemeIdRequest>();
@ -841,10 +867,7 @@ namespace BBWYB.Server.Business
SkuId = assOrderCostDetail.SkuId, SkuId = assOrderCostDetail.SkuId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId PurchaseOrderId = purchaseOrder.PurchaseOrderId
}; };
orderCostDetail.CalculationOrderCostDetailCostAndProfit(dbOrderSku.Price.Value * dbOrderSku.ItemTotal.Value, orderCostDetail.CalculationOrderCostDetailCostAndProfit(assOrderCostDetail.SkuAmount,
dbOrderSku.BuyerPayFreight ?? 0M,
dbOrderSku.InPackAmount ?? 0M,
assOrderCostDetail.SkuAmount,
purchaseFreight, purchaseFreight,
0M, 0M,
0M); 0M);
@ -934,8 +957,8 @@ namespace BBWYB.Server.Business
var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity); var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity);
var isOcdEmpty = orderCostDetail == null;
if (orderCostDetail == null) if (isOcdEmpty)
{ {
orderCostDetail = new OrderCostDetail() orderCostDetail = new OrderCostDetail()
{ {
@ -951,15 +974,12 @@ namespace BBWYB.Server.Business
}; };
} }
orderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity; orderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity;
orderCostDetail.CalculationOrderCostDetailCostAndProfit(dbOrderSku.Price.Value * dbOrderSku.ItemTotal.Value, orderCostDetail.CalculationOrderCostDetailCostAndProfit(assOrderCostDetail.SkuAmount,
dbOrderSku.BuyerPayFreight ?? 0M, purchaseFreight,
dbOrderSku.InPackAmount ?? 0M, orderCostDetail.OutPackAmount ?? 0M,
assOrderCostDetail.SkuAmount, orderCostDetail.DeliveryExpressFreight ?? 0M);
purchaseFreight,
orderCostDetail.OutPackAmount ?? 0M, if (isOcdEmpty)
orderCostDetail.DeliveryExpressFreight ?? 0M);
if (orderCostDetail == null)
insertOrderCostDetailList.Add(orderCostDetail); insertOrderCostDetailList.Add(orderCostDetail);
else else
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(orderCostDetail)); updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(orderCostDetail));
@ -967,6 +987,33 @@ namespace BBWYB.Server.Business
} }
} }
#region 订单Sku成本
var allOrderCostDetail = dbOrderCostDetailList.Union(insertOrderCostDetailList).ToList();
foreach (var orderSku in dbOrderSkuList)
{
var orderSkuCost = dbOrderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
if (orderSkuCost == null)
{
orderSkuCost = new OrderSkuCost()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
OrderId = request.OrderId,
SkuId = orderSku.SkuId
};
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, allOrderCostDetail);
insertOrderSkuCostList.Add(orderSkuCost);
}
else
{
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, allOrderCostDetail);
var update = fsql.Update<OrderSkuCost>().SetSource(orderSkuCost);
updateOrderSkuCostList.Add(update);
}
}
#endregion
#region 订单成本
var dbOrderCostIsEmpty = dbOrderCost == null; var dbOrderCostIsEmpty = dbOrderCost == null;
if (dbOrderCostIsEmpty) if (dbOrderCostIsEmpty)
{ {
@ -977,20 +1024,21 @@ namespace BBWYB.Server.Business
CreateTime = DateTime.Now CreateTime = DateTime.Now
}; };
} }
dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, dbOrderSkuCostList.Union(insertOrderSkuCostList).ToList());
var totalPurchaseProductAmount = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseAmount); //var totalPurchaseProductAmount = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseAmount);
var totalPurchaseFreight = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseFreight); //var totalPurchaseFreight = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseFreight);
var totalOutPackAmount = dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount); //var totalOutPackAmount = dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount);
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, //dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value,
totalPurchaseProductAmount, // totalPurchaseProductAmount,
totalPurchaseFreight, // totalPurchaseFreight,
totalOutPackAmount ?? 0M, // totalOutPackAmount ?? 0M,
0M); // 0M);
if (dbOrderCostIsEmpty) if (dbOrderCostIsEmpty)
insertOrderCost = fsql.Insert(dbOrderCost); insertOrderCost = fsql.Insert(dbOrderCost);
else else
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost); updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
#endregion
#region 订单状态 #region 订单状态
dbOrder.CalculationOrderState(fsql, out _, dbOrderSkuList, dbPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList()); dbOrder.CalculationOrderState(fsql, out _, dbOrderSkuList, dbPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList());
@ -1045,6 +1093,14 @@ namespace BBWYB.Server.Business
fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState) fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState)
.Set(o => o.IsPurchased, true) .Set(o => o.IsPurchased, true)
.ExecuteAffrows(); .ExecuteAffrows();
if (insertOrderSkuCostList.Count() > 0)
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
if (updateOrderSkuCostList.Count() > 0)
{
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}
}); });
} }
@ -1200,15 +1256,26 @@ namespace BBWYB.Server.Business
if (historyPurchaseOrder == null) if (historyPurchaseOrder == null)
throw new BusinessException("未查询到采购单"); throw new BusinessException("未查询到采购单");
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId &&
ocd.PurchaseOrderId != request.PurchaseOrderId).ToList(); ocd.PurchaseOrderId != request.PurchaseOrderId &&
ocd.IsEnabled == true).ToList();
var dbOrderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
var dbOrderSku = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId).ToList();
foreach (var orderSkuCost in dbOrderSkuCostList)
{
var orderSku = dbOrderSku.FirstOrDefault(osku => osku.SkuId == orderSkuCost.SkuId);
if (orderSku == null)
continue;
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, dbOrderCostDetailList);
updateOrderSkuCostList.Add(fsql.Update<OrderSkuCost>().SetSource(orderSkuCost));
}
var purchaseProductAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount) ?? 0M; dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, dbOrderSkuCostList);
var purchaseFreight = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight) ?? 0M;
var outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M;
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M);
#region 找出失效的快递单 #region 找出失效的快递单
List<string> deleteWaybillNoList = new List<string>(); List<string> deleteWaybillNoList = new List<string>();
@ -1233,12 +1300,19 @@ namespace BBWYB.Server.Business
fsql.Transaction(() => fsql.Transaction(() =>
{ {
fsql.Update<OrderPurchaseInfo>(historyPurchaseOrder.Id) if (request.IsDelete == true)
.Set(opi => opi.IsEnabled, false) {
.Set(opi => opi.OrderState, Enums.PurchaseOrderState.) fsql.Delete<OrderPurchaseInfo>(historyPurchaseOrder.Id).ExecuteAffrows();
.Set(opi => opi.HistorySettingTime, DateTime.Now) }
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId) else
.ExecuteAffrows(); {
fsql.Update<OrderPurchaseInfo>(historyPurchaseOrder.Id)
.Set(opi => opi.IsEnabled, false)
.Set(opi => opi.OrderState, Enums.PurchaseOrderState.)
.Set(opi => opi.HistorySettingTime, DateTime.Now)
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows();
}
fsql.Update<OrderCostDetail>() fsql.Update<OrderCostDetail>()
.Set(ocd => ocd.IsEnabled, false) .Set(ocd => ocd.IsEnabled, false)
@ -1257,83 +1331,88 @@ namespace BBWYB.Server.Business
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows(); fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows();
fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows();
if (updateOrderSkuCostList.Count() > 0)
{
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}
}); });
} }
public void DeletePurchaseOrder(DeletePurchaseOrderRequest request) //public void DeletePurchaseOrder(DeletePurchaseOrderRequest request)
{ //{
nLogManager.Default().Info($"DeletePurchaseOrder {JsonConvert.SerializeObject(request)}"); // nLogManager.Default().Info($"DeletePurchaseOrder {JsonConvert.SerializeObject(request)}");
//var po = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId).ToOne(); // //var po = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId).ToOne();
//if (po == null) // //if (po == null)
// throw new BusinessException("采购单不不存在"); // // throw new BusinessException("采购单不不存在");
//var orderId = po.OrderId; // //var orderId = po.OrderId;
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList(); // var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList();
var deletePurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); // var deletePurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
if (deletePurchaseOrder == null) // if (deletePurchaseOrder == null)
throw new BusinessException("采购单不不存在"); // throw new BusinessException("采购单不不存在");
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && // var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId &&
ocd.PurchaseOrderId != request.PurchaseOrderId).ToList(); // ocd.PurchaseOrderId != request.PurchaseOrderId).ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); // var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); // var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
var purchaseProductAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount) ?? 0M; // var purchaseProductAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount) ?? 0M;
var purchaseFreight = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight) ?? 0M; // var purchaseFreight = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight) ?? 0M;
var outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M; // var outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M;
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M); // dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M);
#region 找出失效的快递单 // #region 找出失效的快递单
List<string> deleteWaybillNoList = new List<string>(); // List<string> deleteWaybillNoList = new List<string>();
//查询该采购单所使用的快递单号 // //查询该采购单所使用的快递单号
var useWaybillNos = fsql.Select<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ToList(eori => eori.WayBillNo); // var useWaybillNos = fsql.Select<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ToList(eori => eori.WayBillNo);
//查询使用上述快递单号的快递单关系 // //查询使用上述快递单号的快递单关系
var expressOrderRelationList = fsql.Select<ExpressOrderRelationInfo>().Where(eori => useWaybillNos.Contains(eori.WayBillNo)).ToList(); // var expressOrderRelationList = fsql.Select<ExpressOrderRelationInfo>().Where(eori => useWaybillNos.Contains(eori.WayBillNo)).ToList();
//以快递单号进行分组 // //以快递单号进行分组
var expressOrderRelationGroups = expressOrderRelationList.GroupBy(eori => eori.WayBillNo); // var expressOrderRelationGroups = expressOrderRelationList.GroupBy(eori => eori.WayBillNo);
foreach (var group in expressOrderRelationGroups) // foreach (var group in expressOrderRelationGroups)
{ // {
if (group.Count() == group.Count(eori => eori.PurchaseOrderId == request.PurchaseOrderId)) // if (group.Count() == group.Count(eori => eori.PurchaseOrderId == request.PurchaseOrderId))
deleteWaybillNoList.Add(group.Key); // deleteWaybillNoList.Add(group.Key);
} // }
#endregion // #endregion
orderPurchaseInfoList.Remove(deletePurchaseOrder); // orderPurchaseInfoList.Remove(deletePurchaseOrder);
while (orderPurchaseInfoList.Any(opi => opi.IsEnabled == false)) // while (orderPurchaseInfoList.Any(opi => opi.IsEnabled == false))
{ // {
var historyPo = orderPurchaseInfoList.FirstOrDefault(opi => opi.IsEnabled == false); // var historyPo = orderPurchaseInfoList.FirstOrDefault(opi => opi.IsEnabled == false);
orderPurchaseInfoList.Remove(historyPo); // orderPurchaseInfoList.Remove(historyPo);
} // }
dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList); // dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList);
fsql.Transaction(() => // fsql.Transaction(() =>
{ // {
fsql.Delete<OrderPurchaseInfo>(deletePurchaseOrder.Id).ExecuteAffrows(); // fsql.Delete<OrderPurchaseInfo>(deletePurchaseOrder.Id).ExecuteAffrows();
fsql.Update<OrderCostDetail>() // fsql.Update<OrderCostDetail>()
.Set(ocd => ocd.IsEnabled, false) // .Set(ocd => ocd.IsEnabled, false)
.Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId) // .Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows(); // .ExecuteAffrows();
fsql.Delete<OrderPurchaseSkuInfo>().Where(opsi => opsi.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); // fsql.Delete<OrderPurchaseSkuInfo>().Where(opsi => opsi.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
fsql.Delete<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); // fsql.Delete<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
fsql.Delete<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); // fsql.Delete<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
if (deleteWaybillNoList.Count() > 0) // if (deleteWaybillNoList.Count() > 0)
fsql.Delete<PurchaseExpressOrder>(deleteWaybillNoList).ExecuteAffrows(); // fsql.Delete<PurchaseExpressOrder>(deleteWaybillNoList).ExecuteAffrows();
fsql.Delete<InStorePurchaseOrdeRrelationInfo>().Where(i => i.OrderId == request.OrderId && i.PurchaseOrderId == request.PurchaseOrderId) // fsql.Delete<InStorePurchaseOrdeRrelationInfo>().Where(i => i.OrderId == request.OrderId && i.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows(); // .ExecuteAffrows();
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows(); // fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows();
fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); // fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows();
}); // });
} //}
/// <summary> /// <summary>
/// 修改采购快递单 /// 修改采购快递单
@ -2763,13 +2842,14 @@ namespace BBWYB.Server.Business
if (dbOrderCostDetails.Count() == 0) if (dbOrderCostDetails.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本"); throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本");
var dbPurchaseOrderIdList = dbOrderPurchaseInfoList.Select(x => x.PurchaseOrderId).ToList(); var dbPurchaseOrderIdList = dbOrderPurchaseInfoList.Select(x => x.PurchaseOrderId).ToList();
var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => dbPurchaseOrderIdList.Contains(x.PurchaseOrderId)).ToList(); var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => dbPurchaseOrderIdList.Contains(x.PurchaseOrderId)).ToList();
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(); var dbOrderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == dbOrder.Id).ToList();
var dbOrderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == dbOrder.Id).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;
@ -2777,6 +2857,9 @@ namespace BBWYB.Server.Business
IList<IUpdate<OrderSku>> updateOrderSkuList = new List<IUpdate<OrderSku>>(); IList<IUpdate<OrderSku>> updateOrderSkuList = new List<IUpdate<OrderSku>>();
IUpdate<Order> updateOrder = null; IUpdate<Order> updateOrder = null;
List<OrderSkuCost> insertOrderSkuCostList = new List<OrderSkuCost>();
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
IList<OP_EditPriceSkuRequest> op_EditPriceSkuRequests = new List<OP_EditPriceSkuRequest>(); IList<OP_EditPriceSkuRequest> op_EditPriceSkuRequests = new List<OP_EditPriceSkuRequest>();
var ppclient = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.); var ppclient = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
@ -2846,10 +2929,7 @@ namespace BBWYB.Server.Business
#endregion #endregion
var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId); var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId);
dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value, dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(currentOrderSkuProductAmount,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentOrderSkuProductAmount,
currentPurchaseFreight ?? 0M, currentPurchaseFreight ?? 0M,
dbOrderSkuDetail.OutPackAmount ?? 0M, dbOrderSkuDetail.OutPackAmount ?? 0M,
dbOrderSkuDetail.DeliveryExpressFreight ?? 0M); dbOrderSkuDetail.DeliveryExpressFreight ?? 0M);
@ -2866,12 +2946,40 @@ namespace BBWYB.Server.Business
.Set(o => o.FreightPrice, dbOrder.FreightPrice); .Set(o => o.FreightPrice, dbOrder.FreightPrice);
} }
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, #region 订单Sku成本
totalPurchaseProductAmount, foreach (var orderSku in dbOrderSkus)
totalPurchaseFreight, {
dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M), var orderSkuCost = dbOrderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M)); if (orderSkuCost == null)
{
orderSkuCost = new OrderSkuCost()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
OrderId = dbOrder.Id,
SkuId = orderSku.SkuId
};
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, dbOrderCostDetails);
insertOrderSkuCostList.Add(orderSkuCost);
}
else
{
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, dbOrderCostDetails);
var update = fsql.Update<OrderSkuCost>().SetSource(orderSkuCost);
updateOrderSkuCostList.Add(update);
}
}
#endregion
#region 订单成本
dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, dbOrderSkuCostList.Union(insertOrderSkuCostList).ToList());
//dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice ?? 0M,
// totalPurchaseProductAmount,
// totalPurchaseFreight,
// dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M),
// dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M));
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost); updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
#endregion
fsql.Transaction(() => fsql.Transaction(() =>
{ {
@ -2881,6 +2989,13 @@ namespace BBWYB.Server.Business
foreach (var update in updateOrderSkuList) foreach (var update in updateOrderSkuList)
update.ExecuteAffrows(); update.ExecuteAffrows();
updateOrder?.ExecuteAffrows(); updateOrder?.ExecuteAffrows();
if (insertOrderSkuCostList.Count() > 0)
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
if (updateOrderSkuCostList.Count() > 0)
{
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}
}); });
if (isEditOrderPrice) if (isEditOrderPrice)

0
BBWYB.Server.Model/Db/Order/OrderCost.cs → BBWYB.Server.Model/Db/Order/Cost/OrderCost.cs

0
BBWYB.Server.Model/Db/Order/OrderCostDetail.cs → BBWYB.Server.Model/Db/Order/Cost/OrderCostDetail.cs

62
BBWYB.Server.Model/Db/Order/Cost/OrderSkuCost.cs

@ -0,0 +1,62 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "orderskucost", DisableSyncStructure = true)]
public partial class OrderSkuCost {
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? DeliveryExpressFreight { get; set; }
/// <summary>
/// 订单Id
/// </summary>
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 支出打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OutPackAmount { get; set; }
/// <summary>
/// 订单利润
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? Profit { get; set; }
/// <summary>
/// 采购运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseFreight { get; set; }
/// <summary>
/// 采购货款
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; }
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// Sku总成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? TotalCost { get; set; }
}
}

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

@ -11,5 +11,7 @@
/// 采购单Id /// 采购单Id
/// </summary> /// </summary>
public string PurchaseOrderId { get; set; } public string PurchaseOrderId { get; set; }
public bool? IsDelete { get; set; }
} }
} }

2
BBWYB.Server.Model/Dto/Response/Order/OrderCostResponse.cs

@ -4,6 +4,6 @@ namespace BBWYB.Server.Model.Dto
{ {
public class OrderCostResponse : OrderCost public class OrderCostResponse : OrderCost
{ {
public IList<OrderSkuCostResponse> OrderSkuCostList { get; set; }
} }
} }

9
BBWYB.Server.Model/Dto/Response/Order/OrderSkuCostResponse.cs

@ -0,0 +1,9 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Model.Dto
{
public class OrderSkuCostResponse : OrderSkuCost
{
public IList<OrderCostDetailResponse> OrderCostDetailList { get; set; }
}
}

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

@ -20,11 +20,6 @@ namespace BBWYB.Server.Model.Dto
/// </summary> /// </summary>
public IList<PurchaseExpressOrderResponse> PurchaseExpressOrderList { get; set; } public IList<PurchaseExpressOrderResponse> PurchaseExpressOrderList { get; set; }
///// <summary>
///// 限时任务列表
///// </summary>
//public IList<TimeLimitTaskResponse> TimeLimitTaskList { get; set; }
/// <summary> /// <summary>
/// 采购限时任务 /// 采购限时任务
/// </summary> /// </summary>

Loading…
Cancel
Save