|
|
@ -543,6 +543,8 @@ namespace BBWYB.Server.Business |
|
|
|
public void AssociatePurchaseOrder(AssociationOrderRequest request) |
|
|
|
{ |
|
|
|
nLogManager.Default().Info($"AssociatePurchaseOrder {JsonConvert.SerializeObject(request)}"); |
|
|
|
|
|
|
|
#region 数据验证
|
|
|
|
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); |
|
|
|
if (dbOrder == null) |
|
|
|
throw new BusinessException("订单不存在"); |
|
|
@ -553,15 +555,15 @@ namespace BBWYB.Server.Business |
|
|
|
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 dbPurchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList();
|
|
|
|
//var dbInvalidPurchaseOrderIdList = dbPurchaseOrderList.Where(opi => !opi.IsEnabled).Select(opi => opi.PurchaseOrderId).ToList();
|
|
|
|
|
|
|
|
var dbvalidPurchaseOrderList = dbPurchaseOrderList.Where(opi => opi.IsEnabled).ToList(); |
|
|
|
//var dbvalidPurchaseOrderList = dbPurchaseOrderList.Where(opi => opi.IsEnabled).ToList();
|
|
|
|
|
|
|
|
//if (request.AssociationPurchaseOrderList.Any(x => dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId)))
|
|
|
|
// throw new BusinessException("关联采购单时不能包含历史采购单");
|
|
|
|
|
|
|
|
if (request.AssociationPurchaseOrderList.Any(x => dbInvalidPurchaseOrderIdList.Contains(x.PurchaseOrderId))) |
|
|
|
throw new BusinessException("关联采购单时不能包含历史采购单"); |
|
|
|
|
|
|
|
#region 数据验证
|
|
|
|
var validation_groups_pid = request.AssociationPurchaseOrderList.GroupBy(po => po.PurchaseOrderId); |
|
|
|
if (validation_groups_pid.Any(x => x.Count() > 1)) |
|
|
|
throw new BusinessException("不允许包含重复的采购单"); |
|
|
@ -571,8 +573,28 @@ namespace BBWYB.Server.Business |
|
|
|
if (Math.Abs(apo.PurchaseAmount - apo.AssocationOrderCostDetailList.Sum(aocd => aocd.SkuAmount)) > 1) |
|
|
|
throw new BusinessException($"采购单{apo.PurchaseOrderId}的采购货款与明细采购货款总和误差不能超过1"); |
|
|
|
} |
|
|
|
|
|
|
|
var purchaseOrderIds = request.AssociationPurchaseOrderList.Select(apo => apo.PurchaseOrderId).ToList(); |
|
|
|
|
|
|
|
var dbPurchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId)).ToList(); |
|
|
|
if (dbPurchaseOrderList.Count() > 0) |
|
|
|
{ |
|
|
|
if (dbPurchaseOrderList.Any(opi => opi.OrderId != request.OrderId)) |
|
|
|
{ |
|
|
|
var otherUsePurchaseOrder = dbPurchaseOrderList.FirstOrDefault(opi => opi.OrderId != request.OrderId); |
|
|
|
throw new BusinessException($"采购单{otherUsePurchaseOrder.PurchaseOrderId}的已经被其他订单{otherUsePurchaseOrder.OrderId}绑定"); |
|
|
|
} |
|
|
|
if (dbPurchaseOrderList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已取消)) |
|
|
|
{ |
|
|
|
var invalidPurchaseOrder = dbPurchaseOrderList.FirstOrDefault(opi => opi.OrderState == Enums.PurchaseOrderState.已取消); |
|
|
|
throw new BusinessException($"采购单{invalidPurchaseOrder.PurchaseOrderId}已失效,不能参与绑定"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 读取采购单中的采购账号/采购方案
|
|
|
|
IList<string> purchaseAccountIdList = request.AssociationPurchaseOrderList.Select(x => string.IsNullOrEmpty(x.PurchaseAccountId) ? |
|
|
|
x.PurchaseAccountName : |
|
|
@ -603,8 +625,8 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
foreach (var purchaseOrder in request.AssociationPurchaseOrderList) |
|
|
|
{ |
|
|
|
if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaseOrderId)) |
|
|
|
continue; |
|
|
|
//if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaseOrderId))
|
|
|
|
// continue;
|
|
|
|
|
|
|
|
var totalQuantity = purchaseOrder.AssocationOrderCostDetailList.Sum(x => x.PurchaseQuantity); |
|
|
|
|
|
|
@ -844,7 +866,7 @@ namespace BBWYB.Server.Business |
|
|
|
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost); |
|
|
|
|
|
|
|
#region 订单状态
|
|
|
|
dbOrder.CalculationOrderState(fsql, dbOrderSkuList, dbvalidPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList()); |
|
|
|
dbOrder.CalculationOrderState(fsql, dbOrderSkuList, dbPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList()); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 通知C端状态
|
|
|
|