diff --git a/MesETL.App/Program.cs b/MesETL.App/Program.cs index b6a1694..ad9dd05 100644 --- a/MesETL.App/Program.cs +++ b/MesETL.App/Program.cs @@ -1,4 +1,4 @@ -// #define USE_TEST_DB // 如果使用测试库运行,则加上USE_TEST_DB预处理器指令 +// #define FIX_PLAN_ITEM // 测试环境对OrderBlockPlanItem表进行修复时使用 using System.Text; using MesETL.App; @@ -125,19 +125,11 @@ async Task RunProgram() } break; } -#if USE_TEST_DB - // 测试环境的OrderExtra表没有分区,故按照SharedKey清理 - // 清理ShardKey < 24010的 - case TableNames.OrderExtra: + // 忽略OrderBlockPlanItem + case TableNames.OrderBlockPlanItem: { - var shardKey = int.Parse(record["ShardKey"].AsSpan()[..4]); - if (shardKey < oldestTimeInt_yyMM) - { - return false; - } - break; - } -#endif + return false; + } // 清理(Status != 0 || Deleted = 1) && ID前四位 < 2401的 case TableNames.OrderScrapBoard: { @@ -218,6 +210,7 @@ async Task RunProgram() break; } +#if !FIX_PLAN_ITEM // 删除PlanID和PackageID列 case TableNames.OrderItem: { @@ -225,6 +218,7 @@ async Task RunProgram() record.RemoveField("PackageID"); break; } +#endif // 将JsonStr列转换为Data列,添加CompressionType列 case TableNames.OrderModuleExtra: { @@ -302,6 +296,41 @@ async Task RunProgram() resultList.Add(orderWaveGroup); return resultList; } + + // 通过OrderItem重建OrderBlockPlanItem表 + if (record.TableName == TableNames.OrderItem) + { +#if FIX_PLAN_ITEM + record.Ignore = true; +#endif + var resultList = new List(); + record.TryGetField("ID", out var itemId); + record.TryGetField("ShardKey", out var shardKey); + record.TryGetField("PlanID", out var planId); + record.TryGetField("PackageID", out var packageId); + record.TryGetField("CompanyID", out var companyId); + if(!int.TryParse(planId, out var pid)) + throw new ApplicationException($"数据发生异常:OrderItem.PlanID,值: {(string.IsNullOrWhiteSpace(planId) ? "NULL" : planId)}"); + if (pid > 0) + { + resultList.Add(new DataRecord([itemId, shardKey, planId, companyId], + TableNames.OrderBlockPlanItem, + ["ItemID", "ShardKey", "PlanID", "CompanyID"] + )); + } + if(!int.TryParse(packageId, out var pkid)) + throw new ApplicationException($"数据发生异常:OrderItem.PackageID,值: {(string.IsNullOrWhiteSpace(packageId) ? "NULL" : packageId)}"); + if(pkid > 0) + { + resultList.Add(new DataRecord([itemId, shardKey, packageId, companyId], + TableNames.OrderPackageItem, + [ "ItemID", "ShardKey", "PackageID", "CompanyID" ] + )); + } + + return resultList; + } + return ArraySegment.Empty; }; diff --git a/MesETL.Test/DatabaseToolBox.cs b/MesETL.Test/DatabaseToolBox.cs index 3423149..91052c3 100644 --- a/MesETL.Test/DatabaseToolBox.cs +++ b/MesETL.Test/DatabaseToolBox.cs @@ -12,7 +12,7 @@ namespace TestProject1; public class DatabaseToolBox { private readonly ITestOutputHelper _output; - public const string ConnStr = "Server=localhost;Port=3306;UserId=root;Password=123456;"; + public const string ConnStr = "Server=192.168.1.245;Port=3306;UserId=root;Password=ruixinjie!@#123;"; public DatabaseToolBox(ITestOutputHelper output) { @@ -198,4 +198,27 @@ public class DatabaseToolBox } await DatabaseHelper.NonQueryAsync(ConnStr, sb.ToString()); } + + [Theory] + [InlineData("cferp_test_1")] + [InlineData("cferp_test_2")] + [InlineData("cferp_test_3")] + public async Task AnalyzeAllTable(string database) + { + var tables = await DatabaseHelper.QueryTableAsync(ConnStr, + $""" + SELECT TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = '{database}'; + """); + var sb = new StringBuilder(); + sb.AppendLine($"USE `{database}`;"); + foreach (DataRow row in tables.Tables[0].Rows) + { + var tableName = row["TABLE_NAME"].ToString(); + var sql = $""" + ANALYZE TABLE `{tableName}`; + """; + sb.AppendLine(sql); + } + await DatabaseHelper.NonQueryAsync(ConnStr, sb.ToString()); + } } \ No newline at end of file