using System; using System.Data; using System.Drawing; using System.Windows.Forms; using UAS_MES.CustomControl.TextBoxWithIcon; using UAS_MES.DataOperate; using UAS_MES.Entity; using UAS_MES.PublicMethod; namespace UAS_MES.Make { public partial class Make_SeqTransform : Form { AutoSizeFormClass asc = new AutoSizeFormClass(); DataHelper dh; DataTable dt; string bsncode = "";//转换前序列号 string errorMessage = ""; public Make_SeqTransform() { InitializeComponent(); } private void 序列转换_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); dh = new DataHelper(); sncode.Focus(); //设置锁定工单 ms_makecode_lock.GetMakeCodeCtl(ma_code); ma_code.SetLockCheckBox(ms_makecode_lock); //工单放大镜的配置 ma_code.TableName = "make left join product on ma_prodcode=pr_code"; ma_code.SelectField = "ma_code # 工单号,ma_prodcode # 产品编号,pr_detail # 产品名称"; ma_code.FormName = Name; ma_code.SetValueField = new string[] { "ma_code", "ma_prodcode", "pr_detail" }; ma_code.Condition = "ma_statuscode='STARTED'"; } private void sncode_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (sncode.Text != "") { if (LogicHandler.CheckStepAttribute(Tag.ToString(),User.UserSourceCode,out errorMessage)) { OperateResult.AppendText(">>序列号:" + sncode.Text + " , 发送请求\n", Color.Green); //如果用户没有输入工单号自行去后台查询 string macode; //如果用户填写了工单号 if (ma_code.Text != "") { macode = ma_code.Text; //通过工单序列号关系验证 //bsncode为空,就说明是输入转换之前的序列号 if (bsncode == "") { //定义传入方法的变量 string oMakeCode = ""; string oMsId = ""; //用户填写了工单号,那么序列号必须要是该工单的,否则提示错误 if (LogicHandler.CheckStepSNAndMacode(macode, User.UserSourceCode, sncode.Text, User.UserCode, out oMakeCode, out oMsId, out errorMessage)) { //判断用户是否锁定输入转换前序列号长度, if (!checkLengthOrPre(beforeTransSNLength_checkBox, beforeTransSNLength, "长度")) return; //判断用户是否锁定输入转换前序列号前缀, if (!checkLengthOrPre(beforeTransSNPre_checkBox, beforeTransSNPre, "前缀")) return; switch (ChangeResult.CheckState) { //勾选是修改已转换的序列,矫正修改错了的序列号 case CheckState.Checked: if (dh.CheckExist("MakeSerial", "ms_beforesn='" + sncode.Text + "'")) { bsncode = sncode.Text; sncode.Text = ""; OperateResult.AppendText("<<请输入转换后的序列号\n", Color.Green); } else { OperateResult.AppendText(">>不存在该已转序列号\n" + sncode.Text + "\n"); sncode.Text = ""; OperateResult.AppendText("<<请重新输入序列号\n", Color.Green); } break; case CheckState.Unchecked: string beforesn = dh.getFieldDataByCondition("makeserial", "ms_beforesn", "ms_sncode='" + sncode.Text + "'").ToString().Trim(); //为空,就说明,没有进行过序列号的转换 if (beforesn == "" || beforesn == null) { //记录转换前的序列号 bsncode = sncode.Text; sncode.Text = ""; OperateResult.AppendText("<<请输入转换后的序列号\n", Color.Green); } else //不为空,进行过转换。不勾选修改结果,就不能再修改 { OperateResult.AppendText(">>序列号" + sncode.Text + "已进行了转换\n", Color.Red); sncode.Text = ""; OperateResult.AppendText("<<请重新输入序列号\n", Color.Green); } break; default: break; } } else { OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red); sncode.Text = ""; } } //bsncode不为空,说明输入的是转换后的序列号 else { //判断用户是否锁定输入转换后序列号长度, if (!checkLengthOrPre(afterTransSNLength_checkBox, afterTransSNLength, "长度")) return; //判断用户是否锁定输入转换后序列号前缀, if (!checkLengthOrPre(afterTransSNPre_checkBox, afterTransSNPre, "前缀")) return; //如果两次输入的序列号相同进行提示,不相同则进行下一步 if (bsncode != sncode.Text) { //勾选了修改转换结果 if (ChangeResult.Checked) { if (!dh.CheckExist("makeserial", "ms_sncode='" + sncode.Text + "'")) { //查询ms_firstsn string firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_beforesn='" + bsncode + "'").ToString(); //记录本次修改,存入makesnrelation表中 string updateSql = "update makeserial set ms_sncode='" + sncode.Text + "' where ms_beforesn='" + bsncode + "'"; string insertSql = "insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + bsncode + "','" + sncode.Text + "','" + firstsn + "','" + ma_code.Text + "', sysdate ,'" + User.UserCode + "')"; dh.ExecuteSQLTran(updateSql, insertSql); OperateResult.AppendText(">>转换成功"); //写入日志 LogManager.DoLog("修改序列号:" + bsncode + "为" + sncode.Text + "成功!" + "操作人:" + User.UserCode); OperateResult.AppendText(">>请输入转换前的序列号\n", Color.Green); //置空 bsncode = ""; //更新数量 changenum.Text = int.Parse(changenum.Text) + 1 + ""; } else OperateResult.AppendText(">>序列号" + sncode.Text + "已存在,请输入其他序列号\n", Color.Red); } //未勾选修改转换结果 else { if (!dh.CheckExist("makeserial", "ms_sncode='" + sncode.Text + "'")) { //查询ms_firstsn string firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_sncode='" + bsncode + "'").ToString(); //记录本次修改,存入makesnrelation表中 string updateSql = "update makeserial set ms_sncode='" + sncode.Text + "', ms_beforesn='" + bsncode + "' where ms_sncode='" + bsncode + "'"; string insertSql = "insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + bsncode + "','" + sncode.Text + "','" + firstsn + "','" + ma_code.Text + "', sysdate ,'" + User.UserCode + "')"; dh.ExecuteSQLTran(updateSql, insertSql); OperateResult.AppendText(">>转换成功\n", Color.Green); //写入日志 LogManager.DoLog("修改序列号:" + bsncode + "为" + sncode.Text + "成功!" + "操作人:" + User.UserCode); OperateResult.AppendText(">>请输入转换前的序列号\n", Color.Green); //置空 bsncode = ""; //更新数量 changenum.Text = int.Parse(changenum.Text) + 1 + ""; } else OperateResult.AppendText(">>序列号" + sncode.Text + "已存在,请输入其他序列号\n", Color.Red); } } else OperateResult.AppendText(">>相同序列号不能进行转换\n", Color.Red); } } else { macode = dh.getFieldDataByCondition("makeserial", "ms_makecode", "ms_sncode='" + sncode.Text + "' or ms_beforesn='" + sncode.Text + "'").ToString(); if (macode == "") { OperateResult.AppendText(">>无该序列号对应工单!\n", Color.Red); } } } else { OperateResult.AppendText(">>" + errorMessage + "\n", Color.Red); sncode.Text = ""; } } else OperateResult.AppendText(">>序列号不能为空\n", Color.Red); } } private void 序列转换_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void Confirm_Click(object sender, EventArgs e) { KeyEventArgs ky = new KeyEventArgs(Keys.Enter); sncode_KeyDown(sender, ky); } private void ReCall_Click(object sender, EventArgs e) { bsncode = ""; OperateResult.AppendText(">>请输需要转换的序列号\n", Color.Green); } /// /// 工单号keydown /// /// /// private void ms_makecode_KeyDown(object sender, KeyEventArgs e) { } /// /// 如果清空了工单号,或者更换了工单号则将 : 转换前序列号长度,转换前序列号前缀 ///转换后序列号长度,转换后序列号前缀 四个字段值清空。 /// /// /// private void ms_makecode_UserControlTextChanged(object sender, EventArgs e) { //清空 beforeTransSNPre.Text = ""; beforeTransSNLength.Text = ""; afterTransSNPre.Text = ""; afterTransSNLength.Text = ""; //取消勾选 beforeTransSNPre_checkBox.Checked = false; beforeTransSNLength_checkBox.Checked = false; afterTransSNPre_checkBox.Checked = false; afterTransSNLength_checkBox.Checked = false; //设置可编辑 beforeTransSNLength.Enabled = true; beforeTransSNPre.Enabled = true; afterTransSNLength.Enabled = true; afterTransSNPre.Enabled = true; //查询表工单序列号防呆规则表 dt = (DataTable)dh.ExecuteSql("select msr_type, msr_prefix ,msr_length from makesnrule where msr_makecode='" + ma_code.Text + "'", "select"); if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.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) { //则赋值 beforeTransSNPre.Text = prefix; //设置不可编辑 beforeTransSNPre.Enabled = false; //勾选 beforeTransSNPre_checkBox.Checked = true; } if (length != "" && length != null) { //赋值 beforeTransSNLength.Text = length; //设置不可编辑 beforeTransSNLength.Enabled = false; //勾选 beforeTransSNLength_checkBox.Checked = true; } } else if (dr["msr_type"].ToString().ToLower() == "after") { //msr_type=after 的值赋值到转换后 //临时变量记录 string length = dr["msr_length"].ToString(); string prefix = dr["msr_prefix"].ToString(); //不为空 if (prefix != "" && prefix != null) { //则赋值 afterTransSNPre.Text = prefix; //设置不可编辑 afterTransSNPre.Enabled = false; //勾选 afterTransSNPre_checkBox.Checked = true; } if (length != "" && length != null) { //赋值 afterTransSNLength.Text = length; //设置不可编辑 afterTransSNLength.Enabled = false; //勾选 afterTransSNLength_checkBox.Checked = true; } } } } else { /* 如果转换前没有值,则取 select productsnrule where psr_prodcode=? 产品编号, * 有值则赋值到 转换前,并且自动勾选不可编辑。*/ //dt = (DataTable)dh.ExecuteSql("select psr_prefix ,psr_length from productsnrule where psr_prodcode = " + ma_prodcode.Text, "select"); //if (dt.Rows.Count > 0) //{ // //将产品序列号防呆规则查出的数据填充 // beforeTransSNPre.Text = dt.Rows[0]["psr_prefix"].ToString(); // beforeTransSNPre.ReadOnly = true; // beforeTransSNPre_checkBox.Checked = true; // beforeTransSNLength.Text = dt.Rows[0]["psr_length"].ToString(); // beforeTransSNLength.ReadOnly = true; // beforeTransSNLength_checkBox.Checked = true; //} } } /// /// 检验长度或者前缀是否合法 /// /// /// /// private bool checkLengthOrPre(CheckBox checkbox, TextBox textbox, string type) { if (checkbox.Checked == true) { if (type == "长度") { //则判断输入转换前的序列号长度是否合法,不合法则提示 if (sncode.Text.Trim().Length != int.Parse(textbox.Text)) { //序列号校验错误,长度错误 OperateResult.AppendText(">>序列号" + sncode.Text + "校验错误,长度错误\n", Color.Red); sncode.Text = ""; OperateResult.AppendText("<<请重新输入序列号\n", Color.Green); return false; } } else if (type == "前缀") { //则判断输入转换前的序列号前缀是否合法,不合法则提示 if (!sncode.Text.StartsWith(textbox.Text.Trim())) { //序列号校验错误,前缀错误 OperateResult.AppendText(">>序列号" + sncode.Text + "校验错误,前缀错误\n", Color.Red); sncode.Text = ""; OperateResult.AppendText("<<请重新输入序列号\n", Color.Green); return false; } } return true; } return true; } } }