|
|
@ -71,6 +71,12 @@ namespace BBWYB.Server.Business |
|
|
|
return orderProductParamList; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 预览采购单
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
/// <exception cref="BusinessException"></exception>
|
|
|
|
public PreviewOrderResponse PreviewPurchaseOrder(PreviewOrderRequest request) |
|
|
|
{ |
|
|
|
nLogManager.Default().Info($"PreviewPurchaseOrder {JsonConvert.SerializeObject(request)}"); |
|
|
@ -145,6 +151,11 @@ namespace BBWYB.Server.Business |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 创建采购单
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
/// <exception cref="BusinessException"></exception>
|
|
|
|
public void CreatePurchaseOrder(CreateOrderRequest request) |
|
|
|
{ |
|
|
|
nLogManager.Default().Info($"CreatePurchaseOrder\r\n{JsonConvert.SerializeObject(request)}"); |
|
|
@ -165,7 +176,7 @@ namespace BBWYB.Server.Business |
|
|
|
if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0) |
|
|
|
throw new BusinessException("缺少下单商品参数"); |
|
|
|
|
|
|
|
var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id); |
|
|
|
//var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
|
|
|
|
var isRepurchase = fsql.Select<OrderCost>(dbOrder.Id).Any(); |
|
|
|
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == request.OrderId).ToList(); |
|
|
|
|
|
|
@ -178,6 +189,16 @@ namespace BBWYB.Server.Business |
|
|
|
List<OrderPurchaseSkuInfo> insertOrderPurchaseSkuInfos = new List<OrderPurchaseSkuInfo>(); |
|
|
|
List<long> updatePurchaseTimeSchemeIdList = new List<long>(); |
|
|
|
List<OrderPurchaseRelationInfo> insertOrderPurchaseRelationInfoList = new List<OrderPurchaseRelationInfo>(); |
|
|
|
|
|
|
|
#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 totalPurchaseAmount = 0M; |
|
|
@ -286,8 +307,10 @@ namespace BBWYB.Server.Business |
|
|
|
PurchaseFreight = currentOrderSkuFreightAmount, |
|
|
|
PurchaseOrderId = purchaseOrderSimpleInfo.OrderId, |
|
|
|
SkuAmount = currentOrderSkuProductAmount, |
|
|
|
TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount, |
|
|
|
SkuId = belongSkuId, |
|
|
|
StorageAmount = 0 |
|
|
|
StorageAmount = 0, |
|
|
|
IsEnabled = true |
|
|
|
}; |
|
|
|
insertOrderCostDetails.Add(orderCostDetail); |
|
|
|
#endregion
|
|
|
@ -304,9 +327,11 @@ namespace BBWYB.Server.Business |
|
|
|
PurchaseMethod = Enums.PurchaseMethod.线上采购, |
|
|
|
PurchaseOrderId = createOrderResponse.OrderId, |
|
|
|
PurchasePlatform = cargoParamGroup.PurchasePlatform, |
|
|
|
PurchaserId = cargoParamGroup.PurchaserId, |
|
|
|
PurchaserName = cargoParamGroup.PurchaserName, |
|
|
|
ShopId = request.ShopId, |
|
|
|
BelongSkuIds = string.Join(",", belongSkuGroups.Select(bsg => bsg.Key)) |
|
|
|
BelongSkuIds = string.Join(",", belongSkuGroups.Select(bsg => bsg.Key)), |
|
|
|
IsEnabled = true |
|
|
|
}; |
|
|
|
insertOrderPurchaseInfos.Add(orderPurchaserInfo); |
|
|
|
#endregion
|
|
|
@ -338,7 +363,8 @@ namespace BBWYB.Server.Business |
|
|
|
IsManualEdited = false, |
|
|
|
PlatformCommissionRatio = 0, |
|
|
|
PreferentialAmount = 0, |
|
|
|
PurchaseAmount = totalPurchaseAmount |
|
|
|
PurchaseAmount = totalPurchaseAmount, |
|
|
|
TotalCost = totalPurchaseAmount |
|
|
|
}; |
|
|
|
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio;
|
|
|
|
orderCost.Profit = dbOrder.OrderTotalPrice - |
|
|
@ -356,7 +382,12 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
deleteOrderCostDetail.ExecuteAffrows(); |
|
|
|
//deleteOrderCostDetail.ExecuteAffrows();
|
|
|
|
if (updatePurchaseOrderIdList.Count() > 0) |
|
|
|
fsql.Update<OrderPurchaseInfo>(updatePurchaseOrderIdList).Set(opi => opi.IsEnabled, false).ExecuteAffrows(); |
|
|
|
if (updateOrderCostDetailIdList.Count() > 0) |
|
|
|
fsql.Update<OrderCostDetail>(updateOrderCostDetailIdList).Set(ocd => ocd.IsEnabled, false).ExecuteAffrows(); |
|
|
|
|
|
|
|
fsql.Insert(insertOrderCostDetails).ExecuteAffrows(); |
|
|
|
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows(); |
|
|
|
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows(); |
|
|
@ -373,6 +404,240 @@ namespace BBWYB.Server.Business |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 获取关联订单列表
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="orderId"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public IList<AssociationPurchaseOrderResponse> GetAssociationPurchaseOrderList(string orderId) |
|
|
|
{ |
|
|
|
IList<AssociationPurchaseOrderResponse> list = new List<AssociationPurchaseOrderResponse>(); |
|
|
|
var purchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderId).ToList(); |
|
|
|
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderId).ToList(); |
|
|
|
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == orderId).ToList(); |
|
|
|
|
|
|
|
foreach (var purchaseOrder in purchaseOrderList) |
|
|
|
{ |
|
|
|
var associationPurchaseOrder = new AssociationPurchaseOrderResponse() |
|
|
|
{ |
|
|
|
PurchaseAccountId = purchaseOrder.PurchaseAccountId, |
|
|
|
PurchaseAccountName = purchaseOrder.PurchaseAccountName, |
|
|
|
PurchasePlatform = purchaseOrder.PurchasePlatform.Value, |
|
|
|
PurchaserId = purchaseOrder.PurchaserId, |
|
|
|
PurchaserName = purchaseOrder.PurchaserName, |
|
|
|
PurchaserOrderId = purchaseOrder.PurchaseOrderId, |
|
|
|
IsEnabled = purchaseOrder.IsEnabled |
|
|
|
}; |
|
|
|
|
|
|
|
var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); |
|
|
|
|
|
|
|
foreach (var orderCostDetail in currentOrderCostDetailList) |
|
|
|
{ |
|
|
|
var orderSku = orderSkuList.FirstOrDefault(osku => osku.SkuId == orderCostDetail.SkuId); |
|
|
|
var assocationOrderCostDetail = new AssocationOrderCostDetailResponse() |
|
|
|
{ |
|
|
|
Id = orderCostDetail.Id, |
|
|
|
Logo = orderSku.Logo, |
|
|
|
Title = orderSku.Title, |
|
|
|
OrderId = orderSku.OrderId, |
|
|
|
SkuId = orderSku.SkuId, |
|
|
|
PurchaseQuantity = orderCostDetail.DeductionQuantity ?? 0, |
|
|
|
PurchaseFreight = orderCostDetail.PurchaseFreight ?? 0M, |
|
|
|
SkuAmount = orderCostDetail.SkuAmount ?? 0M, |
|
|
|
}; |
|
|
|
if (assocationOrderCostDetail.PurchaseQuantity != 0) |
|
|
|
assocationOrderCostDetail.PurchasePrice = assocationOrderCostDetail.SkuAmount / assocationOrderCostDetail.PurchaseQuantity; |
|
|
|
|
|
|
|
associationPurchaseOrder.AssocationOrderCostDetailList.Add(assocationOrderCostDetail); |
|
|
|
} |
|
|
|
associationPurchaseOrder.PurchaseAmount = associationPurchaseOrder.AssocationOrderCostDetailList.Sum(x => x.SkuAmount); |
|
|
|
associationPurchaseOrder.PurchaseFreight = associationPurchaseOrder.AssocationOrderCostDetailList.Sum(x => x.PurchaseFreight); |
|
|
|
list.Add(associationPurchaseOrder); |
|
|
|
} |
|
|
|
return list; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 关联订单
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
public void AssociatePurchaseOrder(AssociationOrderRequest request) |
|
|
|
{ |
|
|
|
if (request.AssociationPurchaseOrderList == null || request.AssociationPurchaseOrderList.Count() == 0) |
|
|
|
throw new BusinessException("缺少采购单信息"); |
|
|
|
|
|
|
|
|
|
|
|
var dbPurchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList(); |
|
|
|
var dbInvalidPurchaseOrderIdList = dbPurchaseOrderList.Where(opi => !opi.IsEnabled).Select(opi => opi.PurchaseOrderId).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 dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); |
|
|
|
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); |
|
|
|
|
|
|
|
List<OrderPurchaseInfo> insertOrderPurchaseInfoList = new List<OrderPurchaseInfo>(); |
|
|
|
IList<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseInfoList = new List<IUpdate<OrderPurchaseInfo>>(); |
|
|
|
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>(); |
|
|
|
IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>(); |
|
|
|
IInsert<OrderCost> insertOrderCost = null; |
|
|
|
IUpdate<OrderCost> updateOrderCost = null; |
|
|
|
|
|
|
|
foreach (var purchaseOrder in request.AssociationPurchaseOrderList) |
|
|
|
{ |
|
|
|
if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaserOrderId)) |
|
|
|
continue; |
|
|
|
|
|
|
|
var avgFreight = purchaseOrder.PurchaseFreight / purchaseOrder.AssocationOrderCostDetailList.Count(); |
|
|
|
var dbPurchaserOrder = dbPurchaseOrderList.FirstOrDefault(x => x.PurchaseOrderId == purchaseOrder.PurchaserOrderId); |
|
|
|
if (dbPurchaserOrder == null) |
|
|
|
{ |
|
|
|
dbPurchaserOrder = new OrderPurchaseInfo() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
OrderId = request.OrderId, |
|
|
|
PurchaseAccountId = purchaseOrder.PurchaseAccountId, |
|
|
|
PurchaseAccountName = purchaseOrder.PurchaseAccountName, |
|
|
|
IsEnabled = true, |
|
|
|
BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId)), |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
PurchaseMethod = Enums.PurchaseMethod.线下采购, |
|
|
|
PurchaseOrderId = purchaseOrder.PurchaserOrderId, |
|
|
|
PurchasePlatform = purchaseOrder.PurchasePlatform, |
|
|
|
PurchaserId = purchaseOrder.PurchaserId, |
|
|
|
PurchaserName = purchaseOrder.PurchaserName, |
|
|
|
ShopId = request.ShopId |
|
|
|
}; |
|
|
|
insertOrderPurchaseInfoList.Add(dbPurchaserOrder); |
|
|
|
|
|
|
|
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) |
|
|
|
{ |
|
|
|
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); |
|
|
|
var orderCostDetail = new OrderCostDetail() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
DeductionQuantity = assOrderCostDetail.PurchaseQuantity, |
|
|
|
IsEnabled = true, |
|
|
|
OrderId = request.OrderId, |
|
|
|
ProductId = dbOrderSku.ProductId, |
|
|
|
SkuId = assOrderCostDetail.SkuId, |
|
|
|
PurchaseFreight = avgFreight, |
|
|
|
TotalCost = assOrderCostDetail.SkuAmount + avgFreight |
|
|
|
}; |
|
|
|
insertOrderCostDetailList.Add(orderCostDetail); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
dbPurchaserOrder.PurchaseAccountId = purchaseOrder.PurchaseAccountId; |
|
|
|
dbPurchaserOrder.PurchaseAccountName = purchaseOrder.PurchaseAccountName; |
|
|
|
//dbPurchaserOrder.BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId));
|
|
|
|
dbPurchaserOrder.PurchasePlatform = purchaseOrder.PurchasePlatform; |
|
|
|
dbPurchaserOrder.PurchaserId = purchaseOrder.PurchaserId; |
|
|
|
dbPurchaserOrder.PurchaserName = purchaseOrder.PurchaserName; |
|
|
|
updateOrderPurchaseInfoList.Add(fsql.Update<OrderPurchaseInfo>().SetSource(dbPurchaserOrder)); |
|
|
|
|
|
|
|
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) |
|
|
|
{ |
|
|
|
var dbOrderCostDetail = dbOrderCostDetailList.FirstOrDefault(ocd => ocd.SkuId == assOrderCostDetail.SkuId); |
|
|
|
dbOrderCostDetail.SkuAmount = assOrderCostDetail.SkuAmount; |
|
|
|
dbOrderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity; |
|
|
|
dbOrderCostDetail.PurchaseFreight = avgFreight; |
|
|
|
dbOrderCostDetail.TotalCost = assOrderCostDetail.SkuAmount + avgFreight; |
|
|
|
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderCostDetail)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaserOrderId)) |
|
|
|
.Sum(p => p.PurchaseAmount + p.PurchaseFreight); |
|
|
|
var profit = dbOrder.OrderTotalPrice - totalPurchaseAmount - (dbOrderCost?.DeliveryExpressFreight ?? 0); // -orderCost.PlatformCommissionAmount
|
|
|
|
|
|
|
|
if (dbOrderCost == null) |
|
|
|
{ |
|
|
|
dbOrderCost = new OrderCost() |
|
|
|
{ |
|
|
|
OrderId = request.OrderId, |
|
|
|
DeliveryExpressFreight = 0, |
|
|
|
IsManualEdited = false, |
|
|
|
PlatformCommissionAmount = 0, |
|
|
|
PlatformCommissionRatio = 0, |
|
|
|
PreferentialAmount = 0, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
PurchaseAmount = totalPurchaseAmount, |
|
|
|
TotalCost = totalPurchaseAmount, |
|
|
|
Profit = profit |
|
|
|
}; |
|
|
|
insertOrderCost = fsql.Insert(dbOrderCost); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
dbOrderCost.PurchaseAmount = totalPurchaseAmount; |
|
|
|
dbOrderCost.Profit = profit; |
|
|
|
updateOrderCost = fsql.Update<OrderCost>(request.OrderId).Set(oc => oc.PurchaseAmount, totalPurchaseAmount) |
|
|
|
.Set(oc => oc.TotalCost, totalPurchaseAmount) |
|
|
|
.Set(oc => oc.Profit, profit); |
|
|
|
} |
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
if (insertOrderPurchaseInfoList.Count() > 0) |
|
|
|
fsql.Insert(insertOrderPurchaseInfoList).ExecuteAffrows(); |
|
|
|
if (updateOrderPurchaseInfoList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderPurchaseInfoList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
if (insertOrderCostDetailList.Count() > 0) |
|
|
|
fsql.Insert(insertOrderCostDetailList).ExecuteAffrows(); |
|
|
|
if (updateOrderCostDetailList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderCostDetailList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
insertOrderCost?.ExecuteAffrows(); |
|
|
|
updateOrderCost?.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
public void SetHistoryPurchaseOrder(SetHistoryPurchaseOrderRequest request) |
|
|
|
{ |
|
|
|
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId) |
|
|
|
.ToList(); |
|
|
|
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); |
|
|
|
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); |
|
|
|
|
|
|
|
var invalidCost = dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount + ocd.PurchaseFreight); |
|
|
|
|
|
|
|
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio;
|
|
|
|
try |
|
|
|
{ |
|
|
|
dbOrderCost.PurchaseAmount = dbOrderCostDetailList.Where(ocd => ocd.PurchaseOrderId != request.PurchaseOrderId).Sum(ocd => ocd.TotalCost); |
|
|
|
} |
|
|
|
catch |
|
|
|
{ |
|
|
|
dbOrderCost.PurchaseAmount = 0; |
|
|
|
} |
|
|
|
dbOrderCost.Profit = dbOrder.OrderTotalPrice - |
|
|
|
dbOrderCost.PurchaseAmount - |
|
|
|
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Update<OrderPurchaseInfo>() |
|
|
|
.Set(opi => opi.IsEnabled, false) |
|
|
|
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId) |
|
|
|
.ExecuteAffrows(); |
|
|
|
|
|
|
|
fsql.Update<OrderCostDetail>() |
|
|
|
.Set(ocd => ocd.IsEnabled, false) |
|
|
|
.Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId) |
|
|
|
.ExecuteAffrows(); |
|
|
|
|
|
|
|
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
#region 1688CallBack
|
|
|
|
public void CallbackFrom1688(string jsonStr) |
|
|
|
{ |
|
|
@ -678,26 +943,36 @@ namespace BBWYB.Server.Business |
|
|
|
{ |
|
|
|
var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == purchaseOrderId).ToOne(); |
|
|
|
if (orderPurchaseInfo == null) |
|
|
|
throw new Exception($"未查询到采购单{orderPurchaseInfo.PurchaseAccountId}"); |
|
|
|
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单"); |
|
|
|
|
|
|
|
var purchaseAccount = fsqlManager.MDSfsql.Select<Purchaseaccount>().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne(); |
|
|
|
if (purchaseAccount == null) |
|
|
|
throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); |
|
|
|
throw new Exception($"采购单{purchaseOrderId}-未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); |
|
|
|
|
|
|
|
var dbOrder = fsql.Select<Order>(orderPurchaseInfo.OrderId).ToOne(o => new { o.OrderTotalPrice }); |
|
|
|
var dbOrder = fsql.Select<Order>(orderPurchaseInfo.OrderId).ToOne(); |
|
|
|
var dbOrderCost = fsql.Select<OrderCost>(orderPurchaseInfo.OrderId).ToOne(); |
|
|
|
if (dbOrderCost == null) |
|
|
|
throw new Exception($"未查询到订单成本 {orderPurchaseInfo.OrderId}"); |
|
|
|
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的成本"); |
|
|
|
|
|
|
|
var dbOrderCostDetails = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id && ocd.IsEnabled == true).ToList(); |
|
|
|
if (dbOrderCostDetails.Count() == 0) |
|
|
|
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本"); |
|
|
|
|
|
|
|
var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => x.OrderId == dbOrder.Id).ToList(); |
|
|
|
if (dbOrderPurchaseRelationInfos.Count() == 0) |
|
|
|
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价"); |
|
|
|
|
|
|
|
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId && opi.IsEnabled == true).ToList(); |
|
|
|
if (dbOrderPurchaseInfoList.Count() == 0) |
|
|
|
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的采购单集合"); |
|
|
|
|
|
|
|
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>(); |
|
|
|
IUpdate<OrderCost> updateOrderCost = null; |
|
|
|
|
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId).ToList(opi => new |
|
|
|
{ |
|
|
|
opi.PurchaseOrderId, |
|
|
|
opi.PurchaseAccountId |
|
|
|
}); |
|
|
|
var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); |
|
|
|
|
|
|
|
var totalPurchaseAmount = 0M; |
|
|
|
foreach (var opi in orderPurchaseInfoList) |
|
|
|
foreach (var opi in dbOrderPurchaseInfoList) |
|
|
|
{ |
|
|
|
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() |
|
|
|
{ |
|
|
@ -707,25 +982,50 @@ namespace BBWYB.Server.Business |
|
|
|
OrderId = opi.PurchaseOrderId |
|
|
|
}); |
|
|
|
totalPurchaseAmount += purchaseOrderSimpleInfo.TotalAmount; |
|
|
|
} |
|
|
|
|
|
|
|
var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList(); |
|
|
|
|
|
|
|
//var oldTotalAmount = dbOrderCost.PurchaseAmount;
|
|
|
|
//var oldProductAmount = dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount);
|
|
|
|
//var oldPurchaseFreight = dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight);
|
|
|
|
var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId); |
|
|
|
foreach (var belongSkuGroup in belongSkuGroups) |
|
|
|
{ |
|
|
|
var belongSkuId = belongSkuGroup.Key; |
|
|
|
var currentOrderSkuProductAmount = 0M; //采购成本
|
|
|
|
var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId
|
|
|
|
|
|
|
|
dbOrderCost.PurchaseAmount = totalPurchaseAmount; |
|
|
|
dbOrderCost.Profit = dbOrder.OrderTotalPrice - |
|
|
|
dbOrderCost.PurchaseAmount - |
|
|
|
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
|
|
|
|
foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) |
|
|
|
{ |
|
|
|
var purchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) |
|
|
|
.Sum(p => p.ProductAmount); |
|
|
|
var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) |
|
|
|
.Sum(p => p.Quantity); |
|
|
|
currentOrderSkuProductAmount += purchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / purchaseSkuTotalQuantity); |
|
|
|
} |
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Update<OrderCost>(dbOrderCost.OrderId).Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount) |
|
|
|
.Set(oc => oc.Profit, dbOrderCost.Profit) |
|
|
|
.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / belongSkuGroups.Count(); //采购运费(按sku数均分)
|
|
|
|
|
|
|
|
var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId); |
|
|
|
dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount; |
|
|
|
dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount; |
|
|
|
dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; |
|
|
|
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderSkuDetail)); |
|
|
|
} |
|
|
|
|
|
|
|
dbOrderCost.PurchaseAmount = totalPurchaseAmount; |
|
|
|
dbOrderCost.Profit = dbOrder.OrderTotalPrice - |
|
|
|
dbOrderCost.PurchaseAmount - |
|
|
|
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderCostDetailList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
updateOrderCost?.ExecuteAffrows(); |
|
|
|
|
|
|
|
//fsql.Update<OrderCost>(dbOrderCost.OrderId).Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount)
|
|
|
|
// .Set(oc => oc.Profit, dbOrderCost.Profit)
|
|
|
|
// .ExecuteAffrows();
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|