DatabaseHelper.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. using LocalhostMES.Core;
  2. using LocalhostMES.Enums;
  3. using LocalhostMES.Models;
  4. using SqlSugar;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Runtime.InteropServices;
  9. using System.Security.Claims;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using static Org.BouncyCastle.Pqc.Crypto.Utilities.PqcOtherInfoGenerator;
  13. namespace LocalhostMES.DataBase
  14. {
  15. public class DatabaseHelper
  16. {
  17. private static void NotifyChanged(MesDataScope scope)
  18. {
  19. MesDataChangedNotifier.Raise(scope);
  20. }
  21. public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
  22. {
  23. //192.168.1.100
  24. ConnectionString = "Database=LingPaoProject; Data Source=127.0.0.1; Port=3306;User Id=root; Password=root;Charset=utf8;AllowPublicKeyRetrieval=True;SslMode=None;",//连接符字串
  25. DbType = SqlSugar.DbType.MySql,//数据库类型
  26. IsAutoCloseConnection = true //不设成true要手动close
  27. },
  28. db =>
  29. {
  30. db.Aop.OnLogExecuting = (sql, pars) =>
  31. {
  32. Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));
  33. };
  34. });
  35. public static void CreataDataTable()
  36. {
  37. try
  38. {
  39. Db.CodeFirst.InitTables<SnInfo>();
  40. Db.CodeFirst.InitTables<BindRecord>();
  41. Db.CodeFirst.InitTables<ProcessRecord>();
  42. Db.CodeFirst.InitTables<ParkingLot>();
  43. Db.CodeFirst.InitTables<WorkOrderInfo>();
  44. Db.CodeFirst.InitTables<LocalhostPartInfo>();
  45. EnsureLocalhostPartInfoColumns();
  46. // 您的数据库操作代码
  47. }
  48. catch (AggregateException ex)
  49. {
  50. // 遍历所有内部异常
  51. foreach (var inner in ex.InnerExceptions)
  52. {
  53. Console.WriteLine($"内部异常: {inner.Message}");
  54. Console.WriteLine(inner.StackTrace);
  55. }
  56. // 或者只取第一个
  57. // var actualException = ex.InnerException;
  58. }
  59. catch (SqlSugarException ex)
  60. {
  61. Console.WriteLine($"错误消息:{ex.Message}");
  62. Console.WriteLine($"内部异常:{ex.InnerException?.Message}");
  63. Console.WriteLine($"堆栈:{ex.StackTrace}");
  64. // 也可以记录日志
  65. }
  66. catch (Exception e)
  67. {
  68. }
  69. }
  70. private static void EnsureLocalhostPartInfoColumns()
  71. {
  72. Db.Ado.ExecuteCommand("ALTER TABLE `LocalhostPartInfo` ADD COLUMN IF NOT EXISTS `MaterialCode` varchar(128) NULL");
  73. Db.Ado.ExecuteCommand("ALTER TABLE `LocalhostPartInfo` ADD COLUMN IF NOT EXISTS `StationCode` varchar(128) NULL");
  74. Db.Ado.ExecuteCommand("ALTER TABLE `LocalhostPartInfo` ADD COLUMN IF NOT EXISTS `PositionCode` varchar(128) NULL");
  75. Db.Ado.ExecuteCommand("ALTER TABLE `LocalhostPartInfo` ADD COLUMN IF NOT EXISTS `PartInfoName` varchar(200) NULL");
  76. }
  77. public static int GetProductProductionRecords(string sn)
  78. {
  79. try
  80. {
  81. return Db.Queryable<ProductionToStation>().Where(it => it.SN == sn).ToList().Count;
  82. }
  83. catch ( Exception ex )
  84. {
  85. LogHelper.WriteLogError("获取一条产品的生产记录至数据库时出错!", ex);
  86. }
  87. return 0;
  88. }
  89. public static List<WorkOrderInfo> SelectWorkOrderInfo(string workOrderNo = null)
  90. {
  91. if ( workOrderNo != null )
  92. {
  93. var single = Db.Queryable<WorkOrderInfo>()
  94. .Where(it => it.WorkOrderNo == workOrderNo)
  95. .Select(it => new WorkOrderInfo
  96. {
  97. OrderNo = it.OrderNo,
  98. LineCode = it.LineCode,
  99. CreateTime = it.CreateTime,
  100. EndTime = it.EndTime,
  101. IsLocalhost = it.IsLocalhost,
  102. MaterialCode = it.MaterialCode,
  103. MaterialName = it.MaterialName,
  104. PlannedQuantity = it.PlannedQuantity,
  105. StartTime = it.StartTime,
  106. Status = it.Status,
  107. WorkOrderNo = it.WorkOrderNo,
  108. CompletedQuantity = SqlFunc.Subqueryable<SnInfo>().Where(s => s.WorkOrderNo == it.WorkOrderNo&&s.IsUsed).Count()
  109. }).ToList();
  110. NormalizeWorkOrderStatus(single);
  111. return single;
  112. }
  113. else
  114. {
  115. var list = Db.Queryable<WorkOrderInfo>().
  116. Select(it=>new WorkOrderInfo
  117. {OrderNo=it.OrderNo,
  118. LineCode=it.LineCode,
  119. CreateTime=it.CreateTime,
  120. EndTime=it.EndTime,
  121. IsLocalhost=it.IsLocalhost,
  122. MaterialCode=it.MaterialCode,
  123. MaterialName=it.MaterialName,
  124. PlannedQuantity=it.PlannedQuantity,
  125. StartTime=it.StartTime,
  126. Status=it.Status,
  127. WorkOrderNo=it.WorkOrderNo,
  128. CompletedQuantity=SqlFunc.Subqueryable<SnInfo>().Where(s=>s.WorkOrderNo==it.WorkOrderNo && s.IsUsed).Count() }).ToList();
  129. NormalizeWorkOrderStatus(list);
  130. return list;
  131. }
  132. }
  133. private static void NormalizeWorkOrderStatus(List<WorkOrderInfo> workOrders)
  134. {
  135. if (workOrders == null || workOrders.Count == 0)
  136. {
  137. return;
  138. }
  139. var changed = false;
  140. foreach (var workOrder in workOrders)
  141. {
  142. if (workOrder.PlannedQuantity > 0 &&
  143. workOrder.CompletedQuantity >= workOrder.PlannedQuantity &&
  144. workOrder.Status != "6")
  145. {
  146. workOrder.Status = "6";
  147. Db.Updateable<WorkOrderInfo>()
  148. .SetColumns(it => new WorkOrderInfo { Status = "6" })
  149. .Where(it => it.WorkOrderNo == workOrder.WorkOrderNo)
  150. .ExecuteCommand();
  151. changed = true;
  152. }
  153. }
  154. if (changed)
  155. {
  156. NotifyChanged(MesDataScope.WorkOrder);
  157. }
  158. }
  159. public static bool InsertWorkOrderInfo(WorkOrderInfo info)
  160. {
  161. if ( Db.Storageable(info).ExecuteCommand() == 1 )
  162. {
  163. NotifyChanged(MesDataScope.WorkOrder);
  164. return true;
  165. }
  166. return false;
  167. }
  168. public static bool UpdateWorkOrderInfo(WorkOrderInfo info)
  169. {
  170. if ( Db.Updateable(info).Where(it => it.WorkOrderNo == info.WorkOrderNo).ExecuteCommand() == 1 )
  171. {
  172. NotifyChanged(MesDataScope.WorkOrder);
  173. return true;
  174. }
  175. return false;
  176. }
  177. public static bool DeleteWorkOrderInfo(WorkOrderInfo info)
  178. {
  179. if ( Db.Deleteable(info).Where(it => it.WorkOrderNo == info.WorkOrderNo).ExecuteCommand() == 1 )
  180. {
  181. NotifyChanged(MesDataScope.WorkOrder);
  182. return true;
  183. }
  184. return false;
  185. }
  186. public static List<SnInfo> SelectSnInfo(string workOrderNo = null, bool needused = false, bool isused = false)
  187. {
  188. if ( workOrderNo != null )
  189. {
  190. if ( needused )
  191. {
  192. return Db.Queryable<SnInfo>().Where(it => it.WorkOrderNo == workOrderNo && it.IsUsed == isused).ToList();
  193. }
  194. else
  195. {
  196. return Db.Queryable<SnInfo>().Where(it => it.WorkOrderNo == workOrderNo).ToList();
  197. }
  198. }
  199. else
  200. {
  201. return Db.Queryable<SnInfo>().ToList();
  202. }
  203. }
  204. public static bool InsertSnInfo(SnInfo info)
  205. {
  206. if ( Db.Storageable(info).ExecuteCommand() == 1 )
  207. {
  208. NotifyChanged(MesDataScope.Sn);
  209. return true;
  210. }
  211. return false;
  212. }
  213. public static bool InsertSnInfos(List<SnInfo> info)
  214. {
  215. if (Db.Storageable(info).ExecuteCommand() == info.Count)
  216. {
  217. NotifyChanged(MesDataScope.Sn);
  218. return true;
  219. }
  220. return false;
  221. }
  222. public static bool UpdateSnInfo(SnInfo info)
  223. {
  224. if ( Db.Updateable(info).Where(it => it.Sn == info.Sn).ExecuteCommand() == 1 )
  225. {
  226. NotifyChanged(MesDataScope.Sn);
  227. return true;
  228. }
  229. return false;
  230. }
  231. public static bool DeleteSnInfo(SnInfo info)
  232. {
  233. if ( Db.Deleteable(info).Where(it => it.Sn == info.Sn).ExecuteCommand() == 1 )
  234. {
  235. NotifyChanged(MesDataScope.Sn);
  236. return true;
  237. }
  238. return false;
  239. }
  240. public static List<BindRecord> SelectBindRecord(string Sn = null, string PartNum = null, string StationCode = null)
  241. {
  242. var query = Db.Queryable<BindRecord>();
  243. // 动态添加查询条件
  244. if ( !string.IsNullOrWhiteSpace(Sn) )
  245. {
  246. query = query.Where(it => it.Sn == Sn);
  247. }
  248. if ( !string.IsNullOrWhiteSpace(PartNum) )
  249. {
  250. query = query.Where(it => it.PartNum == PartNum);
  251. }
  252. if ( !string.IsNullOrWhiteSpace(StationCode) )
  253. {
  254. query = query.Where(it => it.StationCode == StationCode);
  255. }
  256. return query.ToList();
  257. }
  258. public static bool InsertBindRecord(BindRecord info)
  259. {
  260. if ( Db.Storageable(info).ExecuteCommand() == 1 )
  261. {
  262. NotifyChanged(MesDataScope.BindRecord);
  263. return true;
  264. }
  265. return false;
  266. }
  267. public static bool UpdateBindRecord(BindRecord info)
  268. {
  269. if ( Db.Updateable(info).Where(it => it.Sn == info.Sn).ExecuteCommand() == 1 )
  270. {
  271. NotifyChanged(MesDataScope.BindRecord);
  272. return true;
  273. }
  274. return false;
  275. }
  276. public static bool DeleteBindRecord(string sn = null)
  277. {
  278. if ( sn != null )
  279. {
  280. if ( Db.Deleteable<BindRecord>().Where(it => it.Sn == sn).ExecuteCommand() == 1 )
  281. {
  282. NotifyChanged(MesDataScope.BindRecord);
  283. return true;
  284. }
  285. }
  286. else
  287. {
  288. if ( Db.Deleteable<BindRecord>().ExecuteCommand() != 0 )
  289. {
  290. NotifyChanged(MesDataScope.BindRecord);
  291. return true;
  292. }
  293. }
  294. return false;
  295. }
  296. public static List<ProcessRecord> SelectProcessRecord(string Sn = null, string StationCode = null)
  297. {
  298. var query = Db.Queryable<ProcessRecord>();
  299. // 动态添加查询条件
  300. if ( !string.IsNullOrWhiteSpace(Sn) )
  301. {
  302. query = query.Where(it => it.Sn == Sn);
  303. }
  304. if ( !string.IsNullOrWhiteSpace(StationCode) )
  305. {
  306. query = query.Where(it => it.Station == StationCode);
  307. }
  308. return query.ToList();
  309. }
  310. public static bool InsertProcessRecord(ProcessRecord info)
  311. {
  312. if ( Db.Storageable(info).ExecuteCommand() == 1 )
  313. {
  314. NotifyChanged(MesDataScope.ProcessRecord);
  315. return true;
  316. }
  317. return false;
  318. }
  319. public static bool UpdateProcessRecord(ProcessRecord info)
  320. {
  321. if ( Db.Updateable(info).Where(it => it.Sn == info.Sn).ExecuteCommand() == 1 )
  322. {
  323. NotifyChanged(MesDataScope.ProcessRecord);
  324. return true;
  325. }
  326. return false;
  327. }
  328. public static bool DeleteProcessRecord(string sn = null)
  329. {
  330. if ( Db.Deleteable<ProcessRecord>().Where(it => it.Sn == sn).ExecuteCommand() == 1 )
  331. {
  332. NotifyChanged(MesDataScope.ProcessRecord);
  333. return true;
  334. }
  335. return false;
  336. }
  337. public static List<LocalhostPartInfo> SelectPartInfo(StationType stationType)
  338. {
  339. return Db.Queryable<LocalhostPartInfo>().Where(it => it.StationType == stationType).ToList();
  340. }
  341. public static bool InsertPartInfo(LocalhostPartInfo info)
  342. {
  343. var ok = Db.Storageable(info).ExecuteCommand() > 0;
  344. if (ok)
  345. {
  346. NotifyChanged(MesDataScope.KeyPart);
  347. }
  348. return ok;
  349. }
  350. public static int InsertPartInfos(List<LocalhostPartInfo> infos)
  351. {
  352. if (infos == null || infos.Count == 0)
  353. {
  354. return 0;
  355. }
  356. var affected = Db.Storageable(infos).ExecuteCommand();
  357. if (affected > 0)
  358. {
  359. NotifyChanged(MesDataScope.KeyPart);
  360. }
  361. return affected;
  362. }
  363. public static bool DeletePartInfo(StationType stationType, string partNum)
  364. {
  365. var ok = Db.Deleteable<LocalhostPartInfo>()
  366. .Where(it => it.StationType == stationType && it.PartNum == partNum)
  367. .ExecuteCommand() >= 1;
  368. if (ok)
  369. {
  370. NotifyChanged(MesDataScope.KeyPart);
  371. }
  372. return ok;
  373. }
  374. public static List<ParkingLot> SelectParkingLot()
  375. {
  376. return Db.Queryable<ParkingLot>().OrderBy(it => it.Id).ToList();
  377. }
  378. public static bool InsertParkingLot(ParkingLot info)
  379. {
  380. var ok = Db.Storageable(info).ExecuteCommand() > 0;
  381. if (ok)
  382. {
  383. NotifyChanged(MesDataScope.ParkingLot);
  384. }
  385. return ok;
  386. }
  387. public static bool UpdateParkingLot(ParkingLot info)
  388. {
  389. var ok = Db.Updateable(info).Where(it => it.Id == info.Id).ExecuteCommand() == 1;
  390. if (ok)
  391. {
  392. NotifyChanged(MesDataScope.ParkingLot);
  393. }
  394. return ok;
  395. }
  396. public static bool DeleteParkingLot(int id)
  397. {
  398. var ok = Db.Deleteable<ParkingLot>().Where(it => it.Id == id).ExecuteCommand() == 1;
  399. if (ok)
  400. {
  401. NotifyChanged(MesDataScope.ParkingLot);
  402. }
  403. return ok;
  404. }
  405. #region 当前左右工位识别码
  406. public static OrderToMesInfo SelectWorkOrderInfo()
  407. {
  408. List<OrderToMesInfo> lilsts = Db.Queryable<OrderToMesInfo>().ToList();
  409. if ( lilsts.Count != 0 )
  410. {
  411. return lilsts[ 0 ];
  412. }
  413. else
  414. {
  415. return new OrderToMesInfo() { CreateTime = DateTime.Now, Id = 0, LeftCheckCode = "", RightCheckCode = "" };
  416. }
  417. }
  418. public static bool InsertWorkOrderInfo(OrderToMesInfo info)
  419. {
  420. if ( Db.Storageable(info).ExecuteCommand() == 1 )
  421. {
  422. return true;
  423. }
  424. return false;
  425. }
  426. public static bool UpdateWorkOrderInfo(OrderToMesInfo info, bool isleft = true)
  427. {
  428. if ( info.CurrMarkCode != string.Empty )
  429. {
  430. if ( Db.Updateable(info).UpdateColumns(it => new { it.CurrMarkCode }).Where(it => it.Id == info.Id).ExecuteCommand() == 1 )
  431. {
  432. return true;
  433. }
  434. return false;
  435. }
  436. if ( isleft )
  437. {
  438. if ( Db.Updateable(info).UpdateColumns(it => new { it.CreateTime, it.LeftCheckCode }).Where(it => it.Id == info.Id).ExecuteCommand() == 1 )
  439. {
  440. return true;
  441. }
  442. }
  443. else
  444. {
  445. if ( Db.Updateable(info).UpdateColumns(it => new { it.CreateTime, it.RightCheckCode }).Where(it => it.Id == info.Id).ExecuteCommand() == 1 )
  446. {
  447. return true;
  448. }
  449. }
  450. return false;
  451. }
  452. #endregion
  453. }
  454. }