292 lines
14 KiB
C#
292 lines
14 KiB
C#
using Models;
|
||
using MySql.Data.MySqlClient;
|
||
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace Service
|
||
{
|
||
public class InitDB
|
||
{
|
||
public static string ConnectionString;
|
||
public static void initDB(string dbConStr,bool dropTable=false)
|
||
{
|
||
ConnectionString = dbConStr;
|
||
ConnectionConfig connectionConfig = new ConnectionConfig() {
|
||
ConnectionString = dbConStr,
|
||
DbType = DbType.MySql,
|
||
IsAutoCloseConnection = true
|
||
};
|
||
connectionConfig.ConnectionString = dbConStr;
|
||
//创建数据库对象
|
||
using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) {
|
||
db.Aop.OnLogExecuting = (sql, pars) =>
|
||
{
|
||
Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
|
||
};
|
||
|
||
//create db
|
||
db.DbMaintenance.CreateDatabase();
|
||
|
||
//===建表
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Right", false)) db.DbMaintenance.DropTable("Right");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Role", false)) db.DbMaintenance.DropTable("Role");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("RoleRightMap", false)) db.DbMaintenance.DropTable("RoleRightMap");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("User", false)) db.DbMaintenance.DropTable("Users");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Classes", false)) db.DbMaintenance.DropTable("Classes");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Product", false)) db.DbMaintenance.DropTable("Product");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("QualifiedLimit", false)) db.DbMaintenance.DropTable("QualifiedLimit");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("GradeLimit", false)) db.DbMaintenance.DropTable("GradeLimit");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Records", false)) db.DbMaintenance.DropTable("Records");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("DefectInfo", false)) db.DbMaintenance.DropTable("DefectInfo");
|
||
|
||
//===添加与更新表
|
||
db.CodeFirst.InitTables<Models.Right>();
|
||
db.CodeFirst.InitTables<Models.Role>();
|
||
db.CodeFirst.InitTables<Models.RoleRightMap>();
|
||
db.CodeFirst.InitTables<Models.User>();
|
||
db.CodeFirst.InitTables<Models.Classes>();
|
||
db.CodeFirst.InitTables<Models.Product>();
|
||
db.CodeFirst.InitTables<Models.QualifiedLimit>();
|
||
db.CodeFirst.InitTables<Models.GradeLimit>();
|
||
db.CodeFirst.InitTables<Models.Records>();
|
||
db.CodeFirst.InitTables<Models.DefectInfo>();
|
||
|
||
//更改表数据
|
||
try
|
||
{
|
||
db.Ado.ExecuteCommand("drop index index_Records_ProductId_SerialNum ON table_name");//删除索引
|
||
}
|
||
catch { }
|
||
//===初始数据 注意*********会清空这些表数据
|
||
//清空表数据
|
||
//db.DbMaintenance.TruncateTable<User>();
|
||
//db.DbMaintenance.TruncateTable<Role>();
|
||
if (db.Queryable<Models.User>().Count() < 1 && db.Queryable<Models.Role>().Count() < 1)
|
||
{
|
||
db.InsertNav(new Models.User()
|
||
{
|
||
Code = "admin",
|
||
Name = "管理员",
|
||
Password = GetMD5(""),
|
||
RoleInfo = new Models.Role() { Code = "admin", Name = "管理员", ModifyUserCode = "admin", CreateUserCode = "admin" },//多表添加
|
||
CreateUserCode = "admin",
|
||
ModifyUserCode = "admin",
|
||
}).Include(x => x.RoleInfo)
|
||
.ExecuteCommand();
|
||
|
||
db.Insertable(new Models.Role()
|
||
{
|
||
Code = "user",
|
||
Name = "操作员",
|
||
CreateUserCode = "admin",
|
||
ModifyUserCode = "admin",
|
||
}).ExecuteCommand();
|
||
}
|
||
//===权限
|
||
//db.DbMaintenance.TruncateTable<RoleRightMap>();
|
||
//db.DbMaintenance.TruncateTable<Right>();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Step").Count() < 1) db.Insertable(new Models.Right("Step", "流程管理")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Product").Count() < 1) db.Insertable(new Models.Right("Product", "产品管理")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Debug").Count() < 1) db.Insertable(new Models.Right("Debug", "设备调试")).ExecuteCommand();
|
||
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Order").Count() < 1) db.Insertable(new Models.Right("Order", "报表查询")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Statistics").Count() < 1) db.Insertable(new Models.Right("Statistics", "统计分析")).ExecuteCommand();
|
||
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Role").Count() < 1) db.Insertable(new Models.Right("Role", "角色管理")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "User").Count() < 1) db.Insertable(new Models.Right("User", "用户管理")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "Right").Count() < 1) db.Insertable(new Models.Right("Right", "权限管理")).ExecuteCommand();
|
||
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "HeightBase").Count() < 1) db.Insertable(new Models.Right("HeightBase", "高度Base校正")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "SysSetting").Count() < 1) db.Insertable(new Models.Right("SysSetting", "系统设置")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "CmdSetting").Count() < 1) db.Insertable(new Models.Right("CmdSetting", "指令设置")).ExecuteCommand();
|
||
//if (db.Queryable<Models.Right>().Where(m => m.Code == "PTSetting").Count() < 1) db.Insertable(new Models.Right("PTSetting", "点位设置")).ExecuteCommand();
|
||
|
||
}
|
||
}
|
||
|
||
public static void SendServerDB(string dbConStr, Records record, bool dropTable = false)
|
||
{
|
||
//ConnectionString = dbConStr;
|
||
int errStep = 0;
|
||
try
|
||
{
|
||
var db = new SqlSugarClient(new ConnectionConfig()
|
||
{
|
||
DbType = SqlSugar.DbType.MySql,
|
||
//InitKeyType = InitKeyType.Attribute,
|
||
IsAutoCloseConnection = true,
|
||
ConnectionString = dbConStr
|
||
});
|
||
errStep = 1;
|
||
//var pt = db.Queryable<Product>()
|
||
// //.Includes(m => m.ClassesInfo)
|
||
// .Includes(m => m.QualifiedLimitList)
|
||
// .Includes(m => m.GradeLimitList)
|
||
// .First(m => m.Code == record.ProductInfo.Code);
|
||
//errStep = 2;
|
||
//if (pt == null)
|
||
//{
|
||
// errStep = 3;
|
||
// db.InsertNav<Product>(record.ProductInfo)
|
||
// //.Include(a => a.ProductParamsList)//.ThenInclude(z1 => z1.RoomList) //插入2层 Root->ShoolA->RoomList
|
||
// .Include(m => m.QualifiedLimitList)
|
||
// .Include(m => m.GradeLimitList)
|
||
// .ExecuteCommand();
|
||
//}
|
||
//else
|
||
//{
|
||
// errStep = 4;
|
||
// //db.DeleteNav<Product>(pt)
|
||
// //.Include(m => m.QualifiedLimitList)
|
||
// //.Include(m => m.GradeLimitList)
|
||
// //.ExecuteCommand();
|
||
// record.ProductInfo.Id = pt.Id;
|
||
// db.UpdateNav<Product>(record.ProductInfo)
|
||
// .Include(m => m.QualifiedLimitList)
|
||
// .Include(m => m.GradeLimitList)
|
||
// .ExecuteCommand();
|
||
//}
|
||
errStep = 5;
|
||
//var newpd = db.Queryable<Product>()
|
||
// .Includes(m => m.QualifiedLimitList)
|
||
// .Includes(m => m.GradeLimitList)
|
||
// .First(m => m.Code == record.ProductInfo.Code);
|
||
|
||
//record.ProductId = newpd.Id;
|
||
db.InsertNav(record)
|
||
.Include(m => m.DefectInfoList)
|
||
.ExecuteCommand();
|
||
/*
|
||
ConnectionConfig connectionConfig = new ConnectionConfig()
|
||
{
|
||
ConnectionString = dbConStr,
|
||
DbType = DbType.MySql,
|
||
IsAutoCloseConnection = true
|
||
};
|
||
connectionConfig.ConnectionString = dbConStr;
|
||
//创建数据库对象
|
||
using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
|
||
{
|
||
db.Aop.OnLogExecuting = (sql, pars) =>
|
||
{
|
||
Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
|
||
};
|
||
|
||
//create db
|
||
db.DbMaintenance.CreateDatabase();
|
||
|
||
//===建表
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Product", false)) db.DbMaintenance.DropTable("Product");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("QualifiedLimit", false)) db.DbMaintenance.DropTable("QualifiedLimit");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("GradeLimit", false)) db.DbMaintenance.DropTable("GradeLimit");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("Records", false)) db.DbMaintenance.DropTable("Records");
|
||
if (dropTable && db.DbMaintenance.IsAnyTable("DefectInfo", false)) db.DbMaintenance.DropTable("DefectInfo");
|
||
|
||
//===添加与更新表
|
||
try
|
||
{
|
||
db.CodeFirst.InitTables<Models.Product>();
|
||
db.CodeFirst.InitTables<Models.QualifiedLimit>();
|
||
db.CodeFirst.InitTables<Models.GradeLimit>();
|
||
db.CodeFirst.InitTables<Models.Records>();
|
||
db.CodeFirst.InitTables<Models.DefectInfo>();
|
||
}
|
||
catch { }
|
||
//更改表数据
|
||
try
|
||
{
|
||
db.Ado.ExecuteCommand("drop index index_Records_ProductId_SerialNum ON table_name");//删除索引
|
||
}
|
||
catch { }
|
||
//数据插入表
|
||
db.Insertable(record).ExecuteCommand();
|
||
db.Insertable(record.DefectInfoList).ExecuteCommand();
|
||
db.Insertable(record.ProductInfo).ExecuteCommand();
|
||
db.Insertable(record.ProductInfo.QualifiedLimitList).ExecuteCommand();
|
||
db.Insertable(record.ProductInfo.GradeLimitList).ExecuteCommand();
|
||
|
||
}
|
||
*/
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw new Exception($"err{errStep}:{ex.Message}");
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 备份DB (还原:mysql -uroot -p < d:\dbName.sql)
|
||
/// </summary>
|
||
/// <param name="result"></param>
|
||
public static void BackupDataBase(string outFilePath)
|
||
{
|
||
using (var conn = new MySqlConnection(ConnectionString))
|
||
{
|
||
using (var cmd = new MySqlCommand())
|
||
{
|
||
using (MySqlBackup mb = new MySqlBackup(cmd))
|
||
{
|
||
// 设置数据库连接
|
||
cmd.Connection = conn;
|
||
cmd.Connection.Open();
|
||
// 导出数据库到文件
|
||
mb.ExportToFile(outFilePath);
|
||
conn.Close();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 还原数据库
|
||
/// </summary>
|
||
/// <param name="strPath">指定还原文件***.sql的绝对路径</param>
|
||
/// <param name="dbName">还原到指定数据库</param>
|
||
/// <returns></returns>
|
||
public static bool RestoreDB(string strPath, string dbName = "LeatherDB")
|
||
{
|
||
bool isImport = false;
|
||
if (string.IsNullOrEmpty(strPath))
|
||
{
|
||
return isImport;
|
||
}
|
||
|
||
using (var conn = new MySqlConnection(ConnectionString))
|
||
{
|
||
using (var cmd = new MySqlCommand())
|
||
{
|
||
using (MySqlBackup backCmd = new MySqlBackup(cmd))
|
||
{
|
||
// 设置数据库连接
|
||
cmd.Connection = conn;
|
||
cmd.Connection.Open();
|
||
//导入备份
|
||
//backCmd.ImportInfo.TargetDatabase = dbName;//前提条件 当前 myconn 中的用户有建库等系列权限
|
||
//backCmd.ImportInfo.DatabaseDefaultCharSet = "utf8";
|
||
backCmd.ImportFromFile(strPath);
|
||
|
||
conn.Close();
|
||
isImport = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
return isImport;
|
||
}
|
||
private static string GetMD5(string str)
|
||
{
|
||
byte[] data = Encoding.UTF8.GetBytes(str);
|
||
data = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(data);
|
||
|
||
string ret = "";
|
||
for (int i = 0; i < data.Length; i++)
|
||
{
|
||
ret += data[i].ToString("x1").PadLeft(2, '0');//ToString("x1"):转换为16进制
|
||
}
|
||
return ret.ToUpper();
|
||
}
|
||
}
|
||
}
|