UploadMakePlan.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using Microsoft.Win32;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.IO;
  6. using System.Threading;
  7. using System.Windows.Forms;
  8. using System.Xml;
  9. using System.Text;
  10. using System.Media;
  11. using System.Linq;
  12. using NPOI.SS.Formula.Functions;
  13. using System.Windows.Media.TextFormatting;
  14. using UMESDLLService;
  15. using NPOI.SS.UserModel;
  16. using NPOI.XSSF.UserModel;
  17. using Oracle.ManagedDataAccess.Client;
  18. using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
  19. namespace FileWatcher
  20. {
  21. public partial class UploadMakePlan : Form
  22. {
  23. string connectionString = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=N_MES;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.7)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
  24. StringBuilder sql = new StringBuilder();
  25. DataHelper dh;
  26. string imaster;
  27. public UploadMakePlan()
  28. {
  29. InitializeComponent();
  30. StartPosition = FormStartPosition.CenterScreen;
  31. }
  32. string fieltype = "";
  33. string ftpulr = "";
  34. private void Form1_Load(object sender, EventArgs e)
  35. {
  36. dh = new DataHelper(connectionString);
  37. }
  38. private void Upload_Click(object sender, EventArgs e)
  39. {
  40. DateTime today = DateTime.Value;
  41. string todayDate = today.ToString("MMdd");
  42. string code = dh.GetSerialNumberByCaller("MakePlan");
  43. string id = "";
  44. DataTable dt = (DataTable)dh.ExecuteSql("select mp_id from MakePlan where to_char(mp_begintime,'yyyymmdd')='" + today.ToString("yyyyMMdd") + "'", "select");
  45. if (dt.Rows.Count == 0)
  46. {
  47. id = dh.GetSEQ("MakePlan_seq");
  48. dh.ExecuteSql("insert into MakePlan(MP_ID, MP_CODE, MP_KIND, MP_INDATE, MP_STATUS, MP_STATUSCODE, MP_BEGINTIME)" +
  49. "values(" + id + ",'" + code + "','日计划',sysdate,'在录入','ENTERING',to_date('" + today.ToString("yyyyMMdd") + "','yyyymmdd'))", "insert");
  50. }
  51. else
  52. {
  53. id = dt.Rows[0]["mp_id"].ToString();
  54. dh.ExecuteSql("delete from MakePlandetail where mpd_mpid=" + id, "delete");
  55. }
  56. using (FileStream file = new FileStream(FilePath.Text, FileMode.Open, FileAccess.Read))
  57. {
  58. XSSFWorkbook workbook = new XSSFWorkbook(file);
  59. int detno = 1;
  60. for (int i = 0; i < workbook.NumberOfSheets; i++)
  61. {
  62. ISheet sheet = workbook.GetSheetAt(i);
  63. string sheetName = sheet.SheetName;
  64. if (sheetName.Contains(todayDate))
  65. {
  66. OperateResult.AppendText(sheetName);
  67. OperateResult.AppendText($"Processing sheet: {sheetName}\n");
  68. //Console.WriteLine($"Processing sheet: {sheetName}");
  69. // 获取标题行(第4行)
  70. IRow headerRow = sheet.GetRow(3); // 第4行索引为3
  71. if (headerRow == null)
  72. {
  73. Console.WriteLine("Header row not found.");
  74. continue;
  75. }
  76. // 获取标题列的索引
  77. int wccodeIndex = -1;
  78. int orderdetnoIndex = -1;
  79. int ordercodeIndex = -1;
  80. int planqtyIndex = -1;
  81. int remarkIndex = -1;
  82. for (int colIndex = 0; colIndex < headerRow.LastCellNum; colIndex++)
  83. {
  84. ICell cell = headerRow.GetCell(colIndex);
  85. if (cell != null)
  86. {
  87. string headerValue = cell.ToString().Trim().Replace("\r\n", "").Replace("\n", "").Replace("\r", "");
  88. if (headerValue == "工作中心")
  89. {
  90. wccodeIndex = colIndex;
  91. }
  92. else if (headerValue == "订单序号")
  93. {
  94. orderdetnoIndex = colIndex;
  95. }
  96. else if (headerValue == "订单编号")
  97. {
  98. ordercodeIndex = colIndex;
  99. }
  100. else if (headerValue == "计划数量")
  101. {
  102. planqtyIndex = colIndex;
  103. }
  104. else if (headerValue.Contains("备注"))
  105. {
  106. remarkIndex = colIndex;
  107. }
  108. }
  109. }
  110. if (wccodeIndex == -1 || orderdetnoIndex == -1 || ordercodeIndex == -1 || planqtyIndex == -1||remarkIndex==-1)
  111. {
  112. Console.WriteLine("Required columns not found in the header.");
  113. continue;
  114. }
  115. using (OracleConnection conn = new OracleConnection(connectionString))
  116. {
  117. conn.Open();
  118. for (int rowIndex = 4; rowIndex <= sheet.LastRowNum; rowIndex++) // 从第5行开始解析数据
  119. {
  120. IRow row = sheet.GetRow(rowIndex);
  121. if (row != null)
  122. {
  123. string wccode = row.GetCell(wccodeIndex, MissingCellPolicy.CREATE_NULL_AS_BLANK).StringCellValue.ToString();
  124. if (wccode == "")
  125. {
  126. continue;
  127. }
  128. string orderdetno = row.GetCell(orderdetnoIndex, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
  129. string ordercode = row.GetCell(ordercodeIndex, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
  130. string planqty = row.GetCell(planqtyIndex, MissingCellPolicy.CREATE_NULL_AS_BLANK).NumericCellValue.ToString();
  131. string remark = row.GetCell(remarkIndex, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
  132. if (!string.IsNullOrEmpty(wccode) && !string.IsNullOrEmpty(orderdetno) && !string.IsNullOrEmpty(ordercode))
  133. {
  134. string insertQuery = "INSERT INTO MakePlanDetail (mpd_mpid,mpd_detno,mpd_id,mpd_wccode, mpd_orderdetno, mpd_ordercode,mpd_outqty,mpd_remark) VALUES (" + id + ","+ detno + ",MakePlanDetail_seq.nextval,:1, :2, :3,:4,:5)";
  135. using (OracleCommand cmd = new OracleCommand(insertQuery, conn))
  136. {
  137. cmd.Parameters.Add(new OracleParameter(":1", wccode));
  138. cmd.Parameters.Add(new OracleParameter(":2", orderdetno));
  139. cmd.Parameters.Add(new OracleParameter(":3", ordercode));
  140. cmd.Parameters.Add(new OracleParameter(":4", planqty));
  141. cmd.Parameters.Add(new OracleParameter(":5", remark));
  142. cmd.ExecuteNonQuery();
  143. }
  144. }
  145. }
  146. detno = detno + 1;
  147. }
  148. }
  149. dh.ExecuteSql("delete from MakePlanDetail where mpd_orderdetno is null", "delete");
  150. OperateResult.AppendText("计划上传成功");
  151. }
  152. }
  153. }
  154. }
  155. private void ChooseFile_Click(object sender, EventArgs e)
  156. {
  157. DialogResult result;
  158. result = ImportExcel1.ShowDialog();
  159. if (result == DialogResult.OK)
  160. {
  161. FilePath.Text = ImportExcel1.FileName;
  162. }
  163. }
  164. }
  165. }