diff --git a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs index f1ab9e4..877a32b 100644 --- a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs @@ -91,6 +91,16 @@ namespace BBWYB.Server.API.Controllers purchaseOrderBusiness.SetHistoryPurchaseOrder(request); } + /// + /// 删除历史采购单 + /// + /// + [HttpDelete] + public void DeletePurchaseOrder([FromBody] DeletePurchaseOrderRequest request) + { + purchaseOrderBusiness.DeletePurchaseOrder(request); + } + /// /// 手动签收采购单 /// diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 6bade0a..ceecd06 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -1127,6 +1127,12 @@ namespace BBWYB.Server.Business public void SetHistoryPurchaseOrder(SetHistoryPurchaseOrderRequest request) { nLogManager.Default().Info($"SetHistoryPurchaseOrder {JsonConvert.SerializeObject(request)}"); + + var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); + var historyPurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); + if (historyPurchaseOrder == null) + throw new BusinessException("未查询到采购单"); + var dbOrderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == request.OrderId && ocd.PurchaseOrderId != request.PurchaseOrderId).ToList(); var dbOrderCost = fsql.Select(request.OrderId).ToOne(); @@ -1137,12 +1143,6 @@ namespace BBWYB.Server.Business var outPackAmount = dbOrderCostDetailList.Count() == 0 ? 0M : dbOrderCostDetailList.Sum(ocd => ocd.OutPackAmount) ?? 0M; dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice.Value, purchaseProductAmount, purchaseFreight, outPackAmount, 0M); - - var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); - var historyPurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); - if (historyPurchaseOrder == null) - throw new BusinessException("未查询到采购单"); - #region 找出失效的快递单 List deleteWaybillNoList = new List(); @@ -1161,7 +1161,6 @@ namespace BBWYB.Server.Business } #endregion - orderPurchaseInfoList.Remove(historyPurchaseOrder); dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList); @@ -1194,6 +1193,81 @@ namespace BBWYB.Server.Business }); } + public void DeletePurchaseOrder(DeletePurchaseOrderRequest request) + { + nLogManager.Default().Info($"DeletePurchaseOrder {JsonConvert.SerializeObject(request)}"); + + //var po = fsql.Select().Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId).ToOne(); + //if (po == null) + // throw new BusinessException("采购单不不存在"); + //var orderId = po.OrderId; + + var orderPurchaseInfoList = fsql.Select().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().Where(ocd => ocd.OrderId == request.OrderId && + ocd.PurchaseOrderId != request.PurchaseOrderId).ToList(); + var dbOrderCost = fsql.Select(request.OrderId).ToOne(); + var dbOrder = fsql.Select(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); + + + #region 找出失效的快递单 + List deleteWaybillNoList = new List(); + + //查询该采购单所使用的快递单号 + var useWaybillNos = fsql.Select().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ToList(eori => eori.WayBillNo); + + //查询使用上述快递单号的快递单关系 + var expressOrderRelationList = fsql.Select().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 + + 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(deletePurchaseOrder.Id).ExecuteAffrows(); + + fsql.Update() + .Set(ocd => ocd.IsEnabled, false) + .Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId) + .ExecuteAffrows(); + + fsql.Delete().Where(opsi => opsi.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); + fsql.Delete().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); + + fsql.Delete().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); + if (deleteWaybillNoList.Count() > 0) + fsql.Delete(deleteWaybillNoList).ExecuteAffrows(); + + fsql.Delete().Where(i => i.OrderId == request.OrderId && i.PurchaseOrderId == request.PurchaseOrderId) + .ExecuteAffrows(); + + fsql.Update().SetSource(dbOrderCost).ExecuteAffrows(); + fsql.Update(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); + }); + } + /// /// 修改采购快递单 /// diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/DeletePurchaseOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/DeletePurchaseOrderRequest.cs new file mode 100644 index 0000000..81fa3ad --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/DeletePurchaseOrderRequest.cs @@ -0,0 +1,6 @@ +namespace BBWYB.Server.Model.Dto +{ + public class DeletePurchaseOrderRequest : SetHistoryPurchaseOrderRequest + { + } +}