//提交fail 登记 private void btn_addfaillog_Click(object sender, EventArgs e) { ServiceReference.ServiceClient client = new ServiceReference.ServiceClient(); try { string strfailsfc = txtBox_registeredsfc.Text; if (string.IsNullOrWhiteSpace(txtBox_registeredsfc.Text)) { SendMsgShow("SFC 信息为空,请检查", 2); return; } if (string.IsNullOrWhiteSpace(ktxtBox_orderno.Text)) { SendMsgShow("工单 信息为空,请检查", 2); return; } if (string.IsNullOrWhiteSpace(kComboBox_Process1.Text)) { SendMsgShow("测试工序 信息为空,请检查", 2); return; } //if (string.IsNullOrWhiteSpace(kComboBox_TestStation.Text)) //{ // SendMsgShow("测试工位 信息为空,请检查", 2); // return; //} //if (string.IsNullOrWhiteSpace(txtBox_empname.Text)) //{ // SendMsgShow("测试人 信息为空,请检查", 2); // return; //} //检查员工号是否正常???? double dfailqty = 0; //是否需要拆分批次 if (kryptonCheckBox1.Checked == true) { if (string.IsNullOrWhiteSpace(txtBox_newregisteredsfc.Text)) { SendMsgShow("新的批次号为空,请检查", 2); return; } if (string.IsNullOrWhiteSpace(KtxtBox_newregisteredsfcNum.Text)) { SendMsgShow("新的批次号的数量为空,请检查", 2); return; } if (double.Parse(KtxtBox_newregisteredsfcNum.Text.Trim()) - double.Parse(kTxtBox_SFCQty.Text.Trim()) >= 0.000001) { dfailqty = 0; MessageBox.Show("拆分批次数量大于或等于总数量 ", "错误"); return; } strfailsfc = txtBox_newregisteredsfc.Text; } ////////////////////////////////////////////////////// string wipdata = client.RunServerAPI("BLL.WIP", "GetWipQty1ByLot", txtBox_registeredsfc.Text); if (!string.IsNullOrEmpty(wipdata)) { decimal SumNum = 0; for (int i = 0; i < dataGridView_faildesc.RowCount; i++) { decimal num = Convert.ToDecimal(this.dataGridView_faildesc.Rows[i].Cells["strfailNum"].Value.ToString()); if (num != 0) { SumNum += num; } } decimal wipqty = Convert.ToDecimal(wipdata); if (SumNum > wipqty) { MessageBox.Show("该批次已使用,线边仓剩余数量小于登记不良数量 ", "提示"); return; } } ///////////////////////////////////////////////////// try { if (KtxtBox_newregisteredsfcNum.Enabled == false) { dfailqty = double.Parse(kTxtBox_SFCQty.Text.Trim()); } else { dfailqty = double.Parse(KtxtBox_newregisteredsfcNum.Text.Trim()); } } catch (Exception exp) { MessageBox.Show("请输入正确数量 " + exp.Message, "提示"); return; } int iisProcess = 0; // 提交维修登记时,如果现象中都是不需要处理的,则维修状态为-1=不需要处理,否则维修状态为0=需要处理; List <NGCode_Data> lstcurrngcode = new List <NGCode_Data>(); for (int i = 0; i < dataGridView_faildesc.Rows.Count; i++) { //如果DataGridView是可编辑的,将数据提交,否则处于编辑状态的行无法取到 dataGridView_faildesc.EndEdit(); DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView_faildesc.Rows[i].Cells["bselect"]; Boolean flag = Convert.ToBoolean(checkCell.Value); if (flag == true) //查找被选择的数据行 { //从 DATAGRIDVIEW 中获取数据项 NGCode_Data clngcode = new NGCode_Data(); clngcode.failPhenomenoncode = dataGridView_faildesc.Rows[i].Cells[0].Value.ToString().Trim(); clngcode.failPhenomenondesc = dataGridView_faildesc.Rows[i].Cells[1].Value.ToString().Trim(); clngcode.failtypecode = dataGridView_faildesc.Rows[i].Cells[2].Value.ToString().Trim(); clngcode.strfailNum = dataGridView_faildesc.Rows[i].Cells[3].Value.ToString().Trim(); clngcode.isProcess = dataGridView_faildesc.Rows[i].Cells[4].Value.ToString().Trim(); if (clngcode.isProcess == "是") { iisProcess = 1; } double dfailNum = double.Parse(clngcode.strfailNum); if (dfailNum <= 0.0000001) { SendMsgShow("不良现象[" + clngcode.failPhenomenoncode + "]对应数量为0 请检查", 2); lstcurrngcode.Clear(); return; } if ((dfailNum - dfailqty) > 0.0000001) { SendMsgShow("不良现象[" + clngcode.failPhenomenoncode + "]对应数量大于总数量, 请检查", 2); lstcurrngcode.Clear(); return; } lstcurrngcode.Add(clngcode); } } if (lstcurrngcode.Count <= 0) { SendMsgShow("未选择不良现象, 请检查", 2); return; } if (kryptonCheckBox1.Checked) { if (txtBox_newregisteredsfc.Text == txtBox_registeredsfc.Text) { SendMsgShow("拆分新批次不能与批次号相同", 2); return; } string jsdata = client.RunServerAPI("BLL.SFC", "GetSfcState", txtBox_newregisteredsfc.Text); if (!string.IsNullOrEmpty(jsdata)) { SendMsgShow("拆分批次号已存在,请更改", 2); return; } //如果有新的批次号,需要将主批次号的过站记录复制到新的批次号中 int iRet = CreateNewSFCInfo(txtBox_registeredsfc.Text, txtBox_newregisteredsfc.Text, double.Parse(KtxtBox_newregisteredsfcNum.Text.Trim())); if (iRet == 0) { //strfailsfc = txtBox_newregisteredsfc.Text; //kTxtBox_SFCQty.Text = KtxtBox_newregisteredsfcNum.Text; } else { MessageBox.Show("拆分批次失败 ", "错误"); return; } } //在P_FailLog表中增加不良记录 //获取P_Date string str = ""; str = client.RunServerAPI("BLL.Faillog", "GetPDate", strGroupCode); DateTime dPdate = new DateTime(); dPdate = DateTime.Parse(str); P_FailLog dtpfaillog = new P_FailLog(); dtpfaillog.fguid = Guid.NewGuid().ToString(); dtpfaillog.order_no = ktxtBox_orderno.Text; dtpfaillog.sfc = strfailsfc; //dtpfaillog.from_process= dtpfaillog.from_process = dicTestProcessInfo[kComboBox_Process1.Text]; //来源工序id //dtpfaillog.from_station = dicTestStationInfo[kComboBox_TestStation.Text]; //来源工站id dtpfaillog.process_code = dicTestProcessInfo[kComboBox_Process1.Text]; //当前工序id,责任工序,先预设维修工序id,再在维修中来修改 dtpfaillog.from_emp = g_stremp; dtpfaillog.fail_times = 1; dtpfaillog.p_date = dPdate; dtpfaillog.class_code = client.RunServerAPI("BLL.Faillog", "GetClassCode", strGroupCode); dtpfaillog.Disposal_Process = g_stremp; dtpfaillog.ws_code = g_strWorkShopCode; if (iRepairProcc == 3) { dtpfaillog.state = 9; //报废 iisProcess = 1; } else { if (iisProcess == 1) { dtpfaillog.state = 0; //后续会根据不良现象来判断是否需要给“-1”, } else { dtpfaillog.state = -1; } } dtpfaillog.qty = (decimal)dfailqty; dtpfaillog.ng_remark = richTextBox_ng_remark.Text.Trim(); string strJson = JsonConvert.SerializeObject(dtpfaillog); str = ""; str = client.RunServerAPI("BLL.Faillog", "AddFailLog", strJson); if (string.IsNullOrWhiteSpace(str) || str == "0") { SendMsgShow("增加不良记录失败", 2); return; } //在P_Fail_Detail表中增加不良记录 for (int i = 0; i < lstcurrngcode.Count; i++) { P_Fail_Detail clpfiledetail = new P_Fail_Detail(); clpfiledetail.fguid = dtpfaillog.fguid; clpfiledetail.order_no = ktxtBox_orderno.Text; clpfiledetail.sfc = strfailsfc; clpfiledetail.ng_code = lstcurrngcode[i].failPhenomenoncode; clpfiledetail.qty = decimal.Parse(lstcurrngcode[i].strfailNum); clpfiledetail.ws_code = g_strWorkShopCode; strJson = JsonConvert.SerializeObject(clpfiledetail); str = ""; str = client.RunServerAPI("BLL.Fail_Detail", "AddFail_Detail", strJson); if (string.IsNullOrWhiteSpace(str) || str == "0") { SendMsgShow("增加不良明细失败", 2); return; } } //更新P_SFC_State 当前工序和过站时间 +P_SFC_Process_IOLog 当前工序和工站 if (iisProcess == 1) //如果需要处理,才更新state表信息??? { str = ""; //order,sfc,nowprocess,state,failtimes,pass,grade_id,grade_type,iofailtimes strJson = ktxtBox_orderno.Text + "," + strfailsfc + "," + dicTestProcessInfo[kComboBox_Process1.Text] + "," + "0" + "," + "1" + "," + "0" + "," + "grade_id" + "," + "grade_type" + "," + "1" + "," + dicTestProcessInfo[kComboBox_Process1.Text]; str = client.RunServerAPI("BLL.SFC", "UpDataSFCInfoAndSFCIOLogData", strJson); if (!str.Contains("OK")) { SendMsgShow("更新P_SFC_State 失败 Or P_SFC_Process_IOLog 失败," + str, 2); return; } } SendMsgShow("提交不良信息已完成", 0); //判断是否需要快速报废 if (iRepairProcc == 3) { P_SFC_State clpsfcstateTmp = new P_SFC_State(); clpsfcstateTmp.order_no = ktxtBox_orderno.Text; clpsfcstateTmp.SFC = strfailsfc; clpsfcstateTmp.fail_times = 0; clpsfcstateTmp.state = -1; //设置状态为 -1 ,已报废 clpsfcstateTmp.now_process = "END"; //order,sfc,nowprocess,state,failtimes,pass,grade_id,grade_type,iofailtimes strJson = clpsfcstateTmp.order_no + "," + strfailsfc + "," + "END" + "," + "-1" + "," + "0" + "," + "0" + "," + "grade_id" + "," + "grade_type" + "," + "0" + "," + dicTestProcessInfo[kComboBox_Process1.Text]; str = client.RunServerAPI("BLL.SFC", "UpDataSFCInfoAndSFCIOLogData", strJson); if (!str.Contains("OK")) { MessageBox.Show("更新P_SFC_State 失败 Or P_SFC_Process_IOLog 失败," + str, "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } ClearFormPar(); txtBox_registeredsfc.Text = ""; } catch (Exception exp) { SendMsgShow(exp.Message, 2); } return; }
//根据SFC查询sfc信息,以及不良现象信息 private void btn_getsfcinfo_Click(object sender, EventArgs e) { //frmPBar.Close(); iRepairProcc = 0; ClearFormPar(); kTxtBox_SFCQty.Enabled = false; string strProductTypeCode = ""; string strProductTypeName = ""; if (string.IsNullOrWhiteSpace(txtBox_registeredsfc.Text)) { SendMsgShow("SFC 信息为空,请检查", 2); return; } List <B_ProcessList> lstprocess = new List <B_ProcessList>(); ServiceReference.ServiceClient client = new ServiceReference.ServiceClient(); string str = client.RunServerAPI("BLL.Pack", "GetSfcState", txtBox_registeredsfc.Text); if (string.IsNullOrWhiteSpace(str)) { //如果首工序失败,P_SFC_State 表中不会有记录,此时需要登记失败,就取该工单的工艺流程的首工序作为当前批次所在工序; string strorderno = ""; client = new ServiceReference.ServiceClient(); string dt = client.RunServerAPI("BLL.SSW", "GetWorkerOrderbyBar", txtBox_registeredsfc.Text);//根据条码,获取工单 if (string.IsNullOrWhiteSpace(dt)) { //没有数据 SendMsgShow("根据批次[" + txtBox_registeredsfc.Text + "]获取工单失败", 2); return; } List <P_BarCodeBing> lstpbarcodebing = new List <P_BarCodeBing>(); lstpbarcodebing = JsonConvert.DeserializeObject <List <P_BarCodeBing> >(dt); if (lstpbarcodebing.Count <= 0) { //没有数据 SendMsgShow("根据批次[" + txtBox_registeredsfc.Text + "]获取工单失败", 2); return; } strorderno = lstpbarcodebing[0].order; lstpbarcodebing.Clear(); dt = ""; client = new ServiceReference.ServiceClient(); //string StrOrderInfo = client.RunServerAPI("BLL.SSW", "GetMainOrderByOrderNo", strorderno); //List<P_WorkOrder> ListWork = JsonConvert.DeserializeObject<List<P_WorkOrder>>(StrOrderInfo); //string mainorder = string.Empty; //if (ListWork != null) //{ // mainorder = ListWork[0].main_order.ToString(); //} dt = client.RunServerAPI("BLL.Process", "GetProcessFlowDetail", strorderno);//根据工单,获取工艺流,根据工艺流得到工序 if (string.IsNullOrWhiteSpace(dt)) { //没有数据 SendMsgShow("获取到当前工序集合失败", 2); return; } lstprocess = JsonConvert.DeserializeObject <List <B_ProcessList> >(dt); if (lstprocess.Count <= 0) { //没有数据 SendMsgShow("获取到当前工序集合失败", 2); return; } for (int i = 0; i < lstprocess.Count; i++) { dicTestProcessInfo.Add(lstprocess[i].process_name, lstprocess[i].process_code); kComboBox_Process1.Items.Add(lstprocess[i].process_name); //责任工序列表 } kComboBox_Process1.SelectedItem = -1; ktxtBox_orderno.Text = strorderno; strGroupCode = lstprocess[0].group_code; } else { List <P_SFC_State> dt = JsonConvert.DeserializeObject <List <P_SFC_State> >(str); if (dt.Count > 0) { ktxtBox_orderno.Text = dt[0].order_no; kTxtBox_SFCQty.Text = dt[0].qty.ToString(); //??? } else { SendMsgShow("获取SFC[" + txtBox_registeredsfc.Text + "]信息失败", 2); return; } List <B_ProcessList> lstTmpprocess = new List <B_ProcessList>(); string strlstProcess = ""; client = new ServiceReference.ServiceClient(); //根据子工单找到主工单 //string StrOrderInfo = client.RunServerAPI("BLL.SSW", "GetMainOrderByOrderNo", ktxtBox_orderno.Text); //List<P_WorkOrder> ListWork = JsonConvert.DeserializeObject<List<P_WorkOrder>>(StrOrderInfo); //string mainorder = string.Empty; //if (ListWork != null) //{ // mainorder = ListWork[0].main_order.ToString(); //} //strlstProcess = client.RunServerAPI("BLL.Process", "GetProcessFlowDetail", mainorder);//根据工单,获取工艺流,根据工艺流得到工序 strlstProcess = client.RunServerAPI("BLL.Process", "GetProcessFlowDetail_1", ktxtBox_orderno.Text + "," + txtBox_registeredsfc.Text.ToString().Trim()); if (string.IsNullOrWhiteSpace(strlstProcess)) { //没有数据 SendMsgShow("获取到当前工序组失败", 2); return; } lstTmpprocess = JsonConvert.DeserializeObject <List <B_ProcessList> >(strlstProcess); if (lstTmpprocess.Count <= 0) { //没有数据 SendMsgShow("获取到当前工序组失败", 2); return; } for (int i = 0; i < lstTmpprocess.Count; i++) { dicTestProcessInfo.Add(lstTmpprocess[i].process_name, lstTmpprocess[i].process_code); kComboBox_Process1.Items.Add(lstTmpprocess[i].process_name); //责任工序列表 } kComboBox_Process1.SelectedItem = -1; strGroupCode = lstTmpprocess[0].group_code; } SendMsgShow("获取批次[" + txtBox_registeredsfc.Text + "]相关信息完成", 0); if (string.IsNullOrWhiteSpace(kTxtBox_SFCQty.Text)) { kTxtBox_SFCQty.Enabled = true; kTxtBox_SFCQty.Text = ""; } //根据工单获取产品类型 str = ""; str = client.RunServerAPI("BLL.Product", "GetProductInfoByOrder", ktxtBox_orderno.Text); if (string.IsNullOrWhiteSpace(str)) { SendMsgShow("根据工单[" + ktxtBox_orderno.Text + "]获取产品类型失败", 2); return; } dicProductTypeInfo.Clear(); List <V_Order_Produc_Type_Name> lstvorderProductInfo = JsonConvert.DeserializeObject <List <V_Order_Produc_Type_Name> >(str); if (lstvorderProductInfo.Count > 0) { strProductTypeCode = lstvorderProductInfo[0].typecode; strProductTypeName = lstvorderProductInfo[0].type_name; dicProductTypeInfo.Add(strProductTypeName, strProductTypeCode); } if (string.IsNullOrWhiteSpace(strProductTypeCode)) { SendMsgShow("根据工单[" + ktxtBox_orderno.Text + "]获取产品类型失败", 2); return; } kTextBox_ProductType.Text = strProductTypeName; //根据SFC在P_Faillog表中查询失败次数 str = ""; str = client.RunServerAPI("BLL.Faillog", "GetFailTimesBySFC", txtBox_registeredsfc.Text); if (string.IsNullOrWhiteSpace(str)) { SendMsgShow("SFC[" + txtBox_registeredsfc.Text + "]维修次数为 0", 0); kTextBox_failtimes.Text = "0"; } else { List <P_FailLog> dt = JsonConvert.DeserializeObject <List <P_FailLog> >(str); kTextBox_failtimes.Text = dt.Count.ToString(); if (dt.Count > 0) { for (int i = 0; i < dt.Count; i++) { if (dt[i].state == 0) { SendMsgShow("SFC[" + txtBox_registeredsfc.Text + "]存在未维修记录", 2); return; } } } } //获取不良现象 B_NG_Code表 str = ""; str = client.RunServerAPI("BLL.NGCode", "GetNGCodeByType", dicProductTypeInfo[kTextBox_ProductType.Text]); if (str.Length == 0) { SendMsgShow("获取不良现象信息失败", 2); return; } else { lstngcode.Clear(); List <B_NG_Code> dtngcode = JsonConvert.DeserializeObject <List <B_NG_Code> >(str); if (dtngcode.Count > 0) { foreach (var par in dtngcode) { if (string.IsNullOrWhiteSpace(par.ng_code) || string.IsNullOrWhiteSpace(par.ng_name) || string.IsNullOrWhiteSpace(par.type_code)) { SendMsgShow("不良现象信息不全,请检查", 2); return; } NGCode_Data clngcode = new NGCode_Data(); clngcode.failPhenomenoncode = par.ng_code; clngcode.failPhenomenondesc = par.ng_name; clngcode.failtypecode = par.type_code; clngcode.strfailNum = "0"; clngcode.isProcess = par.exec_proc == 0 ? "否" : "是"; clngcode.bselect = false; lstngcode.Add(clngcode); } dataGridView_faildesc.DataSource = lstngcode; } else { SendMsgShow("获取不良现象信息失败", 2); return; } } }