|
|
@@ -80,18 +80,23 @@ namespace UAS_MES_NEW.Query
|
|
|
//}
|
|
|
if (JPG.Checked)
|
|
|
{
|
|
|
- ps_prodcode.Text = GetProdCodeFromFileName(FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".xls", "").Replace(".xlsx", ""));
|
|
|
- OperatResult.AppendText("解析SOP编号: " + ps_prodcode.Text + "\n");
|
|
|
+ string fileName = FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".xls", "").Replace(".xlsx", "");
|
|
|
+ // 入库的ps_prodcode用完整文件名,如 (R1)WI-LC-31-544 冷端热端铜柱焊接组件检漏作业指导书x
|
|
|
+ ps_prodcode.Text = fileName;
|
|
|
+ // 匹配/删除时用截取出来的编号,如 WI-LC-31-544(新旧版本号都指向同一条数据)
|
|
|
+ string prodCode = GetProdCodeFromFileName(fileName);
|
|
|
+ OperatResult.AppendText("解析SOP编号: " + prodCode + ",文件名: " + ps_prodcode.Text + "\n");
|
|
|
pr_code_Leave(new object(), new EventArgs());
|
|
|
Workbook workbook = new Workbook(FilePath.Text);
|
|
|
string pnTools = GetPnToolsFromExcel(workbook);
|
|
|
- if (pnTools == "")
|
|
|
+ if (pnTools == null)
|
|
|
{
|
|
|
+ // 整个Excel都没有PN/TOOLS列时,回退用表单上的产品编号
|
|
|
pnTools = pr_code.Text;
|
|
|
}
|
|
|
OperatResult.AppendText("解析PN/TOOLS: " + pnTools + "\n");
|
|
|
// 匹配已存在的旧数据:新旧版本号不同(如(R0)/(R1))、或历史数据存的是完整文件名,都按中间不变的SOP编号(如WI-LC-31-544)来匹配
|
|
|
- List<string> oldIds = FindDuplicatedSopIds(ps_prodcode.Text);
|
|
|
+ List<string> oldIds = FindDuplicatedSopIds(prodCode);
|
|
|
if (oldIds.Count > 0)
|
|
|
{
|
|
|
// 已存在相同SOP编号:先删除原明细和主表数据,后面重新插入
|
|
|
@@ -100,7 +105,7 @@ namespace UAS_MES_NEW.Query
|
|
|
dh.ExecuteSql("delete from ProductSOPdetail where psd_psid='" + oldIds[d] + "'", "delete");
|
|
|
dh.ExecuteSql("delete from productsop where ps_id='" + oldIds[d] + "'", "delete");
|
|
|
}
|
|
|
- OperatResult.AppendText("已删除原SOP编号【" + ps_prodcode.Text + "】的旧数据(" + oldIds.Count + "条),重新插入\n");
|
|
|
+ OperatResult.AppendText("已删除原SOP编号【" + prodCode + "】的旧数据(" + oldIds.Count + "条),重新插入\n");
|
|
|
}
|
|
|
string code = LogicHandler.GetPiInoutCode("ProductSOP", "1");
|
|
|
ps_code.Text = code;
|
|
|
@@ -362,11 +367,15 @@ namespace UAS_MES_NEW.Query
|
|
|
}
|
|
|
else if (PDF.Checked)
|
|
|
{
|
|
|
- ps_prodcode.Text = GetProdCodeFromFileName(FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".pdf", ""));
|
|
|
- OperatResult.AppendText("解析SOP编号: " + ps_prodcode.Text + "\n");
|
|
|
+ string fileName = FilePath.Text.Substring(FilePath.Text.LastIndexOf(@"\") + 1).Replace(".pdf", "");
|
|
|
+ // 入库的ps_prodcode用完整文件名
|
|
|
+ ps_prodcode.Text = fileName;
|
|
|
+ // 匹配/删除时用截取出来的编号
|
|
|
+ string prodCode = GetProdCodeFromFileName(fileName);
|
|
|
+ OperatResult.AppendText("解析SOP编号: " + prodCode + ",文件名: " + ps_prodcode.Text + "\n");
|
|
|
pr_code_Leave(new object(), new EventArgs());
|
|
|
// 匹配已存在的旧数据:新旧版本号不同(如(R0)/(R1))、或历史数据存的是完整文件名,都按中间不变的SOP编号(如WI-LC-31-544)来匹配
|
|
|
- List<string> oldIds = FindDuplicatedSopIds(ps_prodcode.Text);
|
|
|
+ List<string> oldIds = FindDuplicatedSopIds(prodCode);
|
|
|
if (oldIds.Count > 0)
|
|
|
{
|
|
|
// 已存在相同SOP编号:先删除原明细和主表数据,后面重新插入
|
|
|
@@ -375,7 +384,7 @@ namespace UAS_MES_NEW.Query
|
|
|
dh.ExecuteSql("delete from ProductSOPdetail where psd_psid='" + oldIds[d] + "'", "delete");
|
|
|
dh.ExecuteSql("delete from productsop where ps_id='" + oldIds[d] + "'", "delete");
|
|
|
}
|
|
|
- OperatResult.AppendText("已删除原SOP编号【" + ps_prodcode.Text + "】的旧数据(" + oldIds.Count + "条),重新插入\n");
|
|
|
+ OperatResult.AppendText("已删除原SOP编号【" + prodCode + "】的旧数据(" + oldIds.Count + "条),重新插入\n");
|
|
|
}
|
|
|
string code = LogicHandler.GetPiInoutCode("ProductSOP", "1");
|
|
|
ps_code.Text = code;
|
|
|
@@ -464,9 +473,12 @@ namespace UAS_MES_NEW.Query
|
|
|
|
|
|
/// <summary>
|
|
|
/// 从Excel中查找标题为PN/TOOLS的列,收集该列标题下方所有非空内容,去重后用逗号拼接返回
|
|
|
+ /// 值为JT开头的不记录
|
|
|
+ /// 找不到PN/TOOLS列时返回null;找到但内容为空(或被JT过滤完)时返回空字符串
|
|
|
/// </summary>
|
|
|
private string GetPnToolsFromExcel(Workbook workbook)
|
|
|
{
|
|
|
+ bool headerFound = false;
|
|
|
List<string> values = new List<string>();
|
|
|
for (int i = 0; i < workbook.Worksheets.Count; i++)
|
|
|
{
|
|
|
@@ -509,18 +521,25 @@ namespace UAS_MES_NEW.Query
|
|
|
}
|
|
|
}
|
|
|
if (headerCol < 0) continue;
|
|
|
- // 3. 收集标题下方该列所有非空内容,去重(保持顺序)
|
|
|
+ headerFound = true;
|
|
|
+ // 3. 收集标题下方该列所有非空内容,去重(保持顺序),JT开头的不记录
|
|
|
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))
|
|
|
+ if (text == "") continue;
|
|
|
+ if (text.ToUpper().StartsWith("JT")) continue;
|
|
|
+ if (!values.Contains(text))
|
|
|
{
|
|
|
values.Add(text);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if (!headerFound)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
return string.Join(",", values.ToArray());
|
|
|
}
|
|
|
|