From 1f7213a75cdb2c89f793b8ab1d074a4f1dbd18af Mon Sep 17 00:00:00 2001 From: "2817212736@qq.com" <2817212736@qq.com> Date: Wed, 8 Jan 2025 11:47:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BF=81=E7=A7=BB=E8=A7=84?= =?UTF-8?q?=E5=88=99=EF=BC=8C=E4=BD=BF=E7=94=A8OrderItem=E8=A1=A8=E9=87=8D?= =?UTF-8?q?=E5=BB=BAOrderBlockPlanItem=E5=92=8COrderPackageItem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MesETL.App/Program.cs | 55 ++++++++++++++++++++++++++-------- MesETL.Test/DatabaseToolBox.cs | 25 +++++++++++++++- 2 files changed, 66 insertions(+), 14 deletions(-) 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