更新迁移规则,使用OrderItem表重建OrderBlockPlanItem和OrderPackageItem
This commit is contained in:
parent
6d281f65c9
commit
1f7213a75c
@ -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;
|
||||
};
|
||||
});
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user