geboshi_V1/LeatherProject/Service/InitDB.cs

292 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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