using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using UAS_MES.DataOperate; using UAS_MES.Entity; using UAS_MES.PublicMethod; namespace UAS_MES.Make { public partial class Make_SeqProgramTransform : Form { AutoSizeFormClass asc = new AutoSizeFormClass(); LogStringBuilder sql = new LogStringBuilder(); DataHelper dh; //原序列号 string TSN = ""; //转换后序列号 string SN = ""; //错误信息 string errorMessage; //存放productsnrelation表中的数据 DataTable ListA; //存放工单信息 DataTable dt; //存放序列号防呆规则 DataTable rules; //step 记录检验规则的进度 int step = 0; //存放关联信息类型 string type; //存放包含IMEI的规则的值,方便拼接 StringBuilder imei = new StringBuilder(); LogStringBuilder logsql = new LogStringBuilder(); //存储最后插入数据库的赋值语句部分 StringBuilder s1 = new StringBuilder(); //存放工单中数量 int ma_qty; //存放所有关联信息的类型和录入的值 Hashtable hs; string startNo = "";//起始序列 string endNo = "";//终止序列 string system = "";//进制 string oMakecode = ""; string oMsid = ""; bool onlyPass = false; DataTable macRange;//记录macBT范围 StringBuilder insertSninfoFields;//存插入sninfo的字段 StringBuilder insertSninfoValues;//存插入sninfo的值 StringBuilder toSi;//存更新sninfo的值 string macOrBt = "";//存储去掉":"或者"-"的mac和bt public Make_SeqProgramTransform() { InitializeComponent(); } private void Make_SeqProgramTransform_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); code.Focus(); //提示用户“>>请输入TSN号” OperateResult.AppendText(">>请输入TSN号\n", Color.Black); dh = new DataHelper(); } private void 序列烧录转换_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void code_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (code.Text != "") { if (LogicHandler.CheckStepAttribute(Tag.ToString(), User.UserSourceCode, out errorMessage)) { //为0,输入TSN if (step == 0) { OperateResult.AppendText(">>TSN号" + code.Text + "\n", Color.Black); if (!ChangeResult.Checked)//不勾选 { //核对工序 if (!LogicHandler.CheckStepSNAndMacode("", User.UserSourceCode, code.Text, User.UserCode, out oMakecode, out oMsid, out errorMessage)) { OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code); return; } } else//勾选 { oMsid = dh.getFieldDataByCondition("makeserial", "max(ms_id)", "ms_sncode in (select '" + code.Text + "' from dual union select sn from makesnrelation where beforesn='" + code.Text + "' and sn<>' ' union select beforesn from makesnrelation where sn='" + code.Text + "' and beforesn<>' ')").ToString(); if (oMsid=="") { OperateResult.AppendText(">>TSN号错误\n", Color.Red, code); return; } //根据ms_id查询 sql.Clear(); sql.Append("select 1 from makeserial where ms_id='"+oMsid+"' and ms_beforesn='"+code.Text+"' and ms_nextmacode is null and ms_outboxcode is null"); dt = (DataTable)dh.ExecuteSql(sql.GetString(),"select"); //如果行数大于0则允许转号 if (dt.Rows.Count > 0) { sql.Clear(); sql.Append("select 1 from makeserial where ms_id='" + oMsid + "' and ms_stepcode='" + User.CurrentStepCode + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { step = 1; TSN = code.Text; //显示序列号 show_sncode.Text = TSN; ChangeResult.Enabled = false; } else { OperateResult.AppendText(">>当前工序不允许重新转号\n", Color.Red, code); return; } } else { OperateResult.AppendText(">>TSN号" + code.Text + "当前状态不允许重新转号\n", Color.Red, code); return; } } //如果用户没有选择工单号 if (ms_macode.Text == "" || ms_macode.Text != oMakecode||ChangeResult.Checked) { //按照out出的工单号查出工单相关信息,并赋值到相关控件 sql.Clear(); sql.Append("select ma_code as ms_macode,ma_softversion,mcd_okqty,ma_qty,ma_qty-mcd_inqty as remain_qty,pr_detail,pr_code as ma_prodcode "); sql.Append("from makeserial left join make on ms_makecode=ma_code left join product on "); sql.Append("ms_prodcode=pr_code left join makecraftdetail on ms_makecode=mcd_macode where ms_id=:msid and mcd_stepcode='" + User.CurrentStepCode + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select", oMsid); if (dt.Rows.Count > 0) { //记录数量 ma_qty = int.Parse(dt.Rows[0]["ma_qty"].ToString()); BaseUtil.SetFormValue(this.Controls, dt); } else { OperateResult.AppendText(">>TSN号" + code.Text + "不存在\n", Color.Red, code); return; } } //获取需要关联采集的信息,以及校验规则 ListA = (DataTable)dh.ExecuteSql("select * from productsnrelation where psr_prodcode='" + ma_prodcode.Text + "' order by psr_detno", "select"); //没有获取到就提示错误请维护产品对应的关联采集信息 if (ListA.Rows.Count == 0) { OperateResult.AppendText(">>请维护产品对应的关联采集信息\n", Color.Red, code); OperateResult.AppendText("<<请输入TSN\n", Color.Black); if (ChangeResult.Checked) { clearInfo(); } return; } if (ChangeResult.Checked) { OperateResult.AppendText("<<请输入SN\n", Color.Green, code); } //判断重新转换是否勾选了 if (ChangeResult.Checked) { ////勾选了 //if (dh.CheckExist("MakeSerial", "ms_beforesn='" + code.Text + "' and ms_id='" + oMsid + "'")) //{ // step = 1; // TSN = code.Text; // //显示序列号 // show_sncode.Text = TSN; // OperateResult.AppendText("<<请输入SN\n", Color.Green, code); // ChangeResult.Enabled = false; //} //else //{ // OperateResult.AppendText(">>不存在该已转序列号:" + code.Text + "\n", Color.Red, code); // OperateResult.AppendText("<<请重新输入TSN\n", Color.Black); //} } else { //没有勾选,只能修改一次 //核对TSN是否正确 //string beforesn = dh.getFieldDataByCondition("makeserial", "ms_beforesn", "ms_sncode='" + code.Text + "'").ToString().Trim(); if (dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "' and ms_id='" + oMsid + "' and ms_beforesn is null")) { step = 1; //记录转换前的序列号 TSN = code.Text; //显示之前的序列号 show_sncode.Text = TSN; OperateResult.AppendText("<<请输入SN\n", Color.Green, code); ChangeResult.Enabled = false; } else //不为空,进行过转换。不勾选修改结果,就不能再修改 { //修改转换结果时,输入两次SN直接过站 if (dh.CheckExist("MakeSerial", "ms_sncode='" + code.Text + "' and ms_id='" + oMsid + "' and ms_beforesn is not null")) { step = 1; TSN = code.Text; //显示序列号 show_sncode.Text = TSN; OperateResult.AppendText("<<请输入SN\n", Color.Green, code); ChangeResult.Enabled = false; onlyPass = true; } else { OperateResult.AppendText(">>序列号:" + code.Text + "已转换过\n", Color.Red, code); OperateResult.AppendText("<<请重新输入TSN\n", Color.Black); } } } } else if (step == 1) { OperateResult.AppendText(">>" + code.Text + "\n", Color.Black); //判断工单是否导入了序列号清单 if (dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_type='after'")) { if (!dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_sncode='" + code.Text + "' and msl_type='after'")) { //有序列号清单,输入的序列号却不在范围内 OperateResult.AppendText(">>SN号" + code.Text + "错误,不在工单设定的转换后序列号清单中\n", Color.Red, code); return; } } //判断用户是否锁定输入SN长度, if (!checkLengthOrPre(SNLength_checkBox, SNLength, "长度", "SN")) { return; } //判断用户是否锁定输入SN前缀, if (!checkLengthOrPre(SNPre_checkBox, SNPre, "前缀", "SN")) { return; } //判断转换后序列号的范围是否合法 if (!checkStartAndEnd()) { OperateResult.AppendText(">>SN号" + code.Text + "校验错误,不在工单防呆规则指定范围内!\n", Color.Red, code); return; } //如果只是需要过站的序列号 if (onlyPass) { if (TSN == code.Text) { //写入日志 LogicHandler.SetStepResult(ms_macode.Text, User.UserSourceCode, code.Text, "序列转换", "序列转换成功", User.UserCode, out errorMessage); if (errorMessage.Contains("AFTERSUCCESS")) OperateResult.AppendText(">>" + errorMessage + "\n"); //记录日志 LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_macode.Text, User.UserLineCode, User.UserSourceCode, "序列转换", "转换成功", code.Text, ""); OperateResult.AppendText(">>转换成功\n", Color.Green, code); onlyPass = false; ChangeResult.Enabled = true; step = 0; } else { OperateResult.AppendText(">>输入一致才可过站\n", Color.Red, code); } return; } //开始录入SN if ((ChangeResult.Checked && dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "' and ms_id='" + oMsid + "'")) || !dh.CheckExist("makeserial", "ms_sncode='" + code.Text + "'") || (!ChangeResult.Checked && (TSN == code.Text))) { //SN校验成功,合法,记录下SN SN = code.Text; code.Text = ""; //开始进行校验规则 if (ListA.Rows.Count > 0) { OperateResult.AppendText("<<请输入" + ListA.Rows[0]["psr_type"] + "\n", Color.Green); //实例化hashTable的值 hs = new Hashtable(); } //step+1 step = 2; insertSninfoFields = new StringBuilder(); insertSninfoValues = new StringBuilder(); toSi = new StringBuilder(); } else { OperateResult.AppendText(">>序列号" + code.Text + "已存在或无该转换后序列号\n", Color.Red); OperateResult.AppendText(">>请输入SN\n", Color.Black, code); } } else if (step < ListA.Rows.Count + 2) { OperateResult.AppendText(">>" + code.Text + "\n", Color.Black); //开始进行校验规则 if (checkRules(step)) { step += 1; } } } else { OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code); } } else { OperateResult.AppendText(">>输入不能为空\n", Color.Red); } code.Text = ""; } } /// /// 检验长度或者前缀是否合法 /// /// /// /// private bool checkLengthOrPre(CheckBox checkbox, TextBox textbox, string type, string TSNorSN) { if (checkbox.Checked == true) { //如果勾选没有填值 if (textbox.Text == "") { OperateResult.AppendText(">>勾选长度或者前缀需要填写内容\n", Color.Red); return false; } if (type == "长度") { //则判断输入转换前的序列号长度是否合法,不合法则提示 if (code.Text.Trim().Length != int.Parse(textbox.Text)) { //序列号校验错误,长度错误 OperateResult.AppendText(">>" + TSNorSN + ":" + code.Text + "校验错误,长度错误\n", Color.Red, code); OperateResult.AppendText("<<请重新输入" + TSNorSN + "\n", Color.Black); return false; } } else if (type == "前缀") { string[] pres = textbox.Text.Split('|'); bool f = false; for (int i = 0; i < pres.Length; i++) { if (pres[i] == "" ? true : code.Text.StartsWith(pres[i])) { //满足其中一条即可 f = true; break; } } //则判断输入转换前的序列号前缀是否合法,不合法则提示 if (!f) { //序列号校验错误,前缀错误 OperateResult.AppendText(">>" + TSNorSN + ":" + code.Text + "校验错误,前缀错误\n", Color.Red, code); OperateResult.AppendText("<<请重新输入" + TSNorSN + "\n", Color.Black); return false; } } return true; } return true; } /// /// 关联采集的校验 /// /// private bool checkRules(int step) { type = ListA.Rows[step - 2]["psr_type"].ToString() == "WIFI" ? "MAC" : ListA.Rows[step - 2]["psr_type"].ToString(); //将type中的mac和bt中的"-"和":"号去掉 if (type == "MAC" || type == "BT") { macOrBt = code.Text.Replace(":", "").Replace("-", ""); } //如果前缀和长度都满足的话 if ((ListA.Rows[step - 2]["psr_length"].ToString() == "" ? true : code.Text.Length != int.Parse(ListA.Rows[step - 2]["psr_length"].ToString()))) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"] + "长度校验不通过,请重新输入\n", Color.Red); OperateResult.AppendText(">>请重新输入" + ListA.Rows[step - 2]["psr_type"] + "\n", Color.Black, code); return false; } //以|符号分割前缀 string[] preFixs = ListA.Rows[step - 2]["psr_prefix"].ToString().Split('|'); //只要满足其中一个前缀条件即可 bool isfit = false; for (int i = 0; i < preFixs.Length; i++) { if (preFixs[i] == "" ? true : code.Text.StartsWith(preFixs[i])) { //满足其中一条即可 isfit = true; break; } } if (!isfit) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"] + "前缀校验不通过,请重新输入\n", Color.Red); OperateResult.AppendText(">>请重新输入" + ListA.Rows[step - 2]["psr_type"] + "\n", Color.Black, code); return false; } switch (type) { case "IMEI1": case "IMEI2": case "IMEI3": if (!ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and (ms_imei1='" + code.Text + "' or ms_imei2 = '" + code.Text + "' or ms_imei3 = '" + code.Text + "')") || ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and (ms_imei1='" + code.Text + "' or ms_imei2 = '" + code.Text + "' or ms_imei3 = '" + code.Text + "') and ms_id <> '" + oMsid + "'")) { OperateResult.AppendText(">>" + type + ":" + code.Text + "错误,不允许重复\n", Color.Red); OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code); return false; } else { //校验sninfo中是否已经存在这个 if (dh.CheckExist("sninfo", "si_imei1='" + code.Text + "' or si_imei2 = '" + code.Text + "' or si_imei3 = '" + code.Text + "'")) { OperateResult.AppendText(">>" + type + ":" + code.Text + "错误,不允许重复\n", Color.Red); OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code); return false; } //判断IMEI1,IMEI2,IMEI3中是否已经有这个号了 if (imei.ToString().Contains(code.Text)) { OperateResult.AppendText(">>" + type + ":" + code.Text + "已录,请重新输入\n", Color.Red); OperateResult.AppendText(">>请输入" + type + "\n", Color.Black, code); return false; } } //通过校验,将包含IMEI的值拼接 imei.Append("'" + code.Text + "',"); s1.Append("MS_" + type + " = '" + code.Text + "',"); insertSninfoFields.Append("si_" + type + ","); insertSninfoValues.Append("'" + code.Text + "',"); toSi.Append("si_" + type + " = '" + code.Text + "',"); break; case "BT": case "MAC": //验证是否符合合同防呆 sql.Clear(); sql.Append("select sr_startcode,sr_endcode from SaleMacBTRange where sr_sacode = '" + dh.getFieldDataByCondition("makeserial", "ms_salecode","ms_id='"+oMsid+"'") + "' and sr_type = '" + type + "'"); macRange = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (macRange.Rows.Count > 0) { if (!(macRange.Rows[0]["sr_startcode"].ToString().Replace(":", "").Replace("-", "").CompareTo(macOrBt) <= 0 && macRange.Rows[0]["sr_endcode"].ToString().Replace(":", "").Replace("-", "").CompareTo(macOrBt) >= 0)) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不在合同防呆范围内\n", Color.Red); OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code); return false; } } //验证是否已被使用 if (!ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + macOrBt + "'") || ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + macOrBt + "' and ms_id <> '" + oMsid + "'")) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red); OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code); return false; } else { //校验在sninfo表中是否存在 if (dh.CheckExist("sninfo", "si_" + type + "='" + macOrBt + "'")) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red); OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code); return false; } } //通过校验,将包含IMEI的值拼接 s1.Append("MS_" + type + " = '" + macOrBt + "',"); insertSninfoFields.Append("si_" + type + ","); insertSninfoValues.Append("'" + macOrBt + "',"); toSi.Append("si_" + type + " = '" + macOrBt + "',"); break; case "NETCODE": if (!ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + code.Text + "'") || ChangeResult.Checked && checkExist("ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + type + "='" + code.Text + "' and ms_id <> '" + oMsid + "'")) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red); OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code); return false; } else { //校验在sninfo表中是否存在 if (dh.CheckExist("sninfo", "si_" + type + "='" + code.Text + "'")) { OperateResult.AppendText(">>" + ListA.Rows[step - 2]["psr_type"].ToString() + ":" + code.Text + "错误,不允许重复\n", Color.Red); OperateResult.AppendText(">>请输入" + ListA.Rows[step - 2]["psr_type"].ToString() + "\n", Color.Black, code); return false; } } //通过校验,将包含IMEI的值拼接 s1.Append("MS_" + type + " = '" + code.Text + "',"); insertSninfoFields.Append("si_" + type + ","); insertSninfoValues.Append("'" + code.Text + "',"); toSi.Append("si_" + type + " = '" + code.Text + "',"); break; } //满足规则,则采集 if (type == "MAC" || type == "BT") { hs.Add(ListA.Rows[step - 2]["psr_type"].ToString(), macOrBt); } else { hs.Add(ListA.Rows[step - 2]["psr_type"].ToString(), code.Text); } //说明已经是最后一个校验规则 if (step == ListA.Rows.Count + 1) { //校验已经完成,此时要再次校验之前的SN和关联采集信息 //再次校验SN if ((ChangeResult.Checked && dh.CheckExist("makeserial", "ms_sncode='" + SN + "' and ms_id='" + oMsid + "'")) || !dh.CheckExist("makeserial", "ms_sncode='" + SN + "'") || (!ChangeResult.Checked && (TSN == SN))) { bool flag = true; //遍历判断已采集的信息是否已存在 foreach (DictionaryEntry de in hs) { if (!ChangeResult.Checked && dh.CheckExist("makeserial", "ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + (de.Key.ToString() == "WIFI" ? "MAC" : de.Key) + "='" + de.Value + "'") || (ChangeResult.Checked && dh.CheckExist("makeserial", "ms_status in (1,2,3) and nvl(ms_nextmacode,' ')=' ' and MS_" + (de.Key.ToString() == "WIFI" ? "MAC" : de.Key) + "='" + de.Value + "' and ms_id <> '" + oMsid + "'"))) { flag = false; OperateResult.AppendText(">>" + de.Key + "已被使用,请重新输入TSN,重新转换\n", Color.Red); //清空信息 clearInfo(); break; } else { //校验sninfo中是否存在 if (dh.CheckExist("sninfo", "si_" + (de.Key.ToString() == "WIFI" ? "MAC" : de.Key) + "='" + de.Value + "'")) { flag = false; OperateResult.AppendText(">>" + de.Key + "已被使用,请重新输入TSN,重新转换\n", Color.Red); //清空信息 clearInfo(); break; } } } //根据flag判断关联采集信息二次校验结果 if (flag == true) { //说明SN和关联采集信息二次校验通过,则进行转换和采集信息绑定 string firstsn = ""; string updateSql = ""; //勾选了修改转换结果 if (ChangeResult.Checked) { //查询ms_firstsn firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_beforesn='" + TSN + "' and ms_id='" + oMsid + "'").ToString(); //记录本次修改,存入makesnrelation表中 updateSql = "update makeserial set ms_sncode='" + SN + "'," + s1.Remove(s1.Length - 1, 1).ToString() + " where ms_beforesn='" + TSN + "' and ms_id='" + oMsid + "'"; //删除最近一条转换记录 dh.ExecuteSql("delete from makesnrelation where BEFORESN='" + TSN + "' and makecode='" + ms_macode.Text + "'", "delete"); } //未勾选修改转换结果 else { //查询ms_firstsn firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_sncode='" + TSN + "' and ms_id='" + oMsid + "'").ToString(); //记录本次修改,存入makesnrelation表中 updateSql = "update makeserial set ms_sncode='" + SN + "', ms_beforesn='" + TSN + "'," + s1.Remove(s1.Length - 1, 1).ToString() + " where ms_sncode='" + TSN + "' and ms_id='" + oMsid + "'"; } string insertSql = "insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + TSN + "','" + SN + "','" + firstsn + "','" + ms_macode.Text + "', sysdate ,'" + User.UserCode + "')"; dh.ExecuteSQLTran(updateSql, insertSql); OperateResult.AppendText(">>序列号转换成功\n>>关联采集成功\n", Color.Green); //写入日志 LogManager.DoLog("修改序列号:" + TSN + "为" + SN + "成功!" + "操作人:" + User.UserCode); //记录日志 LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_macode.Text, User.UserLineCode, User.UserSourceCode, "序列烧录转换", "转换成功", TSN, ""); //写入sninfo表 insert2Sninfo(SN); //输出提示用户“>>序列号转换成功”,“>>关联采集成功” //完成该道工序 setFinish if (LogicHandler.SetStepResult(ms_macode.Text, User.UserSourceCode, SN, "序列烧录转换", "序列烧录转换成功", User.UserCode, out errorMessage)) { } else { OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red, code); } //获取剩余数,刷新页面 sql.Clear(); sql.Append("select mcd_inqty from makecraftdetail where mcd_macode='" + ms_macode.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { remain_qty.Text = ma_qty - int.Parse(dt.Rows[0]["mcd_inqty"].ToString()) + ""; } //更新页面计数+1 count.Text = int.Parse(count.Text) + 1 + ""; //完成之后,清除信息 clearInfo(); OperateResult.AppendText(">>请输入TSN号\n", Color.Black); } } else { OperateResult.AppendText(">>序列号" + SN + "已存在\n", Color.Red); OperateResult.AppendText(">>请重新输入TSN\n", Color.Black, code); //清空信息 clearInfo(); } code.Text = ""; return false; } else { OperateResult.AppendText("<<请输入" + ListA.Rows[step - 1]["psr_type"] + "\n", Color.Green, code); return true; } } /// /// 工单号变化时,带出校验规则 /// /// /// private void ms_macode_TextChanged(object sender, EventArgs e) { //清空 TSNPre.Text = ""; TSNLength.Text = ""; SNPre.Text = ""; SNLength.Text = ""; //取消勾选 TSNPre_checkBox.Checked = false; TSNLength_checkBox.Checked = false; SNPre_checkBox.Checked = false; SNLength_checkBox.Checked = false; //设置可编辑 TSNLength.Enabled = true; TSNPre.Enabled = true; SNLength.Enabled = true; SNPre.Enabled = true; TSNPre_checkBox.Enabled = true; TSNLength_checkBox.Enabled = true; SNPre_checkBox.Enabled = true; SNLength_checkBox.Enabled = true; //判断工单是否导入了序列号清单 if (dh.CheckExist("makesnlist", "msl_makecode='" + ms_macode.Text + "' and msl_type='after'")) { return; } //查询表工单序列号防呆规则表 rules = (DataTable)dh.ExecuteSql("select msr_startno,msr_endno,msr_system,msr_type, msr_prefix ,msr_length from makesnrule where msr_makecode='" + ms_macode.Text + "'", "select"); if (rules.Rows.Count > 0) { foreach (DataRow dr in rules.Rows) { //如果有值,则这个字段自动勾选,并且不可编辑 if (dr["msr_type"].ToString().ToLower() == "before") { //msr_type=before 的值赋值到转换前 //临时变量记录 string length = dr["msr_length"].ToString(); string prefix = dr["msr_prefix"].ToString(); //不为空 if (prefix != "" && prefix != null) { //则赋值 TSNPre.Text = prefix; //设置不可编辑 TSNPre.Enabled = false; //勾选 TSNPre_checkBox.Checked = true; TSNPre_checkBox.Enabled = false; } if (length != "" && length != null) { //赋值 TSNLength.Text = length; //设置不可编辑 TSNLength.Enabled = false; //勾选 TSNLength_checkBox.Checked = true; TSNLength_checkBox.Enabled = false; } } else if (dr["msr_type"].ToString().ToLower() == "after") { //msr_type=after 的值赋值到转换后 //临时变量记录 string length = dr["msr_length"].ToString(); string prefix = dr["msr_prefix"].ToString(); //记录进制 system = dr["msr_system"].ToString(); //不为空 if (prefix != "" && prefix != null) { //则赋值 SNPre.Text = prefix; //设置不可编辑 SNPre.Enabled = false; //勾选 SNPre_checkBox.Checked = true; SNPre_checkBox.Enabled = false; } if (dr["msr_startno"].ToString() != "" && dr["msr_endno"].ToString() != "") { //记录起止序列号 startNo = dr["msr_startno"].ToString().Substring(prefix.Length); endNo = dr["msr_endno"].ToString().Substring(prefix.Length); } if (length != "" && length != null) { //赋值 SNLength.Text = length; //设置不可编辑 SNLength.Enabled = false; //勾选 SNLength_checkBox.Checked = true; SNLength_checkBox.Enabled = false; } } } } else { /* 如果转换前没有值,则取 select productsnrule where psr_prodcode=? 产品编号, * 有值则赋值到 转换前,并且自动勾选不可编辑。*/ rules = (DataTable)dh.ExecuteSql("select psr_prefix,psr_length from productsnrule where psr_prodcode ='" + dt.Rows[0]["ma_prodcode"].ToString() + "' and psr_type='after'", "select"); if (rules.Rows.Count > 0) { //将产品序列号防呆规则查出的数据填充 if (rules.Rows[0]["psr_prefix"].ToString() != "") { SNPre.Text = rules.Rows[0]["psr_prefix"].ToString(); SNPre.Enabled = false; SNPre_checkBox.Checked = true; SNPre_checkBox.Enabled = false; } if (rules.Rows[0]["psr_length"].ToString() != "") { SNLength.Text = rules.Rows[0]["psr_length"].ToString(); SNLength.Enabled = false; SNLength_checkBox.Checked = true; SNLength_checkBox.Enabled = false; } } } } /// /// 检测转换后的序列号是否满足起止序列号范围 /// /// private bool checkStartAndEnd() { if (system == "") { return true; } if (system == "decimal") { //十进制 if (int.Parse(code.Text.Substring(SNPre.Text.Length)) >= int.Parse(startNo) && int.Parse(code.Text.Substring(SNPre.Text.Length)) <= int.Parse(endNo)) { //满足 return true; } } else { //十六进制 if (int.Parse(code.Text.Substring(SNPre.Text.Length), System.Globalization.NumberStyles.HexNumber) >= int.Parse(startNo, System.Globalization.NumberStyles.HexNumber) && int.Parse(code.Text.Substring(SNPre.Text.Length), System.Globalization.NumberStyles.HexNumber) <= int.Parse(endNo, System.Globalization.NumberStyles.HexNumber)) { //满足 return true; } } return false; } private bool checkExist(string fields) { //不存在 if (!dh.CheckExist("makeserial", fields)) { //则记录 return false; } else { return true; } } private void clearInfo() { //步骤重置为0 step = 0; //关联采集信息清空 if (hs != null) { hs.Clear(); } imei.Clear(); logsql.Clear(); s1.Clear(); show_sncode.Text = ""; ChangeResult.Enabled = true; onlyPass = false; } private void cancel_Click(object sender, EventArgs e) { //清除已经采集的所有信息 clearInfo(); //提示用户输入TSN OperateResult.AppendText("<<请输入TSN\n", Color.Green); } private bool GetMakeInfo(string iSnCode, out string oMakeCode, out string oErrorMessage) { //取MakeProcess表中的执行记录ID最大的一个工单的号码 oMakeCode = ""; oErrorMessage = ""; string ms_id = dh.getFieldDataByCondition("MakeSerial", "max(ms_id) ms_id", "ms_sncode='" + iSnCode + "' or ms_firstsn in (select firstsn from makesnrelation where beforesn='" + iSnCode + "')").ToString(); oMakeCode = dh.getFieldDataByCondition("MakeSerial", "ms_makecode", "ms_id='" + ms_id + "'").ToString(); if (oMakeCode != "") return true; else { oErrorMessage = "序列号:" + iSnCode + " 未归属工单"; return false; } } private void ChangeResult_CheckedChanged(object sender, EventArgs e) { if (ChangeResult.Checked) { //勾选的时候提示输入TSN OperateResult.AppendText("<<请输入TSN号\n", Color.Black); } } private void insert2Sninfo(string sn) { //查询是否有记录 string siid = dh.getFieldDataByCondition("sninfo", "max(si_id) si_id", "si_sn='" + sn + "' or si_sn in(select sn from makesnrelation where sn='" + sn + "' or beforesn = '" + sn + "' )").ToString(); //是否为空 if (siid == "") { //插入新的数据 sql.Clear(); sql.Append("insert into sninfo(si_id,si_sn," + insertSninfoFields.ToString().Substring(0, insertSninfoFields.ToString().Length - 1) + ") values "); sql.Append("(sninfo_seq.nextval,'" + sn + "'," + insertSninfoValues.ToString().Substring(0, insertSninfoValues.ToString().Length - 1) + ")"); dh.ExecuteSql(sql.GetString(), "insert"); } else { //更新sninfo sql.Clear(); sql.Append("update sninfo set "); sql.Append(toSi.ToString().Substring(0, toSi.ToString().Length - 1)); sql.Append(" where si_id='" + siid + "'"); dh.ExecuteSql(sql.GetString(), "update"); } } } }