更新迁移规则,使用OrderItem表重建OrderBlockPlanItem和OrderPackageItem

This commit is contained in:
陈梓阳 2025-01-08 11:47:52 +08:00
parent 6d281f65c9
commit 1f7213a75c
2 changed files with 66 additions and 14 deletions

View File

@ -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:
{
var shardKey = int.Parse(record["ShardKey"].AsSpan()[..4]);
if (shardKey < oldestTimeInt_yyMM)
// 忽略OrderBlockPlanItem
case TableNames.OrderBlockPlanItem:
{
return false;
}
break;
}
#endif
// 清理(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:
{
@ -303,6 +297,41 @@ async Task RunProgram()
return resultList;
}
// 通过OrderItem重建OrderBlockPlanItem表
if (record.TableName == TableNames.OrderItem)
{
#if FIX_PLAN_ITEM
record.Ignore = true;
#endif
var resultList = new List<DataRecord>();
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<DataRecord>.Empty;
};
});

View File

@ -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());
}
}