添加项目文件。
This commit is contained in:
parent
7f963b5eca
commit
4e75665abc
24
Chenfeng.MES.Archiver/Chenfeng.MES.Archiver.csproj
Normal file
24
Chenfeng.MES.Archiver/Chenfeng.MES.Archiver.csproj
Normal file
@ -0,0 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CliFx" Version="2.1.0" />
|
||||
<PackageReference Include="Dapper" Version="2.0.123" />
|
||||
<PackageReference Include="MySqlConnector" Version="2.1.2" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="appsettings.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
202
Chenfeng.MES.Archiver/Commands/MysqlCommand.cs
Normal file
202
Chenfeng.MES.Archiver/Commands/MysqlCommand.cs
Normal file
@ -0,0 +1,202 @@
|
||||
using MySqlConnector;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Dapper;
|
||||
using CliFx;
|
||||
using CliFx.Infrastructure;
|
||||
using CliFx.Attributes;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
|
||||
namespace Chenfeng.MES.Archiver.Commands
|
||||
{
|
||||
[Command()]
|
||||
public class MysqlCommand : ICommand
|
||||
{
|
||||
[CommandParameter(0, Description = "数据库连接")]
|
||||
public string Connection { get; set; } = "";
|
||||
|
||||
public string TableSuffix { get; set; } = "new";
|
||||
|
||||
public DbConnection? Db { get; private set; }
|
||||
|
||||
public Action<string> Print { get; set; } = (text) => { };
|
||||
|
||||
[CommandOption("legacy", Description = "旧版MES")]
|
||||
public bool Legacy { get; set; } = false;
|
||||
|
||||
[CommandOption("replace", Description = "替换表")]
|
||||
public bool Replace { get; set; } = false;
|
||||
|
||||
[CommandOption("restore", Description = "回复表")]
|
||||
public bool Restore { get; set; } = false;
|
||||
|
||||
[CommandOption("timeout", Description = "sql命令超时时间")]
|
||||
public int Timeout { get; set; } = 3;
|
||||
|
||||
|
||||
|
||||
public ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
Print = (text) => console.Output.WriteLine($"{DateTime.Now.ToLongTimeString()} {text}");
|
||||
|
||||
var connBuilder = new MySqlConnectionStringBuilder(this.Connection);
|
||||
connBuilder.SslMode = MySqlSslMode.None;
|
||||
connBuilder.CharacterSet = "utf8";
|
||||
|
||||
var starMonth = DateTime.Now.AddMonths(-12).ToString("yyyyMM");
|
||||
|
||||
SqlMapper.Settings.CommandTimeout = 60 * Timeout;
|
||||
|
||||
if (Restore)
|
||||
{
|
||||
console.Output.WriteLine("还原备份表");
|
||||
}
|
||||
else
|
||||
{
|
||||
console.Output.WriteLine($"拷贝"+( Legacy ? "旧" :"新")+"版表数据"+(Replace?"并替换":""));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Db = new MySqlConnection(connBuilder.ConnectionString);
|
||||
|
||||
Db.Open();
|
||||
if (Legacy)
|
||||
{
|
||||
CopyMesLegacyTables(starMonth);
|
||||
}
|
||||
else
|
||||
{
|
||||
CopyMesTables(starMonth);
|
||||
}
|
||||
|
||||
|
||||
Print("操作成功");
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
console.Output.WriteLine(ex.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
Db?.Close();
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
private void CopyMesTables(string starMonth)
|
||||
{
|
||||
CopyStep((table, newTable) =>
|
||||
{
|
||||
CopyData(table, newTable, "LEFT(orderno,6) >= @starMonth", new { starMonth });
|
||||
}, "order", "order_box_block", "order_data_block", "order_data_goods", "order_data_parts", "order_item", "order_module_extra", "order_module_item", "order_package");
|
||||
|
||||
|
||||
CopyStep((tProcess, newProcess) =>
|
||||
{
|
||||
CopyData(tProcess, newProcess, "LEFT(orderno,6) >= @starMonth", new { starMonth });
|
||||
CopyStep((table, newTable) =>
|
||||
{
|
||||
CopyChildData(table, newTable, newProcess, "parent.ID = child.OrderProcessID");
|
||||
}, "order_process_step_item", "order_process_step");
|
||||
}, "order_process");
|
||||
|
||||
|
||||
|
||||
CopyStep((table, newTable) =>
|
||||
{
|
||||
CopyData(table, newTable, "LEFT(DATE_FORMAT(CreateTime,'%Y%m'),6) >= @starMonth", new { starMonth });
|
||||
}, "simple_plan_order");
|
||||
|
||||
|
||||
CopyStep((parent, newParent) =>
|
||||
{
|
||||
CopyData(parent, newParent, "LEFT(DATE_FORMAT(CreateTime,'%Y%m'),6) >= @starMonth", new { starMonth });
|
||||
CopyStep((child, newChild) =>
|
||||
{
|
||||
CopyChildData(child, newChild, newParent, "parent.ID = child.ID");
|
||||
}, "order_block_plan_result");
|
||||
}, "order_block_plan");
|
||||
|
||||
//CopyStep((table, newTable) =>
|
||||
//{
|
||||
// CopyData(table, newTable, "concat('20',left(id,4)) >= @starMonth ", new { starMonth });
|
||||
//}, "order_scrap_board");
|
||||
}
|
||||
|
||||
private void CopyMesLegacyTables(string starMonth)
|
||||
{
|
||||
CopyStep((order, newOrder) =>
|
||||
{
|
||||
CopyData(order, newOrder, "LEFT(DATE_FORMAT(SaleDate,'%Y%m'),6) >= @starMonth", new { starMonth });
|
||||
|
||||
CopyStep((child, newChild) =>
|
||||
{
|
||||
CopyChildData(child, newChild, newOrder, "parent.orderno=child.orderno");
|
||||
}, "SaleOrderItem", "saleblock", "saleobject", "saleorderobject", "saleorderoffer", "saleorderpackage", "saleblockobjids", "saleobjectobjids", "saleorder_block_cadmodelinfo", "saleorderblockbaseposition",
|
||||
"saleordergoodsinfo", "saleorder_block_point", "saleorder_block_pointinfo", "orderprocess", "orderprocessstep", "orderprocessstepitem");
|
||||
|
||||
}, "saleorder");
|
||||
|
||||
|
||||
CopyStep((plan, newPlan) =>
|
||||
{
|
||||
CopyData(plan, newPlan, "LEFT(DATE_FORMAT(createtime,'%Y%m'),6) >= @starMonth", new { starMonth });
|
||||
|
||||
CopyStep((child, newChild) =>
|
||||
{
|
||||
CopyChildData(child, newChild, newPlan, "parent.id=child.id");
|
||||
}, "orderblockprocessplanplaceresult");
|
||||
}, "orderblockprocessplan");
|
||||
}
|
||||
|
||||
private void CopyData(string table, string newTable, string where, object param)
|
||||
{
|
||||
Db.Execute($"INSERT INTO `{newTable}` SELECT * FROM `{table}` WHERE {where}", param);
|
||||
}
|
||||
private void CopyChildData(string table, string newTable, string parentTable, string condition)
|
||||
{
|
||||
Db.Execute($"INSERT INTO `{newTable}` SELECT child.* FROM `{parentTable}` parent join `{table}` child on {condition} ");
|
||||
}
|
||||
|
||||
private void CopyStep(Action<string, string> step, params string[] tables)
|
||||
{
|
||||
var list = tables.Select(table => new
|
||||
{
|
||||
Table = table,
|
||||
NewTable = table + "_" + this.TableSuffix
|
||||
});
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
if (Restore)
|
||||
{
|
||||
Db.Execute($"DROP TABLE IF EXISTS `{item.Table}`");
|
||||
Db.Execute($"RENAME TABLE `{item.Table}_bak` TO `{item.Table}`");
|
||||
}
|
||||
else
|
||||
{
|
||||
Db.Execute($"DROP TABLE IF EXISTS `{item.NewTable}`");
|
||||
Db.Execute($"CREATE TABLE `{item.NewTable}` LIKE `{item.Table}`"); // IF NOT EXISTS
|
||||
|
||||
Print(item.NewTable + " 创建完成");
|
||||
step(item.Table, item.NewTable);
|
||||
Print(item.NewTable + " 拷贝完成");
|
||||
|
||||
if (Replace)
|
||||
{
|
||||
Db.Execute($"RENAME TABLE `{item.Table}` TO `{item.Table}_bak`");
|
||||
Db.Execute($"RENAME TABLE `{item.NewTable}` TO `{item.Table}`");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
11
Chenfeng.MES.Archiver/Program.cs
Normal file
11
Chenfeng.MES.Archiver/Program.cs
Normal file
@ -0,0 +1,11 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
|
||||
using CliFx;
|
||||
|
||||
//Console.WriteLine("Hello, World!");
|
||||
|
||||
await new CliApplicationBuilder()
|
||||
.AddCommandsFromThisAssembly()
|
||||
.Build()
|
||||
.RunAsync(args);
|
13
Chenfeng.MES.Archiver/Properties/launchSettings.json
Normal file
13
Chenfeng.MES.Archiver/Properties/launchSettings.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"profiles": {
|
||||
"WSL": {
|
||||
"commandName": "WSL2",
|
||||
"environmentVariables": {},
|
||||
"distributionName": ""
|
||||
},
|
||||
"copy-table": {
|
||||
"commandName": "Project",
|
||||
"commandLineArgs": "Server=192.168.1.127;UserId=root;Password=ruixinjie!@#123;Database=cferp_test;Port=3306;"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
12
Chenfeng.MES.MysqlArchiver/DbContext.cs
Normal file
12
Chenfeng.MES.MysqlArchiver/DbContext.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Chenfeng.MES.MysqlArchiver
|
||||
{
|
||||
internal class DbContext
|
||||
{
|
||||
}
|
||||
}
|
11
MES-Shell/Chenfeng.MES.Shell.csproj
Normal file
11
MES-Shell/Chenfeng.MES.Shell.csproj
Normal file
@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RootNamespace>Chenfeng.MES.Shell</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
2
MES-Shell/Program.cs
Normal file
2
MES-Shell/Program.cs
Normal file
@ -0,0 +1,2 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
Console.WriteLine("Hello, World!");
|
25
MES-Toolkit.sln
Normal file
25
MES-Toolkit.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32014.148
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chenfeng.MES.Archiver", "Chenfeng.MES.Archiver\Chenfeng.MES.Archiver.csproj", "{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {98DE2A94-0D14-4190-810A-75DE119C7113}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Loading…
Reference in New Issue
Block a user