using System; using System.Collections.Generic; using System.Data; using System.Drawing; 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_Repair : Form { string caller = "Make!Repair"; //记录维修结果的代码值 string Repair_Result; //记录不良状态码 string badcode; //记录不良组别 string groupcode; //判断是否获取了下拉框的值 string mb_id1; //记录插入操作日志表的sql string cm_makecode; //执行插入日志的SQL string insert_makeprocess = "insert into makeprocess(mp_id,mp_makecode,mp_maid, mp_mscode,mp_sncode,mp_stepcode,mp_stepname,mp_craftcode,mp_craftname,mp_kind,mp_result,mp_indate,mp_inman,mp_wccode,mp_linecode,mp_sourcecode) select MakeProcess_seq.nextval, ma_code,ma_id,ms_code,ms_sncode,mcd_stepcode,mcd_stepname,ma_craftcode,'','维修作业','#',sysdate,'" + User.UserName + "',ma_wccode,ma_linecode,'' from make left join makecraftdetail on mcd_macode=ma_code left join makeserial on ms_makecode=ma_code where ms_sncode=:ms_sncode and ma_code=:ma_code"; //是否获取过下拉框数据 bool GetSelectData = false; DataHelper dh = null; LogStringBuilder sql = new LogStringBuilder(); List sqls = new List(); DataTable dt = null; AutoSizeFormClass asc = new AutoSizeFormClass(); public Make_Repair() { InitializeComponent(); //为DBFind配置Call和Form的名称 cr_code.FormName = Name; cr_code.TableName = "craft"; cr_code.SelectField = "cr_name # 工艺名称 ,cr_code # 工艺编号,cr_prodcode # 物料编号"; cr_code.SetValueField = new string[] { "cr_code" }; cd_stepcode.FormName = Name; cd_stepcode.TableName = "craftdetail left join step on st_code=cd_stepcode left join craft on cd_crid=cr_id"; cd_stepcode.SetValueField = new string[] { "cd_stepcode" }; cd_stepcode.SelectField = "cd_stepname # 工序名称 ,cd_stepcode # 工序编号,cd_stepno # 执行顺序"; cd_stepcode.Condition = "ST_STATUSCODE='AUDITED' and cr_code='" + cr_code.Text + "'"; RepairResult.Text = "待维修"; ms_nextstepcode.Text = User.CurrentStepCode; st_name.Text = User.CurrentStepName; } private void 维修作业_Load(object sender, EventArgs e) { //添加不良信息的静态数据 ItemObject[] io = new ItemObject[4]; io[0] = new ItemObject("待维修", "0"); io[1] = new ItemObject("已维修", "1"); io[2] = new ItemObject("不可维修", "2"); io[3] = new ItemObject("无不良", "-1"); RepairResult.Items.AddRange(io); dh = new DataHelper(); asc.controllInitializeSize(this); } private void GetSNCode_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //如果勾选了换料 if (Refueling.Checked) { dt = (DataTable)dh.ExecuteSql("select bar_status,bar_code,bar_prodcode from barcode where bar_code ='" + GetSNCode.Text + "'", "select"); if (dt.Rows.Count == 0) { OperatResult.AppendText(">>条码" + GetSNCode.Text + "不存在\n", Color.Red); } else { //获取条码对应的产品code string bar_prodcode = dt.Rows[0]["bar_prodcode"].ToString(); string bar_code = dt.Rows[0]["bar_code"].ToString(); dt = (DataTable)dh.ExecuteSql("select cm_makecode from craftmaterial where cm_sncode='" + ms_sncode.Text + "' and cm_soncode='" + bar_prodcode + "'", "select"); if (dt.Rows.Count == 0) { OperatResult.AppendText(">>该条码对应的物料" + bar_prodcode + "不是该工单所需物料\n", Color.Red); } else { dt = (DataTable)dh.ExecuteSql("select cm_sncode from craftmaterial where cm_makecode='" + ma_code.Text + "' and cm_barcode='" + bar_code + "' and nvl(cm_statuscode,'')<>'D'", "select"); if (dt.Rows.Count != 0) { OperatResult.AppendText(">>该条码已经上料,绑定SN号" + ms_sncode.Text + ",不允许重复上料\n", Color.Red); } else { //进行一个下料再上料操作 //报废一个单位用量 sqls.Add("update craftmaterial set cm_status='下料',cm_statuscode='D',cm_barcode='" + GetSNCode.Text + "' where cm_makecode='" + ma_code.Text + "' and cm_soncode='" + bar_prodcode + "' and cm_mscode='" + ms_sncode.Text + "'"); //记录日志makeprocess 维修作业,下料 dh.ExecuteSql(insert_makeprocess.Replace("#", "下料"), "insert", ms_sncode.Text, ma_code.Text); //将原条码对应的数据写入到craftmaterial 表中 sql.Clear(); sql.Append("insert into Craftmaterial (cm_id,cm_makecode,cm_maid,cm_maprodcode,cm_soncode,"); sql.Append("cm_mscode,cm_sncode,cm_stepcode,cm_stepname,cm_craftcode,cm_craftname,cm_barcode,cm_inqty,"); sql.Append("cm_indate,cm_inman,cm_linecode,cm_wccode,cm_sourcecode,cm_spid)"); sql.Append("select Craftmaterial_seq.nextval,ma_code,ma_id,ma_prodcode,msl_prodcode,ms_code,ms_sncode,"); sql.Append("ms_stepcode,ms_stepname,ma_craftcode, ma_craftname,msl_barcode, msl_baseqty, sysdate,'" + User.UserName + "',"); sql.Append("ma_linecode,ma_wccode,ms_sourcecode,sp_id from make left join makeserial on ms_makecode = ma_code "); sql.Append("left join makesmtlocation on msl_makecode=ma_code left join stepProduct on sp_mothercode=ma_prodcode and "); sql.Append("sp_stepcode=ms_nextstepcode where ms_sncode='" + ms_sncode.Text + "' and nvl(msl_status,0)=0"); sqls.Add(sql.GetString()); //记录日志makeprocess维修作业,上料 dh.ExecuteSql(insert_makeprocess.Replace("#", "上料"), "insert", ms_sncode.Text, ma_code.Text); dh.ExecuteSQLTran(sqls.ToArray()); sqls.Clear(); OperatResult.AppendText(">>换料成功\n", Color.Green); } } } } //未勾选换料的时候 else { //验证序列号是否存在 dt = (DataTable)dh.ExecuteSql("select ms_status,ms_makecode from makeserial where ms_sncode ='" + GetSNCode.Text + "'", "select"); if (dt.Rows.Count == 0) { OperatResult.AppendText(">>序号" + GetSNCode.Text + "不存在\n", Color.Red); } else { if (dt.Rows[0]["ms_status"].ToString() != "3") { switch (dt.Rows[0]["ms_status"].ToString()) { case "0": OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为未上线\n", Color.Red); break; case "1": OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为已上线 \n", Color.Red); break; case "2": OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为已完成\n", Color.Red); break; case "4": OperatResult.AppendText(">>当前序号" + GetSNCode.Text + "的状态为已报废\n", Color.Red); break; } } else { //获取工单信息 sql.Clear(); sql.Append("select ms_sncode,ma_code,pr_detail,ma_prodcode,ma_craftcode,st_rstepcode from makeserial "); sql.Append("left join make on ma_code=ms_makecode left join step on st_code=ms_nextstepcode left join product "); sql.Append("on pr_code=ma_prodcode where ms_sncode='" + GetSNCode.Text + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); BaseUtil.SetFormValue(this.Controls, dt); //获取不良信息 GetBadCodeInfo(); AddRow.PerformClick(); OperatResult.AppendText(">>获取序列号" + GetSNCode.Text + "成功\n", Color.Green); } } } //GetSNCode.Clear(); } } private void RepairComplete_Click(object sender, EventArgs e) { int RejectNum = int.Parse(dh.getFieldDataByCondition("makebad", "count(0) cn", "mb_sncode='" + ms_sncode.Text + "' and mb_status not in (1,-1)").ToString()); if (RejectNum > 0) OperatResult.AppendText(">>维修结果必须为已维修或无不良\n", Color.Red); else { dt = (DataTable)dh.ExecuteSql("select cr_id from craft where cr_statuscode='AUDITED' and cr_code='" + cr_code.Text + "'", "select"); if (dt.Rows.Count == 0) OperatResult.AppendText(">>回流工序不存在\n", Color.Red); else { string cr_id = dt.Rows[0]["cr_id"].ToString(); dt = (DataTable)dh.ExecuteSql("select cd_ifinput from craftdetail left join step on st_code=cd_stepcode where cd_crid='" + cr_id + "' and cd_stepcode='" + cd_stepcode.Text + "' and st_statuscode='AUDITED'", "select"); if (dt.Rows.Count == 0) OperatResult.AppendText(">>回流工序不在回流工艺中\n", Color.Red); else { dh.UpdateByCondition("makeserial", "ms_nextstepcode='" + cd_stepcode.Text + "',ms_craftcode='" + cr_code.Text + "',ms_stepcode='" + User.CurrentStepCode + "',ms_status=1", "ms_sncode='" + ms_sncode.Text + "'"); dh.ExecuteSql(insert_makeprocess.Replace("#", "完成维修"), "insert", ms_sncode.Text, st_name.Text); OperatResult.AppendText(">>序列号" + ms_sncode.Text + "回流成功\n", Color.Green); GetBadCodeInfo(); GetSNCode.Clear(); } } } } //报废按钮点击 private void Scrap_Click(object sender, EventArgs e) { //判断是否有无法维修的记录 int ScrapNum = int.Parse(dh.getFieldDataByCondition("makebad", "count(0) cn", "mb_sncode='" + ms_sncode.Text + "' and mb_status=2").ToString()); if (ScrapNum == 0) { OperatResult.AppendText(">>存在无法维修的记录才允许报废\n", Color.Red); } else { string confirm = MessageBox.Show(this.ParentForm, "此操作不可撤销,是否确认报废", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk).ToString(); if (confirm == "Yes") { dh.UpdateByCondition("makeserial", "ms_status=4,ms_nextstepcode='',ms_stepcode='" + ms_nextstepcode.Text + "'", "ms_sncode='" + ms_sncode.Text + "' and ms_makecode='" + ma_code.Text + "'"); dh.UpdateByCondition("make", "MA_NGMADEQTY=nvl(MA_NGMADEQTY,0)+1", "ma_code='" + ma_code.Text + "'"); OperatResult.AppendText(">>报废成功\n", Color.Green); GetBadCodeInfo(); GetSNCode.Clear(); } } } //保存按钮点击 private void Save_Click(object sender, EventArgs e) { if (bc_reason.Text != "") { //判断是修改还是新增的 if (mb_id1 != null) { ItemObject coSelected = (ItemObject)RepairResult.SelectedItem; Repair_Result = coSelected.Value; dh.UpdateByCondition("makebad", " mb_makecode='" + st_name.Text + "',mb_badcode='" + badcode + "',mb_badremark='" + bc_remark.Text + "',mb_status='" + Repair_Result + "',mb_sncode='" + GetSNCode.Text + "'", "mb_id=" + mb_id1 + ""); //刷新不良信息表 GetBadCodeInfo(); } else { int rowcount = dh.getRowCount("makebad", " mb_badcode='" + badcode + "' and mb_sncode='" + ms_sncode.Text + "'"); if (rowcount == 0) { //插入不良信息 sql.Clear(); sql.Append("insert into makebad (mb_id,mb_makecode, mb_badcode,mb_badremark,mb_status,mb_sncode) values(makebad_seq.nextval,'" + st_name.Text + "','" + badcode + "','" + bc_remark.Text + "','" + Repair_Result + "','" + GetSNCode.Text + "')"); dh.ExecuteSql(sql.GetString(), "insert"); bc_groupcode1.Text = ""; bc_reason.Text = ""; bc_remark.Text = ""; //刷新不良信息表 GetBadCodeInfo(); } else OperatResult.AppendText(">>已经存在不良原因码为" + badcode + "的维修记录\n", Color.Red); } } else OperatResult.AppendText(">>不良原因不能为空\n", Color.Red); } private void AddRow_Click(object sender, EventArgs e) { bc_groupcode1.Text = ""; bc_reason.Text = ""; bc_remark.Text = ""; RepairResult.Text = ""; mb_id1 = null; if (!GetSelectData) { //往不良原因添加数据 sql.Clear(); sql.Append("select bc_groupcode,bc_groupname,bc_code,bc_name from make left join product on pr_code=ma_prodcode left join productkind on pk_name=pr_kind left join "); sql.Append("productbadgroup on pk_code=pb_kindcode left join badcode on pb_badgroup=bc_groupname where ma_code='" + ma_code.Text + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); ItemObject[] reason = new ItemObject[dt.Rows.Count]; ItemObject[] groupcode = new ItemObject[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { reason[i] = new ItemObject(dt.Rows[i]["bc_code"] + "#" + dt.Rows[i]["bc_name"], dt.Rows[i]["bc_code"].ToString()); groupcode[i] = new ItemObject(dt.Rows[i]["bc_groupname"].ToString(), dt.Rows[i]["bc_groupcode"].ToString()); } bc_groupcode1.Items.AddRange(groupcode); bc_reason.Items.AddRange(reason); GetSelectData = true; } } private void Refueling_CheckedChanged(object sender, EventArgs e) { //如何序列号字段没有赋值设置勾选框为false if (ms_sncode.Text == "") Refueling.Checked = false; else { if (Refueling.Checked) GetSNCode_Label.Text = "采集新料条码"; else { GetSNCode_Label.Text = ""; GetSNCode.Text = ""; } } } // private void 维修作业_Activated(object sender, EventArgs e) { GetSNCode.Focus(); } //判断绑定的数据源不为空的时候可以点击 private void BadCodeGrid_DataSourceChanged(object sender, EventArgs e) { string ms_status = dh.getFieldDataByCondition("makeserial", "ms_status", "ms_sncode='" + GetSNCode.Text + "'").ToString(); if (BadCodeGrid.DataSource == null || ms_status == "1" || ms_status == "4") { Save.Enabled = false; Scrap.Enabled = false; AddRow.Enabled = false; RepairComplete.Enabled = false; } else { Save.Enabled = true; Scrap.Enabled = true; AddRow.Enabled = true; RepairComplete.Enabled = true; } } private void BadCodeGrid_CellClick(object sender, DataGridViewCellEventArgs e) { //设置界面右边三个变量的值 if (e.ColumnIndex >= 0 && e.RowIndex >= 0) { object a = BadCodeGrid.Rows[e.RowIndex].Cells["mb_badcode"].Value; object b = BadCodeGrid.Rows[e.RowIndex].Cells["mb_badremark"].Value; object c = BadCodeGrid.Rows[e.RowIndex].Cells["bc_groupcode"].Value; object d = BadCodeGrid.Rows[e.RowIndex].Cells["mb_status"].Value; bc_reason.Text = a.Equals(null) ? "" : a.ToString(); bc_remark.Text = b.Equals(null) ? "" : b.ToString(); bc_groupcode1.Text = c.Equals(null) ? "" : c.ToString(); Repair_Result = d.Equals(null) ? "" : d.ToString(); mb_id1 = BadCodeGrid.Rows[e.RowIndex].Cells["mb_id"].Value.ToString(); badcode = a.Equals(null) ? "" : a.ToString(); groupcode = c.Equals(null) ? "" : c.ToString(); RepairResult.Text = d.Equals(null) ? "" : d.ToString(); switch (RepairResult.Text) { case "0": RepairResult.Text = "待维修"; break; case "1": RepairResult.Text = "已维修"; break; case "2": RepairResult.Text = "待维修"; break; case "-1": RepairResult.Text = "待维修"; break; } } } private void RepairResult_SelectedIndexChanged(object sender, EventArgs e) { ItemObject coSelected = (ItemObject)RepairResult.SelectedItem; Repair_Result = coSelected.Value; } private void bc_reason_SelectedIndexChanged(object sender, EventArgs e) { ItemObject coSelected = (ItemObject)bc_reason.SelectedItem; badcode = coSelected.Value; } private void bc_groupcode1_SelectedIndexChanged(object sender, EventArgs e) { ItemObject coSelected = (ItemObject)bc_groupcode1.SelectedItem; groupcode = coSelected.Value; } //获取不良信息 private void GetBadCodeInfo() { sql.Clear(); sql.Append("Select mb_id,mb_sncode,bc_name,mb_badcode,mb_badremark,bc_groupcode,bc_note,bc_dutyman,case mb_status when 0 then '待维修' when 1 then '已维修' when 2 then '不可维修' when -1 then '无不良' end mb_status "); sql.Append("from Makebad left join badcode on mb_badcode=bc_code where mb_sncode='" + ms_sncode.Text + "' order by mb_id"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); BaseUtil.FillDgvWithDataTable(BadCodeGrid, dt); } private void 维修作业_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void Clean_Click(object sender, EventArgs e) { OperatResult.Clear(); } private void RepairResult_TextChanged(object sender, EventArgs e) { ItemObject coSelected = (ItemObject)RepairResult.SelectedItem; if (coSelected != null) Repair_Result = coSelected.Value; } private void bc_reason_TextChanged(object sender, EventArgs e) { badcode = bc_reason.Text; } private void cr_code_UserControlTextChanged(object sender, EventArgs e) { cd_stepcode.Condition = "ST_STATUSCODE='AUDITED' and cr_code='" + cr_code.Text + "'"; } private void ma_code_TextChanged(object sender, EventArgs e) { cr_code.Condition = "cr_statuscode='AUDITED' and cr_code=(select ma_craftcode from make where ma_code='" + ma_code.Text + "')"; } } }