HistoryViewModel.cs 69 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Collections.ObjectModel;
  5. using System.Data;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Windows;
  11. using System.Windows.Media.Imaging;
  12. //using Aitex.Core.Equipment.SusceptorDefine;
  13. using Aitex.Core.RT.Event;
  14. using Aitex.Core.RT.Log;
  15. using Aitex.Core.UI.View.Common;
  16. using Aitex.Sorter.Common;
  17. using ExcelLibrary.SpreadSheet;
  18. using MECF.Framework.Common.OperationCenter;
  19. using log4net.Repository.Hierarchy;
  20. using MECF.Framework.Common.DataCenter;
  21. using Excel = Microsoft.Office.Interop.Excel;
  22. using MECF.Framework.Common.Utilities;
  23. using System.Threading.Tasks;
  24. using DocumentFormat.OpenXml;
  25. using DocumentFormat.OpenXml.Packaging;
  26. using DocumentFormat.OpenXml.Spreadsheet;
  27. namespace Aitex.Sorter.UI.ViewModel
  28. {
  29. public class HistoryViewModel : UIViewModelBase
  30. {
  31. public ObservableCollection<HistoryProcessData> ProcessData { get; set; }
  32. public ObservableCollection<HistoryWaferData> WaferData { get; set; }
  33. public ObservableCollection<HistoryMoveData> MovementData { get; set; }
  34. public ObservableCollection<HistoryOCRData> OcrCodeData { get; set; }
  35. public ObservableCollection<HistoryCarrierData> CarrierData { get; set; }
  36. public string Checklist { get; set; }
  37. public string CheckCount { get; set; }
  38. private Visibility _VisibilityId ;
  39. public Visibility VisibilityId
  40. {
  41. get => _VisibilityId;
  42. set
  43. {
  44. _VisibilityId = value;
  45. InvokePropertyChanged("VisibilityId");
  46. }
  47. }
  48. private Visibility _VisibilityLotId;
  49. public Visibility VisibilityLotId
  50. {
  51. get { return _VisibilityLotId; }
  52. set
  53. {
  54. _VisibilityLotId = value;
  55. InvokePropertyChanged("VisibilityLotId");
  56. }
  57. }
  58. private Visibility _VisibilityRfid;
  59. public Visibility VisibilityRfid
  60. {
  61. get { return _VisibilityRfid; }
  62. set
  63. {
  64. _VisibilityRfid = value;
  65. InvokePropertyChanged("VisibilityRfid");
  66. }
  67. }
  68. private Visibility _VisibilityPC ;
  69. public Visibility VisibilityPC
  70. {
  71. get { return _VisibilityPC ; }
  72. set
  73. {
  74. _VisibilityPC = value;
  75. InvokePropertyChanged("VisibilityPC");
  76. }
  77. }
  78. public List<string> SlotSelection { get { return Slot; } }
  79. private List<string> Slot = new List<string>() { "Carrier", "Recipe", "Lot", "ProcessJob", "ControlJob" };
  80. public HistoryViewModel() : base("HistoryViewModel")
  81. {
  82. ProcessData = new ObservableCollection<HistoryProcessData>();
  83. WaferData = new ObservableCollection<HistoryWaferData>();
  84. MovementData = new ObservableCollection<HistoryMoveData>();
  85. CarrierData = new ObservableCollection<HistoryCarrierData>();
  86. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  87. _VisibilityLotId = Visibility.Hidden;
  88. _VisibilityId = Visibility.Hidden;
  89. _VisibilityPC = Visibility.Hidden;
  90. _VisibilityRfid = Visibility.Hidden;
  91. }
  92. public void UpdateProcessData(DateTime begin, DateTime end)
  93. {
  94. try
  95. {
  96. string sql = string.Format(
  97. "SELECT * FROM \"process_data\" where \"process_begin_time\" >= '{0}' and \"process_begin_time\" <= '{1}' order by \"process_begin_time\" ASC;",
  98. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  99. List<HistoryProcessData> result = QueryDataClient.Instance.Service.QueryDBProcess(sql);
  100. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  101. {
  102. ProcessData = new ObservableCollection<HistoryProcessData>();
  103. if (result != null)
  104. {
  105. foreach (HistoryProcessData ev in result)
  106. {
  107. ProcessData.Add(ev);
  108. }
  109. }
  110. WaferData = new ObservableCollection<HistoryWaferData>();
  111. MovementData = new ObservableCollection<HistoryMoveData>();
  112. InvokePropertyChanged("ProcessData");
  113. InvokePropertyChanged("WaferData");
  114. InvokePropertyChanged("MovementData");
  115. }));
  116. }
  117. catch (Exception e)
  118. {
  119. LOG.Write(e);
  120. }
  121. }
  122. public void UpdateProcessData(DateTime begin, DateTime end,string Selected)
  123. {
  124. try
  125. {
  126. ProcessData.Clear();
  127. Checklist = Selected + " List";
  128. if (Selected == "Recipe")
  129. {
  130. string sql = string.Format(
  131. "SELECT * FROM \"process_data\" where \"process_begin_time\" >= '{0}' and \"process_begin_time\" <= '{1}' order by \"process_begin_time\" ASC;",
  132. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  133. List<HistoryProcessData> result = QueryDataClient.Instance.Service.QueryDBProcess(sql);
  134. CheckCount = result.Count.ToString();
  135. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  136. {
  137. ProcessData = new ObservableCollection<HistoryProcessData>();
  138. if (result != null)
  139. {
  140. foreach (HistoryProcessData ev in result)
  141. {
  142. ProcessData.Add(ev);
  143. }
  144. }
  145. WaferData = new ObservableCollection<HistoryWaferData>();
  146. MovementData = new ObservableCollection<HistoryMoveData>();
  147. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  148. VisibilityId = Visibility.Visible;
  149. VisibilityRfid = Visibility.Hidden;
  150. VisibilityLotId = Visibility.Hidden;
  151. VisibilityPC = Visibility.Hidden;
  152. InvokePropertyChanged("ProcessData");
  153. InvokePropertyChanged("WaferData");
  154. InvokePropertyChanged("MovementData");
  155. InvokePropertyChanged("OcrCodeData");
  156. InvokePropertyChanged("CheckCount");
  157. InvokePropertyChanged("VisibilityLotId");
  158. InvokePropertyChanged("VisibilityId");
  159. InvokePropertyChanged("VisibilityRfid");
  160. InvokePropertyChanged("VisibilityPC");
  161. }));
  162. }
  163. if (Selected == "Carrier")
  164. {
  165. string sql = string.Format(
  166. "SELECT * FROM \"carrier_data\" where \"load_time\" >= '{0}' and \"load_time\" <= '{1}' order by \"load_time\" ASC;",
  167. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  168. List<HistoryProcessData> result = QueryDataClient.Instance.Service.QueryDBProcessCarrier(sql);
  169. CheckCount = result.Count.ToString();
  170. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  171. {
  172. ProcessData = new ObservableCollection<HistoryProcessData>();
  173. if (result != null)
  174. {
  175. foreach (HistoryProcessData ev in result)
  176. {
  177. ProcessData.Add(ev);
  178. }
  179. }
  180. WaferData = new ObservableCollection<HistoryWaferData>();
  181. MovementData = new ObservableCollection<HistoryMoveData>();
  182. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  183. VisibilityId = Visibility.Hidden;
  184. VisibilityLotId = Visibility.Hidden;
  185. VisibilityPC = Visibility.Hidden;
  186. VisibilityRfid = Visibility.Visible;
  187. InvokePropertyChanged("ProcessData");
  188. InvokePropertyChanged("WaferData");
  189. InvokePropertyChanged("MovementData");
  190. InvokePropertyChanged("OcrCodeData");
  191. InvokePropertyChanged("CheckCount");
  192. InvokePropertyChanged("VisibilityLotId");
  193. InvokePropertyChanged("VisibilityId");
  194. InvokePropertyChanged("VisibilityRfid");
  195. InvokePropertyChanged("VisibilityPC");
  196. }));
  197. }
  198. if (Selected == "Lot")
  199. {
  200. string sql = string.Format(
  201. "SELECT * FROM \"lot_data\" where \"start_time\" >= '{0}' and \"start_time\" <= '{1}' order by \"start_time\" ASC;",
  202. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  203. List<HistoryProcessData> result = QueryDataClient.Instance.Service.QueryDBProcessLot(sql);
  204. CheckCount = result.Count.ToString();
  205. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  206. {
  207. ProcessData = new ObservableCollection<HistoryProcessData>();
  208. if (result != null)
  209. {
  210. foreach (HistoryProcessData ev in result)
  211. {
  212. ProcessData.Add(ev);
  213. }
  214. }
  215. WaferData = new ObservableCollection<HistoryWaferData>();
  216. MovementData = new ObservableCollection<HistoryMoveData>();
  217. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  218. VisibilityId = Visibility.Hidden;
  219. VisibilityLotId = Visibility.Visible;
  220. VisibilityPC = Visibility.Hidden;
  221. VisibilityRfid = Visibility.Hidden;
  222. InvokePropertyChanged("ProcessData");
  223. InvokePropertyChanged("WaferData");
  224. InvokePropertyChanged("MovementData");
  225. InvokePropertyChanged("OcrCodeData");
  226. InvokePropertyChanged("CheckCount");
  227. InvokePropertyChanged("VisibilityLotId");
  228. InvokePropertyChanged("VisibilityId");
  229. InvokePropertyChanged("VisibilityRfid");
  230. InvokePropertyChanged("VisibilityPC");
  231. }));
  232. }
  233. if (Selected == "ProcessJob")
  234. {
  235. string sql = string.Format(
  236. "SELECT * FROM \"carrier_data\" where \"load_time\" >= '{0}' and \"load_time\" <= '{1}' order by \"load_time\" ASC;",
  237. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  238. List<HistoryProcessData> result = QueryDataClient.Instance.Service.QueryDBProcessCarrier(sql);
  239. CheckCount = result.Count.ToString();
  240. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  241. {
  242. ProcessData = new ObservableCollection<HistoryProcessData>();
  243. if (result != null)
  244. {
  245. foreach (HistoryProcessData ev in result)
  246. {
  247. ProcessData.Add(ev);
  248. }
  249. }
  250. VisibilityId = Visibility.Collapsed;
  251. VisibilityLotId = Visibility.Collapsed;
  252. VisibilityPC = Visibility.Collapsed;
  253. VisibilityRfid = Visibility.Hidden;
  254. WaferData = new ObservableCollection<HistoryWaferData>();
  255. MovementData = new ObservableCollection<HistoryMoveData>();
  256. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  257. InvokePropertyChanged("ProcessData");
  258. InvokePropertyChanged("WaferData");
  259. InvokePropertyChanged("MovementData");
  260. InvokePropertyChanged("OcrCodeData");
  261. InvokePropertyChanged("CheckCount");
  262. InvokePropertyChanged("VisibilityLotId");
  263. InvokePropertyChanged("VisibilityId");
  264. InvokePropertyChanged("VisibilityRfid");
  265. InvokePropertyChanged("VisibilityPC");
  266. }));
  267. }
  268. if (Selected == "ControlJob")
  269. {
  270. string sql = string.Format(
  271. "SELECT * FROM \"carrier_data\" where \"load_time\" >= '{0}' and \"load_time\" <= '{1}' order by \"load_time\" ASC;",
  272. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  273. List<HistoryProcessData> result = QueryDataClient.Instance.Service.QueryDBProcessCarrier(sql);
  274. CheckCount = result.Count.ToString();
  275. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  276. {
  277. ProcessData = new ObservableCollection<HistoryProcessData>();
  278. if (result != null)
  279. {
  280. foreach (HistoryProcessData ev in result)
  281. {
  282. ProcessData.Add(ev);
  283. }
  284. }
  285. WaferData = new ObservableCollection<HistoryWaferData>();
  286. MovementData = new ObservableCollection<HistoryMoveData>();
  287. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  288. VisibilityId = Visibility.Hidden;
  289. VisibilityLotId = Visibility.Hidden;
  290. VisibilityPC = Visibility.Hidden;
  291. VisibilityRfid = Visibility.Hidden;
  292. InvokePropertyChanged("ProcessData");
  293. InvokePropertyChanged("WaferData");
  294. InvokePropertyChanged("MovementData");
  295. InvokePropertyChanged("OcrCodeData");
  296. InvokePropertyChanged("CheckCount");
  297. InvokePropertyChanged("VisibilityLotId");
  298. InvokePropertyChanged("VisibilityId");
  299. InvokePropertyChanged("VisibilityRfid");
  300. InvokePropertyChanged("VisibilityPC");
  301. }));
  302. }
  303. }
  304. catch (Exception e)
  305. {
  306. LOG.Write(e);
  307. }
  308. }
  309. public void UpdateCarrierData(DateTime begin, DateTime end)
  310. {
  311. try
  312. {
  313. string sql = string.Format(
  314. "SELECT * FROM \"carrier_data\" where \"load_time\" >= '{0}' and \"load_time\" <= '{1}' order by \"load_time\" ASC;",
  315. begin.ToString("yyyy/MM/dd HH:mm:ss.fff"), end.ToString("yyyy/MM/dd HH:mm:ss.fff"));
  316. List<HistoryCarrierData> result = QueryDataClient.Instance.Service.QueryDBCarrier(sql);
  317. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  318. {
  319. CarrierData = new ObservableCollection<HistoryCarrierData>();
  320. if (result != null)
  321. {
  322. foreach (HistoryCarrierData ev in result)
  323. {
  324. CarrierData.Add(ev);
  325. }
  326. }
  327. WaferData = new ObservableCollection<HistoryWaferData>();
  328. MovementData = new ObservableCollection<HistoryMoveData>();
  329. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  330. InvokePropertyChanged("CarrierData");
  331. InvokePropertyChanged("WaferData");
  332. InvokePropertyChanged("MovementData");
  333. InvokePropertyChanged("OcrCodeData");
  334. }));
  335. }
  336. catch (Exception e)
  337. {
  338. LOG.Write(e);
  339. }
  340. }
  341. public void UpdateWaferDataByProcess(string processGuid)
  342. {
  343. try
  344. {
  345. string sql = string.Format(
  346. "SELECT * FROM \"wafer_data\" where \"process_data_guid\" = '{0}' order by \"create_slot\" ASC;",
  347. processGuid);
  348. List<HistoryWaferData> result = QueryDataClient.Instance.Service.QueryDBWafer(sql);
  349. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  350. {
  351. WaferData = new ObservableCollection<HistoryWaferData>();
  352. if (result != null)
  353. foreach (HistoryWaferData ev in result)
  354. {
  355. string sql3 = string.Format("SELECT * FROM \"carrier_data\" where \"carrier_data\".\"guid\"='{0}';", ev.CarrierGuid);
  356. List<HistoryCarrierData> dbData3 = QueryDataClient.Instance.Service.QueryDBCarrier(sql3);
  357. if (dbData3 != null)
  358. {
  359. for (int i = 0; i < dbData3.Count; i++)
  360. {
  361. ev.SourceCarrier = dbData3[i].Rfid.ToString();
  362. }
  363. }
  364. string sql1 = string.Format("SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;", ev.Guid);
  365. List<HistoryMoveData> dbData = QueryDataClient.Instance.Service.QueryDBMovement(sql1);
  366. if (dbData == null) continue;
  367. for (int i = 0; i < dbData.Count; i++)
  368. {
  369. var station = dbData[i].Station.ToString();
  370. if (station.Contains("LP"))
  371. {
  372. ev.DestinationPort = station;
  373. var datetime = dbData[i].ArriveTime;
  374. string sql2 = string.Format("SELECT * FROM \"carrier_data\" where \"load_time\" < '{0}' and \"station\" = '{1}' order by \"load_time\" ASC ", datetime, station);
  375. List<HistoryCarrierData> dbData2 = QueryDataClient.Instance.Service.QueryDBCarrier(sql2);
  376. if (dbData2 == null) continue;
  377. for (int j = 0; j < dbData2.Count; j++)
  378. {
  379. if (j != dbData2.Count - 1) continue;
  380. ev.DestinationCarrier = dbData2[j].Rfid.ToString();
  381. }
  382. }
  383. }
  384. WaferData.Add(ev);
  385. }
  386. MovementData = new ObservableCollection<HistoryMoveData>();
  387. InvokePropertyChanged("WaferData");
  388. InvokePropertyChanged("MovementData");
  389. }));
  390. }
  391. catch (Exception e)
  392. {
  393. LOG.Write(e);
  394. }
  395. }
  396. public void UpdateWaferDataByCarrier(string carrierGuid)
  397. {
  398. try
  399. {
  400. string sql = string.Format(
  401. "SELECT * FROM \"wafer_data\" where \"carrier_data_guid\" = '{0}' order by \"create_slot\" ASC;",
  402. carrierGuid);
  403. List<HistoryWaferData> result = QueryDataClient.Instance.Service.QueryDBWafer(sql);
  404. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  405. {
  406. WaferData = new ObservableCollection<HistoryWaferData>();
  407. if (result != null)
  408. foreach (HistoryWaferData ev in result)
  409. {
  410. string sql3 = string.Format("SELECT * FROM \"carrier_data\" where \"carrier_data\".\"guid\"='{0}';", ev.CarrierGuid);
  411. List<HistoryCarrierData> dbData3 = QueryDataClient.Instance.Service.QueryDBCarrier(sql3);
  412. if (dbData3 != null)
  413. {
  414. for (int i = 0; i < dbData3.Count; i++)
  415. {
  416. ev.SourceCarrier = dbData3[i].Rfid.ToString();
  417. }
  418. }
  419. string sql1 = string.Format("SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;", ev.Guid);
  420. List<HistoryMoveData> dbData = QueryDataClient.Instance.Service.QueryDBMovement(sql1);
  421. if (dbData == null) continue;
  422. for (int i = 0; i < dbData.Count; i++)
  423. {
  424. var station = dbData[i].Station.ToString();
  425. if (station.Contains("LP"))
  426. {
  427. ev.DestinationPort = station;
  428. var datetime = dbData[i].ArriveTime;
  429. string sql2 = string.Format("SELECT * FROM \"carrier_data\" where \"load_time\" < '{0}' and \"station\" = '{1}' order by \"load_time\" ASC ", datetime, station);
  430. List<HistoryCarrierData> dbData2 = QueryDataClient.Instance.Service.QueryDBCarrier(sql2);
  431. if (dbData2 == null) continue;
  432. for (int j = 0; j < dbData2.Count; j++)
  433. {
  434. if (j != dbData2.Count - 1) continue;
  435. ev.DestinationCarrier = dbData2[j].Rfid.ToString();
  436. }
  437. }
  438. }
  439. WaferData.Add(ev);
  440. }
  441. MovementData = new ObservableCollection<HistoryMoveData>();
  442. InvokePropertyChanged("WaferData");
  443. InvokePropertyChanged("MovementData");
  444. }));
  445. }
  446. catch (Exception e)
  447. {
  448. LOG.Write(e);
  449. }
  450. }
  451. public void UpdateOcrData(string waferGuid)
  452. {
  453. try
  454. {
  455. string sql = string.Format(
  456. "SELECT * FROM \"ocr_data\" where \"wafer_id\" = '{0}' order by \"read_time\" ASC;",
  457. waferGuid);
  458. List<HistoryOCRData> result = QueryDataClient.Instance.Service.QueryDBOCRHistory(sql);
  459. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  460. {
  461. OcrCodeData = new ObservableCollection<HistoryOCRData>();
  462. if (result != null)
  463. foreach (HistoryOCRData ev in result)
  464. {
  465. OcrCodeData.Add(ev);
  466. }
  467. InvokePropertyChanged("OcrCodeData");
  468. }));
  469. }
  470. catch (Exception e)
  471. {
  472. LOG.Write(e);
  473. }
  474. }
  475. public void UpdateMovementData(string waferGuid)
  476. {
  477. try
  478. {
  479. string sql = string.Format(
  480. "SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;",
  481. waferGuid);
  482. List<HistoryMoveData> result = QueryDataClient.Instance.Service.QueryDBMovement(sql);
  483. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  484. {
  485. MovementData = new ObservableCollection<HistoryMoveData>();
  486. if (result != null)
  487. foreach (HistoryMoveData ev in result)
  488. {
  489. MovementData.Add(ev);
  490. }
  491. InvokePropertyChanged("MovementData");
  492. }));
  493. }
  494. catch (Exception e)
  495. {
  496. LOG.Write(e);
  497. }
  498. }
  499. public void UpdateWaferDataByLot(string lotGuid)
  500. {
  501. try
  502. {
  503. string sql = string.Format(
  504. "SELECT * FROM \"wafer_data\" where \"lot_id\" = '{0}' order by \"create_slot\" ASC;",
  505. lotGuid);
  506. List<HistoryWaferData> result = QueryDataClient.Instance.Service.QueryDBWafer(sql);
  507. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  508. {
  509. WaferData = new ObservableCollection<HistoryWaferData>();
  510. if (result != null)
  511. foreach (HistoryWaferData ev in result)
  512. {
  513. string sql3 = string.Format("SELECT * FROM \"carrier_data\" where \"carrier_data\".\"guid\"='{0}';", ev.CarrierGuid);
  514. List<HistoryCarrierData> dbData3 = QueryDataClient.Instance.Service.QueryDBCarrier(sql3);
  515. if (dbData3 != null)
  516. {
  517. for (int i = 0; i < dbData3.Count; i++)
  518. {
  519. ev.SourceCarrier = dbData3[i].Rfid.ToString();
  520. }
  521. }
  522. string sql1 = string.Format("SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;", ev.Guid);
  523. List<HistoryMoveData> dbData = QueryDataClient.Instance.Service.QueryDBMovement(sql1);
  524. if (dbData == null) continue;
  525. for (int i = 0; i < dbData.Count; i++)
  526. {
  527. var station = dbData[i].Station.ToString();
  528. if (station.Contains("LP"))
  529. {
  530. ev.DestinationPort = station;
  531. var datetime = dbData[i].ArriveTime;
  532. string sql2 = string.Format("SELECT * FROM \"carrier_data\" where \"load_time\" < '{0}' and \"station\" = '{1}' order by \"load_time\" ASC ", datetime, station);
  533. List<HistoryCarrierData> dbData2 = QueryDataClient.Instance.Service.QueryDBCarrier(sql2);
  534. if (dbData2 == null) continue;
  535. for (int j = 0; j < dbData2.Count; j++)
  536. {
  537. if (j != dbData2.Count - 1) continue;
  538. ev.DestinationCarrier = dbData2[j].Rfid.ToString();
  539. }
  540. }
  541. }
  542. WaferData.Add(ev);
  543. }
  544. MovementData = new ObservableCollection<HistoryMoveData>();
  545. InvokePropertyChanged("WaferData");
  546. InvokePropertyChanged("MovementData");
  547. }));
  548. }
  549. catch (Exception e)
  550. {
  551. LOG.Write(e);
  552. }
  553. }
  554. public void UpdateWaferDataByPj(string PjGuid)
  555. {
  556. try
  557. {
  558. string sql = string.Format(
  559. "SELECT * FROM \"wafer_data\" where \"pj_data_guid\" = '{0}' order by \"create_slot\" ASC;",
  560. PjGuid);
  561. List<HistoryWaferData> result = QueryDataClient.Instance.Service.QueryDBWafer(sql);
  562. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  563. {
  564. WaferData = new ObservableCollection<HistoryWaferData>();
  565. if (result != null)
  566. foreach (HistoryWaferData ev in result)
  567. {
  568. string sql3 = string.Format("SELECT * FROM \"carrier_data\" where \"carrier_data\".\"guid\"='{0}';", ev.CarrierGuid);
  569. List<HistoryCarrierData> dbData3 = QueryDataClient.Instance.Service.QueryDBCarrier(sql3);
  570. if (dbData3 != null)
  571. {
  572. for (int i = 0; i < dbData3.Count; i++)
  573. {
  574. ev.SourceCarrier = dbData3[i].Rfid.ToString();
  575. }
  576. }
  577. string sql1 = string.Format("SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;", ev.Guid);
  578. List<HistoryMoveData> dbData = QueryDataClient.Instance.Service.QueryDBMovement(sql1);
  579. if (dbData == null) continue;
  580. for (int i = 0; i < dbData.Count; i++)
  581. {
  582. var station = dbData[i].Station.ToString();
  583. if (station.Contains("LP"))
  584. {
  585. ev.DestinationPort = station;
  586. var datetime = dbData[i].ArriveTime;
  587. string sql2 = string.Format("SELECT * FROM \"carrier_data\" where \"load_time\" < '{0}' and \"station\" = '{1}' order by \"load_time\" ASC ", datetime, station);
  588. List<HistoryCarrierData> dbData2 = QueryDataClient.Instance.Service.QueryDBCarrier(sql2);
  589. if (dbData2 == null) continue;
  590. for (int j = 0; j < dbData2.Count; j++)
  591. {
  592. if (j != dbData2.Count - 1) continue;
  593. ev.DestinationCarrier = dbData2[j].Rfid.ToString();
  594. }
  595. }
  596. }
  597. WaferData.Add(ev);
  598. }
  599. MovementData = new ObservableCollection<HistoryMoveData>();
  600. InvokePropertyChanged("WaferData");
  601. InvokePropertyChanged("MovementData");
  602. }));
  603. }
  604. catch (Exception e)
  605. {
  606. LOG.Write(e);
  607. }
  608. }
  609. public void UpdateWaferDataByCj(string CjGuid)
  610. {
  611. try
  612. {
  613. string sql = string.Format(
  614. "SELECT * FROM \"wafer_data\" where \"pj_data_guid\" = '{0}' order by \"create_slot\" ASC;",
  615. CjGuid);
  616. List<HistoryWaferData> result = QueryDataClient.Instance.Service.QueryDBWafer(sql);
  617. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  618. {
  619. WaferData = new ObservableCollection<HistoryWaferData>();
  620. if (result != null)
  621. foreach (HistoryWaferData ev in result)
  622. {
  623. string sql3 = string.Format("SELECT * FROM \"carrier_data\" where \"carrier_data\".\"guid\"='{0}';", ev.CarrierGuid);
  624. List<HistoryCarrierData> dbData3 = QueryDataClient.Instance.Service.QueryDBCarrier(sql3);
  625. if (dbData3 != null)
  626. {
  627. for (int i = 0; i < dbData3.Count; i++)
  628. {
  629. ev.SourceCarrier = dbData3[i].Rfid.ToString();
  630. }
  631. }
  632. string sql1 = string.Format("SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;", ev.Guid);
  633. List<HistoryMoveData> dbData = QueryDataClient.Instance.Service.QueryDBMovement(sql1);
  634. if (dbData == null) continue;
  635. for (int i = 0; i < dbData.Count; i++)
  636. {
  637. var station = dbData[i].Station.ToString();
  638. if (station.Contains("LP"))
  639. {
  640. ev.DestinationPort = station;
  641. var datetime = dbData[i].ArriveTime;
  642. string sql2 = string.Format("SELECT * FROM \"carrier_data\" where \"load_time\" < '{0}' and \"station\" = '{1}' order by \"load_time\" ASC ", datetime, station);
  643. List<HistoryCarrierData> dbData2 = QueryDataClient.Instance.Service.QueryDBCarrier(sql2);
  644. if (dbData2 == null) continue;
  645. for (int j = 0; j < dbData2.Count; j++)
  646. {
  647. if (j != dbData2.Count - 1) continue;
  648. ev.DestinationCarrier = dbData2[j].Rfid.ToString();
  649. }
  650. }
  651. }
  652. WaferData.Add(ev);
  653. }
  654. MovementData = new ObservableCollection<HistoryMoveData>();
  655. InvokePropertyChanged("WaferData");
  656. InvokePropertyChanged("MovementData");
  657. }));
  658. }
  659. catch (Exception e)
  660. {
  661. LOG.Write(e);
  662. }
  663. }
  664. public void ExportMovement(DateTime beginTime)
  665. {
  666. try
  667. {
  668. List<HistoryMoveData> DataLogList = MovementData.ToList();
  669. if (DataLogList == null || DataLogList.Count == 0)
  670. {
  671. return;
  672. }
  673. Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  674. dlg.DefaultExt = ".xlsx"; // Default file extension
  675. dlg.Filter = "Excel数据表格文件(*.xls)|*.xls|Excel数据表格文件(*.xlsx)|*.xlsx|所有文件|*.*"; // Filter files by extension
  676. Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  677. if (result == true) // Process open file dialog box results
  678. {
  679. System.Data.DataSet ds = new System.Data.DataSet();
  680. ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  681. ds.Tables[0].Columns.Add("Time In");
  682. ds.Tables[0].Columns.Add("Station");
  683. ds.Tables[0].Columns.Add("Slot");
  684. foreach (var item in DataLogList)
  685. {
  686. var row = ds.Tables[0].NewRow();
  687. row[0] = item.ArriveTime;
  688. row[1] = item.Station;
  689. row[2] = item.Slot;
  690. ds.Tables[0].Rows.Add(row);
  691. }
  692. if (!ExcelHelper1.ExportToExcel(dlg.FileName, ds, out string reason))
  693. {
  694. MessageBox.Show($"Export failed, {reason}", "Export", MessageBoxButton.OK, MessageBoxImage.Warning);
  695. return;
  696. }
  697. MessageBox.Show($"Export succeed, file save as {dlg.FileName}", "Export", MessageBoxButton.OK, MessageBoxImage.Information);
  698. }
  699. }
  700. catch (Exception ex)
  701. {
  702. LOG.Write(ex);
  703. MessageBox.Show("导出系统日志发生错误", "导出失败", MessageBoxButton.OK, MessageBoxImage.Warning);
  704. }
  705. //ArrayList excelContentList = new ArrayList();
  706. //ArrayList head = new ArrayList();
  707. //ArrayList[] data = new ArrayList[DataLogList.Count];
  708. //head.Add("Time In");
  709. //head.Add("Station");
  710. //head.Add("Slot");
  711. //excelContentList.Add(head);
  712. //for (int i = 0; i < DataLogList.Count; i++)
  713. //{
  714. // if (data[i] == null)
  715. // data[i] = new ArrayList();
  716. // data[i].Add(DataLogList[i].ArriveTime ?? "");
  717. // data[i].Add(DataLogList[i].Station ?? "");
  718. // data[i].Add(DataLogList[i].Slot);
  719. //}
  720. //for (int i = 0; i < data.Length; i++)
  721. // excelContentList.Add(data[i]);
  722. //ExcelExporter.exportToExcel(excelContentList);
  723. }
  724. public void ExportProcessData(DateTime beginTime)
  725. {
  726. try
  727. {
  728. List<HistoryOCRData> DataLogList = OcrCodeData.ToList();
  729. if (DataLogList == null || DataLogList.Count == 0)
  730. {
  731. return;
  732. }
  733. Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  734. dlg.DefaultExt = ".xlsx"; // Default file extension
  735. dlg.Filter = "Excel数据表格文件(*.xls)|*.xls|Excel数据表格文件(*.xlsx)|*.xlsx|所有文件|*.*"; // Filter files by extension
  736. Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  737. if (result == true) // Process open file dialog box results
  738. {
  739. System.Data.DataSet ds = new System.Data.DataSet();
  740. ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  741. ds.Tables[0].Columns.Add("WaferId");
  742. ds.Tables[0].Columns.Add("ReadTime");
  743. ds.Tables[0].Columns.Add("SourceCarrier");
  744. ds.Tables[0].Columns.Add("SourceLp");
  745. ds.Tables[0].Columns.Add("SourceSlot");
  746. ds.Tables[0].Columns.Add("OcrNo");
  747. ds.Tables[0].Columns.Add("OcrJob");
  748. ds.Tables[0].Columns.Add("OcrScore");
  749. ds.Tables[0].Columns.Add("Result");
  750. ds.Tables[0].Columns.Add("TCode");
  751. foreach (var item in DataLogList)
  752. {
  753. var row = ds.Tables[0].NewRow();
  754. row[0] = item.wafer_id;
  755. row[1] = item.read_time;
  756. row[2] = item.source_carrier;
  757. row[3] = item.source_lp;
  758. row[4] = item.source_slot;
  759. row[5] = item.ocr_no;
  760. row[6] = item.ocr_job;
  761. row[7] = item.ocr_score;
  762. row[8] = item.read_result;
  763. row[9] = item.lasermark;
  764. ds.Tables[0].Rows.Add(row);
  765. }
  766. if (!ExcelHelper1.ExportToExcel(dlg.FileName, ds, out string reason))
  767. {
  768. MessageBox.Show($"Export failed, {reason}", "Export", MessageBoxButton.OK, MessageBoxImage.Warning);
  769. return;
  770. }
  771. MessageBox.Show($"Export succeed, file save as {dlg.FileName}", "Export", MessageBoxButton.OK, MessageBoxImage.Information);
  772. }
  773. }
  774. catch (Exception ex)
  775. {
  776. LOG.Write(ex);
  777. MessageBox.Show("导出系统日志发生错误", "导出失败", MessageBoxButton.OK, MessageBoxImage.Warning);
  778. }
  779. //List<HistoryOCRData> DataLogList = OcrCodeData.ToList();
  780. //if (DataLogList == null || DataLogList.Count == 0)
  781. //{
  782. // return;
  783. //}
  784. //ArrayList excelContentList = new ArrayList();
  785. //ArrayList head = new ArrayList();
  786. //ArrayList[] data = new ArrayList[DataLogList.Count];
  787. //head.Add("WaferId");
  788. //head.Add("ReadTime");
  789. //head.Add("SourceCarrier");
  790. //head.Add("SourceLp");
  791. //head.Add("SourceSlot");
  792. //head.Add("OcrNo");
  793. //head.Add("OcrJob");
  794. //head.Add("OcrScore");
  795. //head.Add("Result");
  796. //head.Add("TCode");
  797. //excelContentList.Add(head);
  798. //for (int i = 0; i < DataLogList.Count; i++)
  799. //{
  800. // if (data[i] == null)
  801. // data[i] = new ArrayList();
  802. // data[i].Add(DataLogList[i].wafer_id ?? "");
  803. // data[i].Add(DataLogList[i].read_time ?? "");
  804. // data[i].Add(DataLogList[i].source_carrier ?? "");
  805. // data[i].Add(DataLogList[i].source_lp ?? "");
  806. // data[i].Add(DataLogList[i].source_slot ?? "");
  807. // data[i].Add(DataLogList[i].ocr_no ?? "");
  808. // data[i].Add(DataLogList[i].ocr_job ?? "");
  809. // data[i].Add(DataLogList[i].ocr_score ?? "");
  810. // data[i].Add(DataLogList[i].read_result ?? "");
  811. // data[i].Add(DataLogList[i].lasermark ?? "");
  812. //}
  813. //for (int i = 0; i < data.Length; i++)
  814. // excelContentList.Add(data[i]);
  815. //ExcelExporter.exportToExcel(excelContentList);
  816. }
  817. public void ExportCarrier(DateTime beginTime)
  818. {
  819. //List<HistoryCarrierData> DataLogList = CarrierData.ToList();
  820. //if (DataLogList == null || DataLogList.Count == 0)
  821. //{
  822. // return;
  823. //}
  824. //Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  825. //dlg.DefaultExt = ".xls"; // Default file extension
  826. //dlg.Filter = "Data Excel File|*.xls"; // Filter files by extension
  827. //dlg.FileName = string.Format("Carrier{0}", beginTime.ToString("yyyyMMdd"));
  828. //Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  829. //if (result != true) // Process open file dialog box results
  830. // return;
  831. //try
  832. //{
  833. // if (File.Exists(dlg.FileName))
  834. // {
  835. // File.Delete(dlg.FileName);
  836. // }
  837. //}
  838. //catch (Exception)
  839. //{
  840. // MessageBox.Show("File is occupied by other application, delete the file first to save.", "Error",
  841. // MessageBoxButton.OK);
  842. // return;
  843. //}
  844. //ArrayList excelContentList = new ArrayList();
  845. //ArrayList head = new ArrayList();
  846. //ArrayList[] data = new ArrayList[DataLogList.Count];
  847. //head.Add("LoadTime");
  848. //head.Add("Carrier ID");
  849. //head.Add("Station");
  850. //head.Add("UnloadTime");
  851. //head.Add("Lot ID");
  852. //head.Add("Product Category");
  853. //excelContentList.Add(head);
  854. //for (int i = 0; i < DataLogList.Count; i++)
  855. //{
  856. // if (data[i] == null)
  857. // data[i] = new ArrayList();
  858. // data[i].Add(DataLogList[i].LoadTime ?? "");
  859. // data[i].Add(DataLogList[i].Rfid ?? "");
  860. // data[i].Add(DataLogList[i].Station ?? "");
  861. // data[i].Add(DataLogList[i].UnloadTime ?? "");
  862. // data[i].Add(DataLogList[i].LotId ?? "");
  863. // data[i].Add(DataLogList[i].ProductCategory ?? "");
  864. //}
  865. //for (int i = 0; i < data.Length; i++)
  866. // excelContentList.Add(data[i]);
  867. //ExcelExporter.exportToExcel(excelContentList);
  868. try
  869. {
  870. List<HistoryCarrierData> DataLogList = CarrierData.ToList();
  871. if (DataLogList == null || DataLogList.Count == 0)
  872. {
  873. return;
  874. }
  875. Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  876. dlg.DefaultExt = ".xlsx"; // Default file extension
  877. dlg.Filter = "Excel数据表格文件(*.xls)|*.xls|Excel数据表格文件(*.xlsx)|*.xlsx|所有文件|*.*"; // Filter files by extension
  878. Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  879. if (result == true) // Process open file dialog box results
  880. {
  881. System.Data.DataSet ds = new System.Data.DataSet();
  882. ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  883. ds.Tables[0].Columns.Add("LoadTime");
  884. ds.Tables[0].Columns.Add("Carrier ID");
  885. ds.Tables[0].Columns.Add("Station");
  886. ds.Tables[0].Columns.Add("UnloadTime");
  887. ds.Tables[0].Columns.Add("Lot ID");
  888. ds.Tables[0].Columns.Add("Product Category");
  889. foreach (var item in DataLogList)
  890. {
  891. var row = ds.Tables[0].NewRow();
  892. row[0] = item.LoadTime;
  893. row[1] = item.Rfid;
  894. row[2] = item.Station;
  895. row[3] = item.UnloadTime;
  896. row[4] = item.LotId;
  897. row[5] = item.ProductCategory;
  898. ds.Tables[0].Rows.Add(row);
  899. }
  900. if (!ExcelHelper1.ExportToExcel(dlg.FileName, ds, out string reason))
  901. {
  902. MessageBox.Show($"Export failed, {reason}", "Export", MessageBoxButton.OK, MessageBoxImage.Warning);
  903. return;
  904. }
  905. MessageBox.Show($"Export succeed, file save as {dlg.FileName}", "Export", MessageBoxButton.OK, MessageBoxImage.Information);
  906. }
  907. }
  908. catch (Exception ex)
  909. {
  910. LOG.Write(ex);
  911. MessageBox.Show("导出系统日志发生错误", "导出失败", MessageBoxButton.OK, MessageBoxImage.Warning);
  912. }
  913. }
  914. public void ExportProcess(DateTime beginTime)
  915. {
  916. //List<HistoryProcessData> DataLogList = ProcessData.ToList();
  917. //if (DataLogList == null || DataLogList.Count == 0)
  918. //{
  919. // return;
  920. //}
  921. //Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  922. //dlg.DefaultExt = ".xls"; // Default file extension
  923. //dlg.Filter = "Data Excel File|*.xls"; // Filter files by extension
  924. //dlg.FileName = string.Format("Process{0}", beginTime.ToString("yyyyMMdd"));
  925. //Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  926. //if (result != true) // Process open file dialog box results
  927. // return;
  928. //try
  929. //{
  930. // if (File.Exists(dlg.FileName))
  931. // {
  932. // File.Delete(dlg.FileName);
  933. // }
  934. //}
  935. //catch (Exception)
  936. //{
  937. // MessageBox.Show("File is occupied by other application, delete the file first to save.", "Error",
  938. // MessageBoxButton.OK);
  939. // return;
  940. //}
  941. //ArrayList excelContentList = new ArrayList();
  942. //ArrayList head = new ArrayList();
  943. //ArrayList[] data = new ArrayList[DataLogList.Count];
  944. //head.Add("Recipe");
  945. //head.Add("Start Time");
  946. //head.Add("End Time");
  947. //head.Add("Result");
  948. //excelContentList.Add(head);
  949. //for (int i = 0; i < DataLogList.Count; i++)
  950. //{
  951. // if (data[i] == null)
  952. // data[i] = new ArrayList();
  953. // data[i].Add(DataLogList[i].RecipeName ?? "");
  954. // data[i].Add(DataLogList[i].StartTime ?? "");
  955. // data[i].Add(DataLogList[i].EndTime ?? "");
  956. // data[i].Add(DataLogList[i].Result ?? "");
  957. //}
  958. //for (int i = 0; i < data.Length; i++)
  959. // excelContentList.Add(data[i]);
  960. //ExcelExporter.exportToExcel(excelContentList);
  961. try
  962. {
  963. List<HistoryProcessData> DataLogList = ProcessData.ToList();
  964. if (DataLogList == null || DataLogList.Count == 0)
  965. {
  966. return;
  967. }
  968. Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  969. dlg.DefaultExt = ".xlsx"; // Default file extension
  970. dlg.Filter = "Excel数据表格文件(*.xls)|*.xls|Excel数据表格文件(*.xlsx)|*.xlsx|所有文件|*.*"; // Filter files by extension
  971. Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  972. if (result == true) // Process open file dialog box results
  973. {
  974. System.Data.DataSet ds = new System.Data.DataSet();
  975. ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  976. ds.Tables[0].Columns.Add("Recipe");
  977. ds.Tables[0].Columns.Add("Start Time");
  978. ds.Tables[0].Columns.Add("End Time");
  979. ds.Tables[0].Columns.Add("Result");
  980. foreach (var item in DataLogList)
  981. {
  982. var row = ds.Tables[0].NewRow();
  983. row[0] = item.RecipeName;
  984. row[1] = item.StartTime;
  985. row[2] = item.EndTime;
  986. row[3] = item.Result;
  987. ds.Tables[0].Rows.Add(row);
  988. }
  989. if (!ExcelHelper1.ExportToExcel(dlg.FileName, ds, out string reason))
  990. {
  991. MessageBox.Show($"Export failed, {reason}", "Export", MessageBoxButton.OK, MessageBoxImage.Warning);
  992. return;
  993. }
  994. MessageBox.Show($"Export succeed, file save as {dlg.FileName}", "Export", MessageBoxButton.OK, MessageBoxImage.Information);
  995. }
  996. }
  997. catch (Exception ex)
  998. {
  999. LOG.Write(ex);
  1000. MessageBox.Show("导出系统日志发生错误", "导出失败", MessageBoxButton.OK, MessageBoxImage.Warning);
  1001. }
  1002. }
  1003. public void ExportWafer(DateTime beginTime)
  1004. {
  1005. //List<HistoryWaferData> DataLogList = WaferData.ToList();
  1006. //if (DataLogList == null || DataLogList.Count == 0)
  1007. //{
  1008. // return;
  1009. //}
  1010. //Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  1011. //dlg.DefaultExt = ".xls"; // Default file extension
  1012. //dlg.Filter = "Data Excel File|*.xls"; // Filter files by extension
  1013. //dlg.FileName = string.Format("Wafer{0}", beginTime.ToString("yyyyMMdd"));
  1014. //Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  1015. //if (result != true) // Process open file dialog box results
  1016. // return;
  1017. //try
  1018. //{
  1019. // if (File.Exists(dlg.FileName))
  1020. // {
  1021. // File.Delete(dlg.FileName);
  1022. // }
  1023. //}
  1024. //catch (Exception)
  1025. //{
  1026. // MessageBox.Show("File is occupied by other application, delete the file first to save.", "Error",
  1027. // MessageBoxButton.OK);
  1028. // return;
  1029. //}
  1030. //ArrayList excelContentList = new ArrayList();
  1031. //ArrayList head = new ArrayList();
  1032. //ArrayList[] data = new ArrayList[DataLogList.Count];
  1033. //head.Add("Station");
  1034. //head.Add("Slot");
  1035. //head.Add("Wafer ID");
  1036. //head.Add("Create Time");
  1037. //head.Add("Delete Time");
  1038. //head.Add("LaserMarker1(LaserMarker)");
  1039. //head.Add("LaserMarker2(T7Code)");
  1040. //excelContentList.Add(head);
  1041. //for (int i = 0; i < DataLogList.Count; i++)
  1042. //{
  1043. // if (data[i] == null)
  1044. // data[i] = new ArrayList();
  1045. // data[i].Add(DataLogList[i].Station ?? "");
  1046. // data[i].Add(DataLogList[i].Slot ?? "");
  1047. // data[i].Add(DataLogList[i].WaferId ?? "");
  1048. // data[i].Add(DataLogList[i].CreateTime ?? "");
  1049. // data[i].Add(DataLogList[i].DeleteTime ?? "");
  1050. // data[i].Add(DataLogList[i].LaserMarker ?? "");
  1051. // data[i].Add(DataLogList[i].T7Code);
  1052. //}
  1053. //for (int i = 0; i < data.Length; i++)
  1054. // excelContentList.Add(data[i]);
  1055. //ExcelExporter.exportToExcel(excelContentList);
  1056. try
  1057. {
  1058. List<HistoryWaferData> DataLogList = WaferData.ToList();
  1059. if (DataLogList == null || DataLogList.Count == 0)
  1060. {
  1061. return;
  1062. }
  1063. Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  1064. dlg.DefaultExt = ".xlsx"; // Default file extension
  1065. dlg.Filter = "Excel数据表格文件(*.xls)|*.xls|Excel数据表格文件(*.xlsx)|*.xlsx|所有文件|*.*"; // Filter files by extension
  1066. Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  1067. if (result == true) // Process open file dialog box results
  1068. {
  1069. System.Data.DataSet ds = new System.Data.DataSet();
  1070. ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  1071. ds.Tables[0].Columns.Add("Station");
  1072. ds.Tables[0].Columns.Add("Slot");
  1073. ds.Tables[0].Columns.Add("Lot");
  1074. ds.Tables[0].Columns.Add("Wafer ID");
  1075. ds.Tables[0].Columns.Add("Create Time");
  1076. ds.Tables[0].Columns.Add("Delete Time");
  1077. ds.Tables[0].Columns.Add("LaserMarker1(LaserMarker)");
  1078. ds.Tables[0].Columns.Add("LaserMarker2(T7Code)");
  1079. foreach (var item in DataLogList)
  1080. {
  1081. var row = ds.Tables[0].NewRow();
  1082. row[0] = item.Station;
  1083. row[1] = item.Slot;
  1084. row[2] = item.LotId;
  1085. row[3] = item.WaferId;
  1086. row[4] = item.CreateTime;
  1087. row[5] = item.DeleteTime;
  1088. row[6] = item.LaserMarker;
  1089. row[7] = item.T7Code;
  1090. ds.Tables[0].Rows.Add(row);
  1091. }
  1092. if (!ExcelHelper1.ExportToExcel(dlg.FileName, ds, out string reason))
  1093. {
  1094. MessageBox.Show($"Export failed, {reason}", "Export", MessageBoxButton.OK, MessageBoxImage.Warning);
  1095. return;
  1096. }
  1097. MessageBox.Show($"Export succeed, file save as {dlg.FileName}", "Export", MessageBoxButton.OK, MessageBoxImage.Information);
  1098. }
  1099. }
  1100. catch (Exception ex)
  1101. {
  1102. LOG.Write(ex);
  1103. MessageBox.Show("导出系统日志发生错误", "导出失败", MessageBoxButton.OK, MessageBoxImage.Warning);
  1104. }
  1105. }
  1106. }
  1107. public class ExcelExporter
  1108. {
  1109. private const int OLDOFFICEVESION = -4143;
  1110. private const int NEWOFFICEVESION = 56;
  1111. public static void exportToExcel(ArrayList dataArray)
  1112. {
  1113. try
  1114. {
  1115. ////保存excel文件的格式
  1116. //int FormatNum;
  1117. ////excel版本号
  1118. //string Version;
  1119. ////启动应用
  1120. //Excel.Application xlApp = new Excel.Application();
  1121. ////System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
  1122. //Excel.Workbooks workbooks = xlApp.Workbooks;
  1123. ////创建文件
  1124. //Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
  1125. ////创建sheet
  1126. //Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
  1127. ////获取你使用的excel 的版本号
  1128. //Version = xlApp.Version;
  1129. ////使用Excel 97-2003
  1130. //if (Convert.ToDouble(Version) < 12)
  1131. //{
  1132. // FormatNum = OLDOFFICEVESION;
  1133. //}
  1134. ////使用 excel 2007或更新
  1135. //else
  1136. //{
  1137. // FormatNum = NEWOFFICEVESION;
  1138. //}
  1139. ////添加输出excel表格的表头信息信息
  1140. ////注意这里的excel对应的单元格第一个位置为[1,1],而不是我们平时定义[0,0]
  1141. //ArrayList head = (ArrayList)dataArray[0];
  1142. //for (int i = 0; i < head.Count; i++)
  1143. //{
  1144. // worksheet.Cells[1, i + 1] = head[i].ToString();
  1145. //}
  1146. ////添加输出excel表格的内容信息
  1147. //for (int rowIndex = 1; rowIndex < dataArray.Count; rowIndex++)
  1148. //{
  1149. // ArrayList rowArr = (ArrayList)dataArray[rowIndex];
  1150. // for (int cellIndex = 0; cellIndex < rowArr.Count; cellIndex++)
  1151. // {
  1152. // Excel.Range vsto_cell = worksheet.Cells[rowIndex + 1, cellIndex + 1];
  1153. // vsto_cell.NumberFormat = "@";
  1154. // worksheet.Cells[rowIndex + 1, cellIndex + 1] = rowArr[cellIndex].ToString();
  1155. // }
  1156. //}
  1157. //int r = dataArray.Count > 0 ? dataArray.Count : 1;
  1158. //Excel.Range range = worksheet.get_Range("A1", $"G{r}");
  1159. //range.EntireColumn.AutoFit();
  1160. //range.AutoFormat();
  1161. ////range.Formula = "@";
  1162. ////删除已存在的excel文件,否则会无法保存创建的excel文件
  1163. //if (File.Exists(filePath))
  1164. //{
  1165. // try
  1166. // {
  1167. // File.Delete(filePath);
  1168. // }
  1169. // catch (IOException e)
  1170. // {
  1171. // Console.WriteLine(e.Message);
  1172. // }
  1173. //}
  1174. ////保存,这里必须指定FormatNum文件的格式,否则无法打开创建的excel文件
  1175. //workbook.SaveAs(filePath, FormatNum);
  1176. ////显示创建的excel文件
  1177. ////xlApp.Visible = true;
  1178. //xlApp.Workbooks.Close();
  1179. //xlApp.Quit();
  1180. //xlApp = null;
  1181. Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  1182. dlg.DefaultExt = ".xls"; // Default file extension
  1183. dlg.Filter = "Excel数据表格文件(*.xls)|*.xls|Excel数据表格文件(*.xlsx)|*.xlsx|所有文件|*.*"; // Filter files by extension
  1184. Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  1185. if (result == true) // Process open file dialog box results
  1186. {
  1187. System.Data.DataSet ds = new System.Data.DataSet();
  1188. ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  1189. ArrayList head = (ArrayList)dataArray[0];
  1190. for (int i = 0; i < head.Count; i++)
  1191. {
  1192. ds.Tables[0].Columns.Add(head[i].ToString());
  1193. }
  1194. //添加输出excel表格的内容信息
  1195. for (int rowIndex = 1; rowIndex < dataArray.Count; rowIndex++)
  1196. {
  1197. var row = ds.Tables[0].NewRow();
  1198. ArrayList rowArr = (ArrayList)dataArray[rowIndex];
  1199. for (int cellIndex = 0; cellIndex < rowArr.Count; cellIndex++)
  1200. {
  1201. row[cellIndex] = rowArr[cellIndex].ToString();
  1202. }
  1203. ds.Tables[0].Rows.Add(row);
  1204. }
  1205. ds.WriteXml(dlg.FileName);
  1206. }
  1207. }
  1208. catch (Exception e)
  1209. {
  1210. LOG.Write(e);
  1211. }
  1212. }
  1213. public void Export()
  1214. {
  1215. try
  1216. {
  1217. //List<StatsStatisticsData> DataLogList = HistoryStatsStatisticsData.ToList();
  1218. //if (DataLogList == null || DataLogList.Count == 0)
  1219. //{
  1220. // return;
  1221. //}
  1222. //Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
  1223. //dlg.DefaultExt = ".xlsx"; // Default file extension
  1224. //dlg.Filter = "Excel数据表格文件(*.xlsx)|*.xlsx"; // Filter files by extension
  1225. //Nullable<bool> result = dlg.ShowDialog();// Show open file dialog box
  1226. //if (result == true) // Process open file dialog box results
  1227. //{
  1228. // System.Data.DataSet ds = new System.Data.DataSet();
  1229. // ds.Tables.Add(new System.Data.DataTable("系统运行日志"));
  1230. // ds.Tables[0].Columns.Add("Time In");
  1231. // ds.Tables[0].Columns.Add("Executing");
  1232. // ds.Tables[0].Columns.Add("Idle");
  1233. // ds.Tables[0].Columns.Add("Pause");
  1234. // ds.Tables[0].Columns.Add("Ready");
  1235. // ds.Tables[0].Columns.Add("Setup");
  1236. // ds.Tables[0].Columns.Add("Unknown");
  1237. // foreach (var item in DataLogList)
  1238. // {
  1239. // var row = ds.Tables[0].NewRow();
  1240. // row[0] = item.Date;
  1241. // row[1] = item.Executing;
  1242. // row[2] = item.Idle;
  1243. // row[3] = item.Pause;
  1244. // row[4] = item.Ready;
  1245. // row[5] = item.Setup;
  1246. // row[6] = item.Unknown;
  1247. // ds.Tables[0].Rows.Add(row);
  1248. // }
  1249. // if (!ExcelHelper.ExportToExcel(dlg.FileName, ds, out string reason))
  1250. // {
  1251. // MessageBox.Show($"Export failed, {reason}", "Export", MessageBoxButton.OK, MessageBoxImage.Warning);
  1252. // return;
  1253. // }
  1254. // MessageBox.Show($"Export succeed, file save as {dlg.FileName}", "Export", MessageBoxButton.OK, MessageBoxImage.Information);
  1255. //}
  1256. }
  1257. catch (Exception ex)
  1258. {
  1259. LOG.Write(ex);
  1260. MessageBox.Show("导出系统日志发生错误", "导出失败", MessageBoxButton.OK, MessageBoxImage.Warning);
  1261. }
  1262. }
  1263. //测试函数
  1264. public void test()
  1265. {
  1266. ArrayList perant = new ArrayList();
  1267. ArrayList head = new ArrayList();
  1268. head.Add("头部");
  1269. perant.Add(head);
  1270. ArrayList data = new ArrayList();
  1271. data.Add("data");
  1272. perant.Add(data);
  1273. //exportToExcel(perant, @"D:\testExcell.xlsx");
  1274. }
  1275. }
  1276. public class ExcelHelper1
  1277. {
  1278. public static bool ExportToExcel(string filepath, DataSet ds, out string reason, bool createNewFile = true)
  1279. {
  1280. reason = string.Empty;
  1281. try
  1282. {
  1283. SpreadsheetDocument spreadsheetDocument;
  1284. WorkbookPart workbookpart;
  1285. WorksheetPart worksheetPart;
  1286. Sheets sheets;
  1287. if (createNewFile)
  1288. {
  1289. spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
  1290. workbookpart = spreadsheetDocument.AddWorkbookPart();
  1291. workbookpart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();
  1292. sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
  1293. }
  1294. else
  1295. {
  1296. spreadsheetDocument = SpreadsheetDocument.Open(filepath, true);
  1297. workbookpart = spreadsheetDocument.WorkbookPart;
  1298. sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets;
  1299. }
  1300. worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
  1301. worksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(new SheetData());
  1302. uint sheetID = 1;
  1303. if (sheets.Descendants<Sheet>().Count() > 0)
  1304. {
  1305. sheetID = sheets.Descendants<Sheet>().Select(S => S.SheetId.Value).Max() + 1;
  1306. }
  1307. for (int i = 0; i < ds.Tables.Count; i++)
  1308. {
  1309. Sheet sheet = new Sheet()
  1310. {
  1311. Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
  1312. SheetId = sheetID,
  1313. Name = ds.Tables[i].TableName,
  1314. };
  1315. sheets.Append(sheet);
  1316. var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
  1317. DocumentFormat.OpenXml.Spreadsheet.Row rowCaption = new DocumentFormat.OpenXml.Spreadsheet.Row();
  1318. for (int col = 0; col < ds.Tables[i].Columns.Count; col++)
  1319. {
  1320. DocumentFormat.OpenXml.Spreadsheet.Cell titleCell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
  1321. titleCell.CellValue = new CellValue(ds.Tables[i].Columns[col].Caption);
  1322. titleCell.DataType = new EnumValue<CellValues>(CellValues.String);
  1323. rowCaption.Append(titleCell);
  1324. }
  1325. sheetData.Append(rowCaption);
  1326. for (int row = 0; row < ds.Tables[i].Rows.Count; row++)
  1327. {
  1328. DocumentFormat.OpenXml.Spreadsheet.Row rowData = new DocumentFormat.OpenXml.Spreadsheet.Row();
  1329. for (int col = 0; col < ds.Tables[i].Columns.Count; col++)
  1330. {
  1331. DocumentFormat.OpenXml.Spreadsheet.Cell dataCell = new DocumentFormat.OpenXml.Spreadsheet.Cell();
  1332. var data = ds.Tables[i].Rows[row][col];
  1333. if (data is DateTime time)
  1334. {
  1335. dataCell.CellValue = new CellValue(time);
  1336. dataCell.DataType = new EnumValue<CellValues>(CellValues.String);
  1337. }
  1338. else if (data is double value)
  1339. {
  1340. dataCell.CellValue = new CellValue(data.ToString());
  1341. dataCell.DataType = new EnumValue<CellValues>(CellValues.Number);
  1342. }
  1343. else
  1344. {
  1345. dataCell.CellValue = new CellValue(data.ToString());
  1346. dataCell.DataType = new EnumValue<CellValues>(CellValues.String);
  1347. }
  1348. rowData.Append(dataCell);
  1349. }
  1350. sheetData.Append(rowData);
  1351. }
  1352. }
  1353. workbookpart.Workbook.Save();
  1354. spreadsheetDocument.Close();
  1355. }
  1356. catch (Exception ex)
  1357. {
  1358. LOG.Write(ex);
  1359. reason = ex.Message;
  1360. return false;
  1361. }
  1362. return true;
  1363. }
  1364. }
  1365. }