using System; using System.Data; using System.Windows.Forms; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicMethod; using System.Drawing; using System.Collections.Generic; using UAS_MES_NEW.PublicForm; using System.IO.Ports; namespace UAS_MES_NEW.Make { public partial class Make_FeedingCollectionCheck : Form { //MakeSerial表主键 string ms_id; //制造单号 string make_code; //产品编号 string make_prodcode; //工序编号 string nextstepcode; //完工状态 string ms_status; //工艺路线编号 //Bom版本 string mabomversion; string ErrorMessage = ""; List TSN = new List(); Dictionary CheckBarcode = new Dictionary(); //用于提醒的序列B string[] RemainList = new string[0]; //提醒序列的索引 int RemainIndex = 0; string oMakeCode = ""; string oMsid = ""; string ms_firstsn = ""; DataHelper dh; LogStringBuilder sql = new LogStringBuilder(); DataTable DBFind; DataTable dt; //保存ListB中的数据 DataTable dt1; AutoSizeFormClass asc = new AutoSizeFormClass(); List CollectData = new List(); List CollectDataSonCode = new List(); List SPID = new List(); public Make_FeedingCollectionCheck() { InitializeComponent(); } private void Make_FeedingCollection_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); LockMakeCode.GetMakeCodeCtl(ma_code); ma_code.SetLockCheckBox(LockMakeCode); //工单号放大镜配置 ma_code.TableName = "make left join product on ma_prodcode=pr_code"; ma_code.SelectField = "ma_code # 工单号,ma_prodcode # 产品编号,ma_qty # 工单数量,ma_craftcode # 途程编号,pr_spec # 产品名称,ma_bomversion # Bom版本,ma_softversion # 软件版本,ma_ecncode # ECN号"; ma_code.FormName = Name; ma_code.DBTitle = "工单查询"; ma_code.SetValueField = new string[] { "ma_code", "ma_prodcode", "ma_qty", "pr_spec", "ma_craftcode", "ma_bomversion", "ma_softversion", "ma_ecncode" }; ma_code.Condition = "ma_statuscode='STARTED'"; ma_code.DbChange += Ma_code_DBChange; code.Focus(); dh = SystemInf.dh; StepCount.StepCode = User.CurrentStepCode; StepCount.Source = User.UserSourceCode; StepCount.LineCode = User.UserLineCode; StepCount.Dh = dh; StepCount.Start(); } private void Ma_code_DBChange(object sender, EventArgs e) { DBFind = ma_code.ReturnData; BaseUtil.SetFormValue(this.Controls, DBFind); string ifforsn = dh.getFieldDataByCondition("make left join stepbom on ma_prodcode=sb_prodcode left join stepproduct on sb_id=sp_sbid", "nvl(sp_ifforsn,0) sp_ifforsn", "ma_code='" + ma_code.Text + "' and sp_craftcode='" + ma_craftcode.Text + "' and sp_stepcode='" + User.CurrentStepCode + "' and sb_bomversion='" + ma_bomversion.Text + "' order by sp_detno").ToString(); if (ifforsn != "" && ifforsn != "0") iflastsn.Checked = true; else iflastsn.Checked = false; } private void Make_FeedingCollection_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void Clean_Click(object sender, EventArgs e) { OperateResult.Clear(); } private void Confirm_Click(object sender, EventArgs e) { KeyEventArgs e2 = new KeyEventArgs(Keys.Enter); code_KeyDown(sender, e2); } private void code_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (LogicHandler.CheckStepAttribute(Tag.ToString(), User.UserSourceCode, out ErrorMessage)) { if (Loading.Checked) { if (code.Text.Replace(" ", "") == "") { OperateResult.AppendText(">>采集数据不可为空\n", Color.Red); return; } //如果录入框和工单号均有输入 if (code.Text != "" && ma_code.Text != "" && sn_code.Text == "") { GetCollectItem(); BaseUtil.FillDgvWithDataTable(LabelDataGridView, dt1); } //输入框有值但未选择工单号 else if (code.Text != "" && ma_code.Text == "" && sn_code.Text == "") { GetCollectItem(); BaseUtil.FillDgvWithDataTable(LabelDataGridView, dt1); } else if (sn_code.Text != "") { bool AllCheck = true; bool FindBarcode = false; for (int i = 0; i < LabelDataGridView.Rows.Count; i++) { if (LabelDataGridView.Rows[i].Cells["BarCode"].Value.ToString() == code.Text) { LabelDataGridView.Rows[i].Cells["cm_checksn"].Value = code.Text; FindBarcode = true; } if (LabelDataGridView.Rows[i].Cells["cm_checksn"].Value == null) { AllCheck = false; } } if (FindBarcode) { OperateResult.AppendText(">>条码" + sn_code.Text + "核对成功!\n", Color.Green, code); } else { OperateResult.AppendText(">>条码" + sn_code.Text + "核对失败!\n", Color.Red, code); } if (AllCheck) { if (!LogicHandler.SetStepResult(ma_code.Text, User.UserSourceCode, sn_code.Text, "核对成功", "关键物料核对成功", User.UserCode, out ErrorMessage)) OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red, sn_code); else { //提示正确返回时传递的信息 if (ErrorMessage.Contains("AFTERSUCCESS")) OperateResult.AppendText(">>" + ErrorMessage + "\n"); OperateResult.AppendText(">>序列号" + sn_code.Text + "采集成功!\n", Color.Green); } sn_code.Text = ""; code.Text = ""; } } } } else OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red, code); } } //获取采集的项目 private void GetCollectItem() { bool NoteAlready = LogicHandler.CheckDiffMakeCodeBeforeStepCheck(code.Text, ma_code.Text, NoteForChange.Checked, out oMakeCode, out ErrorMessage); if (!NoteAlready) { OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red, code); return; } if (LogicHandler.CheckStepSNAndMacode(oMakeCode, User.UserSourceCode, code.Text, User.UserCode, out oMakeCode, out oMsid, out ErrorMessage)) { nextstepcode = dh.getFieldDataByCondition("makeserial", "ms_nextstepcode", "ms_id='" + oMsid + "'").ToString(); if (nextstepcode != User.CurrentStepCode) { string stname = dh.getFieldDataByCondition("step", "st_name", "st_code='" + nextstepcode + "'").ToString(); OperateResult.AppendText("<<序列号:" + code.Text + "下一工序是" + stname + ",不是当前岗位的工序\n", Color.Red, code); return; } if (!LogicHandler.CheckDiffMakeCodeAfterStepCheck(code.Text, oMakeCode, NoteForChange.Checked, NoteAlready, ma_code, out ErrorMessage)) { OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red, code); return; } //将录入框的值给序列号 sn_code.Text = code.Text; sql.Clear(); sql.Append("select ma_prodcode,ma_ecncode,ma_softversion,ms_firstsn,ma_bomversion,ma_qty,ma_code,pr_spec,ms_status,ms_id,ms_craftcode,ms_nextstepcode"); sql.Append(",ms_prodcode,ms_makecode,ms_code,ms_stepname from makeserial left join make on ma_code=ms_makecode "); sql.Append("left join product on ms_prodcode=pr_code where ms_sncode='" + code.Text + "' order by ms_id desc"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { ms_id = dt.Rows[0]["ms_id"].ToString(); make_code = dt.Rows[0]["ma_code"].ToString(); mabomversion = dt.Rows[0]["ma_bomversion"].ToString(); make_prodcode = dt.Rows[0]["ms_prodcode"].ToString(); nextstepcode = dt.Rows[0]["ms_nextstepcode"].ToString(); ms_status = dt.Rows[0]["ms_status"].ToString(); ms_firstsn = dt.Rows[0]["ms_firstsn"].ToString(); BaseUtil.SetFormValue(this.Controls, dt); string ifforsn = dh.getFieldDataByCondition("make left join stepbom on ma_prodcode=sb_prodcode left join stepproduct on sb_id=sp_sbid", "nvl(sp_ifforsn,0) sp_ifforsn", "ma_code='" + ma_code.Text + "' and sp_stepcode='" + User.CurrentStepCode + "' and sp_craftcode='" + ms_craftcode.Text + "' and sb_bomversion='" + ma_bomversion.Text + "' order by sp_detno").ToString(); if (ifforsn != "" && ifforsn != "0") iflastsn.Checked = true; else iflastsn.Checked = false; LockMakeCode.Checked = true; //勾选了前一工单 if (iflastsn.Checked) { dt = (DataTable)dh.ExecuteSql("select ms_id,ms_makecode,ms_craftcode,ms_status,ms_nextstepcode,ms_prodcode,ms_code from makeserial where ms_sncode='" + code.Text + "' and ms_makecode<>'" + ma_code.Text + "' order by ms_id desc", "select"); string make_code = ""; string make_prodcode = ""; string nextstepcode = ""; string ms_status = ""; if (dt.Rows.Count > 0) { ms_id = dt.Rows[0]["ms_id"].ToString(); make_code = dt.Rows[0]["ms_makecode"].ToString(); make_prodcode = dt.Rows[0]["ms_prodcode"].ToString(); nextstepcode = dt.Rows[0]["ms_nextstepcode"].ToString(); ms_status = dt.Rows[0]["ms_status"].ToString(); //判断序列号的前一工单是否已经完工 if (dt.Rows[0]["ms_makecode"].ToString() != ma_code.Text && dt.Rows[0]["ms_status"].ToString() == "2") { sql.Clear(); sql.Append("select sp_id,sp_soncode from make inner join stepbom on ma_prodcode=sb_prodcode and ma_bomversion=sb_bomversion left "); sql.Append("join stepproduct on sp_sbid=sb_id where ma_code='" + ma_code.Text + "' and sp_craftcode='" + ms_craftcode.Text + "' "); sql.Append("and sp_stepcode='" + User.CurrentStepCode + "' and nvl(sp_ifforsn,0)<>0"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { string sp_id = dt.Rows[0]["sp_id"].ToString(); string sp_soncode = dt.Rows[0]["sp_soncode"].ToString(); if (!dh.CheckExist("Craftmaterial", "cm_makecode='" + ma_code.Text + "' and cm_soncode='" + make_prodcode + "' and cm_sncode='" + code.Text + "' and cm_status=0")) { CollectDataSonCode.Add(sp_soncode); SPID.Add(sp_id); CollectData.Add(code.Text); sn_code.Text = code.Text; OperateResult.AppendText(">>序列号" + code.Text + ",物料" + sp_soncode + "上料成功\n", Color.Green); RemainIndex = RemainIndex + 1; GetItem(); return; } else { GetItem(); } } else OperateResult.AppendText(">>序列号" + code.Text + "无生产信息\n", Color.Red, code); } else OperateResult.AppendText(">>序列号" + code.Text + "已被工单" + dt.Rows[0]["ms_makecode"].ToString() + "绑定,尚未完工\n", Color.Red, code); } else OperateResult.AppendText(">>序列号" + code.Text + "无生产信息\n", Color.Red, code); } else { dt = (DataTable)dh.ExecuteSql("select ms_status,ms_stepcode,ms_nextstepcode from makeserial where ms_sncode='" + code.Text + "' and ms_makecode='" + ma_code.Text + "' order by ms_id desc", "select"); nextstepcode = dt.Rows[0]["ms_nextstepcode"].ToString(); ms_status = dt.Rows[0]["ms_status"].ToString(); sn_code.Text = code.Text; sql.Clear(); sql.Append("select ma_code,ma_softversion,ma_ecncode,ma_prodcode,pr_spec,ma_qty from makeserial left join product "); sql.Append(" on ms_prodcode=pr_code left join make on ms_makecode=ma_code left join "); sql.Append("makecraftdetail on mcd_macode=ms_makecode where ms_id='" + oMsid + "' and mcd_stepcode='" + User.CurrentStepCode + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); BaseUtil.SetFormValue(this.Controls, dt); OperateResult.AppendText(">>获取序列号" + code.Text + "成功\n", Color.Green); GetItem(); } } else { OperateResult.AppendText(">>序列号" + code.Text + "不存在\n", Color.Red, code); code.Text = ""; sn_code.Text = ""; } } else OperateResult.AppendText(">>" + ErrorMessage + "\n", Color.Red, code); } private void GetItem() { //单独用一个DataTable存储一个 dt1 = new DataTable(); sql.Clear(); sql.Append("select max(cm_barcode)cm_barcode,max(pr_lightbox)pr_lightbox,sp_id,max(sp_detno)sp_detno,min(sp_ifrepeat)sp_ifrepeat,max(sp_checkbarcode)sp_checkbarcode,min(sp_checksalecode)sp_checksalecode,"); sql.Append("sp_fsoncode,max(sp_barcoderule)sp_barcoderule,wm_concat(sp_soncode) sp_soncode,max(sp_ifuseregex)sp_ifuseregex,max(sp_ifforsn)"); sql.Append("sp_ifforsn,max(sp_length)sp_length,max(sp_type)sp_type,replace(wm_concat(sp_prefix),',','|')sp_prefix,max(sp_regex)"); sql.Append("sp_regex,max(pr_detail)pr_detail,max(substr(pr_spec,0,20))pr_spec from stepproduct left join product on pr_code=sp_fsoncode "); sql.Append("left join (select cm_barcode,cm_fsoncode from craftmaterial where cm_makecode='" + ma_code.Text + "' "); sql.Append("and cm_status=0 and cm_sncode in (select '" + ms_firstsn + "' from dual union select sn from makesnrelation where firstsn='" + ms_firstsn + "')) "); sql.Append("on sp_fsoncode=cm_fsoncode where sp_bomversion='" + ma_bomversion.Text + "' and sp_craftcode='" + ms_craftcode.Text + "'"); sql.Append("And sp_mothercode ='" + ma_prodcode.Text + "' and sp_tracekind=1 and nvl(sp_iflabelcheck,0)=-1 group by sp_fsoncode,sp_id order by SP_DETNO asc"); dt1 = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); code.Clear(); //用于记录提醒的数据长度 RemainList = new string[dt1.Rows.Count]; for (int i = 0; i < dt1.Rows.Count; i++) { string soncode = dt1.Rows[i]["sp_soncode"].ToString(); string prdetail = dt1.Rows[i]["pr_detail"].ToString(); string pr_lightbox = dt1.Rows[i]["pr_lightbox"].ToString(); RemainList[i] = soncode + "(" + prdetail + ")"; } if (dt1.Rows.Count > 0) { try { string soncode = dt1.Rows[RemainIndex]["sp_soncode"].ToString(); string prdetail = dt1.Rows[RemainIndex]["pr_detail"].ToString(); OperateResult.AppendText("<<请采集" + soncode + "(" + prdetail + ")的物料数据\n", Color.Black); } catch (Exception) { OperateResult.AppendText(">>序列号" + sn_code.Text + "上料采集完成!\n", Color.Green); code.Text = ""; sn_code.Text = ""; } } else { OperateResult.AppendText(">>序列号" + sn_code.Text + "不在本道工序,请采集其它序列号\n", Color.Red); code.Text = ""; sn_code.Text = ""; } } private void ClearSn_code_Click(object sender, EventArgs e) { sn_code.Clear(); SPID.Clear(); TSN.Clear(); CheckBarcode.Clear(); CollectData.Clear(); CollectDataSonCode.Clear(); if (dt1 != null) BaseUtil.CleanDataTableData(dt1); RemainIndex = 0; BaseUtil.CleanDGVData(LabelDataGridView); OperateResult.AppendText(">>请采集序列号\n", Color.Black); } private void ma_code_UserControlTextChanged(object sender, EventArgs e) { if (ma_code.Text.Length > 5) { string ErrMessage = ""; if (LogicHandler.CheckMakeStatus(ma_code.Text, out ErrMessage)) { mcd_inqty.Text = ""; mcd_remainqty.Text = ""; sql.Clear(); sql.Append("select mcd_inqty,ma_qty-mcd_inqty mcd_remainqty "); sql.Append("from make left join makecraftdetail_view on mcd_macode=ma_code where "); sql.Append("ma_code='" + ma_code.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'"); DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) BaseUtil.SetFormValue(Controls, dt); } } } } }