diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs
index 47ab484..a14d0c6 100644
--- a/BBWYB.Server.API/Controllers/DataRepairController.cs
+++ b/BBWYB.Server.API/Controllers/DataRepairController.cs
@@ -36,5 +36,15 @@ namespace BBWYB.Server.API.Controllers
{
dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode);
}
+
+ ///
+ /// 修复订单状态
+ ///
+ ///
+ [HttpPost("{orderId}")]
+ public void RepairOrderState([FromRoute] string orderId)
+ {
+ dataRepairBusiness.RepairOrderState(orderId);
+ }
}
}
diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
index 8931e91..5a1b84e 100644
--- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
+++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
@@ -73,6 +73,80 @@ namespace BBWYB.Server.Business
});
}
+ public void RepairOrderState(string orderId)
+ {
+ List> updateOrderPurchaseList = new List>();
+ IUpdate updateOrder = null;
+
+ var order = fsql.Select(orderId).ToOne();
+
+ #region 查询采购单
+ var purchaseOrderList = fsql.Select().Where(ori => ori.IsEnabled == true && ori.OrderId == orderId).ToList();
+ if (purchaseOrderList.Count() == 0)
+ throw new Exception("未查询到任何采购单");
+ var purchaseOrderIds = purchaseOrderList.Select(po => po.PurchaseOrderId).ToList();
+ #endregion
+
+ #region 查询采购SKU
+ IList orderPurchaseSkuList = fsql.Select()
+ .Where(posku => purchaseOrderIds.Contains(posku.PurchaseOrderId))
+ .ToList();
+ #endregion
+
+ #region 查询采购sku关联信息
+ IList orderPurchaseRelationList = fsql.Select()
+ .Where(ops => purchaseOrderIds.Contains(ops.PurchaseOrderId))
+ .ToList();
+ #endregion
+
+ #region 查询采购单关联的快递单
+ var purchaseExpressOrderList = fsql.Select()
+ .InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo)
+ .Where((eori, peo) => eori.OrderId == orderId).ToList((eori, peo) => new PurchaseExpressOrder
+ {
+ CreateTime = peo.CreateTime,
+ ExpressContent = peo.ExpressContent,
+ ExpressChangedTime = peo.ExpressChangedTime,
+ ExpressState = peo.ExpressState,
+ IsSubscribeKD100 = peo.IsSubscribeKD100,
+ OrderId = eori.OrderId,
+ PurchaseOrderId = eori.PurchaseOrderId,
+ ShopId = eori.ShopId.Value,
+ SourceExpressId = peo.SourceExpressId,
+ SourceExpressName = peo.SourceExpressName,
+ TargetExpressId = peo.TargetExpressId,
+ TargetExpressName = peo.TargetExpressName,
+ WaybillNo = peo.WaybillNo
+ });
+ #endregion
+
+ foreach (var purchaseOrder in purchaseOrderList)
+ {
+ var currentPurchaseOrderSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
+
+ var currentPurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
+
+ var oldPurchaseOrderState = purchaseOrder.OrderState;
+ purchaseOrder.CalculationOrderState(fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList);
+ if (purchaseOrder.OrderState != oldPurchaseOrderState)
+ {
+ var update = fsql.Update(purchaseOrder.Id).Set(opi => opi.OrderState, purchaseOrder.OrderState);
+ updateOrderPurchaseList.Add(update);
+ }
+ }
+ var oldOrderState = order.OrderState;
+ order.CalculationOrderState(fsql, null, purchaseOrderList);
+ if (order.OrderState != oldOrderState)
+ updateOrder = fsql.Update(order.Id).Set(o => o.OrderState, order.OrderState);
+
+ fsql.Transaction(() =>
+ {
+ foreach (var update in updateOrderPurchaseList)
+ update.ExecuteAffrows();
+ updateOrder?.ExecuteAffrows();
+ });
+ }
+
public void SubscribeKD100(string waybillNo, string targetCompanyCode)
{
kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");