using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicMethod; namespace UAS_MES_NEW.Special { public partial class Special_AfSale : Form { ExcelHandler eh; AutoSizeFormClass asc = new AutoSizeFormClass(); DataHelper dh; string bsncode = "";//序列号录入框值 LogStringBuilder sql = new LogStringBuilder(); /// /// 已选的不良 /// List ChoosedList = new List(); /// /// 待选的不良 /// List WaitList = new List(); public Special_AfSale() { InitializeComponent(); } private void Special_BoxSplit_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); dh = SystemInf.dh; eh = new ExcelHandler(); LoadBadGroupData(); LoadBadCodeListView(); cu_code.TableName = "CUSTOMER"; cu_code.DBTitle = "客户查询"; cu_code.SelectField = "cu_id # ID,cu_code # 客户编号,cu_name # 客户名称"; cu_code.SetValueField = new string[] { "cu_id", "cu_code", "cu_name"}; cu_code.FormName = Name; // cu_code.Condition = "(pi_type ='自由出货' or pi_inoutno like('XSCK%') or pi_inoutno like('QTCK%') or pi_inoutno like('WWLL%'))"; // cu_code.DbChange += Pi_inoutno_DbChange; } /// /// 加载不良代码的ListView的信息 /// private void LoadBadCodeListView() { object bg_code = bc_groupcode.SelectedValue; sql.Clear(); sql.Append("select bg_code||':'||bg_name bg_code,bc_code,bc_name,'' bc_remark from badgroupdetail "); sql.Append("left join badgroup on bg_id=bgd_bgid left join badcode on bgd_badcode=bc_code where "); sql.Append("bg_code='" + (bg_code != null ? bg_code.ToString() : "") + "' and bg_code is not null order by bgd_detno"); DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); BadInfSource.DataSource = dt; //往listview中添加数据 WaitRejectList.Items.Clear(); WaitRejectList.BeginUpdate(); for (int i = 0; i < dt.Rows.Count; i++) { if (!ChoosedList.Contains(dt.Rows[i]["bc_code"].ToString())) { ListViewItem lvi = new ListViewItem(); //第一列是勾选列,设置列头文本为空 lvi.Text = ""; WaitList.Add(dt.Rows[i]["bc_code"].ToString()); for (int j = 0; j < dt.Columns.Count; j++) lvi.SubItems.Add(dt.Rows[i][j].ToString()); WaitRejectList.Items.Add(lvi); } } WaitRejectList.EndUpdate(); } DataTable dt; /// /// 加载已选不良的ListView /// private void LoadChoosedBadListView() { sql.Clear(); sql.Append("select AS_BGCODE||':'||AS_BGNAME bg_code,AS_BADCODE bc_code,AS_BADNAME bc_name,' ' mb_badremark from afsales "); sql.Append(" "); sql.Append(" where as_sn='" + sncode.Text + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); ChoosedRejectList.Items.Clear(); ChoosedRejectList.BeginUpdate(); for (int i = 0; i < dt.Rows.Count; i++) { ListViewItem lvi = new ListViewItem(); //第一列是勾选列,设置列头文本为空 lvi.Text = ""; ChoosedList.Add(dt.Rows[i]["bc_code"].ToString()); for (int j = 0; j < dt.Columns.Count; j++) lvi.SubItems.Add(dt.Rows[i][j].ToString()); ChoosedRejectList.Items.Add(lvi); } ChoosedRejectList.EndUpdate(); } /// /// 填充不良组别信息 /// private void LoadBadGroupData() { //如果ms_makecode的值修改过再去查询 sql.Clear(); sql.Append("select bg_code||':'||bg_name bg_name,bg_code from badgroup left join (select pb_badgroup,pr_kind "); sql.Append("from product left join productkind on pk_name=pr_kind "); sql.Append("left join productbadgroup on pk_code=PB_KINDCODE )"); sql.Append("on pb_badgroup=bg_code where bg_statuscode='AUDITED' order by case when bg_code='" + User.DefaultBadGroup + "' then 0 else 1 end"); DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); bc_groupcode.DisplayMember = "bg_name"; bc_groupcode.ValueMember = "bg_code"; bc_groupcode.DataSource = dt; } private void Special_ReSNBD_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void sncode_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { LoadBadCodeListView(); LoadChoosedBadListView(); DataTable dt = (DataTable)dh.ExecuteSql("select to_char(ms_indate,'yyyy-mm-dd') ms_indate,ms_sncode,ms_makecode,ms_prodcode,pr_orispeccode from makeserial left join PRODUCT ON ms_prodcode = pr_code where ms_sncode = '" + sncode.Text+"'", "select"); if (dt.Rows.Count > 0) { BaseUtil.SetFormValue(this.Controls, dt); OperateResult.AppendText(">>SN:" + sncode.Text + "采集成功\n", Color.Green); } else { OperateResult.AppendText(">>SN:"+sncode.Text+ "采集成功,无生产记录\n", Color.Black); ms_sncode.Text = sncode.Text; } bc_code.Focus(); bc_code.SelectAll(); } } private void Save_Click(object sender, EventArgs e) { if (ms_sncode.Text == "") { OperateResult.AppendText(">>序列号不允许为空\n", Color.Red); return; } int RejectCount = ChoosedRejectList.Items.Count; string[] bccode = new string[RejectCount]; string[] bgcode = new string[RejectCount]; string[] bgname = new string[RejectCount]; string[] bcname = new string[RejectCount]; if (ChoosedRejectList.Items.Count == 0) { OperateResult.AppendText(">>不良品必须选择不良原因和不良代码!\n", Color.Red); return; } else { for (int i = 0; i < RejectCount; i++) { //获取不良代码组 bgcode[i] = ChoosedRejectList.Items[i].SubItems[1].Text.Split(':')[0]; //获取不良代码组名称 bgname[i] = ChoosedRejectList.Items[i].SubItems[1].Text.Split(':')[1]; //获取所有的不良代码 bccode[i] = ChoosedRejectList.Items[i].SubItems[2].Text; //获取不良名称 bcname[i] = ChoosedRejectList.Items[i].SubItems[3].Text; } } dh.ExecuteSql("delete from AFSALES where as_sn='" + ms_sncode.Text + "' ", "delete"); //string seq = dh.GetSEQ("AFSALES_seq"); sql.Clear(); sql.Append("insert into AFSALES(as_id,as_sn,as_badcode,as_badname,as_indate,as_inman,as_makecode"); sql.Append(",as_prodcode,as_orispeccode,as_madedate,as_bgcode,as_bgname,as_datedif,AS_REMARK,AS_CUST,AS_FCSMAN,AS_SCSMAN,AS_FVMAN)"); sql.Append("select AFSALES_seq.nextval,'" + ms_sncode.Text+ "',:bc_code,:bc_name,sysdate,'"+User.UserCode+ "',ms_makecode,"); sql.Append("ms_prodcode,pr_orispeccode,ms_indate,:bg_code,:bg_name, datedif,'"+ remarkin.Text + "','"+cu_code.Text+ "',t1,t2,fv from ((select max(ms_indate) ms_indate ,max(ms_prodcode) ms_prodcode,max(pr_orispeccode) pr_orispeccode,max(ms_makecode) ms_makecode,round(sysdate- nvl(max(ms_indate),sysdate),2) datedif,max(T1) t1,max(T2) t2,max(FV) fv from makeserial left join MES_T1T2FV_VIEW on ms_code = SP_SNCODE left join product on ms_prodcode = pr_code where ms_sncode = '" + ms_sncode.Text+"' and ms_nextmacode is null)) "); if (bgcode.Length > 0) { dh.BatchInsert(sql.GetString(), new string[] { "bc_code", "bc_name", "bg_code", "bg_name" }, bccode, bcname, bgcode, bgname); } LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ms_makecode.Text, User.UserLineCode, User.UserSourceCode, "售后判定", "售后判定成功", ms_sncode.Text,"" ); OperateResult.AppendText(">>SN:" + sncode.Text + "售后判定成功\n", Color.Green, sncode); string CU = cu_code.Text; BaseUtil.CleanControls(this.Controls); remarkin.Text = ""; ChoosedRejectList.Items.Clear(); WaitList.Clear(); ChoosedList.Clear(); LoadBadGroupData(); LoadBadCodeListView(); cu_code.Text = CU; sncode.Focus(); sncode.SelectAll(); } private void bc_groupcode_SelectedIndexChanged(object sender, EventArgs e) { LoadBadCodeListView(); } private void bc_code_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { sql.Clear(); sql.Append("select bg_code||':'||bg_name bg_code,bc_code,bc_name,'' bc_remark from badgroupdetail left join "); sql.Append("badgroup on bg_id=bgd_bgid left join badcode on bgd_badcode = bc_code where bc_code='" + bc_code.Text + "' and rownum=1 "); DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { for (int i = 0; i < ChoosedRejectList.Items.Count; i++) { if (ChoosedRejectList.Items[i].ListView.Items[i].SubItems[2].Text == bc_code.Text) { OperateResult.AppendText(">>已添加过不良代码" + bc_code.Text + "\n", Color.Red, bc_code); return; } } ListViewItem lvi = new ListViewItem(); lvi.Text = ""; for (int j = 0; j < dt.Columns.Count; j++) lvi.SubItems.Add(dt.Rows[0][j].ToString()); ChoosedRejectList.Items.Add(lvi); bc_code.Clear(); } else OperateResult.AppendText(">>" + bc_code.Text + "不良代码不存在\n", Color.Red, bc_code); } } private void Filter_UserControlTextChanged(object sender, EventArgs e) { try { DataRow[] dr = (BadInfSource.DataSource as DataTable).Select("bc_code like '%" + Filter.Text + "%' or bc_name like '%" + Filter.Text + "%'"); DataTable dt = (BadInfSource.DataSource as DataTable).Clone(); for (int i = 0; i < dr.Length; i++) { dt.Rows.Add(dr[i].ItemArray); } WaitRejectList.Items.Clear(); WaitRejectList.BeginUpdate(); for (int i = 0; i < dt.Rows.Count; i++) { if (!ChoosedList.Contains(dt.Rows[i]["bc_code"].ToString())) { ListViewItem lvi = new ListViewItem(); //第一列是勾选列,设置列头文本为空 lvi.Text = ""; WaitList.Add(dt.Rows[i]["bc_code"].ToString()); for (int j = 0; j < dt.Columns.Count; j++) lvi.SubItems.Add(dt.Rows[i][j].ToString()); WaitRejectList.Items.Add(lvi); } } WaitRejectList.EndUpdate(); } catch (Exception) { } } private void ChooseedReject_Click(object sender, EventArgs e) { if (sncode.Text == "") { OperateResult.AppendText(">>序列号不能为空\n", Color.Red); sncode.Focus(); return; } int CheckedNum = 0; //是否已经添加到不良 bool AddToReject = false; for (int i = WaitRejectList.Items.Count - 1; i >= 0; i--) { if (WaitRejectList.Items[i].Checked) { AddToReject = false; for (int j = 0; j < ChoosedRejectList.Items.Count; j++) { if ((ChoosedRejectList.Items[j].SubItems[2].Text == WaitRejectList.Items[i].SubItems[2].Text)) { AddToReject = true; OperateResult.AppendText(">>已存在" + ChoosedRejectList.Items[j].SubItems[2].Text + "不良\n", Color.Red); break; } } //未添加则进行添加 if (!AddToReject) { WaitRejectList.Items[i].Checked = false; ChoosedRejectList.Items.Add((ListViewItem)WaitRejectList.Items[i].Clone()); WaitRejectList.Items[i].Remove(); CheckedNum++; } } } if (CheckedNum == 0) { OperateResult.AppendText(">>请勾选不良代码\n", Color.Red); } } private void WaitReject_Click(object sender, EventArgs e) { int CheckedNum = 0; //已存在在ListView中的Item是不能添加到其他ListView中的,需要调用其克隆的方法 for (int i = ChoosedRejectList.Items.Count - 1; i >= 0; i--) { if (ChoosedRejectList.Items[i].Checked) { ChoosedRejectList.Items[i].Checked = false; WaitRejectList.Items.Add((ListViewItem)ChoosedRejectList.Items[i].Clone()); ChoosedRejectList.Items[i].Remove(); CheckedNum++; } } if (CheckedNum == 0) { for (int i = ChoosedRejectList.Items.Count - 1; i >= 0; i--) { WaitRejectList.Items.Add((ListViewItem)ChoosedRejectList.Items[i].Clone()); ChoosedRejectList.Items[i].Remove(); } } } private void WaitRejectList_DoubleClick(object sender, EventArgs e) { for (int i = WaitRejectList.Items.Count - 1; i >= 0; i--) { if (WaitRejectList.Items[i].Checked) { //双击右移 ChooseedReject.PerformClick(); } } } private void button1_Click(object sender, EventArgs e) { DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult.OK) { string fileload = openFileDialog1.FileName; dt = eh.ImportExcel(fileload, "test"); List snlist = new List(); List ngcodelist = new List(); List ngnamelist = new List(); List bdcodelist = new List(); List bdnamelist = new List(); List emcodelist = new List(); List timelist = new List(); List remarklist = new List(); List custlist = new List(); try { for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["SN"].ToString().Trim() == "") { OperateResult.AppendText(">>第" + (i + 1) + "行SN为空\n", Color.Red); continue; } if (dh.CheckExist("AFSALES", "as_sn = '" + dt.Rows[i]["SN"].ToString() + "'")) { OperateResult.AppendText(">>第" + (i + 1) + "行SN已判定\n", Color.Red); continue; } if (snlist.Contains(dt.Rows[i]["SN"].ToString())) { OperateResult.AppendText(">>第" + (i + 1) + "行SN已存在与此表格\n", Color.Red); continue; } if (dt.Rows[i]["不良代码"].ToString().Trim() == "") { OperateResult.AppendText(">>第" + (i + 1) + "行不良代码为空\n", Color.Red); continue; } if ( !dh.CheckExist("badcode", "bc_code = '" + dt.Rows[i]["不良代码"].ToString() + "'")) { OperateResult.AppendText(">>第" + (i + 1) + "行不良代码不存在\n", Color.Red); continue; } if (dt.Rows[i]["人员"].ToString().Trim() == "" ) { OperateResult.AppendText(">>第" + (i + 1) + "行人员为空\n", Color.Red); continue; } if (!dh.CheckExist("employee", "em_code = '" + dt.Rows[i]["人员"].ToString() + "'")) { OperateResult.AppendText(">>第" + (i + 1) + "行人员不存在\n", Color.Red); continue; } String timeRegex1 = "^(?\\d{2,4})/(?\\d{1,2})/(?\\d{1,2})$"; if (dt.Rows[i]["时间"].ToString().Trim() == "") { OperateResult.AppendText(">>第" + (i + 1) + "行时间为空\n", Color.Red); continue; } if ( !Regex.IsMatch(dt.Rows[i]["时间"].ToString(), timeRegex1)) { OperateResult.AppendText(">>第" + (i + 1) + "行时间不符合要求\n", Color.Red); continue; } snlist.Add(dt.Rows[i]["SN"].ToString()); emcodelist.Add(dt.Rows[i]["人员"].ToString()); timelist.Add(dt.Rows[i]["时间"].ToString()); remarklist.Add(dt.Rows[i]["备注"].ToString()); custlist.Add(dt.Rows[i]["客户"].ToString()); bdcodelist.Add(dt.Rows[i]["不良代码"].ToString()); DataTable ddt = (DataTable)dh.ExecuteSql("select bc_groupname,bc_groupcode,bc_name from badcode where bc_code = '" + dt.Rows[i]["不良代码"].ToString() + "'", "select"); ngnamelist.Add(ddt.Rows[0]["bc_groupname"].ToString()); ngcodelist.Add(ddt.Rows[0]["bc_groupcode"].ToString()); bdnamelist.Add(ddt.Rows[0]["bc_name"].ToString()); } if (snlist.Count > 0) { sql.Clear(); sql.Append("insert into TEMP_AF(ID,SN,BDCODE,BDNAME,BGCODE,BGNAME,INDATE,INMAN,REMARK,CUST)"); sql.Append("values(afsales_seq.nextval,:snlist,:bdcodelist,:bdnamelist,:ngcodelist,:ngnamelist,:timelist,:emcodelist,:remarklist,:custlist)"); dh.BatchInsert(sql.GetString(), new string[] { "snlist", "bdcodelist", "bdnamelist", "ngcodelist", "ngnamelist", "timelist", "emcodelist", "remarklist", "custlist" } , snlist.ToArray(), bdcodelist.ToArray(), bdnamelist.ToArray(), ngcodelist.ToArray(), ngnamelist.ToArray(), timelist.ToArray(), emcodelist.ToArray(), remarklist.ToArray(), custlist.ToArray()); sql.Clear(); sql.Append("insert into afsales(as_id,as_sn,as_badcode,as_badname,as_bgcode,as_bgname,as_indate,as_inman,AS_REMARK,as_cust,as_madedate,as_prodcode,as_orispeccode,as_makecode,AS_FCSMAN,AS_SCSMAN,AS_FVMAN) "); sql.Append(" select ID,SN,BDCODE,BDNAME,BGCODE,BGNAME,to_date(INDATE,'yyyy/mm/dd'),INMAN,REMARK,CUST,max(ms_indate) ms_indate ,max(ms_prodcode) ms_prodcode,max(pr_orispeccode) "); sql.Append(" pr_orispeccode,max(ms_makecode) ms_makecode,t1,t2,fv from TEMP_AF left join makeserial on sn = ms_sncode and ms_nextmacode is null left join MES_T1T2FV_VIEW on ms_code = SP_SNCODE left join "); sql.Append(" product on ms_prodcode = pr_code group by ID,SN,BDCODE,BDNAME,BGCODE,BGNAME,to_date(INDATE,'yyyy/mm/dd'),INMAN,REMARK,CUST,t1,t2,fv "); dh.ExecuteSql(sql.GetString(), "insert"); } dh.ExecuteSql("delete TEMP_AF", "delete"); OperateResult.AppendText(">>导入" + snlist.Count + "行完成\n", Color.Green); } catch (Exception ex) { dh.ExecuteSql("delete TEMP_AF", "delete"); MessageBox.Show(ex.Message); } } } } }