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 = "";//转换前序列号 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 != "") { OperateResult.AppendText(">>序列号:" + sncode.Text + " , 发送请求\n", Color.Green); //如果用户没有输入工单号自行去后台查询 string macode; //如果用户填写了工单号 if (ma_code.Text != "") { macode = ma_code.Text; //用户填写了工单号,那么序列号必须要是该工单的,否则提示错误 if (dh.CheckExist("makeserial", "ms_makecode='" + ma_code.Text + "' and (ms_sncode='" + sncode.Text + "' or ms_beforesn='" + sncode.Text + "')")) { OperateResult.AppendText(">>序列号" + sncode.Text + "不属于工单" + ma_code.Text + ",请重新输入或者切换工单\n", Color.Red); return; } } else { macode = dh.getFieldDataByCondition("makeserial", "ms_makecode", "ms_sncode='" + sncode.Text + "' or ms_beforesn='" + sncode.Text + "'").ToString(); } string ErrorMessage = ""; bool ifFirst; //bsncode为空,就说明是输入转换之前的序列号 if (bsncode == "") { //判断用户是否锁定输入转换前序列号长度, if (!checkLengthOrPre(beforeTransSNLength_checkBox, beforeTransSNLength, "长度")) { return; } //判断用户是否锁定输入转换前序列号前缀, if (!checkLengthOrPre(beforeTransSNPre_checkBox, beforeTransSNPre, "前缀")) { return; } //核对工序 if (LogicHandler.CheckCurrentStepAndIfFirst(sncode.Text, macode, User.UserSourceCode, Tag.ToString(), out ifFirst, out ErrorMessage)) { 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(">>不存在该已转序列号" + 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); } } //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 + "'")) { dh.UpdateByCondition("makeserial", "ms_sncode='" + sncode.Text + "'", "ms_beforesn='" + bsncode + "'"); OperateResult.AppendText(">>转换成功"); //查询ms_firstsn string firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_sncode='" + sncode.Text + "'").ToString(); //记录本次修改,存入makesnrelation表中 dh.ExecuteSql("insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + bsncode + "','" + sncode + "','" + firstsn + "','" + ma_code.Text + "', sysdate ,'" + User.UserCode + "')", "insert"); //写入日志 LogManager.DoLog("修改序列号:" + bsncode + "为" + sncode.Text + "成功!" + "操作人:" + User.UserCode); OperateResult.AppendText(">>请输入转换前的序列号\n", Color.Green); //置空 bsncode = ""; //更新数量 changenum.Text = int.Parse(changenum.Text) + 1 + ""; } else { OperateResult.AppendText(">>该序列号已存在,请输入其他序列号\n", Color.Red); } } //未勾选修改转换结果 else { if (!dh.CheckExist("makeserial", "ms_sncode='" + sncode.Text + "'")) { dh.UpdateByCondition("makeserial", "ms_sncode='" + sncode.Text + "' and ms_beforesn='" + bsncode + "'", "ms_sncode='" + bsncode + "'"); OperateResult.AppendText(">>转换成功", Color.Green); //查询ms_firstsn string firstsn = dh.getFieldDataByCondition("makeserial", "ms_firstsn", "ms_sncode='" + sncode.Text + "'").ToString(); //记录本次修改,存入makesnrelation表中 dh.ExecuteSql("insert into makesnrelation (BEFORESN,SN,FIRSTSN,MAKECODE,msr_indate, msr_inman)values('" + bsncode + "','" + sncode + "','" + firstsn + "','" + ma_code.Text + "', sysdate ,'" + User.UserCode + "')", "insert"); //写入日志 LogManager.DoLog("修改序列号:" + bsncode + "为" + sncode.Text + "成功!" + "操作人:" + User.UserCode); OperateResult.AppendText(">>请输入转换前的序列号\n", Color.Green); //置空 bsncode = ""; //更新数量 changenum.Text = int.Parse(changenum.Text) + 1 + ""; } else { OperateResult.AppendText(">>该序列号已存在,请输入其他序列号\n", Color.Red); } } } else { OperateResult.AppendText(">>相同序列号不能进行转换\n", Color.Red); } } } 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) { if (e.KeyCode == Keys.Enter) { //查询表工单序列号防呆规则表 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.ReadOnly = true; //勾选 beforeTransSNPre_checkBox.Checked = true; } if (length != "" && length != null) { //赋值 beforeTransSNLength.Text = length; //设置不可编辑 beforeTransSNLength.ReadOnly = true; //勾选 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.ReadOnly = true; //勾选 afterTransSNPre_checkBox.Checked = true; } if (length != "" && length != null) { //赋值 afterTransSNLength.Text = length; //设置不可编辑 afterTransSNLength.ReadOnly = true; //勾选 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 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; } /// /// 检验长度或者前缀是否合法 /// /// /// /// private bool checkLengthOrPre(CheckBox checkbox, EnterTextBox textbox, string type) { if (checkbox.Checked == true) { if (type == "长度") { //则判断输入转换前的序列号长度是否合法,不合法则提示 if (sncode.Text.Trim().Length != int.Parse(textbox.Text)) { //序列号校验错误,长度错误 OperateResult.AppendText(">>序列号校验错误,长度错误", Color.Red); sncode.Text = ""; OperateResult.AppendText("<<请重新输入序列号\n", Color.Green); return false; } } else if (type == "前缀") { //则判断输入转换前的序列号前缀是否合法,不合法则提示 if (!sncode.Text.StartsWith(textbox.Text.Trim())) { //序列号校验错误,前缀错误 OperateResult.AppendText(">>序列号校验错误,前缀错误", Color.Red); sncode.Text = ""; OperateResult.AppendText("<<请重新输入序列号\n", Color.Green); return false; } } return true; } return true; } } }