diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 3cfa44f..fe21727 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -59,5 +59,8 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.RepairOrderStateToCheckComputation(); } + + [HttpPost] + public void RepairOrderState() { dataRepairBusiness.RepairOrderState(); } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index cb1c992..260d66d 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -278,6 +278,65 @@ namespace BBWYB.Server.Business .Where(o => o.StartTime <= time && o.OrderState == Enums.OrderState.待验收) .ExecuteAffrows(); }); + } + + public void RepairOrderState() + { + var orderStateList = new List() { Enums.OrderState.待发货, Enums.OrderState.待收货, Enums.OrderState.部分发货, Enums.OrderState.部分收货, Enums.OrderState.待付款, Enums.OrderState.等待采购 }; + var orderList = fsql.Select().Where(o => orderStateList.Contains(o.OrderState)).ToList(); + var orderIdLIst = orderList.Select(o => o.Id).ToList(); + var orderSkuList = fsql.Select().Where(osku => orderIdLIst.Contains(osku.OrderId)).ToList(); + var poList = fsql.Select().Where(opi => orderIdLIst.Contains(opi.OrderId) && opi.IsEnabled == true).ToList(); + var updateOrderQueue = new Queue>(); + + foreach (var order in orderList) + { + var oskuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); + var polist1 = poList.Where(p => p.OrderId == order.Id).ToList(); + var oldState = order.OrderState; + order.CalculationOrderState(fsql, oskuList, polist1); + if (oldState != order.OrderState) + { + updateOrderQueue.Enqueue(fsql.Update(order.Id).Set(o => o.OrderState, order.OrderState)); + Console.WriteLine($"{order.Id},{order.StartTime},计算状态:{order.OrderState}"); + } + } + var updateOrderList = new List>(); + while (true) + { + if (updateOrderQueue.TryDequeue(out var update)) + { + updateOrderList.Add(update); + } + else + { + break; + } + if (updateOrderList.Count() > 50) + { + fsql.Transaction(() => + { + foreach (var u in updateOrderList) + u.ExecuteAffrows(); + }); + Console.WriteLine($"执行数据库 {DateTime.Now}"); + updateOrderList.Clear(); + } + } + if (updateOrderList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var u in updateOrderList) + u.ExecuteAffrows(); + }); + updateOrderList.Clear(); + Console.WriteLine($"最后执行数据库 {DateTime.Now}"); + } + + + + } } } diff --git a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs index eef8e59..088ee57 100644 --- a/BBWYB.Server.Business/Extensions/OrderStateExtension.cs +++ b/BBWYB.Server.Business/Extensions/OrderStateExtension.cs @@ -41,7 +41,7 @@ namespace BBWYB.Server.Business #region 部分采购 foreach (var osku in orderSkuList) { - if (!orderPurchaseInfoList.Any(opi => opi.BelongSkuIds.Contains(osku.SkuId))) + if (!orderPurchaseInfoList.Any(opi => !string.IsNullOrEmpty(opi.BelongSkuIds) && opi.BelongSkuIds.Contains(osku.SkuId))) { order.OrderState = Enums.OrderState.部分采购; return;