using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Business
{
public static class OrderStateExtension
{
///
/// 计算订单状态
///
///
///
///
///
public static void CalculationOrderState(this Order order,
IFreeSql fsql,
IList orderSkuList = null,
IList orderPurchaseInfoList = null)
{
if (order.OrderState == Enums.OrderState.已取消 ||
order.OrderState == Enums.OrderState.已完成 ||
order.OrderState == Enums.OrderState.待付款 ||
order.OrderState == Enums.OrderState.待完结)
return;
if (orderSkuList == null)
orderSkuList = fsql.Select().Where(osku => osku.OrderId == order.Id).ToList();
if (orderPurchaseInfoList == null)
orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == order.Id && opi.IsEnabled == true).ToList();
#region 等待采购
if (orderPurchaseInfoList == null || orderPurchaseInfoList.Count() == 0)
{
order.OrderState = Enums.OrderState.等待采购;
return;
}
#endregion
#region 部分采购
foreach (var osku in orderSkuList)
{
if (!orderPurchaseInfoList.Any(opi => opi.BelongSkuIds.Contains(osku.SkuId)))
{
order.OrderState = Enums.OrderState.部分采购;
return;
}
}
#endregion
#region 待发货
if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待发货))
{
order.OrderState = Enums.OrderState.待发货;
return;
}
#endregion
#region 部分发货
if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.待收货) &&
orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待收货) < orderPurchaseInfoList.Count())
{
order.OrderState = Enums.OrderState.部分发货;
return;
}
#endregion
#region 待收货
if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.待收货))
{
order.OrderState = Enums.OrderState.待收货;
return;
}
#endregion
#region 部分收货
if (orderPurchaseInfoList.Any(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) &&
orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收) < orderPurchaseInfoList.Count())
{
order.OrderState = Enums.OrderState.部分收货;
return;
}
#endregion
#region 打包中
if (orderPurchaseInfoList.Count() == orderPurchaseInfoList.Count(opi => opi.OrderState == Enums.PurchaseOrderState.已签收))
{
order.OrderState = Enums.OrderState.打包中;
return;
}
#endregion
}
}
}