Browse Source

数据修复

yijia
shanji 2 years ago
parent
commit
ae42491df8
  1. 6
      BBWYB.Server.API/Controllers/DataRepairController.cs
  2. 128
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs

6
BBWYB.Server.API/Controllers/DataRepairController.cs

@ -60,16 +60,14 @@ namespace BBWYB.Server.API.Controllers
dataRepairBusiness.RepairOrderStateToCheckComputation(); dataRepairBusiness.RepairOrderStateToCheckComputation();
} }
[HttpPost]
public void RepairOrderState() { dataRepairBusiness.RepairOrderState(); }
[HttpPost] [HttpPost]
public void SyncCCancelOrder() public void SyncCCancelOrder()
{ dataRepairBusiness.SyncCCancelOrder(); } { dataRepairBusiness.SyncCCancelOrder(); }
[HttpPost] [HttpPost]
public void SelectBExistsAndCNotExists() public void BSyncToC()
{ dataRepairBusiness.SelectBExistsAndCNotExists(); } { dataRepairBusiness.BSyncToC(); }
[HttpPost] [HttpPost]
public void SyncHistoryPurchaseScheme() public void SyncHistoryPurchaseScheme()

128
BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs

@ -1,4 +1,5 @@
using BBWYB.Common.Extensions; using BBWYB.Common.Extensions;
using BBWYB.Common.Http;
using BBWYB.Common.Log; using BBWYB.Common.Log;
using BBWYB.Common.Models; using BBWYB.Common.Models;
using BBWYB.Server.Model; using BBWYB.Server.Model;
@ -21,7 +22,8 @@ namespace BBWYB.Server.Business
private FreeSqlMultiDBManager freeSqlMultiDBManager; private FreeSqlMultiDBManager freeSqlMultiDBManager;
private VenderBusiness venderBusiness; private VenderBusiness venderBusiness;
private OP_PlatformClientFactory opPlatformClientFactory; private OP_PlatformClientFactory opPlatformClientFactory;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory) : base(fsql, nLogManager, idGenerator) private RestApiService restApiService;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
{ {
this.kuaiDi100Manager = kuaiDi100Manager; this.kuaiDi100Manager = kuaiDi100Manager;
this.purchaseSchemeBusiness = purchaseSchemeBusiness; this.purchaseSchemeBusiness = purchaseSchemeBusiness;
@ -29,6 +31,7 @@ namespace BBWYB.Server.Business
this.freeSqlMultiDBManager = freeSqlMultiDBManager; this.freeSqlMultiDBManager = freeSqlMultiDBManager;
this.venderBusiness = venderBusiness; this.venderBusiness = venderBusiness;
this.opPlatformClientFactory = opPlatformClientFactory; this.opPlatformClientFactory = opPlatformClientFactory;
this.restApiService = restApiService;
} }
@ -290,116 +293,51 @@ namespace BBWYB.Server.Business
}); });
} }
public void RepairOrderState() public void SyncCCancelOrder()
{
var orderStateList = new List<Enums.OrderState?>() { Enums.OrderState., Enums.OrderState. };
var orderList = fsql.Select<Order>().Where(o => orderStateList.Contains(o.OrderState)).OrderByDescending(o => o.StartTime).ToList();
var orderIdLIst = orderList.Select(o => o.Id).ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIdLIst.Contains(osku.OrderId)).ToList();
var poList = fsql.Select<OrderPurchaseInfo>().Where(opi => orderIdLIst.Contains(opi.OrderId) && opi.IsEnabled == true).ToList();
var purchaseExpressOrderList = fsql.Select<ExpressOrderRelationInfo, PurchaseExpressOrder>()
.InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo)
.Where((eori, peo) => orderIdLIst.Contains(eori.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
});
var updateOrderQueue = new Queue<IUpdate<Order>>();
foreach (var order in orderList)
{
if (order.IntoStoreType == null)
order.IntoStoreType = Enums.IntoStoreType.;
var oskuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList();
var polist1 = poList.Where(p => p.OrderId == order.Id).ToList();
foreach (var po in polist1)
{
if (po.OrderState == null)
{
var peoList = purchaseExpressOrderList.Where(peo => peo.OrderId == po.OrderId && po.PurchaseOrderId == po.PurchaseOrderId).ToList();
if (peoList.Count() > 0 && peoList.Count(peo => peo.ExpressState == "QianShou") == peoList.Count())
{
po.OrderState = Enums.PurchaseOrderState.;
}
}
}
var oldState = order.OrderState;
order.CalculationOrderState(fsql, oskuList, polist1);
if (oldState != order.OrderState)
{
updateOrderQueue.Enqueue(fsql.Update<Order>(order.Id).Set(o => o.OrderState, order.OrderState));
Console.WriteLine($"{order.Id},{order.StartTime},计算状态:{order.OrderState}");
}
}
var updateOrderList = new List<IUpdate<Order>>();
while (true)
{
if (updateOrderQueue.TryDequeue(out var update))
{
updateOrderList.Add(update);
}
else
{ {
break; var c_cancel_orderlist = freeSqlMultiDBManager.BBWYCfsql.Select<Model.Db.BBWY.PurchaseOrderV2>().Where(p => p.OrderState == Enums.OrderState.).ToList();
} var c_cancel_orderIdlist = c_cancel_orderlist.Select(p => p.Id).ToList();
if (updateOrderList.Count() > 50) if (c_cancel_orderIdlist.Count() > 0)
{ {
fsql.Transaction(() => fsql.Transaction(() =>
{ {
foreach (var u in updateOrderList) fsql.Update<Order>(c_cancel_orderIdlist).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
u.ExecuteAffrows();
}); });
Console.WriteLine($"执行数据库 {DateTime.Now}");
updateOrderList.Clear();
} }
} }
if (updateOrderList.Count() > 0)
public void BSyncToC()
{ {
fsql.Transaction(() => var time = DateTime.Parse("2023-09-01");
var orderList = fsql.Select<Order>().Where(o => o.StartTime < time).OrderByDescending(o => o.Id).ToList(o => new { o.Id, o.OrderState });
var count = orderList.Count();
var i = 1;
foreach (var order in orderList)
{ {
foreach (var u in updateOrderList)
u.ExecuteAffrows();
});
updateOrderList.Clear();
Console.WriteLine($"最后执行数据库 {DateTime.Now}");
}
}
public void SyncCCancelOrder()
{ Thread.Sleep(500);
var c_cancel_orderlist = freeSqlMultiDBManager.BBWYCfsql.Select<Model.Db.BBWY.PurchaseOrderV2>().Where(p => p.OrderState == Enums.OrderState.).ToList(); try
var c_cancel_orderIdlist = c_cancel_orderlist.Select(p => p.Id).ToList();
if (c_cancel_orderIdlist.Count() > 0)
{ {
fsql.Transaction(() => var url = "https://bbwy.qiyue666.com";
var result = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new
{ {
fsql.Update<Order>(c_cancel_orderIdlist).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows(); OrderId = order.Id,
}); PurchaseOrderState = order.OrderState
} }, null, HttpMethod.Post);
Console.WriteLine($"{i}/{count},{order.Id},{result.StatusCode}");
} }
catch (Exception ex)
{
public void SelectBExistsAndCNotExists() }
finally
{ {
var cIds = freeSqlMultiDBManager.BBWYCfsql.Select<Model.Db.BBWY.PurchaseOrderV2>().OrderByDescending(p => p.Id).ToList(p => p.Id); i++;
var bIds = fsql.Select<Order>().OrderByDescending(o => o.Id).ToList(o => o.Id); }
var bexceptIdList = bIds.Except(cIds).ToList(); }
var cexceptIdList = cIds.Except(bIds).ToList();
Console.WriteLine($"B端在而C端不在的数量有 {bexceptIdList.Count()}");
Console.WriteLine($"C端在而B端不在的数量有 {cexceptIdList.Count()}");
} }
public void SyncHistoryPurchaseScheme() public void SyncHistoryPurchaseScheme()

Loading…
Cancel
Save