版博士V2.0程序
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using Models;
  2. using MySql.Data.MySqlClient;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace Service
  12. {
  13. public class InitDB
  14. {
  15. public static string ConnectionString;
  16. public static void initDB(bool dropTable=false)
  17. {
  18. ConnectionConfig connectionConfig = new ConnectionConfig() {
  19. ConnectionString = ConnectionString,
  20. DbType = DbType.MySql,
  21. IsAutoCloseConnection = true
  22. };
  23. //创建数据库对象
  24. using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
  25. {
  26. db.Aop.OnLogExecuting = (sql, pars) =>
  27. {
  28. Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
  29. };
  30. //create db
  31. db.DbMaintenance.CreateDatabase();
  32. //db.DbMaintenance.TruncateTable<Order>();//删除记录
  33. //===建表
  34. if (dropTable && db.DbMaintenance.IsAnyTable("Classes", false)) db.DbMaintenance.DropTable("Classes");
  35. if (dropTable && db.DbMaintenance.IsAnyTable("Right", false)) db.DbMaintenance.DropTable("Right");
  36. if (dropTable && db.DbMaintenance.IsAnyTable("Role", false)) db.DbMaintenance.DropTable("Role");
  37. if (dropTable && db.DbMaintenance.IsAnyTable("RoleRightMap", false)) db.DbMaintenance.DropTable("RoleRightMap");
  38. if (dropTable && db.DbMaintenance.IsAnyTable("User", false)) db.DbMaintenance.DropTable("Users");
  39. if (dropTable && db.DbMaintenance.IsAnyTable("Step", false)) db.DbMaintenance.DropTable("Steps");
  40. if (dropTable && db.DbMaintenance.IsAnyTable("StepProcess", false)) db.DbMaintenance.DropTable("StepProcess");
  41. if (dropTable && db.DbMaintenance.IsAnyTable("Product", false)) db.DbMaintenance.DropTable("Product");
  42. if (dropTable && db.DbMaintenance.IsAnyTable("Attachment", false)) db.DbMaintenance.DropTable("Attachment");
  43. if (dropTable && db.DbMaintenance.IsAnyTable("BatchHistory", false)) db.DbMaintenance.DropTable("BatchHistory");
  44. if (dropTable && db.DbMaintenance.IsAnyTable("QualifiedCriterion", false)) db.DbMaintenance.DropTable("QualifiedCriterion");
  45. if (dropTable && db.DbMaintenance.IsAnyTable("ProductReviseProcess", false)) db.DbMaintenance.DropTable("ProductReviseProcess");//????ProductReviseProcessList
  46. if (dropTable && db.DbMaintenance.IsAnyTable("ProductAssistProcess", false)) db.DbMaintenance.DropTable("ProductAssistProcess");
  47. if (dropTable && db.DbMaintenance.IsAnyTable("Order", false)) db.DbMaintenance.DropTable("Order");
  48. if (dropTable && db.DbMaintenance.IsAnyTable("OrderHistory", false)) db.DbMaintenance.DropTable("OrderHistory");
  49. if (dropTable && db.DbMaintenance.IsAnyTable("SizeTagData", false)) db.DbMaintenance.DropTable("SizeTagData");
  50. if (dropTable && db.DbMaintenance.IsAnyTable("DefectInfo", false)) db.DbMaintenance.DropTable("DefectInfo");
  51. //2023-12-25 新建点位表格
  52. if (dropTable && db.DbMaintenance.IsAnyTable("TestDefectPoints", false)) db.DbMaintenance.DropTable("TestDefectPoints");
  53. if (dropTable && db.DbMaintenance.IsAnyTable("SizeDefectInfo", false)) db.DbMaintenance.DropTable("SizeDefectInfo");
  54. if (dropTable && db.DbMaintenance.IsAnyTable("SizeDefectAverageInfo", false)) db.DbMaintenance.DropTable("SizeDefectAverageInfo");
  55. if (dropTable && db.DbMaintenance.IsAnyTable("PrintInfo", false)) db.DbMaintenance.DropTable("PrintInfo");
  56. //2024-04-08
  57. if (dropTable && db.DbMaintenance.IsAnyTable("DefectCntInfo", false)) db.DbMaintenance.DropTable("DefectCntInfo");
  58. //===添加与更新表
  59. db.CodeFirst.InitTables<Models.Classes>();
  60. db.CodeFirst.InitTables<Models.Right>();
  61. db.CodeFirst.InitTables<Models.Role>();
  62. db.CodeFirst.InitTables<Models.RoleRightMap>();
  63. db.CodeFirst.InitTables<Models.User>();
  64. db.CodeFirst.InitTables<Models.Step>();
  65. db.CodeFirst.InitTables<Models.StepProcess>();
  66. db.CodeFirst.InitTables<Models.Product>();
  67. db.CodeFirst.InitTables<Models.Attachment>();
  68. db.CodeFirst.InitTables<Models.BatchHistory>();
  69. db.CodeFirst.InitTables<Models.QualifiedCriterion>();
  70. db.CodeFirst.InitTables<Models.ProductProcess>();
  71. db.CodeFirst.InitTables<Models.ProductReviseProcess>();
  72. db.CodeFirst.InitTables<Models.ProductAssistProcess>();
  73. db.CodeFirst.InitTables<Models.Order>();
  74. db.CodeFirst.InitTables<Models.OrderHistory>();
  75. db.CodeFirst.InitTables<Models.SizeTagData>();
  76. db.CodeFirst.InitTables<Models.DefectInfo>();
  77. //2023-12-25 新建点位表格
  78. db.CodeFirst.InitTables<Models.TestDefectPoints>();
  79. db.CodeFirst.InitTables<Models.SizeDefectInfo>();
  80. db.CodeFirst.InitTables<Models.SizeDefectAverageInfo>();
  81. db.CodeFirst.InitTables<Models.PrintInfo>();
  82. //2024-04-08
  83. db.CodeFirst.InitTables<Models.DefectCntInfo>();
  84. //更新新列数据
  85. //db.Ado.ExecuteCommand("update Step set Tag=0 where Tag is null");
  86. //try
  87. //{
  88. // db.Ado.ExecuteCommand("ALTER TABLE Product DROP COLUMN HoleCountId");
  89. //}
  90. //catch { }
  91. //try {
  92. // db.Ado.ExecuteCommand("ALTER TABLE Product DROP COLUMN HoleCount");
  93. //}
  94. //catch { }
  95. //===初始数据 注意*********会清空这些表数据
  96. //User
  97. db.DbMaintenance.TruncateTable<User>();
  98. db.DbMaintenance.TruncateTable<Role>();
  99. if (db.Queryable<Models.User>().Count() < 1)
  100. {
  101. //db.Insertable(new Models.User() { Code = "admin", Name = "管理员", RoleId = id }).ExecuteCommand();
  102. db.InsertNav(new Models.User()
  103. {
  104. Code = "admin",
  105. Name = "管理员",
  106. Password = GetMD5(""),
  107. RoleInfo = new Models.Role() { Code = "admin", Name = "管理员", ModifyUserCode = "admin", CreateUserCode = "admin" },//多表添加
  108. CreateUserCode = "admin",
  109. ModifyUserCode = "admin",
  110. }).Include(x => x.RoleInfo)
  111. .ExecuteCommand();
  112. }
  113. //===权限
  114. db.DbMaintenance.TruncateTable<RoleRightMap>();
  115. db.DbMaintenance.TruncateTable<Right>();
  116. if (db.Queryable<Models.Right>().Where(m => m.Code == "Step").Count() < 1) db.Insertable(new Models.Right("Step", "流程管理")).ExecuteCommand();
  117. if (db.Queryable<Models.Right>().Where(m => m.Code == "Product").Count() < 1) db.Insertable(new Models.Right("Product", "产品管理")).ExecuteCommand();
  118. if (db.Queryable<Models.Right>().Where(m => m.Code == "Debug").Count() < 1) db.Insertable(new Models.Right("Debug", "设备调试")).ExecuteCommand();
  119. if (db.Queryable<Models.Right>().Where(m => m.Code == "Order").Count() < 1) db.Insertable(new Models.Right("Order", "报表查询")).ExecuteCommand();
  120. if (db.Queryable<Models.Right>().Where(m => m.Code == "Statistics").Count() < 1) db.Insertable(new Models.Right("Statistics", "统计分析")).ExecuteCommand();
  121. if (db.Queryable<Models.Right>().Where(m => m.Code == "Role").Count() < 1) db.Insertable(new Models.Right("Role", "角色管理")).ExecuteCommand();
  122. if (db.Queryable<Models.Right>().Where(m => m.Code == "User").Count() < 1) db.Insertable(new Models.Right("User", "用户管理")).ExecuteCommand();
  123. //if (db.Queryable<Models.Right>().Where(m => m.Code == "Right").Count() < 1) db.Insertable(new Models.Right("Right", "权限管理")).ExecuteCommand();
  124. if (db.Queryable<Models.Right>().Where(m => m.Code == "HeightBase").Count() < 1) db.Insertable(new Models.Right("HeightBase", "高度Base校正")).ExecuteCommand();
  125. if (db.Queryable<Models.Right>().Where(m => m.Code == "SysSetting").Count() < 1) db.Insertable(new Models.Right("SysSetting", "系统设置")).ExecuteCommand();
  126. if (db.Queryable<Models.Right>().Where(m => m.Code == "CmdSetting").Count() < 1) db.Insertable(new Models.Right("CmdSetting", "指令设置")).ExecuteCommand();
  127. if (db.Queryable<Models.Right>().Where(m => m.Code == "PTSetting").Count() < 1) db.Insertable(new Models.Right("PTSetting", "点位设置")).ExecuteCommand();
  128. //==触发器 6
  129. string rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  130. string sqlPath = rootPath + "\\SqlPath\\";
  131. if (Directory.Exists(sqlPath))
  132. {
  133. int count;
  134. string triggerName = "trigger_order_update";
  135. if (File.Exists(sqlPath + triggerName+".sql"))
  136. {
  137. count = db.Ado.GetInt($"SELECT count(*) FROM information_schema.TRIGGERS where TRIGGER_NAME = '{triggerName}'");
  138. if (count > 0)
  139. db.Ado.ExecuteCommand($"drop trigger {triggerName}");
  140. db.Ado.ExecuteCommand(File.ReadAllText(sqlPath + triggerName + ".sql"));
  141. }
  142. }
  143. //==清理垃圾数据
  144. db.Ado.ExecuteCommand($"delete from `Order` where ProductId not in (select id from product)");
  145. }
  146. }
  147. /// <summary>
  148. /// 备份DB (还原:mysql -uroot -p < d:\dbName.sql)
  149. /// </summary>
  150. /// <param name="result"></param>
  151. public static void BackupDataBase(string outFilePath)
  152. {
  153. using (var conn = new MySqlConnection(ConnectionString))
  154. {
  155. using (var cmd = new MySqlCommand())
  156. {
  157. using (MySqlBackup mb = new MySqlBackup(cmd))
  158. {
  159. // 设置数据库连接
  160. cmd.Connection = conn;
  161. cmd.Connection.Open();
  162. // 导出数据库到文件
  163. mb.ExportToFile(outFilePath);
  164. conn.Close();
  165. }
  166. }
  167. }
  168. }
  169. /// <summary>
  170. /// 还原数据库
  171. /// </summary>
  172. /// <param name="strPath">指定还原文件***.sql的绝对路径</param>
  173. /// <param name="dbName">还原到指定数据库</param>
  174. /// <returns></returns>
  175. public static bool RestoreDB(string strPath, string dbName = "productiondb")
  176. {
  177. bool isImport = false;
  178. if (string.IsNullOrEmpty(strPath))
  179. {
  180. return isImport;
  181. }
  182. using (var conn = new MySqlConnection(ConnectionString))
  183. {
  184. using (var cmd = new MySqlCommand())
  185. {
  186. using (MySqlBackup backCmd = new MySqlBackup(cmd))
  187. {
  188. // 设置数据库连接
  189. cmd.Connection = conn;
  190. cmd.Connection.Open();
  191. //导入备份
  192. //backCmd.ImportInfo.TargetDatabase = dbName;//前提条件 当前 myconn 中的用户有建库等系列权限
  193. //backCmd.ImportInfo.DatabaseDefaultCharSet = "utf8";
  194. backCmd.ImportFromFile(strPath);
  195. conn.Close();
  196. isImport = true;
  197. }
  198. }
  199. }
  200. return isImport;
  201. }
  202. private static string GetMD5(string str)
  203. {
  204. byte[] data = Encoding.UTF8.GetBytes(str);
  205. data = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(data);
  206. string ret = "";
  207. for (int i = 0; i < data.Length; i++)
  208. {
  209. ret += data[i].ToString("x1").PadLeft(2, '0');//ToString("x1"):转换为16进制
  210. }
  211. return ret.ToUpper();
  212. }
  213. }
  214. }