Browse Source

Merge branch 'orderskucost'

yijia
shanji 2 years ago
parent
commit
a94ca9c152
  1. 3
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  2. 73
      BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
  3. 38
      BBWYB.Server.Business/Order/OrderBusiness.cs
  4. 361
      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>

73
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,7 +78,7 @@ 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,
@ -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;
}
} }
} }

38
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,21 +593,28 @@ 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,
@ -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端

361
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,10 +569,13 @@ 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();
if (insertOrderPurchaseInfos.Count() > 0)
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
if (insertOrderPurchaseSkuInfos.Count() > 0)
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
if (insertOrderPurchaseRelationInfoList.Count() > 0)
fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows(); fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows();
updateOrderCost?.ExecuteAffrows(); updateOrderCost?.ExecuteAffrows();
insertOrderCost?.ExecuteAffrows(); insertOrderCost?.ExecuteAffrows();
@ -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,
dbOrderSku.InPackAmount ?? 0M,
assOrderCostDetail.SkuAmount,
purchaseFreight, purchaseFreight,
orderCostDetail.OutPackAmount ?? 0M, orderCostDetail.OutPackAmount ?? 0M,
orderCostDetail.DeliveryExpressFreight ?? 0M); orderCostDetail.DeliveryExpressFreight ?? 0M);
if (orderCostDetail == null) if (isOcdEmpty)
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();
var purchaseProductAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount) ?? 0M; foreach (var orderSkuCost in 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; var orderSku = dbOrderSku.FirstOrDefault(osku => osku.SkuId == orderSkuCost.SkuId);
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M); if (orderSku == null)
continue;
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, dbOrderCostDetailList);
updateOrderSkuCostList.Add(fsql.Update<OrderSkuCost>().SetSource(orderSkuCost));
}
dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, dbOrderSkuCostList);
#region 找出失效的快递单 #region 找出失效的快递单
List<string> deleteWaybillNoList = new List<string>(); List<string> deleteWaybillNoList = new List<string>();
@ -1232,6 +1299,12 @@ namespace BBWYB.Server.Business
dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList); dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList);
fsql.Transaction(() => fsql.Transaction(() =>
{
if (request.IsDelete == true)
{
fsql.Delete<OrderPurchaseInfo>(historyPurchaseOrder.Id).ExecuteAffrows();
}
else
{ {
fsql.Update<OrderPurchaseInfo>(historyPurchaseOrder.Id) fsql.Update<OrderPurchaseInfo>(historyPurchaseOrder.Id)
.Set(opi => opi.IsEnabled, false) .Set(opi => opi.IsEnabled, false)
@ -1239,6 +1312,7 @@ namespace BBWYB.Server.Business
.Set(opi => opi.HistorySettingTime, DateTime.Now) .Set(opi => opi.HistorySettingTime, DateTime.Now)
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId) .Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows(); .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