PlatingCellLotTrackUtil.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Aitex.Common.Util;
  2. using Aitex.Core.RT.Log;
  3. using MECF.Framework.Common.CommonData;
  4. using MECF.Framework.Common.CommonData.PlatingCell;
  5. using MECF.Framework.Common.RecipeCenter;
  6. using MECF.Framework.Common.SubstrateTrackings;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace PunkHPX8_RT.Modules.PlatingCell
  14. {
  15. public class PlatingCellLotTrackUtil
  16. {
  17. /// <summary>
  18. /// CSV文件分隔符
  19. /// </summary>
  20. private const char CVS_SPLIT_CHAR = ',';
  21. public static async void ExportPlatingCellLotTrack(string moduleName, List<PlatingcellLotTrackData> datas, LotTrackFileHeaderCommonData headerData, bool isAuto, DepRecipe recipe)
  22. {
  23. await Task.Run(() =>
  24. {
  25. try
  26. {
  27. if (datas == null || datas.Count == 0) return;
  28. string strPath=" ";
  29. FileInfo fi;
  30. if (isAuto)
  31. {
  32. fi = new FileInfo(PathManager.GetLotTrackFilePath() + strPath);
  33. }
  34. else
  35. {
  36. strPath = $"{moduleName}_M{DateTime.Now.ToString("MM")}_D{DateTime.Now.ToString("dd")}_H{DateTime.Now.ToString("HH")}_M{DateTime.Now.ToString("mm")}_S{DateTime.Now.ToString("ss")}.csv";
  37. fi = new FileInfo(PathManager.GetLotTrackFilePath() + $"Manual\\{DateTime.Now.Year}\\{DateTime.Now.Month}\\" + strPath);
  38. }
  39. //目录不存在则创建
  40. if (!fi.Directory.Exists)
  41. {
  42. fi.Directory.Create();
  43. }
  44. FileStream fs = new FileStream(fi.FullName, System.IO.FileMode.Append, System.IO.FileAccess.Write);
  45. StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
  46. if (!isAuto)
  47. {
  48. sw.WriteLine(fi.FullName);
  49. sw.WriteLine($"Date:{DateTime.Now.ToShortDateString()}");
  50. sw.WriteLine($"ToolID:{headerData.ToolID}");
  51. sw.WriteLine($"SW Version:{headerData.SoftWareVersion}");
  52. sw.WriteLine($"Sequence Recipe:{headerData.SequenceRecipe}");
  53. }
  54. if (headerData.ProcessTransferList != null)
  55. {
  56. foreach (var item in headerData.ProcessTransferList)
  57. {
  58. sw.WriteLine(item);
  59. }
  60. }
  61. sw.WriteLine(moduleName);
  62. sw.WriteLine($"Recipe:{headerData.Recipe}");
  63. sw.WriteLine($"ProcessTime:{headerData.ProcessTime}");
  64. sw.WriteLine($"PlatingDelay:{recipe.PlatingDelay}");
  65. sw.Write(CVS_SPLIT_CHAR);
  66. string resStr = $"ANLevel{CVS_SPLIT_CHAR}CAPumpSpeed";
  67. string str = $"TimeStamp{CVS_SPLIT_CHAR}" + resStr;
  68. sw.WriteLine(str);
  69. for (int i = 0; i < datas.Count; i++)
  70. {
  71. PlatingcellLotTrackData data = datas[i];
  72. string resDatas = $"{data.ANLevel}{CVS_SPLIT_CHAR}{data.CAPumpSpeed}{CVS_SPLIT_CHAR}";
  73. string tmp = $"{CVS_SPLIT_CHAR}{data.TimeStamp.ToString("HH:mm:ss")}{CVS_SPLIT_CHAR}" + resDatas;
  74. sw.WriteLine(tmp);
  75. }
  76. sw.WriteLine("");
  77. sw.Close();
  78. fs.Close();
  79. }
  80. catch
  81. {
  82. LOG.WriteLog(eEvent.WARN_METAL, moduleName, $"{moduleName} LotTrack file writing is failed!");
  83. }
  84. });
  85. }
  86. }
  87. }