Browse Source

1.增加订单Sku成本逻辑

1.1 创建采购单增加订单Sku成本
  1.2 关联采购单增加订单Sku成本
  1.3 设置历史采购单增加订单Sku成本
  1.4 1688改价通知,付款通知增加订单Sku成本
  1.5 调整订单查询接口, 在订单成本层返回订单Sku成本
yijia
shanji 2 years ago
parent
commit
0cb4e2b7b7
  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]
public void DeletePurchaseOrder([FromBody] DeletePurchaseOrderRequest request)
{
purchaseOrderBusiness.DeletePurchaseOrder(request);
request.IsDelete = true;
purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
}
/// <summary>

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

@ -8,17 +8,11 @@ namespace BBWYB.Server.Business.Extensions
/// 计算订单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,
@ -29,7 +23,50 @@ namespace BBWYB.Server.Business.Extensions
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总成本
//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>
@ -41,7 +78,7 @@ namespace BBWYB.Server.Business.Extensions
/// <param name="purchaseFreight">采购运费</param>
/// <param name="outPackAmount">支出打包费</param>
/// <param name="deliveryExpressFreight">发货运费</param>
public static void CalculationOrderCostCostAndProfit(this OrderCost oc,
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
decimal purchaseProductAmount,
decimal purchaseFreight,
@ -57,5 +94,25 @@ namespace BBWYB.Server.Business.Extensions
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
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();
#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 处理采购信息
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>();
foreach (var order in orderList)
{
@ -559,10 +573,12 @@ namespace BBWYB.Server.Business
var order = orderListResponse.Items.FirstOrDefault();
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();
IList<IUpdate<OrderSku>> updates_orderSku = new List<IUpdate<OrderSku>>();
IUpdate<OrderCost> updateOrderCost = null;
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
@ -577,21 +593,28 @@ namespace BBWYB.Server.Business
{
foreach (var orderCostDetail in ocdList)
{
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderSku.SkuPrice * orderSku.Quantity,
orderSku.FreightAmount,
orderSku.PackAmount,
orderCostDetail.SkuAmount ?? 0M,
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderCostDetail.SkuAmount ?? 0M,
orderCostDetail.PurchaseFreight ?? 0M,
orderCostDetail.OutPackAmount ?? 0M,
orderCostDetail.DeliveryExpressFreight ?? 0M);
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)
{
orderCost.CalculationOrderCostCostAndProfit(order.OrderTotalAmount,
orderCost.CalculationOrderCostAndProfit(order.OrderTotalAmount,
orderCost.SkuAmount ?? 0M,
orderCost.PurchaseFreight ?? 0M,
orderCost.OutPackAmount ?? 0M,
@ -619,6 +642,9 @@ namespace BBWYB.Server.Business
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
}
if (updateOrderSkuCostList.Count() > 0)
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
});
#region 通知C端

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

@ -262,6 +262,8 @@ namespace BBWYB.Server.Business
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 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)
{
@ -291,19 +293,10 @@ namespace BBWYB.Server.Business
if (dbOrder.IntoStoreType == Enums.IntoStoreType.)
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;
IUpdate<OrderCost> updateOrderCost = null;
//var totalPurchaseProductAmount = 0M;
//var totalPurchaseFreight = 0M;
List<OrderSkuCost> insertOrderSkuCostList = new List<OrderSkuCost>();
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
foreach (var cargoParamGroup in request.CargoParamGroupList)
{
@ -412,10 +405,7 @@ namespace BBWYB.Server.Business
SkuId = belongSkuId,
IsEnabled = true
};
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentSkuAmount,
orderCostDetail.CalculationOrderCostDetailCostAndProfit(currentSkuAmount,
currentPurchaseFreight,
0M,
0M);
@ -494,6 +484,32 @@ namespace BBWYB.Server.Business
#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 订单成本
var orderCost = new OrderCost()
{
@ -502,13 +518,15 @@ namespace BBWYB.Server.Business
IsManualEdited = false
};
var totalPurchaseProductAmount = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.SkuAmount);
var totalPurchaseFreight = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.PurchaseFreight);
orderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value,
totalPurchaseProductAmount ?? 0M,
totalPurchaseFreight ?? 0M,
0M,
0M);
//var totalPurchaseProductAmount = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.SkuAmount);
//var totalPurchaseFreight = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.PurchaseFreight);
//orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value,
// totalPurchaseProductAmount ?? 0M,
// totalPurchaseFreight ?? 0M,
// 0M,
// 0M);
orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, orderSkuCostList.Union(insertOrderSkuCostList).ToList());
if (!isRepurchase)
{
@ -539,10 +557,6 @@ namespace BBWYB.Server.Business
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)
{
fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now)
@ -553,10 +567,13 @@ namespace BBWYB.Server.Business
.Where(t => t.TaskType == Enums.TimeLimitTaskType.)
.ExecuteAffrows();
}
if (insertOrderCostDetails.Count() > 0)
fsql.Insert(insertOrderCostDetails).ExecuteAffrows();
if (insertOrderPurchaseInfos.Count() > 0)
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
if (insertOrderPurchaseSkuInfos.Count() > 0)
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
if (insertOrderPurchaseRelationInfoList.Count() > 0)
fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
insertOrderCost?.ExecuteAffrows();
@ -566,7 +583,13 @@ namespace BBWYB.Server.Business
.SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark)
.Set(o => o.IsPurchased, true)
.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();
}
});
}
@ -689,7 +712,7 @@ namespace BBWYB.Server.Business
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();
var dbOrderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList();
List<OrderPurchaseInfo> insertOrderPurchaseInfoList = new List<OrderPurchaseInfo>();
@ -702,6 +725,9 @@ namespace BBWYB.Server.Business
IInsert<OrderCost> insertOrderCost = 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<QiKuPackTaskSkuPurchaseSchemeIdRequest> notifyQikuPackSchemeParamList = new List<QiKuPackTaskSkuPurchaseSchemeIdRequest>();
@ -839,10 +865,7 @@ namespace BBWYB.Server.Business
SkuId = assOrderCostDetail.SkuId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId
};
orderCostDetail.CalculationOrderCostDetailCostAndProfit(dbOrderSku.Price.Value * dbOrderSku.ItemTotal.Value,
dbOrderSku.BuyerPayFreight ?? 0M,
dbOrderSku.InPackAmount ?? 0M,
assOrderCostDetail.SkuAmount,
orderCostDetail.CalculationOrderCostDetailCostAndProfit(assOrderCostDetail.SkuAmount,
purchaseFreight,
0M,
0M);
@ -932,8 +955,8 @@ namespace BBWYB.Server.Business
var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity);
if (orderCostDetail == null)
var isOcdEmpty = orderCostDetail == null;
if (isOcdEmpty)
{
orderCostDetail = new OrderCostDetail()
{
@ -949,15 +972,12 @@ namespace BBWYB.Server.Business
};
}
orderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity;
orderCostDetail.CalculationOrderCostDetailCostAndProfit(dbOrderSku.Price.Value * dbOrderSku.ItemTotal.Value,
dbOrderSku.BuyerPayFreight ?? 0M,
dbOrderSku.InPackAmount ?? 0M,
assOrderCostDetail.SkuAmount,
orderCostDetail.CalculationOrderCostDetailCostAndProfit(assOrderCostDetail.SkuAmount,
purchaseFreight,
orderCostDetail.OutPackAmount ?? 0M,
orderCostDetail.DeliveryExpressFreight ?? 0M);
if (orderCostDetail == null)
if (isOcdEmpty)
insertOrderCostDetailList.Add(orderCostDetail);
else
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(orderCostDetail));
@ -965,6 +985,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;
if (dbOrderCostIsEmpty)
{
@ -975,20 +1022,21 @@ namespace BBWYB.Server.Business
CreateTime = DateTime.Now
};
}
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);
dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, dbOrderSkuCostList.Union(insertOrderSkuCostList).ToList());
//var totalPurchaseProductAmount = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseAmount);
//var totalPurchaseFreight = request.AssociationPurchaseOrderList.Sum(x => x.PurchaseFreight);
//var totalOutPackAmount = dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount);
//dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value,
// totalPurchaseProductAmount,
// totalPurchaseFreight,
// totalOutPackAmount ?? 0M,
// 0M);
if (dbOrderCostIsEmpty)
insertOrderCost = fsql.Insert(dbOrderCost);
else
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
#endregion
#region 订单状态
dbOrder.CalculationOrderState(fsql, out _, dbOrderSkuList, dbPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList());
@ -1043,6 +1091,14 @@ namespace BBWYB.Server.Business
fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState)
.Set(o => o.IsPurchased, true)
.ExecuteAffrows();
if (insertOrderSkuCostList.Count() > 0)
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
if (updateOrderSkuCostList.Count() > 0)
{
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}
});
}
@ -1198,15 +1254,26 @@ namespace BBWYB.Server.Business
if (historyPurchaseOrder == null)
throw new BusinessException("未查询到采购单");
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
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 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;
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);
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));
}
dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice ?? 0M, dbOrderSkuCostList);
#region 找出失效的快递单
List<string> deleteWaybillNoList = new List<string>();
@ -1230,6 +1297,12 @@ namespace BBWYB.Server.Business
dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList);
fsql.Transaction(() =>
{
if (request.IsDelete == true)
{
fsql.Delete<OrderPurchaseInfo>(historyPurchaseOrder.Id).ExecuteAffrows();
}
else
{
fsql.Update<OrderPurchaseInfo>(historyPurchaseOrder.Id)
.Set(opi => opi.IsEnabled, false)
@ -1237,6 +1310,7 @@ namespace BBWYB.Server.Business
.Set(opi => opi.HistorySettingTime, DateTime.Now)
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows();
}
fsql.Update<OrderCostDetail>()
.Set(ocd => ocd.IsEnabled, false)
@ -1255,83 +1329,88 @@ namespace BBWYB.Server.Business
fsql.Update<OrderCost>().SetSource(dbOrderCost).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)
{
nLogManager.Default().Info($"DeletePurchaseOrder {JsonConvert.SerializeObject(request)}");
//public void DeletePurchaseOrder(DeletePurchaseOrderRequest request)
//{
// nLogManager.Default().Info($"DeletePurchaseOrder {JsonConvert.SerializeObject(request)}");
//var po = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId).ToOne();
//if (po == null)
// throw new BusinessException("采购单不不存在");
//var orderId = po.OrderId;
// //var po = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId).ToOne();
// //if (po == null)
// // throw new BusinessException("采购单不不存在");
// //var orderId = po.OrderId;
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList();
var deletePurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
if (deletePurchaseOrder == null)
throw new BusinessException("采购单不不存在");
// var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList();
// var deletePurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
// if (deletePurchaseOrder == null)
// throw new BusinessException("采购单不不存在");
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId &&
ocd.PurchaseOrderId != request.PurchaseOrderId).ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
// var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId &&
// ocd.PurchaseOrderId != request.PurchaseOrderId).ToList();
// var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
// var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
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 outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M;
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 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 outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M;
// dbOrderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M);
#region 找出失效的快递单
List<string> deleteWaybillNoList = new List<string>();
// #region 找出失效的快递单
// 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);
foreach (var group in expressOrderRelationGroups)
{
if (group.Count() == group.Count(eori => eori.PurchaseOrderId == request.PurchaseOrderId))
deleteWaybillNoList.Add(group.Key);
}
#endregion
// //以快递单号进行分组
// var expressOrderRelationGroups = expressOrderRelationList.GroupBy(eori => eori.WayBillNo);
// foreach (var group in expressOrderRelationGroups)
// {
// if (group.Count() == group.Count(eori => eori.PurchaseOrderId == request.PurchaseOrderId))
// deleteWaybillNoList.Add(group.Key);
// }
// #endregion
orderPurchaseInfoList.Remove(deletePurchaseOrder);
while (orderPurchaseInfoList.Any(opi => opi.IsEnabled == false))
{
var historyPo = orderPurchaseInfoList.FirstOrDefault(opi => opi.IsEnabled == false);
orderPurchaseInfoList.Remove(historyPo);
}
dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList);
// orderPurchaseInfoList.Remove(deletePurchaseOrder);
// while (orderPurchaseInfoList.Any(opi => opi.IsEnabled == false))
// {
// var historyPo = orderPurchaseInfoList.FirstOrDefault(opi => opi.IsEnabled == false);
// orderPurchaseInfoList.Remove(historyPo);
// }
// dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList);
fsql.Transaction(() =>
{
fsql.Delete<OrderPurchaseInfo>(deletePurchaseOrder.Id).ExecuteAffrows();
// fsql.Transaction(() =>
// {
// fsql.Delete<OrderPurchaseInfo>(deletePurchaseOrder.Id).ExecuteAffrows();
fsql.Update<OrderCostDetail>()
.Set(ocd => ocd.IsEnabled, false)
.Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows();
// fsql.Update<OrderCostDetail>()
// .Set(ocd => ocd.IsEnabled, false)
// .Where(ocd => ocd.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<OrderPurchaseSkuInfo>().Where(opsi => opsi.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
// fsql.Delete<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
fsql.Delete<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
if (deleteWaybillNoList.Count() > 0)
fsql.Delete<PurchaseExpressOrder>(deleteWaybillNoList).ExecuteAffrows();
// fsql.Delete<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
// if (deleteWaybillNoList.Count() > 0)
// fsql.Delete<PurchaseExpressOrder>(deleteWaybillNoList).ExecuteAffrows();
fsql.Delete<InStorePurchaseOrdeRrelationInfo>().Where(i => i.OrderId == request.OrderId && i.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows();
// fsql.Delete<InStorePurchaseOrdeRrelationInfo>().Where(i => i.OrderId == request.OrderId && i.PurchaseOrderId == request.PurchaseOrderId)
// .ExecuteAffrows();
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows();
fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows();
});
}
// fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows();
// fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows();
// });
//}
/// <summary>
/// 修改采购快递单
@ -2758,13 +2837,14 @@ namespace BBWYB.Server.Business
if (dbOrderCostDetails.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本");
var dbPurchaseOrderIdList = dbOrderPurchaseInfoList.Select(x => x.PurchaseOrderId).ToList();
var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => dbPurchaseOrderIdList.Contains(x.PurchaseOrderId)).ToList();
if (dbOrderPurchaseRelationInfos.Count() == 0)
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>>();
IUpdate<OrderCost> updateOrderCost = null;
@ -2772,6 +2852,9 @@ namespace BBWYB.Server.Business
IList<IUpdate<OrderSku>> updateOrderSkuList = new List<IUpdate<OrderSku>>();
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>();
var ppclient = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
@ -2841,10 +2924,7 @@ namespace BBWYB.Server.Business
#endregion
var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId);
dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentOrderSkuProductAmount,
dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(currentOrderSkuProductAmount,
currentPurchaseFreight ?? 0M,
dbOrderSkuDetail.OutPackAmount ?? 0M,
dbOrderSkuDetail.DeliveryExpressFreight ?? 0M);
@ -2861,12 +2941,40 @@ namespace BBWYB.Server.Business
.Set(o => o.FreightPrice, dbOrder.FreightPrice);
}
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M,
totalPurchaseProductAmount,
totalPurchaseFreight,
dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M),
dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M));
#region 订单Sku成本
foreach (var orderSku in dbOrderSkus)
{
var orderSkuCost = dbOrderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
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);
#endregion
fsql.Transaction(() =>
{
@ -2876,6 +2984,13 @@ namespace BBWYB.Server.Business
foreach (var update in updateOrderSkuList)
update.ExecuteAffrows();
updateOrder?.ExecuteAffrows();
if (insertOrderSkuCostList.Count() > 0)
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
if (updateOrderSkuCostList.Count() > 0)
{
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
}
});
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
/// </summary>
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 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>
public IList<PurchaseExpressOrderResponse> PurchaseExpressOrderList { get; set; }
///// <summary>
///// 限时任务列表
///// </summary>
//public IList<TimeLimitTaskResponse> TimeLimitTaskList { get; set; }
/// <summary>
/// 采购限时任务
/// </summary>

Loading…
Cancel
Save