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
+ {
+ }
+}