|
|
@@ -80,39 +80,48 @@ namespace UAS_MES_NEW.Query
|
|
|
//}
|
|
|
if (JPG.Checked)
|
|
|
{
|
|
|
- ps_prodcode.Text = FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".xls", "").Replace(".xlsx", "");
|
|
|
+ ps_prodcode.Text = GetProdCodeFromFileName(FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".xls", "").Replace(".xlsx", ""));
|
|
|
+ OperatResult.AppendText("解析SOP编号: " + ps_prodcode.Text + "\n");
|
|
|
pr_code_Leave(new object(), new EventArgs());
|
|
|
+ Workbook workbook = new Workbook(FilePath.Text);
|
|
|
+ string pnTools = GetPnToolsFromExcel(workbook);
|
|
|
+ if (pnTools == "")
|
|
|
+ {
|
|
|
+ pnTools = pr_code.Text;
|
|
|
+ }
|
|
|
+ OperatResult.AppendText("解析PN/TOOLS: " + pnTools + "\n");
|
|
|
DataTable dt = (DataTable)dh.ExecuteSql("select * from productsop where ps_prodcode='" + ps_prodcode.Text + "' ", "select");
|
|
|
- if (dt.Rows.Count == 0)
|
|
|
+ if (dt.Rows.Count > 0)
|
|
|
{
|
|
|
- string code = LogicHandler.GetPiInoutCode("ProductSOP", "1");
|
|
|
- ps_code.Text = code;
|
|
|
- if (VaildDate.Checked)
|
|
|
- {
|
|
|
- dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode,ps_vailddate,ps_prcode)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING',to_date('" + DateCode.Value.ToString("yyyy-MM-dd") + "','yyyy-mm-dd'),'" + pr_code.Text + "')", "insert");
|
|
|
- }
|
|
|
- else
|
|
|
+ // 已存在相同SOP编号:先删除原明细和主表数据,后面重新插入
|
|
|
+ for (int d = 0; d < dt.Rows.Count; d++)
|
|
|
{
|
|
|
- dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode,ps_prcode)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING','" + pr_code.Text + "')", "insert");
|
|
|
+ string oldps_id = dt.Rows[d]["ps_id"].ToString();
|
|
|
+ dh.ExecuteSql("delete from ProductSOPdetail where psd_psid='" + oldps_id + "'", "delete");
|
|
|
+ dh.ExecuteSql("delete from productsop where ps_id='" + oldps_id + "'", "delete");
|
|
|
}
|
|
|
+ OperatResult.AppendText("已删除原SOP编号【" + ps_prodcode.Text + "】的旧数据,重新插入\n");
|
|
|
+ }
|
|
|
+ string code = LogicHandler.GetPiInoutCode("ProductSOP", "1");
|
|
|
+ ps_code.Text = code;
|
|
|
+ if (VaildDate.Checked)
|
|
|
+ {
|
|
|
+ dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode,ps_vailddate,ps_prcode)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING',to_date('" + DateCode.Value.ToString("yyyy-MM-dd") + "','yyyy-mm-dd'),'" + pnTools + "')", "insert");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- string ps_id = dt.Rows[0]["ps_id"].ToString();
|
|
|
- dh.ExecuteSql("delete from ProductSOPdetail where psd_psid='" + ps_id + "'", "delete");
|
|
|
- ps_prodcode.Text = dt.Rows[0]["ps_prodcode"].ToString();
|
|
|
+ dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode,ps_prcode)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING','" + pnTools + "')", "insert");
|
|
|
}
|
|
|
- Workbook workbook = new Workbook(FilePath.Text);
|
|
|
List<Worksheet> list = new List<Worksheet>();
|
|
|
List<string> filename = new List<string>();
|
|
|
|
|
|
if (VaildDate.Checked)
|
|
|
{
|
|
|
- dh.ExecuteSql("update ProductSOP set ps_attachsop='',ps_inman='" + User.UserName + "',ps_vailddate=to_date('" + DateCode.Value.ToString("yyyy-MM-dd") + "','yyyy-mm-dd') where ps_prodcode='" + ps_prodcode.Text + "'", "update");
|
|
|
+ dh.ExecuteSql("update ProductSOP set ps_attachsop='',ps_inman='" + User.UserName + "',ps_prcode='" + pnTools + "',ps_vailddate=to_date('" + DateCode.Value.ToString("yyyy-MM-dd") + "','yyyy-mm-dd') where ps_prodcode='" + ps_prodcode.Text + "'", "update");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- dh.ExecuteSql("update ProductSOP set ps_attachsop='',ps_inman='" + User.UserName + "' where ps_prodcode='" + ps_prodcode.Text + "'", "update");
|
|
|
+ dh.ExecuteSql("update ProductSOP set ps_attachsop='',ps_inman='" + User.UserName + "',ps_prcode='" + pnTools + "' where ps_prodcode='" + ps_prodcode.Text + "'", "update");
|
|
|
}
|
|
|
|
|
|
OperatResult.AppendText("一共Sheet: " + workbook.Worksheets.Count + "\n");
|
|
|
@@ -353,27 +362,30 @@ namespace UAS_MES_NEW.Query
|
|
|
}
|
|
|
else if (PDF.Checked)
|
|
|
{
|
|
|
- ps_prodcode.Text = FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".pdf", "");
|
|
|
+ ps_prodcode.Text = GetProdCodeFromFileName(FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".pdf", ""));
|
|
|
+ OperatResult.AppendText("解析SOP编号: " + ps_prodcode.Text + "\n");
|
|
|
pr_code_Leave(new object(), new EventArgs());
|
|
|
DataTable dt = (DataTable)dh.ExecuteSql("select * from productsop where ps_prodcode='" + ps_prodcode.Text + "' ", "select");
|
|
|
- if (dt.Rows.Count == 0)
|
|
|
+ if (dt.Rows.Count > 0)
|
|
|
{
|
|
|
- string code = LogicHandler.GetPiInoutCode("ProductSOP", "1");
|
|
|
- ps_code.Text = code;
|
|
|
- if (VaildDate.Checked)
|
|
|
- {
|
|
|
- dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode,ps_vailddate)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING',to_date('" + DateCode.Value.ToString("yyyy-MM-dd") + "','yyyy-mm-dd'))", "insert");
|
|
|
- }
|
|
|
- else
|
|
|
+ // 已存在相同SOP编号:先删除原明细和主表数据,后面重新插入
|
|
|
+ for (int d = 0; d < dt.Rows.Count; d++)
|
|
|
{
|
|
|
- dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING')", "insert");
|
|
|
+ string oldps_id = dt.Rows[d]["ps_id"].ToString();
|
|
|
+ dh.ExecuteSql("delete from ProductSOPdetail where psd_psid='" + oldps_id + "'", "delete");
|
|
|
+ dh.ExecuteSql("delete from productsop where ps_id='" + oldps_id + "'", "delete");
|
|
|
}
|
|
|
+ OperatResult.AppendText("已删除原SOP编号【" + ps_prodcode.Text + "】的旧数据,重新插入\n");
|
|
|
+ }
|
|
|
+ string code = LogicHandler.GetPiInoutCode("ProductSOP", "1");
|
|
|
+ ps_code.Text = code;
|
|
|
+ if (VaildDate.Checked)
|
|
|
+ {
|
|
|
+ dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode,ps_vailddate)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING',to_date('" + DateCode.Value.ToString("yyyy-MM-dd") + "','yyyy-mm-dd'))", "insert");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- string psid = dt.Rows[0]["ps_id"].ToString();
|
|
|
- dh.ExecuteSql("delete from ProductSOPdetail where psd_psid='" + psid + "'", "delete");
|
|
|
- ps_prodcode.Text = dt.Rows[0]["ps_prodcode"].ToString();
|
|
|
+ dh.ExecuteSql("insert into productsop(ps_id,ps_code,ps_prodcode,ps_indate,ps_inman,ps_status,ps_statuscode)values(productsop_seq.nextval,'" + code + "','" + ps_prodcode.Text + "',sysdate,'" + User.UserName + "','在录入','ENTERING')", "insert");
|
|
|
}
|
|
|
if (VaildDate.Checked)
|
|
|
{
|
|
|
@@ -394,6 +406,89 @@ namespace UAS_MES_NEW.Query
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 从文件名中截取中间的SOP编号
|
|
|
+ /// 例如:(R1)WI-LC-31-544 冷端热端铜柱焊接组件检漏作业指导书x → WI-LC-31-544
|
|
|
+ /// 匹配不到编号时返回原文件名
|
|
|
+ /// </summary>
|
|
|
+ private string GetProdCodeFromFileName(string fileName)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(fileName))
|
|
|
+ {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ fileName = fileName.Trim();
|
|
|
+ System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(
|
|
|
+ fileName, "[A-Za-z0-9]+(?:-[A-Za-z0-9]+)+");
|
|
|
+ if (m.Success)
|
|
|
+ {
|
|
|
+ return m.Value;
|
|
|
+ }
|
|
|
+ return fileName;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 从Excel中查找标题为PN/TOOLS的列,收集该列标题下方所有非空内容,去重后用逗号拼接返回
|
|
|
+ /// </summary>
|
|
|
+ private string GetPnToolsFromExcel(Workbook workbook)
|
|
|
+ {
|
|
|
+ List<string> values = new List<string>();
|
|
|
+ for (int i = 0; i < workbook.Worksheets.Count; i++)
|
|
|
+ {
|
|
|
+ Worksheet she = workbook.Worksheets[i];
|
|
|
+ Cells cells = she.Cells;
|
|
|
+ int maxRow = cells.MaxDataRow;
|
|
|
+ int maxCol = cells.MaxDataColumn;
|
|
|
+ int headerCol = -1;
|
|
|
+ int headerRow = -1;
|
|
|
+ // 1. 先在单元格中查找PN/TOOLS标题
|
|
|
+ for (int r = 0; r <= maxRow && headerCol < 0; r++)
|
|
|
+ {
|
|
|
+ for (int c = 0; c <= maxCol; c++)
|
|
|
+ {
|
|
|
+ object val = cells[r, c].Value;
|
|
|
+ if (val == null) continue;
|
|
|
+ string text = val.ToString().Trim().ToUpper();
|
|
|
+ if (text.Contains("PN/TOOLS") || text.Contains("PN/TOOLS"))
|
|
|
+ {
|
|
|
+ headerCol = c;
|
|
|
+ headerRow = r;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 2. 单元格中没找到时,尝试从形状(文本框)标题中定位列
|
|
|
+ if (headerCol < 0)
|
|
|
+ {
|
|
|
+ for (int s = 0; s < she.Shapes.Count; s++)
|
|
|
+ {
|
|
|
+ string shapeText;
|
|
|
+ try { shapeText = she.Shapes[s].Text; }
|
|
|
+ catch { continue; }
|
|
|
+ if (shapeText != null && shapeText.Trim().ToUpper().Contains("PN/TOOLS"))
|
|
|
+ {
|
|
|
+ headerCol = she.Shapes[s].UpperLeftColumn;
|
|
|
+ headerRow = she.Shapes[s].UpperLeftRow;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (headerCol < 0) continue;
|
|
|
+ // 3. 收集标题下方该列所有非空内容,去重(保持顺序)
|
|
|
+ for (int r = headerRow + 1; r <= Math.Max(maxRow, cells.MaxDataRow); r++)
|
|
|
+ {
|
|
|
+ object val = cells[r, headerCol].Value;
|
|
|
+ if (val == null) continue;
|
|
|
+ string text = val.ToString().Trim();
|
|
|
+ if (text != "" && !values.Contains(text))
|
|
|
+ {
|
|
|
+ values.Add(text);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return string.Join(",", values.ToArray());
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 请求上传图片到阿里云
|
|
|
/// </summary>
|