using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Diagnostics; using System.Diagnostics.Eventing.Reader; using System.Drawing; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using MESClassLibrary.BLL; using MESClassLibrary.BLL.BasicInfo; using MESClassLibrary.BLL.Injection; using MESClassLibrary.BLL.Inspection; using MESClassLibrary.BLL.Log; using MESClassLibrary.BLL.Mistake247; using MESClassLibrary.BLL.Weight; using MESClassLibrary.DAL; using MESClassLibrary.Model; using OPCAutomation; using System.IO; using System.IO.Ports; using System.Net.Mime; using System.Net.NetworkInformation; using gregn6Lib; using MESClassLibrary; using MESClassLibrary.EFModel; namespace InjectionPC { public partial class FrmMain2408 : Form { #region 变量 private string strHostIP; private string strHostName; private OPCServer opcServer; private OPCGroups opcGroups; private OPCGroup opcGroup1; private OPCItems opcItems1; private OPCItem[] opcItemm1; private OPCGroup opcGroup2; private OPCItems opcItems2; private OPCItem[] opcItemm2; private string[] ItemIDs; object ItemValues; object Qualities; object TimeStamps; public bool Connected = false; private BasicBLL1 _basicBLL1 = new BasicBLL1(); private UniqueBll _uniqueBll = new UniqueBll(); private bool _isPrintPackage = true; private BarCodeBLL _barCodeBLL = new BarCodeBLL(); private InjectionBoxBLL _injectionBoxBLL = new InjectionBoxBLL(); //private DataTable tb_Plastic = new DataTable(); private string _currentStationID = string.Empty; private const string _leftType = "0"; //模具1 private const string _rightType = "1";//模具2 private DateTime _loginTime = DateTime.Now; private string _lastBoxNoL = string.Empty; private string _lastBoxNoR = string.Empty; private WmsBLL _wmsBll = new WmsBLL(); private PLCMouldBLL _PLCbll = new PLCMouldBLL(); private PLCBreakBLL _bbll = new PLCBreakBLL(); bool _isLoad = false; //零件用的打印机编号 <零件号+工位ID,打印机编号> private Dictionary _printNameDict = new Dictionary(); private PlasticBLL _plasticBLL = new PlasticBLL(); private int _plcRate = 100; //500 #endregion public FrmMain2408() { InitializeComponent(); this.Size = new Size(1280, 920); } public string planID = "", productID = "", nextPlanID = "", nextproductID = "",aa=""; // public string newPlanID = ""; public static int ID = 0; DateTime lastTime = DateTime.Now; //public string Conn = ConfigurationManager.ConnectionStrings["SqlConnStringWeight"].ConnectionString; bool status = false; private static int InterVal_Seconds = 0; private void FrmMain_Load(object sender, EventArgs e) { try { _currentStationID = getStationID(Program.station); //tb_Plastic = GetPlastic(); Control.CheckForIllegalCrossThreadCalls = false; //this.WindowState = FormWindowState.Maximized; Thread t = new Thread(new ThreadStart(TimeGo)); t.Start(); timer1.Interval = Program.interVal; timer1.Enabled=false; panel44.Visible = false; panel45.Visible = false; textBox4.Text = ""; textBox3.Text = ""; label6.Text = Program.station; //工位 label8.Text = Program.OperatorName; //用户 //InterVal_Seconds = GetSeconds(label6.Text); GetClass(); comboBox1.Text = "A班"; //班次 Program.cc = comboBox1.Text; initProduct(); //textBox1.Text = Program.ProductDate.Substring(2, 2) + Program.ProductDate.Substring(5, 2) + // Program.ProductDate.Substring(8, 2); //批次 textBox1.Text = GetBatch(true); string devRate = ConfigurationManager.AppSettings["DevRate"]; if (!string.IsNullOrEmpty(devRate)) { int i = 0; if (int.TryParse(devRate, out i) == true) { if (i > 0) { _plcRate = i; } } } initBarCode(); label23.Enabled = false; label23.BackColor = System.Drawing.Color.Gray; DataTable plasticTable = GetPlastic(); foreach(DataRow dr in plasticTable.Rows) { string key = dr["PartNo"].ToString() + dr["StationID"].ToString(); if (_printNameDict.Keys.Contains(key) == false) { _printNameDict.Add(key, dr["PrinterNo"].ToString()); } } Ping p1 = new Ping(); PingReply reply = p1.Send("10.60.101.60"); //发送主机名或Ip地址 StringBuilder sbuilder; if (reply.Status == IPStatus.Success) { status = true; label2.BackColor = Color.LightGray; } else { status = false; label2.BackColor = Color.Red; } comboBox2.MouseWheel += new MouseEventHandler(comboBox2_MouseWheel); #region 获取当前生产信息 initPlan(); InitPackageInfo(true); #endregion #region 连接PLC try { if (CreateServer()) { if (ConnectServer(strHostIP, "Kepware.KEPServerEX.V6")) { Connected = true; #region 创建组 opcGroups = opcServer.OPCGroups; opcGroup1 = opcGroups.Add("Mould"); SetGroupProperty(opcGroup1, _plcRate); opcGroup2 = opcGroups.Add("Break"); SetGroupProperty(opcGroup2, _plcRate); #endregion #region 创建项 opcItems1 = opcGroup1.OPCItems; opcItems1.DefaultIsActive = true; //PLCMouldBLL PLCbll = new PLCMouldBLL(); //PLCBreakBLL bbll = new PLCBreakBLL(); DataTable PLCdt = _PLCbll.SearchMould(Program.station); if (PLCdt != null && PLCdt.Rows.Count > 0) { opcItemm1 = new OPCItem[PLCdt.Rows.Count]; for (int i = 0; i < PLCdt.Rows.Count; i++) { opcItemm1[i] = opcItems1.AddItem(PLCdt.Rows[i]["Address"].ToString(), i); } } Thread.Sleep(200); opcGroup1.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange); #endregion } else { MessageBox.Show("连接到OPC服务器失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("连接到OPC服务器失败!"); return; } } else { MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("创建OPC服务失败!"); return; } } catch(Exception ex) { MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("创建OPC服务失败!"); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } #endregion } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } finally { _isLoad = true; _isShowHintL = true; comBoxSizeL.SelectedValueChanged += comBoxSizeL_SelectedValueChanged; comBoxSizeR.SelectedValueChanged += comBoxSizeR_SelectedValueChanged; } } private DataTable GetPlastic() { return _plasticBLL.SearchAllInfo(_currentStationID); } List _lastParts = new List(); private void initPlan() { try { InjectionPlanBLL bll = new InjectionPlanBLL(); ProductBLL productBll = new ProductBLL(); DataTable dt = bll.SearchInfoByName(Program.station); if (dt != null && dt.Rows.Count > 0) { planID = dt.Rows[0]["InjectionPlanID"].ToString(); aa = dt.Rows[0]["PartNo"].ToString(); label17.Text = dt.Rows[0]["PlanCount"].ToString(); string actualTime = dt.Rows[0]["ActualTime"].ToString(); if (string.IsNullOrEmpty(actualTime)) { InjectionPlanBLL ibll = new InjectionPlanBLL(); ibll.UpdatePlanStartTime(planID); } DataTable dt2 = bll.SearchQty(planID); if (dt2 != null && dt2.Rows.Count > 0) { label27.Text = dt2.Rows[0]["ProductCount"].ToString(); } else { label27.Text = "0"; } string[] partNo = dt.Rows[0]["PartNo"].ToString().Split(','); label12.Text = "当前生产计划为:"; for (int i = 0; i < partNo.Length; i++) { DataTable sdt = productBll.SearchInfoByPartNo(partNo[i].ToString().Trim()); if (sdt != null && sdt.Rows.Count > 0) { label12.Text += "零件号" + partNo[i].ToString().Trim() + ",零件名称" + sdt.Rows[0]["ProductName"].ToString() + ";"; } if (!string.IsNullOrEmpty(partNo[i].ToString().Trim())) { if (_lastParts.Contains(partNo[i].ToString().Trim()) == false) { InitComboBoxSize(partNo[i].ToString().Trim(), i,""); //string currentSize = string.Empty; //List list = GetProductBoxSize(partNo[i].ToString().Trim(), ref currentSize); //if (i == 0) //{ // comBoxSizeL.DataSource = list; // comBoxSizeL.SelectedItem = currentSize; // _selectItemL = currentSize; // int j = 0; // int.TryParse(currentSize, out j); // if (j > 0) // { // lbNeedQtyL.Text = j.ToString(); // } //} //else //{ // comBoxSizeR.DataSource = list; // comBoxSizeR.SelectedItem = currentSize; // _selectItemR = currentSize; // int j = 0; // int.TryParse(currentSize, out j); // if (j > 0) // { // lbNeedQtyR.Text = j.ToString(); // } //} } } if(_lastParts.Contains(partNo[i].ToString().Trim()) == false) { _lastParts.Add(partNo[i].ToString().Trim()); } } } else { label12.Text = "暂无生产计划"; label17.Text = "0"; label27.Text = "0"; } if (Convert.ToDouble(label17.Text) < Convert.ToDouble(label27.Text)) { label27.BackColor = Color.Red; } else { label27.BackColor = Color.DeepSkyBlue; } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod()); } } void InitComboBoxSize(string partCode,int mould,string fixedSize) { string currentSize = string.Empty; List list = GetProductBoxSize(partCode, ref currentSize); if (!string.IsNullOrEmpty(fixedSize)) { currentSize = fixedSize; } if (mould == 0) { _isShowHintL = false; comBoxSizeL.DataSource = list; comBoxSizeL.SelectedItem = currentSize; _selectItemL = currentSize; int j = 0; int.TryParse(currentSize, out j); if (j > 0) { lbNeedQtyL.Text = j.ToString(); } } else { _isShowHintR = false; comBoxSizeR.DataSource = list; comBoxSizeR.SelectedItem = currentSize; _selectItemR = currentSize; int j = 0; int.TryParse(currentSize, out j); if (j > 0) { lbNeedQtyR.Text = j.ToString(); } } } void comboBox2_MouseWheel(object sender, MouseEventArgs e) { HandledMouseEventArgs h = e as HandledMouseEventArgs; if (h != null) { h.Handled = true; } } void opcGroup1_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues,ref Array Qualities, ref Array TimeStamps) { try { CheckPackageSelect(); InjectionPlanBLL bll = new InjectionPlanBLL(); BarCodeBLL brbll = new BarCodeBLL(); BarCodeModel md = new BarCodeModel(); ProductBLL productBll = new ProductBLL(); PlasticBLL pbll= _plasticBLL; InjectionBoxBLL boxbll=new InjectionBoxBLL(); InjectionBoxModel boxmd=new InjectionBoxModel(); DataTable dt2 = null; string code = "", OneCode = ""; string newcode = "", newcode1 = "", NewOneCode = "", NewOneCode1 = ""; string IsPack = "", IsOne = "", QLevel="",IsPaint="",PartName="",IsSame="",IsSupply=""; string ManufacturerName = ""; string filename = "", printName = "", printBoxName=""; int MaxCount = 0, CurrentCount = 0; if (status == false) { MessageBox.Show("连接服务器失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } for (int i = 1; i <= NumItems; i++) { if (ItemValues == null) { _bbll.SavePlcReceive(Program.station, TransactionID, NumItems, "ItemValues= null ", planID, "2408"); continue; } if (ItemValues.Length == 0) { _bbll.SavePlcReceive(Program.station, TransactionID, NumItems, "ItemValues.Length ==0 ", planID, "2408"); continue; } //string val = ItemValues.GetValue(i)?.ToString(); //if (ItemValues.GetValue(i)?.ToString() != "True") //{ // _bbll.SavePlcReceive(Program.station, TransactionID, NumItems, "ItemValues.GetValue(i)= " + val, planID, "2408"); //} if ((ItemValues!=null && ItemValues.GetValue(i)?.ToString() == "True") || IsTest ==true) { //LogSysBLL.AddInfo("true" + label6.Text, MethodBase.GetCurrentMethod()); GetClass(); #region 增加时间差判定 //DateTime lastTime = GetPrintTime(label6.Text); //long ts = TimeDiff(lastTime, DateTime.Now); TimeSpan span=DateTime.Now - lastTime; if (span.TotalSeconds < Convert.ToDouble(ConfigurationManager.AppSettings["InterValT"])) { return; } _bbll.SavePlcReceive(Program.station, TransactionID, NumItems, aa, planID, "2408"); #endregion //comboBox1.Text = "A班"; //班次 //textBox1.Text = Program.ProductDate.Substring(2, 2) + Program.ProductDate.Substring(5, 2) + // Program.ProductDate.Substring(8, 2); //批次 textBox1.Text = GetBatch(true); #region 查找当前计划 DataTable dt = bll.SearchInfoByName(Program.station); if (dt != null && dt.Rows.Count > 0) { if (aa != dt.Rows[0]["PartNo"].ToString()) { DialogResult result=MessageBox.Show("计划有变更,请确认!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { planID = dt.Rows[0]["InjectionPlanID"].ToString(); string[] partNo = dt.Rows[0]["PartNo"].ToString().Split(','); //string[] stockNo = dt.Rows[0]["StockNo"].ToString().Split(','); string[] stockNo = new string[partNo.Length]; string ProductNature = dt.Rows[0]["ProductNature"].ToString(); aa = dt.Rows[0]["PartNo"].ToString(); //ManufacturerName = dt.Rows[0]["ManufacturerName"].ToString(); DataTable dtM = productBll.SearchInfoByPartNo(partNo[0]); if (dtM != null && dtM.Rows.Count > 0) { ManufacturerName = dtM.Rows[0]["ManufacturerName"].ToString(); } #region 判断有几个零件号 string mould = "0"; for (int j = 0; j < partNo.Length; j++) { #region 根据零件号查找存货代码 mould = j.ToString(); DataTable sdt = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (sdt != null && sdt.Rows.Count > 0) { stockNo[j] = sdt.Rows[0]["StockNo"].ToString(); IsSame = sdt.Rows[0]["IsSame"].ToString(); } else { stockNo[j] = ""; } #endregion #region 获取零件属性 DataTable dtx = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (dtx != null && dtx.Rows.Count > 0) { QLevel = dtx.Rows[0]["QLevel"].ToString(); IsOne = dtx.Rows[0]["IsPrintOneTag"].ToString(); IsPack = dtx.Rows[0]["IsPrintPackList"].ToString(); IsPaint = dtx.Rows[0]["IsPlating"].ToString(); PartName = dtx.Rows[0]["ProductName"].ToString(); IsSupply = dtx.Rows[0]["IsSupply"].ToString(); } #endregion if (IsSame == "1")//一模两压相同的 { for (int k = 0; k < 2; k++) { #region 非直供件打印 if (IsSupply != "1") { if (ManufacturerName.Contains("蔚来")) { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(),true, mould, PartName, NumItems+"_551" , ref NewOneCode, ref newcode); } else { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_584", ref NewOneCode, ref newcode); } } #endregion #region 直供件打印 if (IsSupply == "1") { GetSupplyCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), QLevel, true, mould, PartName, ref NewOneCode, ref newcode); } #endregion #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = dt.Rows[0]["StationID"].ToString(); md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo[j].ToString().Trim(); md.PartNo = partNo[j].ToString().Trim(); md.PrintType = 0; md.PlanID = planID; md.ProductNature = ProductNature; md.Des1 = PartName; string errMsg = string.Empty; bool saveRst = SaveInfo(md, true, mould, false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"自动打印[{partNo[j].ToString()}],条码" + md.OneBarCode + "报错:"+ errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 打印条码,判断是否打印单个条码 #region 打印单个标签 if (IsOne == "1") { if (IsSupply != "1") { filename = ManufacturerName.Contains("蔚来") ? System.AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("0","Print"+Program.station+"_679"); //new } else { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("1", "Print" + Program.station + "_684"); } printName = "Printer" +_printNameDict[partNo[j].ToString().Trim()+ dt.Rows[0]["StationID"].ToString()]; string reportName = ConfigurationManager.AppSettings[printName] .ToString(); DataTable headTable = GetPrintHeadTable(partNo[j].ToString().Trim(), PartName, NewOneCode, newcode); //ReportHelper rp = new ReportHelper(filename, headTable, null, // (int) GRPaperOrientation.grpoDefault, 1, reportName); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo( GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + NewOneCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); } #endregion #endregion initBarCode(); } } else//一模两压不同的 { if (IsSupply != "1") { #region 非直供件 if (ManufacturerName.Contains("蔚来")) { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_743", ref NewOneCode, ref newcode); } else { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_555", ref NewOneCode, ref newcode); } #endregion } else { #region 直供件 GetSupplyCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), QLevel, true, mould, PartName, ref NewOneCode, ref newcode); #endregion } #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = dt.Rows[0]["StationID"].ToString(); md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo[j].ToString().Trim(); md.PartNo = partNo[j].ToString().Trim(); md.PrintType = 0; md.PlanID = planID; md.ProductNature = ProductNature; md.Des1 = PartName; DataTable pdt = productBll.SearchIsImportByPartNo(partNo[j].ToString()); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, true, mould, false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"自动打印[{partNo[j].ToString()}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 打印条码,判断是否打印单个条码 DataTable dt3 = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (dt3 != null && dt3.Rows.Count > 0) { QLevel = dt3.Rows[0]["QLevel"].ToString(); IsOne = dt3.Rows[0]["IsPrintOneTag"].ToString(); IsPack = dt3.Rows[0]["IsPrintPackList"].ToString(); IsPaint = dt3.Rows[0]["IsPlating"].ToString(); PartName = dt3.Rows[0]["ProductName"].ToString(); //MaxCount = Convert.ToInt32(dt3.Rows[0]["PackCount"].ToString()); IsSame = dt3.Rows[0]["IsSame"].ToString(); IsSupply = dt3.Rows[0]["IsSupply"].ToString(); } #region 打印单个标签 if (IsOne == "1") { if (IsSupply != "1") { filename = ManufacturerName.Contains("蔚来") ? System.AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("0", "Print" + Program.station + "_882"); //new if (partNo[j].Contains("A2146982300") || partNo[j].Contains("A2146982400")) { filename = AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("0", "Print" + Program.station + "_887"); } } else { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("1", "Print" + Program.station + "_893"); } //DataTable dt4 = pbll.SearchInfo(partNo[j].ToString().Trim(), // dt.Rows[0]["StationID"].ToString()); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[partNo[j].ToString().Trim() + dt.Rows[0]["StationID"].ToString()]; string reportName = ConfigurationManager.AppSettings[printName] .ToString(); DataTable headTable = GetPrintHeadTable(partNo[j].ToString().Trim(), PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int) GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo( GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + NewOneCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); } #endregion #endregion initBarCode(); } } #endregion } else { return; } } else { planID = dt.Rows[0]["InjectionPlanID"].ToString(); string[] partNo = dt.Rows[0]["PartNo"].ToString().Split(','); //string[] stockNo = dt.Rows[0]["StockNo"].ToString().Split(','); string[] stockNo = new string[partNo.Length]; string ProductNature = dt.Rows[0]["ProductNature"].ToString(); //ManufacturerName = dt.Rows[0]["ManufacturerName"].ToString(); DataTable dtM = productBll.SearchInfoByPartNo(partNo[0]); if (dtM != null && dtM.Rows.Count > 0) { ManufacturerName = dtM.Rows[0]["ManufacturerName"].ToString(); } #region 判断有几个零件号 string mould = "0"; for (int j = 0; j < partNo.Length; j++) { try { #region 根据零件号查找存货代码 mould = j.ToString(); DataTable sdt = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (sdt != null && sdt.Rows.Count > 0) { stockNo[j] = sdt.Rows[0]["StockNo"].ToString(); IsSame = sdt.Rows[0]["IsSame"].ToString(); } else { stockNo[j] = ""; } #endregion #region 查询零件属性 DataTable dt10 = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (dt10 != null && dt10.Rows.Count > 0) { QLevel = dt10.Rows[0]["QLevel"].ToString(); IsOne = dt10.Rows[0]["IsPrintOneTag"].ToString(); IsPack = dt10.Rows[0]["IsPrintPackList"].ToString(); IsPaint = dt10.Rows[0]["IsPlating"].ToString(); PartName = dt10.Rows[0]["ProductName"].ToString(); //MaxCount = Convert.ToInt32(dt10.Rows[0]["PackCount"].ToString()); IsSupply = dt10.Rows[0]["IsSupply"].ToString(); } #endregion } catch (Exception ex) { throw new Exception("p988" + ex.Message); } if (IsSame == "1") { for (int k = 0; k < 2; k++) { if (IsSupply != "1") { #region 非直供件 try { if (ManufacturerName.Contains("蔚来")) { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_1017", ref NewOneCode, ref newcode); } else { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_1056", ref NewOneCode, ref newcode); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } #endregion } else { #region 直供件 try { GetSupplyCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), QLevel, true, mould, PartName, ref NewOneCode, ref newcode); } catch (Exception ex) { MessageBox.Show(ex.ToString()); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } #endregion } #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = dt.Rows[0]["StationID"].ToString(); md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo[j].ToString().Trim(); md.PartNo = partNo[j].ToString().Trim(); md.PrintType = 0; md.PlanID = planID; md.ProductNature = ProductNature; md.Des1 = PartName; DataTable pdt = productBll.SearchIsImportByPartNo(partNo[j].ToString()); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, true, mould, false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"自动打印[{partNo[j].ToString()}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 打印条码,判断是否打印单个条码 #region 打印单个标签 if (IsOne == "1") { if (IsSupply != "1") { filename = ManufacturerName.Contains("蔚来") ? System.AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("0", "Print" + Program.station + "_1167"); //new } else { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("1", "Print" + Program.station + "_1172"); } //DataTable dt4 = pbll.SearchInfo(partNo[j].ToString().Trim(), // dt.Rows[0]["StationID"].ToString()); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[partNo[j].ToString().Trim() + dt.Rows[0]["StationID"].ToString()]; string reportName = ConfigurationManager.AppSettings[printName] .ToString(); DataTable headTable = GetPrintHeadTable(partNo[j].ToString().Trim(), PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int) GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo( GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + NewOneCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); } #endregion #endregion initBarCode(); } } else { if (IsSupply != "1") { #region 非直供件 try { if (ManufacturerName.Contains("蔚来")) { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_1235", ref NewOneCode, ref newcode); } else { try { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould, PartName, NumItems + "_1273", ref NewOneCode, ref newcode); } catch (Exception ex) { throw new Exception("p988" + ex.Message); } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } #endregion } else { #region 直供件 try { GetSupplyCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), QLevel, true, mould, PartName, ref NewOneCode, ref newcode); } catch (Exception ex) { MessageBox.Show(ex.ToString()); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } #endregion } #region 插入数据tb_barCode try { md.ID = Guid.NewGuid().ToString(); md.StationID = dt.Rows[0]["StationID"].ToString(); md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo[j].ToString().Trim(); md.PartNo = partNo[j].ToString().Trim(); md.PrintType = 0; md.PlanID = planID; md.ProductNature = ProductNature; md.Des1 = PartName; DataTable pdt = productBll.SearchIsImportByPartNo(partNo[j].ToString()); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, true, mould, false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"自动打印[{partNo[j].ToString()}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } } catch (Exception ex) { throw new Exception("p1396" + ex.Message); } #endregion #region 打印条码,判断是否打印单个条码 #region 打印单个标签 if (IsOne == "1") { if (IsSupply != "1") { filename = ManufacturerName.Contains("蔚来") ? System.AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("0", "Print" + Program.station + "_1385");//new if (partNo[j].Contains("A2146982300") || partNo[j].Contains("A2146982400")) { filename = AppDomain.CurrentDomain.BaseDirectory + "Sill.grf"; } } else { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("1", "Print" + Program.station + "_1395"); } //DataTable dt4 = pbll.SearchInfo(partNo[j].ToString().Trim(), // dt.Rows[0]["StationID"].ToString()); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[partNo[j].ToString().Trim() + dt.Rows[0]["StationID"].ToString()]; string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(partNo[j].ToString().Trim(), PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo(GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + NewOneCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); } #endregion #endregion initBarCode(); } } #endregion } } #endregion #region 修改打印时间 //UpdatePrintTime(DateTime.Now, label6.Text); #endregion initPlan(); lastTime=DateTime.Now; } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); MessageBox.Show(ex.ToString()); } } private void TimeGo() { System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 1000; timer.Enabled = true; timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick); } private void timer_Tick(object sender, EventArgs e) { try { label2.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Thread.Sleep(500); } catch(Exception ex) { Console.Write(ex.Message); } } private void timer1_Tick(object sender, EventArgs e) { int wID = 0; WeightRecordBLL wrbll = new WeightRecordBLL(); WeightBLL wbll = new WeightBLL(); WeightRecordModel wmd=new WeightRecordModel(); InjectionPlanBLL bll = new InjectionPlanBLL(); BarCodeBLL brbll = new BarCodeBLL(); BarCodeModel md = new BarCodeModel(); ProductBLL productBll = new ProductBLL(); PlasticBLL pbll = _plasticBLL; InjectionBoxBLL boxbll = new InjectionBoxBLL(); InjectionBoxModel boxmd = new InjectionBoxModel(); InjectionQtyBLL qbll=new InjectionQtyBLL(); InjectionQtyModel qmd = new InjectionQtyModel(); StationBLL sbll=new StationBLL(); DataTable dt2 = null; string code = "", OneCode = ""; string newcode = "", newcode1 = "", NewOneCode = "", NewOneCode1 = ""; string IsPack = "", IsOne = "", QLevel = "", IsPaint = "", PartName = ""; string filename = "", printName = "",StationID="",printBoxName=""; int MaxCount = 0, CurrentCount = 0,IsSame=0; int aa = 0; try { timer1.Enabled=false; GetClass(); aa = aa + 1; LogHelper.WriteLog(aa.ToString()); #region 查找MES数据库总存储的最大ID DataTable wrdt = wrbll.SearchMaxIDByDevice(Program.station); if (wrdt != null && wrdt.Rows.Count > 0) { ID = Convert.ToInt32(wrdt.Rows[0]["ID"].ToString()); } else { ID = 0; } LogHelper.WriteLog(ID.ToString()); #endregion #region 如果称重数据库里的ID大于MES数据库中的ID,打印条码,并将称重数据库中的ID存入MES数据库 if (wID > ID) { #region 打印 #region 查找当前计划 DataTable dt = bll.SearchInfoByName(Program.station); if (dt != null && dt.Rows.Count > 0) { planID = dt.Rows[0]["InjectionPlanID"].ToString(); string[] partNo = dt.Rows[0]["PartNo"].ToString().Split(','); string[] stockNo = new string[partNo.Length]; //string[] stockNo = dt.Rows[0]["StockNo"].ToString().Split(','); string ProductNature = dt.Rows[0]["ProductNature"].ToString(); int[] same = new int[partNo.Length]; #region 判断有几个零件号 int mould = 0; for (int j = 0; j < partNo.Length; j++) { mould = j; #region 根据零件号查找存货代码 DataTable sdt = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (sdt != null && sdt.Rows.Count > 0) { stockNo[j] = sdt.Rows[0]["StockNo"].ToString(); same[j] = Convert.ToInt32(sdt.Rows[0]["IsSame"].ToString()); } else { stockNo[j] = ""; same[j] =0; } #endregion DataTable dt3 = productBll.SearchInfoByPartNo(partNo[j].ToString().Trim()); if (dt3 != null && dt3.Rows.Count > 0) { QLevel = dt3.Rows[0]["QLevel"].ToString(); IsOne = dt3.Rows[0]["IsPrintOneTag"].ToString(); IsPack = dt3.Rows[0]["IsPrintPackList"].ToString(); IsPaint = dt3.Rows[0]["IsPlating"].ToString(); PartName = dt3.Rows[0]["ProductName"].ToString(); MaxCount = Convert.ToInt32(dt3.Rows[0]["PackCount"].ToString()); } if (partNo.Length == 1 && same[j] == 1) //一个零件号,且一模两具生产的是两根一样的产品 { for (int k = 0; k < 2; k++) { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould.ToString(), PartName,"", ref NewOneCode, ref newcode); #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = dt.Rows[0]["StationID"].ToString(); md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo[j].ToString().Trim(); md.PartNo = partNo[j].ToString().Trim(); md.PrintType = 0; md.PlanID = planID; md.ProductNature = ProductNature; md.Des1 = PartName; DataTable pdt = productBll.SearchIsImportByPartNo(partNo[j].ToString()); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, true, same[j].ToString(), false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"自动打印[{partNo[j].ToString()}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 增加产量 qmd.ID = Guid.NewGuid().ToString(); qmd.PlanID = planID; qmd.StationID = getStationID(Program.station); qmd.ProductDate = Program.ProductDate; qmd.ClassName = Program.Shift; qmd.StockNo = stockNo[j].ToString().Trim(); qmd.PartNo = partNo[j].ToString().Trim(); if (ProductNature == "售后件") { qmd.MarketCount = 1; } else { qmd.MarketCount = 0; } DataTable isExistdt = qbll.SearchInfo(qmd); if (isExistdt != null && isExistdt.Rows.Count > 0) { qbll.UpdateQty(qmd); } else { qmd.ProductCount = 1; qbll.AddInfo(qmd); } #endregion #region 打印条码,判断是否打印单个条码 //DataTable dt4 = pbll.SearchInfo(partNo[j].ToString().Trim(), // dt.Rows[0]["StationID"].ToString()); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[partNo[j].ToString().Trim() + dt.Rows[0]["StationID"].ToString()]; #region 打印单个标签 if (IsOne == "1") { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName(); //new string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(partNo[j].ToString().Trim(), PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); rp.Report.Print(false); } #endregion #endregion } } else { GetSjBarCode(stockNo[j].ToString().Trim(), partNo[j].ToString().Trim(), true, mould.ToString(), PartName,"", ref NewOneCode, ref newcode); #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = dt.Rows[0]["StationID"].ToString(); md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo[j].ToString().Trim(); md.PartNo = partNo[j].ToString().Trim(); md.PrintType = 0; md.PlanID = planID; md.ProductNature = ProductNature; md.Des1 = PartName; DataTable pdt = productBll.SearchIsImportByPartNo(partNo[j].ToString()); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, true, same[j].ToString(), false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"自动打印[{partNo[j].ToString()}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 增加产量 qmd.ID = Guid.NewGuid().ToString(); qmd.PlanID = planID; qmd.StationID = getStationID(Program.station); qmd.ProductDate = Program.ProductDate; qmd.ClassName = Program.Shift; qmd.StockNo = stockNo[j].ToString().Trim(); qmd.PartNo = partNo[j].ToString().Trim(); if (ProductNature == "售后件") { qmd.MarketCount = 1; } else { qmd.MarketCount = 0; } DataTable isExistdt = qbll.SearchInfo(qmd); if (isExistdt != null && isExistdt.Rows.Count > 0) { qbll.UpdateQty(qmd); } else { qmd.ProductCount = 1; qbll.AddInfo(qmd); } #endregion #region 打印条码,判断是否打印单个条码 printName = "Printer" + _printNameDict[partNo[j].ToString().Trim() + dt.Rows[0]["StationID"].ToString()]; #region 打印单个标签 if (IsOne == "1") { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName(); //new string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(partNo[j].ToString().Trim(), PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); rp.Report.Print(false); } #endregion #endregion } initBarCode(); } #endregion } #endregion #endregion #region 存ID wmd.GID = Guid.NewGuid().ToString(); wmd.ID = wID; wmd.DeviceNo = Program.station; wrbll.AddInfo(wmd); #endregion } #endregion timer1.Enabled = true; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } private void initProduct() { comboBox2.Items.Clear(); PlasticBLL bll= _plasticBLL; try { DataTable dt = bll.SearchPartByStation(Program.station); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { comboBox2.Items.Add(dt.Rows[i]["ProductName"].ToString()); } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } private void GetClass() { try { DateTime aa = GetDateTime(); if (GetDateTime().Hour >= 8 && GetDateTime().Hour < 20) { Program.Shift = "A班"; Program.ProductDate = aa.ToString("yyyy-MM-dd"); } else { Program.Shift = "B班"; if (GetDateTime().Hour >= 0 && GetDateTime().Hour < 8) { Program.ProductDate = aa.AddDays(-1).ToString("yyyy-MM-dd"); } else if (GetDateTime().Hour >= 20 && GetDateTime().Hour <= 23) { Program.ProductDate = aa.ToString("yyyy-MM-dd"); } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } private DateTime GetDateTime() { string sql = ""; DateTime time; DataTable dt; try { sql = @"select convert(char(23),getdate(),121) as time"; dt = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null).Tables[0]; if (dt != null && dt.Rows.Count > 0) { //time = Convert.ToDateTime(dt.Rows[0]["time"].ToString()); time = DateTime.ParseExact(dt.Rows[0]["time"].ToString(), "yyyy-MM-dd HH:mm:ss.fff", System.Globalization.CultureInfo.CurrentCulture); } else { time = DateTime.Now; } return time; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return DateTime.Now; } } private void initBarCode() { BarCodeBLL bll = new BarCodeBLL(); try { glacialList1.Items.Clear(); DataTable dt1 = bll.SearchInfo(Program.station); DataTable dt = dt1.Clone(); //List list = dt1.AsEnumerable().Where(p => string.IsNullOrEmpty(p.Field("BoxNo")) == false).ToList(); List list = dt1.AsEnumerable().ToList(); if (list.Count > 0) { dt = list.CopyToDataTable(); } Program.strBarCode = ""; Program.strBoxCode = ""; if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { glacialList1.Items.Add(i.ToString()); glacialList1.Items[i].SubItems[0].Text = dt.Rows[i]["OneBarCode"].ToString(); glacialList1.Items[i].SubItems[0].Tag = dt.Rows[i]["BoxNo"].ToString(); glacialList1.Items[i].SubItems[1].Text = dt.Rows[i]["ProductName"].ToString(); glacialList1.Items[i].SubItems[2].Text = dt.Rows[i]["PrintType"].ToString(); glacialList1.Items[i].SubItems[3].Text = dt.Rows[i]["CreateTime"].ToString() == "" ? "" : Convert.ToDateTime(dt.Rows[i]["CreateTime"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); //glacialList1.Items[i].SubItems[4].Text = dt.Rows[i]["BoxNo"].ToString(); } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } /// /// 创建服务 /// /// private bool CreateServer() { try { opcServer = new OPCServer(); } catch { return false; } return true; } /// /// 连接到服务器 /// /// /// /// private bool ConnectServer(string strHostIP, string strHostName) { try { opcServer.Connect(strHostName, strHostIP); } catch { return false; } return true; } /// /// 设置组的属性 /// /// /// private void SetGroupProperty(OPCGroup opcGroup, int updateRate) { opcGroup.IsActive = true; opcGroup.DeadBand = 0; opcGroup.UpdateRate = updateRate; opcGroup.IsSubscribed = true; } #region 调用键盘 private const Int32 WM_SYSCOMMAND = 274; private const UInt32 SC_CLOSE = 61536; [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern int RegisterWindowMessage(string lpString); //显示屏幕键盘 public static int ShowInputPanel() { try { dynamic file = "C:\\Program Files\\Common Files\\microsoft shared\\ink\\TabTip.exe"; if (!System.IO.File.Exists(file)) return -1; Process.Start(file); //return SetUnDock(); //不知SetUnDock()是什么,所以直接注释返回1 return 1; } catch (Exception) { return 255; } } #endregion private void label2_Click(object sender, EventArgs e) { try { //if (serialPort1.IsOpen) //{ // serialPort1.Close(); //} Environment.Exit(0); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod()); Environment.Exit(0); } } /// /// 手工打印条码 /// /// /// private void label23_Click(object sender, EventArgs e) { string code = "",stationID="",OneCode=""; string newcode = "",partNo="",stockNo="",NewOneCode=""; string IsPack = "", IsOne = "", QLevel = "", IsPaint = "", PartName = "", printBoxName="",IsSupply="",ManufacturerName=""; string filename = "", printName = ""; int MaxCount = 0, CurrentCount = 0; CheckPackageSelect(); ProductBLL pbll = new ProductBLL(); BarCodeBLL bll = new BarCodeBLL(); BarCodeModel md = new BarCodeModel(); PlasticBLL plbll= _plasticBLL; InjectionBoxBLL boxbll = new InjectionBoxBLL(); InjectionBoxModel boxmd = new InjectionBoxModel(); InjectionPlanBLL planbll=new InjectionPlanBLL(); try { //if (status == false) //{ // MessageBox.Show("连接服务器失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; //} #region 数据合法性判断 if (comboBox2.Text.Trim() == "") { MessageBox.Show("请选择产品!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (textBox1.Text.Trim() == "") { MessageBox.Show("请输入批次!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (textBox1.Text.Trim().Length != 6) { MessageBox.Show("批次格式不正确!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (textBox2.Text.Trim() == "") { MessageBox.Show("请输入数量!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!IsNumeric(textBox2.Text.Trim())) { MessageBox.Show("数量格式不正确!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //if (Convert.ToInt32(textBox2.Text.Trim()) > 10) //{ // MessageBox.Show("数量不能大于10!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; //} #endregion #region 获取工位编号 StationBLL sbll = new StationBLL(); DataTable sdt = sbll.SearchInfoByNo(Program.station); if (sdt != null && sdt.Rows.Count > 0) { stationID = sdt.Rows[0]["StationID"].ToString(); } #endregion DialogResult result = MessageBox.Show("确定手工打印条码?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { #region 查询零件号 DataTable pdt = pbll.SearchInfoByName(comboBox2.Text, "2000"); if (pdt != null && pdt.Rows.Count > 0) { partNo = pdt.Rows[0]["PartNo"].ToString().Trim(); stockNo = pdt.Rows[0]["StockNo"].ToString().Trim(); ManufacturerName = pdt.Rows[0]["ManufacturerName"].ToString().Trim(); } else { MessageBox.Show($"零件[{comboBox2.Text}]在系统中不存在!"); return; } #endregion #region 判断是否打印单个条码 DataTable dt3 = pbll.SearchInfoByPartNo(partNo); if (dt3 != null && dt3.Rows.Count > 0) { QLevel = dt3.Rows[0]["QLevel"].ToString(); IsOne = dt3.Rows[0]["IsPrintOneTag"].ToString(); PartName = dt3.Rows[0]["ProductName"].ToString(); IsSupply = dt3.Rows[0]["IsSupply"].ToString(); } #endregion //todo 判断零件号和计划是不是一致 DataTable plandt = planbll.searchPlanInfo(planID); if (plandt != null && plandt.Rows.Count > 0) { if (plandt.Rows[0]["PartNo"].ToString().Contains(partNo)==false) { planID = ""; } } if (IsSupply != "1") { #region 非直供件 int printCount = Convert.ToInt32(textBox2.Text.Trim()); for (int i = 1; i <= printCount; i++) { GetSjBarCode(stockNo, partNo,false,"0", PartName, "", ref NewOneCode, ref newcode); string[] part = newcode.Split('.'); #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = stationID; md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo; md.PartNo = partNo; md.PrintType = 1; md.PlanID = planID; md.ProductNature = "正常件"; //第一次没有这个 md.Des1 = PartName; DataTable dt2 = pbll.SearchIsImportByPartNo(partNo); if (dt2 != null && dt2.Rows.Count > 0) { if (dt2.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, false, "0", i == printCount, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"手工打印[{partNo}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 打印单个标签 if (IsOne == "1") { //filename = System.AppDomain.CurrentDomain.BaseDirectory + "单个条码.grf"; filename = ManufacturerName.Contains("蔚来") ? System.AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("0", "Print" + Program.station + "_2514"); //new if (partNo.Contains("A2146982300") || partNo.Contains("A2146982400")) { filename = AppDomain.CurrentDomain.BaseDirectory + "Sill.grf"; } //DataTable dt4 = plbll.SearchInfo(partNo, stationID); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[partNo + stationID]; string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(partNo, PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo(GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + NewOneCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); } #endregion } #endregion } else { #region 直供件 for (int i = 1; i <= Convert.ToInt32(textBox2.Text.Trim()); i++) { //newcode = code.Substring(0, code.Length - 4) + // (Convert.ToInt32(code.Substring(23, 3)) + // i).ToString() // .PadLeft(3, '0') + "#"; GetSupplyCode(stockNo, partNo, QLevel,false, "0", PartName, ref NewOneCode, ref newcode); #region 插入数据tb_barCode md.ID = Guid.NewGuid().ToString(); md.StationID = stationID; md.OneBarCode = NewOneCode; md.BarCode = newcode; md.StockNo = stockNo; md.PartNo = partNo; md.PrintType = 1; md.PlanID = planID; DataTable dt2 = pbll.SearchIsImportByPartNo(partNo); if (dt2 != null && dt2.Rows.Count > 0) { if (dt2.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } } string errMsg = string.Empty; bool saveRst = SaveInfo(md, false, "0", false, ref errMsg); if (saveRst == false) { LogErrBLL.AddInfo($"手工打印[{partNo}],条码" + md.OneBarCode + "报错:" + errMsg, MethodBase.GetCurrentMethod()); //MessageBox.Show("条码" + md.OneBarCode + "存储时发生错误,原因:" + errMsg); //return; } #endregion #region 打印单个标签 if (IsOne == "1") { filename = System.AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName("1", "Print" + Program.station + "_2778"); ; //DataTable dt4 = plbll.SearchInfo(partNo, stationID); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[partNo + stationID]; string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(partNo, PartName, NewOneCode, newcode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo(GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + NewOneCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); } #endregion } #endregion } initBarCode(); } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); MessageBox.Show(ex.ToString()); } } private static bool IsNumeric(string str) { System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[0-9]\d*$"); return reg1.IsMatch(str); } private static string getStationID(string stationName) { try { string id = ""; StationBLL bll=new StationBLL(); DataTable dt = bll.SearchInfoByNo(stationName); if (dt != null && dt.Rows.Count > 0) { id = dt.Rows[0]["StationID"].ToString(); } else { id = ""; } return id; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return ""; } } /// /// 往左箱单添加新码 /// /// /// private void lbAddPrintL_Click(object sender, EventArgs e) { ReAddBarCodeToBox( lbPackageCodeL, lbCurrentlQtyL, lbNeedQtyL,"左侧"); } /// /// 往右箱单添加新码 /// /// /// private void lbAddPrintR_Click(object sender, EventArgs e) { ReAddBarCodeToBox(lbPackageCodeR, lbCurrentlQtyR, lbNeedQtyR, "右侧"); } /// /// 手动添加新箱码 /// /// /// /// /// void ReAddBarCodeToBox(Label lbPackageCode, Label lbCurrentlQty, Label lbNeedQty,string hintTxt) { BarCodeBLL bll = new BarCodeBLL(); InjectionBoxBLL inBoxBll = new InjectionBoxBLL(); string boxCode = lbPackageCode.Text?.Trim(); if (string.IsNullOrEmpty(boxCode)) { MessageBox.Show(hintTxt + "箱码为空,无法添加新零件."); return; } string tcompletedQtyStr = lbCurrentlQty.Text?.Trim(); string allQtyStr = lbNeedQty.Text?.Trim(); int count1 = 0; int count2 = 0; int.TryParse(tcompletedQtyStr, out count1); int.TryParse(allQtyStr, out count2); if (count2 == 0) { MessageBox.Show(hintTxt + "箱码规格为空,无法添加新零件."); return; } if (count1 >= count2) { MessageBox.Show(hintTxt + "箱码已满,无法添加新零件."); return; } DialogResult result = MessageBox.Show($"确定向"+ hintTxt +$"箱码[{boxCode}]插入一条全新数据并打印?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { DataTable dt = bll.SearchInfoByBox(boxCode, Program.tableName); if (dt.Rows.Count == 0) { MessageBox.Show($"表[{Program.tableName}]中没有找到{hintTxt}箱码[{boxCode}]关联的数据记录."); return; } try { inBoxBll.UpdateBoxCount(boxCode, 1, false); BoxBarCodeReAddAndPrint(dt.Rows[0]); InitPackageInfo(); //试试打印数量是否更新 int count3 = 0; int count4 = 0; int.TryParse(lbCurrentlQty.Text?.Trim(), out count3); int.TryParse(allQtyStr, out count4); if(count3 == count4) { if(hintTxt == "左侧") { UnCompletePrintBox("手动打印箱码", "left"); } else { UnCompletePrintBox("手动打印箱码", "right"); } } } catch (Exception ex) { MessageBox.Show($"向{hintTxt}箱码[{boxCode}]添加数据失败,原因:" + ex.Message); InitPackageInfo(); } } } bool BoxBarCodeReAddAndPrint(DataRow barCodeRow) { ProductBLL pbll = new ProductBLL(); BarCodeBLL bll = new BarCodeBLL(); string code = "", filename = "", printName = "", ManufacturerName = ""; string IsSupply = "0"; BarCodeModel md = new BarCodeModel(); md.ID = Guid.NewGuid().ToString(); md.StationID = barCodeRow["StationID"].ToString(); md.StockNo = barCodeRow["StockNo"].ToString(); md.PartNo = barCodeRow["PartNo"].ToString(); md.BatchNo = barCodeRow["BatchNo"].ToString(); string newOneCode = string.Empty; string newBarCode = string.Empty; GetBarCode(md.StockNo, md.BatchNo, md.PartNo, ref newOneCode, ref newBarCode); md.OneBarCode = newOneCode; md.BarCode = newBarCode; md.BoxNo = barCodeRow["BoxNo"].ToString(); md.Des1 = barCodeRow["Des1"].ToString(); md.PrintType = 2; //DataTable pdt = pbll.SearchIsImportByPartNo(md.PartNo); DataTable pdt = pbll.SearchInfoByPartNo(md.PartNo); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } ManufacturerName = pdt.Rows[0]["ManufacturerName"].ToString().Trim(); IsSupply = pdt.Rows[0]["IsSupply"].ToString(); } //向箱码手动添加条码 string msg = bll.ReprintSave(md, Program.tableName, "", "", Program.station, "2"); if (!string.IsNullOrEmpty(msg)) { MessageBox.Show($"补打失败,原因:" + msg); return false; } glacialList1.SelectedItems.Clear(); initBarCode(); #region 打印条码 filename = ManufacturerName.Contains("蔚来") ? AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName(IsSupply, "Print" + Program.station + "_3102"); //new if (md.PartNo.Contains("A2146982300") || md.PartNo.Contains("A2146982400")) { filename = AppDomain.CurrentDomain.BaseDirectory + "Sill.grf"; } string partName = ""; DataTable dt2 = pbll.SearchInfoByPartNo(md.PartNo); if (dt2 != null && dt2.Rows.Count > 0) { partName = dt2.Rows[0]["ProductName"].ToString(); } else { partName = ""; } printName = "Printer" + _printNameDict[md.PartNo + md.StationID]; string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(md.PartNo, partName, md.OneBarCode, md.BarCode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo(GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + md.OneBarCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); #endregion return true; } /// /// 补打条码 /// /// /// private void label22_Click(object sender, EventArgs e) { string code = "", filename = "", printName = "", ManufacturerName=""; string IsSupply = "0"; BarCodeModel md = new BarCodeModel(); BarCodeBLL bll = new BarCodeBLL(); ProductBLL pbll = new ProductBLL(); PlasticBLL plbll = _plasticBLL; try { if (glacialList1.SelectedItems.Count == 0) { MessageBox.Show("请选择要补打的条码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { GlacialComponents.Controls.GLItem gv; gv = glacialList1.SelectedItems[0] as GlacialComponents.Controls.GLItem; code = gv.Text; DialogResult result = MessageBox.Show($"补打条码[{code}]将被新的替换,确定补打条码?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { bool exsitWms = _wmsBll.IsReadBarCodeInWms(code); if (exsitWms) { MessageBox.Show($"条码[{code}]在WMS系统已处理,无法补打!"); return; } DataTable dt = bll.SearchInfoByBarCodeNew(code, Program.tableName); if (dt == null || dt.Rows.Count == 0) { MessageBox.Show($"补打失败,条码[{code}]在表[{ Program.tableName}]中不存在!"); return; } md.ID = Guid.NewGuid().ToString(); //md.BarCode = code; md.StationID = dt.Rows[0]["StationID"].ToString(); md.StockNo = dt.Rows[0]["StockNo"].ToString(); md.PartNo = dt.Rows[0]["PartNo"].ToString(); md.BatchNo = dt.Rows[0]["BatchNo"].ToString(); string newOneCode = string.Empty; string newBarCode = string.Empty; GetBarCode(md.StockNo, md.BatchNo, md.PartNo, ref newOneCode, ref newBarCode); md.OneBarCode = newOneCode; md.BarCode = newBarCode; md.BoxNo = dt.Rows[0]["BoxNo"].ToString(); if (gv.SubItems.Count > 1) { md.Des1 = gv.SubItems[1].Text; } md.PrintType = 2; //DataTable pdt = pbll.SearchIsImportByPartNo(md.PartNo); DataTable pdt = pbll.SearchInfoByPartNo(md.PartNo); if (pdt != null && pdt.Rows.Count > 0) { if (pdt.Rows[0]["isImport"].ToString() == "1") { md.Import = "国产料Kingfa"; } else { md.Import = ""; } ManufacturerName = pdt.Rows[0]["ManufacturerName"].ToString().Trim(); IsSupply = pdt.Rows[0]["IsSupply"].ToString(); } //补打条码 string msg = bll.ReprintSave(md, Program.tableName, dt.Rows[0]["OneBarCode"].ToString(), dt.Rows[0]["BarCode"].ToString(), Program.station,"3"); if (!string.IsNullOrEmpty(msg)) { MessageBox.Show($"补打失败,原因:" + msg); return; } //if (bll.Add_Info_New(md, Program.tableName) == false) //{ // return; //} glacialList1.SelectedItems.Clear(); initBarCode(); #region 打印条码 //filename = System.AppDomain.CurrentDomain.BaseDirectory + "单个条码.grf"; filename = ManufacturerName.Contains("蔚来") ? AppDomain.CurrentDomain.BaseDirectory + "wl.grf" : AppDomain.CurrentDomain.BaseDirectory + PrintMoudleName(IsSupply, "Print" + Program.station + "_3102"); //new if (md.PartNo.Contains("A2146982300") || md.PartNo.Contains("A2146982400")) { filename = AppDomain.CurrentDomain.BaseDirectory + "Sill.grf"; } string partName = ""; DataTable dt2 = pbll.SearchInfoByPartNo(md.PartNo); if (dt2 != null && dt2.Rows.Count > 0) { partName = dt2.Rows[0]["ProductName"].ToString(); } else { partName = ""; } //DataTable dt4 = plbll.SearchInfo(md.PartNo, md.StationID); //if (dt4 != null && dt4.Rows.Count > 0) //{ // printName = "Printer" + dt4.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[md.PartNo + md.StationID]; string reportName = ConfigurationManager.AppSettings[printName].ToString(); DataTable headTable = GetPrintHeadTable(md.PartNo, partName, md.OneBarCode, md.BarCode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoPortrait, 1, reportName); LogSysBLL.AddInfo(GetDateTime().ToString("yyyy/MM/dd HH:mm:ss") + md.OneBarCode, MethodBase.GetCurrentMethod()); rp.Report.Print(false); #endregion } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } /// /// 补打箱单 /// /// /// private void label16_Click(object sender, EventArgs e) { panel44.Visible = true; } /// /// 删除条码 /// /// /// private void label15_Click(object sender, EventArgs e) { BarCodeBLL bll = new BarCodeBLL(); BarCodeModel md = new BarCodeModel(); try { if (glacialList1.SelectedItems.Count == 0) { MessageBox.Show("请选择要删除的条码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { DialogResult result = MessageBox.Show("确定删除条码?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { GlacialComponents.Controls.GLItem gv; gv = glacialList1.SelectedItems[0] as GlacialComponents.Controls.GLItem; md.BarCode = gv.Text; string boxCode = (glacialList1.SelectedItems[0] as GlacialComponents.Controls.GLItem).SubItems[0].Tag?.ToString(); if(boxCode == lbPackageCodeL.Text?.Trim() || boxCode == lbPackageCodeR.Text?.Trim()) { string msg = bll.DelBarCode(gv.Text?.Trim(), Program.tableName,true, boxCode); if (!string.IsNullOrEmpty(msg)) { MessageBox.Show(msg); } else { InitPackageInfo(); } initBarCode(); } else { MessageBox.Show($" 删除条码的箱码[{boxCode}]不属于当前装箱范围内,无法删除.!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } /// /// 补打装箱单确定按钮 /// /// /// private void button1_Click(object sender, EventArgs e) { try { InjectionBoxBLL boxbll=new InjectionBoxBLL(); InjectionBoxModel boxmd=new InjectionBoxModel(); BarCodeBLL bll=new BarCodeBLL(); ProductBLL pbll=new ProductBLL(); PlasticBLL plbll= _plasticBLL; StationBLL sbll=new StationBLL(); string filename = "", printName = "", printBoxName="",stationID=""; #region 验证输入合法性 if (textBox3.Text.Trim() == "") { MessageBox.Show("请输入箱单号", "提示", MessageBoxButtons.OK); return; } DataTable dt = boxbll.SearchBox(textBox3.Text.Trim()); if (dt != null && dt.Rows.Count > 0) { DataTable dt1 = bll.SearchCountByBox(textBox3.Text.Trim(), Program.tableName); if (dt1 != null && dt1.Rows.Count > 0) { #region 查找该箱单内容 filename = System.AppDomain.CurrentDomain.BaseDirectory + "装箱单.grf"; DataTable headTable = new DataTable(); headTable.Columns.Add("BoxNo"); headTable.Columns.Add("PartName"); headTable.Columns.Add("PartNo"); headTable.Columns.Add("BatchNo"); headTable.Columns.Add("PackCount"); headTable.Columns.Add("QLevel"); DataRow row = headTable.NewRow(); string[] box = textBox3.Text.Trim().Split('.'); row["BoxNo"] = textBox3.Text.Trim(); row["PartNo"] = box[0].Trim(); DataTable dt2 = pbll.SearchInfoByPartNo(row["PartNo"].ToString()); if (dt2 != null && dt2.Rows.Count > 0) { row["PartName"] = dt2.Rows[0]["ProductName"].ToString(); } row["BatchNo"] = box[1].Trim(); row["PackCount"] = dt1.Rows[0]["SumCount"].ToString(); row["QLevel"] = dt2.Rows[0]["QLevel"].ToString(); #endregion #region 保存箱单 boxmd.ID = Guid.NewGuid().ToString(); boxmd.BoxNo = textBox3.Text.Trim(); boxmd.IsFlag = 1; boxmd.BoxCount = Convert.ToInt32(dt1.Rows[0]["SumCount"].ToString()); boxbll.AddInfo(boxmd); #endregion #region 打印箱单 #region 查询工位ID DataTable sdt = sbll.SearchInfoByNo(Program.station); if (sdt != null && sdt.Rows.Count > 0) { stationID = sdt.Rows[0]["StationID"].ToString(); } #endregion #region 查询打印机名称 //DataTable dt3 = plbll.SearchInfo(row["PartNo"].ToString(), stationID); //if (dt3 != null && dt3.Rows.Count > 0) //{ // printName = "Printer" + dt3.Rows[0]["PrinterNo"].ToString(); //} printName = "Printer" + _printNameDict[row["PartNo"].ToString() + stationID]; #endregion printBoxName = "Printer" + (Convert.ToInt32(printName.Substring(7, 1)) + 2).ToString(); string reportName = ConfigurationManager.AppSettings[printBoxName].ToString(); headTable.Rows.Add(row); SaveLog3(Program.station + "打印箱单:" + textBox3.Text.Trim()); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoLandscape, 1, reportName); rp.Report.Print(false); #endregion panel44.Visible = false; textBox3.Text = ""; } } else { MessageBox.Show("此箱单不存在,请重新输入", "提示", MessageBoxButtons.OK); textBox3.Focus(); return; } #endregion } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } private void button2_Click(object sender, EventArgs e) { panel44.Visible = false; textBox3.Text = ""; } /// /// 下一计划 /// /// /// private void label14_Click(object sender, EventArgs e) { try { if (UnCompletePrintBox("切换下一计划","all") == false) return; InjectionPlanBLL planbll=new InjectionPlanBLL(); #region 查询有无下一计划 DataTable dt = planbll.NextSearchInfoByName(Program.station); if (dt != null && dt.Rows.Count > 1) { planID = dt.Rows[0]["InjectionPlanID"].ToString(); productID = dt.Rows[0]["ProductID"].ToString(); nextproductID = dt.Rows[1]["InjectionPlanID"].ToString(); panel45.Visible = true; if (lbCurrentlQtyL.Text == "0" || string.IsNullOrEmpty(lbCurrentlQtyL.Text)) { lbPackageCodeL.Text = ""; } if (lbCurrentlQtyR.Text == "0" || string.IsNullOrEmpty(lbCurrentlQtyR.Text)) { lbPackageCodeR.Text = ""; } string[] partNo = dt.Rows[0]["PartNo"].ToString().Split(','); for (int i = 0; i < partNo.Length; i++) { InitComboBoxSize(partNo[i], i, ""); } } else { MessageBox.Show("暂无下一计划,请联系计划员!", "提示", MessageBoxButtons.OK); return; } #endregion } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } /// /// 切换模具 /// /// /// private void button4_Click(object sender, EventArgs e) { try { ModelInfoBLL bll=new ModelInfoBLL(); ModelProductBLL mbll=new ModelProductBLL(); InjectionPlanBLL ibll=new InjectionPlanBLL(); InjectionPlanModel md=new InjectionPlanModel(); ProductBLL productBll = new ProductBLL(); string aa = ""; string[] partNo = null; #region 验证数据有效性 模具条码不全暂时先屏蔽 if (textBox4.Text.Trim() == "") { MessageBox.Show("请扫描模具条码!", "提示", MessageBoxButtons.OK); textBox4.Focus(); return; } #endregion #region 判断模具编号是否存在 模具条码不全暂时先屏蔽 DataTable dt5 = bll.SearchInfo(textBox4.Text.Trim()); if (dt5 != null && dt5.Rows.Count > 0) { #region 校验模具和下一计划是否匹配 DataTable nextdt = ibll.NextSearchInfoByName(Program.station); if (nextdt != null && nextdt.Rows.Count > 1) { nextPlanID = nextdt.Rows[1]["InjectionPlanID"].ToString(); aa= nextdt.Rows[1]["PartNo"].ToString(); partNo = aa.Split(','); DataTable dt1 = mbll.SearchInfo(textBox4.Text.Trim(), partNo[0]); if (dt1 != null && dt1.Rows.Count > 0) { #region 更新上一计划为完成 md.InjectionPlanID = planID; ibll.UpdateFinish(md); if (!string.IsNullOrEmpty(nextPlanID) && nextPlanID != planID) { ibll.UpdatePlanStartTime(nextPlanID); } #endregion panel45.Visible = false; textBox4.Text = ""; } else { MessageBox.Show("模具和计划不匹配!", "提示", MessageBoxButtons.OK); textBox4.SelectAll(); textBox4.Focus(); return; } } else { label12.Text = "暂无一下生产计划"; return; } #endregion } else { MessageBox.Show("模具条码不存在!", "提示", MessageBoxButtons.OK); textBox4.Focus(); return; } #endregion panel45.Visible = false; #region 获取当前生产信息 initPlan(); #endregion } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } private void button3_Click(object sender, EventArgs e) { panel45.Visible = false; textBox4.Text = ""; } /// /// 暂停打印 /// /// /// private void label13_Click(object sender, EventArgs e) { try { if (label13.Text == "暂停打印") { DialogResult result = MessageBox.Show("确认暂停打印?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { if (UnCompletePrintBox("切换手动打印","all") == false) return; opcGroup1.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange); cboxHandBox.Enabled = true; opcServer.OPCGroups.RemoveAll(); opcServer.Disconnect(); //serialPort1.Close(); comboBox2.Enabled = true; label23.Enabled = true; label23.BackColor = System.Drawing.Color.DeepSkyBlue; //if (ConfigurationManager.AppSettings["StationMode"].ToString() == "1") //{ // timer1.Enabled = false; //} //if (ConfigurationManager.AppSettings["StationMode"].ToString() == "2") //{ // serialPort1.Close(); //} label13.Text = "开始打印"; label13.BackColor = System.Drawing.Color.Gray; } else { return; } } else { DialogResult result = MessageBox.Show("确认开始打印?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { if (UnCompletePrintBox("切换自动打印","all") == false) return; cboxHandBox.Enabled = false; comboBox2.Enabled = false; #region 连接PLC try { if (CreateServer()) { if (ConnectServer(strHostIP, "Kepware.KEPServerEX.V6")) { Connected = true; #region 创建组 opcGroups = opcServer.OPCGroups; opcGroup1 = opcGroups.Add("Mould"); SetGroupProperty(opcGroup1, _plcRate); #endregion #region 创建项 opcItems1 = opcGroup1.OPCItems; opcItems1.DefaultIsActive = true; //PLCMouldBLL PLCbll = new PLCMouldBLL(); //PLCBreakBLL bbll = new PLCBreakBLL(); DataTable PLCdt = _PLCbll.SearchMould(Program.station); if (PLCdt != null && PLCdt.Rows.Count > 0) { opcItemm1 = new OPCItem[PLCdt.Rows.Count]; for (int i = 0; i < PLCdt.Rows.Count; i++) { opcItemm1[i] = opcItems1.AddItem(PLCdt.Rows[i]["Address"].ToString(), i); } } Thread.Sleep(200); opcGroup1.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange); #endregion } else { MessageBox.Show("连接到OPC服务器失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("连接到OPC服务器失败!"); return; } } else { MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("创建OPC服务失败!"); return; } } catch(Exception ex) { MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("创建OPC服务失败!"); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } #endregion label13.Text = "暂停打印"; label13.BackColor = System.Drawing.Color.DeepSkyBlue; label23.Enabled = false; label23.BackColor = System.Drawing.Color.Gray; textBox2.Text = ""; } else { return; } } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } /// /// 质量录入 /// /// /// private void label9_Click(object sender, EventArgs e) { FrmQuality fr = new FrmQuality(); fr.QualityViewClosed += (arg1) => { try { InitPackageInfo(); initBarCode(); if (arg1.Contains(lbPackageCodeL.Text?.Trim())) { lbPackageCodeL.Text = ""; lbCurrentlQtyL.Text = "0"; } else if (arg1.Contains(lbPackageCodeR.Text?.Trim())) { lbPackageCodeR.Text = ""; lbCurrentlQtyR.Text = "0"; } } catch(Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } }; fr.Show(); } /// /// 停机录入 /// /// /// private void label10_Click(object sender, EventArgs e) { Form fr = new FrmDown(); fr.Show(); } private void timer2_Tick(object sender, EventArgs e) { Program.ProductDate = _barCodeBLL.GetServiceTime().ToString(); //initPlan(); } private void comboBox2_TextChanged(object sender, EventArgs e) { label12.Focus(); } private void glacialList1_Click(object sender, EventArgs e) { try { if (glacialList1.SelectedItems.Count > 0) { GlacialComponents.Controls.GLItem gv; gv = glacialList1.SelectedItems[0] as GlacialComponents.Controls.GLItem; Program.strBarCode = gv.Text; //Program.strBoxCode = gv.SubItems[4].Text; Program.strBoxCode = gv.SubItems[0].Tag?.ToString(); } } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } /// /// 每隔几秒,连接一下服务器,刷新一下当前计划 /// /// /// private void timer3_Tick(object sender, EventArgs e) { try { Ping p1 = new Ping(); PingReply reply = p1.Send("10.60.101.60"); //发送主机名或Ip地址 StringBuilder sbuilder; if (reply.Status == IPStatus.Success) { status = true; label2.BackColor = Color.LightGray; } else { status = false; label2.BackColor = Color.Red; } GetClass(); //textBox1.Text = Program.ProductDate.Substring(2, 2) + Program.ProductDate.Substring(5, 2) + // Program.ProductDate.Substring(8, 2); //批次 textBox1.Text = GetBatch(true); #region 获取当前生产信息 initPlan(); #endregion } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { Program.cc = comboBox1.Text; } private DateTime GetPrintTime(string station) { try { DateTime time = DateTime.Now; StationBLL bll = new StationBLL(); DataTable dt = bll.SearchInfoByNo(station); if (dt != null && dt.Rows.Count > 0) { if (string.IsNullOrEmpty(dt.Rows[0]["PrintTime"].ToString())) { time = DateTime.Now; } else { time = Convert.ToDateTime(dt.Rows[0]["PrintTime"].ToString()); } } return time; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return DateTime.Now; } } private bool UpdatePrintTime(DateTime time, string station) { try { StationBLL bll = new StationBLL(); return bll.UpdateTime(time, station); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return false; } } private int GetSeconds(string station) { try { int seconds = 0; StationBLL bll = new StationBLL(); DataTable dt = bll.SearchInfoByNo(station); if (dt != null && dt.Rows.Count > 0) { if (string.IsNullOrEmpty(dt.Rows[0]["Seconds"].ToString())) { seconds = 0; } else { seconds = Convert.ToInt32(dt.Rows[0]["Seconds"].ToString()); } } return seconds; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return 0; } } /// /// 计算时间差 /// /// 时间1 /// 时间2 /// 返回值:时间差(毫秒为单位) private long TimeDiff(DateTime t, DateTime t2) { long lReturn = -1; System.TimeSpan NowValue = new TimeSpan(t.Ticks); System.TimeSpan TimeValue = new TimeSpan(t2.Ticks); System.TimeSpan DateDiff = TimeSpan.Zero; try { //计算时间差 //DateDiff = TimeValue.Subtract(NowValue).Duration(); DateDiff = TimeValue.Subtract(NowValue); int hours = DateDiff.Hours; int minutes = DateDiff.Minutes; int seconds = DateDiff.Seconds; int milliseconds = DateDiff.Milliseconds; string TimeDiff = hours.ToString() + ":" + minutes.ToString() + ":" + seconds.ToString() + "." + milliseconds.ToString(); //是否比现在的时间小,如果小就设置成第二天再启动,否则当天启动 if (hours <= 0 && minutes <= 0 && seconds <= 0 && milliseconds <= 0) hours += 24; lReturn = hours * 3600 + minutes * 60 + seconds; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); } return lReturn; } bool SaveBarCode(BarCodeModel bcm,string tableName, bool isAutoPrint,string mould, ref string errorMsg, bool handPrint = false) { Label lbPackageCode = lbPackageCodeL; Label lbCurrentlQty = lbCurrentlQtyL; Label lbNeedQty = lbNeedQtyL; //BarCodeModel lastFailedModel = null; if (mould == _leftType) { lbPackageCode = lbPackageCodeL; lbCurrentlQty = lbCurrentlQtyL; lbNeedQty = lbNeedQtyL; //lastFailedModel = _lastFailedModelL; } else { lbPackageCode = lbPackageCodeR; lbCurrentlQty = lbCurrentlQtyR; lbNeedQty = lbNeedQtyR; //lastFailedModel = _lastFailedModelR; } bool saveRst = true; //自动模式 或者手动模式选中绑定箱码 if (isAutoPrint == true || (isAutoPrint==false && cboxHandBox.Checked ==true)) { bcm.BoxNo = lbPackageCode.Text.Trim(); bool isSuccess = false; DataTable dt = null; int realCount = 0; int sizeCount = 0; LocalDBService local = new LocalDBService(SqlHelper.GetConnSting()); try { local.BeginTrans(); _barCodeBLL.Add_Info_New(local, bcm, Program.tableName, "1"); //更新箱单数量 //查询箱单数量 是否等于标包数量 等于的话清空lb显示 小于,数量值赋值给lb显示 if (_injectionBoxBLL.UpdateBoxCount(local, bcm.BoxNo, 1)) { dt = _injectionBoxBLL.SearchBox(local, bcm.BoxNo); if (dt.Rows.Count > 0) { string realCountStr = dt.Rows[0]["BoxCount"].ToString(); string sizeCountStr = lbNeedQty.Text.Trim(); int.TryParse(realCountStr, out realCount); int.TryParse(sizeCountStr, out sizeCount); if ((realCount != 0 && realCount == sizeCount) || (isAutoPrint == false && handPrint == true)) { lbPackageCode.Text = ""; lbCurrentlQty.Text = "0"; _wmsBll.SaveInterface(local, bcm.BoxNo, "", Program.station); isSuccess = true; } else { lbCurrentlQty.Text = realCountStr; } } } //throw new Exception("资源被占用,死锁了测试"); local.Commit(); } catch (Exception ex) { if (local != null) { local.Rollback(); } errorMsg = ex.Message; //lastFailedModel = bcm; if (mould == _leftType) { _lastFailedModelL = bcm; } else { _lastFailedModelR = bcm; } saveRst = false; } finally { if (local != null) { local.EndTrans(); } } //保存后打印箱单 if (isSuccess) { _lastBoxNoL = lbPackageCodeL.Text; _lastBoxNoR = lbPackageCodeR.Text; //打印箱码 PrintBoxCode(dt.Rows[0], realCount, mould); // _lastBoxNo = lbPackageCodeL.Text; lbPackageCodeL.Text = ""; } } else { try { //手动打印, 关闭打印箱码, 直接存条码记录.不处理其他 saveRst = _barCodeBLL.Add_Info_New(bcm, Program.tableName); if (saveRst == false) { //lastFailedModel = bcm; if (mould == _leftType) { _lastFailedModelL = bcm; } else { _lastFailedModelR = bcm; } } } catch(Exception ex) { errorMsg = ex.Message; //lastFailedModel = bcm; if (mould == _leftType) { _lastFailedModelL = bcm; } else { _lastFailedModelR = bcm; } } } return saveRst; } /// /// 初始加载箱码 /// /// 初始加载箱码后,是否需要加载 void InitPackageInfo(bool needInitComboxSize = false) { DataTable dt0 = _injectionBoxBLL.SearchUnBox(Program.station, "0"); if (dt0.Rows.Count > 0) { lbPackageCodeL.Text = dt0.Rows[0]["BoxNo"].ToString(); lbCurrentlQtyL.Text = dt0.Rows[0]["BoxCount"].ToString(); if(needInitComboxSize == true && !string.IsNullOrEmpty(lbPackageCodeL.Text)) { string[] array = lbPackageCodeL.Text.Split('.'); if (array.Length >0) { string standardQty = dt0.Rows[0]["StandardQty"].ToString(); InitComboBoxSize(array[0].Trim(), 0, standardQty); } } } DataTable dt1 = _injectionBoxBLL.SearchUnBox(Program.station, "1"); if (dt1.Rows.Count > 0) { lbPackageCodeR.Text = dt1.Rows[0]["BoxNo"].ToString(); lbCurrentlQtyR.Text = dt1.Rows[0]["BoxCount"].ToString(); if (needInitComboxSize == true && !string.IsNullOrEmpty(lbPackageCodeR.Text)) { string[] array = lbPackageCodeR.Text.Split('.'); if (array.Length > 0) { string standardQty = dt1.Rows[0]["StandardQty"].ToString(); InitComboBoxSize(array[0].Trim(), 1, standardQty); } } } } /// /// 打印箱码 /// /// /// /// private void PrintBoxCode(DataRow boxRow,int realCount,string mould) { SaveLog3(Program.station + "箱单打印mould="+ mould); string filename = System.AppDomain.CurrentDomain.BaseDirectory + "装箱单.grf"; DataTable headTable = new DataTable(); headTable.Columns.Add("BoxNo"); headTable.Columns.Add("PartName"); headTable.Columns.Add("PartNo"); headTable.Columns.Add("BatchNo"); headTable.Columns.Add("PackCount"); headTable.Columns.Add("Line"); DataRow row = headTable.NewRow(); string boxCode = boxRow["BoxNo"].ToString(); string[] boxes = boxCode.Split('.'); if(boxes.Length != 4) { //新生成一个箱码 应该都有 } else { row["BoxNo"] = boxCode; row["PartNo"] = boxes[0].Trim(); row["PartName"] = boxRow["PartName"].ToString(); row["BatchNo"] = boxes[1].Trim(); row["PackCount"] = realCount; row["Line"] = boxRow["StationNo"].ToString()+"注塑机"; } UpdateBoxRecordPrintState(boxCode); string printBoxName = string.Empty; if (mould == "1") { printBoxName = "Printer3"; } else { printBoxName = "Printer4"; } string reportName = ConfigurationManager.AppSettings[printBoxName].ToString(); headTable.Rows.Add(row); SaveLog3(Program.station + "打印箱单:" + boxCode); ReportHelper rp = new ReportHelper(filename, headTable, null, (int)GRPaperOrientation.grpoLandscape, 1, reportName); rp.Report.Print(false); } private void UpdateBoxRecordPrintState(string UpdatePrinted) { _injectionBoxBLL.UpdatePrinted(UpdatePrinted); } /// /// 检查是否有箱码. 没有箱码,生成一个箱码 /// /// /// private void CheckPackageCode(string partCode, bool autoPrint,string mould, string partName) { if (autoPrint == true || (autoPrint == false && cboxHandBox.Checked == true)) { Label lbPackageCode = lbPackageCodeL; Label lbNeedQty = lbNeedQtyL; Label lbCurrentlQty = lbCurrentlQtyL; if (mould == _leftType) { lbPackageCode = lbPackageCodeL; lbNeedQty = lbNeedQtyL; lbCurrentlQty = lbCurrentlQtyL; } else { lbPackageCode = lbPackageCodeR; lbNeedQty = lbNeedQtyR; lbCurrentlQty = lbCurrentlQtyR; } string pkgCode = lbPackageCode.Text.Trim(); if (string.IsNullOrEmpty(pkgCode)) { string packageCode = GetPackageCode(partCode, autoPrint); InjectionBoxModel boxmd = new InjectionBoxModel(); boxmd.ID = Guid.NewGuid().ToString(); boxmd.BoxNo = packageCode; boxmd.BoxCount = 0; boxmd.BoxType = 0; boxmd.IsFlag = 0; boxmd.StationNo = Program.station; boxmd.PartName = partName; boxmd.Mould = mould; boxmd.StandardQty = lbNeedQty.Text; if (_injectionBoxBLL.AddInfo(boxmd)) { lbPackageCode.Text = packageCode; } } else { #region 如果零件号和箱码不匹配,重新生成箱码,打印前一箱并关闭 if (!string.IsNullOrEmpty(pkgCode) && pkgCode.Contains(partCode) == false) { DataTable dt = _injectionBoxBLL.SearchBox(pkgCode); MessageBox.Show($"箱码[{pkgCode}]产品与当前产品[{partCode}]不匹配,将会打印上一箱码,请知悉!"); CompleteBoxAndPrint(dt.Rows[0], mould, lbPackageCode, lbCurrentlQty); string packageCode = GetPackageCode(partCode, autoPrint); InjectionBoxModel boxmd = new InjectionBoxModel(); boxmd.ID = Guid.NewGuid().ToString(); boxmd.BoxNo = packageCode; boxmd.BoxCount = 0; boxmd.BoxType = 0; boxmd.IsFlag = 0; boxmd.StationNo = Program.station; boxmd.PartName = partName; boxmd.Mould = mould; boxmd.StandardQty = lbNeedQty.Text; if (_injectionBoxBLL.AddInfo(boxmd)) { lbPackageCode.Text = packageCode; } } #endregion } } } /// /// 20位注塑条码 /// /// /// /// /// /// /// void GetSjBarCode(string stockNo,string partNo, bool autoPrint,string mould,string partName,string printTest, ref string newOneCode,ref string newCode) { CheckPackageCode(partNo, autoPrint, mould, partName); string batch = GetBatch(autoPrint); GetBarCode(stockNo, batch, partNo, ref newOneCode, ref newCode); if (!string.IsNullOrEmpty(printTest)) { SaveLog3("BarCodePrint:"+ Program.station + ":" + printTest + "_" + newOneCode); } // newOneCode = _uniqueBll.GetSjBarCodeSerialNo(stockNo, batch); //newCode = partNo + "." + batch + "." + newOneCode.Substring(newOneCode.Length - 4, 4); } void GetBarCode(string stockNo,string batch,string partNo,ref string newOneCode, ref string newCode) { newOneCode = _uniqueBll.GetSjBarCodeSerialNo(stockNo, batch); newCode = partNo + "." + batch + "." + newOneCode.Substring(newOneCode.Length - 4, 4); } string GetPackageCode(string partNo,bool autoPrint ) { string batch = GetBatch(autoPrint); string packageSize = lbNeedQtyL.Text.Trim(); if (string.IsNullOrEmpty(packageSize)) { packageSize = "1"; } string packageCode = _uniqueBll. GetPackageCodeSerialNo(partNo, batch, packageSize); return packageCode; } string GetBatch(bool isAutoPrint) { string batch = string.Empty; if (isAutoPrint) { DateTime dt = DateTime.Now; if(DateTime.TryParse(Program.ProductDate, out dt) ==false) { dt = DateTime.Now; } batch = dt.ToString("yyMMdd"); // batch = Program.ProductDate.Substring(2, 2) + Program.ProductDate.Substring(5, 2) + Program.ProductDate.Substring(8, 2); } else { batch = textBox1.Text.Trim(); } return batch; } private object _selectItemL = null; bool _isShowHintL = true; private object _selectItemR = null; bool _isShowHintR = true; private void comBoxSizeL_SelectedValueChanged(object sender, EventArgs e) { //TimeSpan interval = DateTime.Now - _loginTime; //if (interval.Minutes > 0) if(_isLoad == true) { if (_isShowHintL) { DialogResult result = MessageBox.Show("确认切换当前包装箱规格?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { if (UnCompletePrintBox("切换包装规格","left") == false) { _isShowHintL = false; comBoxSizeL.SelectedItem = _selectItemL; _isShowHintL = true; return; } string val = comBoxSizeL.SelectedValue?.ToString(); int i = 0; int.TryParse(val, out i); if (i > 0) { lbNeedQtyL.Text = i.ToString(); } } else { if (_selectItemL != null) { _isShowHintL = false; comBoxSizeL.SelectedItem = _selectItemL; _isShowHintL = true; } } } } else { string val = comBoxSizeL.SelectedValue?.ToString(); int i = 0; int.TryParse(val, out i); if (i > 0) { lbNeedQtyL.Text = i.ToString(); } _selectItemL = comBoxSizeL.SelectedItem; } comBoxSizeL.Enabled = false; } private void comBoxSizeR_SelectedValueChanged(object sender, EventArgs e) { //TimeSpan interval = DateTime.Now - _loginTime; //if (interval.Minutes > 0) if (_isLoad == true) { if (_isShowHintR) { DialogResult result = MessageBox.Show("确认切换当前包装箱规格?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { if (UnCompletePrintBox("切换包装规格", "right") == false) { _isShowHintR = false; comBoxSizeR.SelectedItem = _selectItemR; _isShowHintR = true; return; } string val = comBoxSizeR.SelectedValue?.ToString(); int i = 0; int.TryParse(val, out i); if (i > 0) { lbNeedQtyR.Text = i.ToString(); } } else { if (_selectItemR != null) { _isShowHintR = false; comBoxSizeR.SelectedItem = _selectItemR; _isShowHintR = true; } } } } else { string val = comBoxSizeR.SelectedValue?.ToString(); int i = 0; int.TryParse(val, out i); if (i > 0) { lbNeedQtyR.Text = i.ToString(); } _selectItemR = comBoxSizeR.SelectedItem; } comBoxSizeR.Enabled = false; } void CheckPackageSelect() { string txt = lbNeedQtyL.Text; int i = 0; if(_isPrintPackage) { int.TryParse(txt, out i); if(i == 0) { List list = comBoxSizeL.DataSource as List; if (list.Count > 0) { lbNeedQtyL.Text = list[0]; } else { lbNeedQtyL.Text = "30"; MessageBox.Show("当前生产计划[未选择装箱规格],默认设置为30, 如果与实际不符合,请尽快作出选择. "); } //throw new Exception("未选择装箱规格,请选择. "); //MessageBox.Show("未选择装箱规格,请选择. "); } } } private void lbCurrentlQty_Click(object sender, EventArgs e) { string boxCode = ""; Label lb = sender as Label; if(lb.Name == "lbCurrentlQtyL") { boxCode = lbPackageCodeL.Text?.Trim(); } else { boxCode = lbPackageCodeR.Text?.Trim(); } if (string.IsNullOrEmpty(boxCode)) return; FrmPackageDetail frmPackageDetail = new FrmPackageDetail(boxCode); frmPackageDetail.ShowDialog(); } /// /// 直供件条码 A2478852600#Q02#240826#001# /// /// /// /// void GetSupplyCode(string stockNo, string partNo,string qLevel, bool autoPrint,string mould,string partName, ref string newOneCode, ref string newCode) { string batch = string.Empty; if (autoPrint) { // batch = Program.ProductDate.Substring(2, 2) + Program.ProductDate.Substring(5, 2) + Program.ProductDate.Substring(8, 2); batch = GetBatch(true); } else { batch = textBox1.Text.Trim(); } newCode = _uniqueBll.GetSupplySerialNo(partNo, qLevel, batch); newOneCode = _uniqueBll.GetSjBarCodeSerialNo(stockNo, batch); CheckPackageCode(partNo, autoPrint, mould, partName); } private void btnHandPrintL_Click(object sender, EventArgs e) { UnCompletePrintBox("手动打印箱码","left"); } private void btnHandPrintR_Click(object sender, EventArgs e) { UnCompletePrintBox("手动打印箱码","right"); } bool? lastCheckState = null; /// /// 手动打码是否打印箱码 /// /// /// private void cboxHandBox_CheckedChanged(object sender, EventArgs e) { if (cboxHandBox.Enabled == false) { return; } string display = ""; if (cboxHandBox.Checked) { display = "绑定"; cboxHandBox.Tag = "true"; } else { display = "解绑"; cboxHandBox.Tag = "false"; } if (lastCheckState != cboxHandBox.Checked) { DialogResult result = MessageBox.Show($"确认手打条码与箱码{display}?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { if (UnCompletePrintBox("手打条码与箱码" + display,"all") == false) { if (cboxHandBox.Checked == true) { lastCheckState = false; cboxHandBox.Checked = false; } else { lastCheckState = true; cboxHandBox.Checked = true; } } else { if (cboxHandBox.Checked == true) { lastCheckState = true; } else { lastCheckState = false; } } } else { if (cboxHandBox.Checked == true) { lastCheckState = false; cboxHandBox.Checked = false; } else { lastCheckState = true; cboxHandBox.Checked = true; } } } comboBox2_SelectedValueChanged(null, null); } /// /// 用户双击 /// /// /// private void label7_MouseDoubleClick(object sender, MouseEventArgs e) { string cs = ConfigurationManager.AppSettings["测试"]; if (!string.IsNullOrEmpty(cs) && cs == "true") { timer3.Enabled = false; //调用测试 Array a = null; Array b = new string[] { "1", "2", "3", "4", "5" }; Array c = null; Array d = null; status = true; IsTest = true; bool bbb = true; //label23_Click(null, null); //textBox1.Text = Program.ProductDate.Substring(2, 2) + Program.ProductDate.Substring(5, 2) + // Program.ProductDate.Substring(8, 2); textBox1.Text = GetBatch(true); if (bbb == true) { //自动 opcGroup1_DataChange(1, 1, ref a, ref b, ref c, ref d); } else { //手动 label23_Click(null, null); } } } bool IsTest = false; /// /// 工位双击 /// /// /// private void label5_MouseDoubleClick(object sender, MouseEventArgs e) { string cs = ConfigurationManager.AppSettings["测试"]; if (!string.IsNullOrEmpty(cs) && cs == "true") { timer3.Enabled = false; } } /// /// 未满器具打箱码 变更规格型号,手工打印箱码,切换下一计划,手动自动切换 /// /// /// bool UnCompletePrintBox(string lable,string leftOrRight,bool needConfirm = true) { string boxCodeL = lbPackageCodeL.Text?.Trim(); string boxCodeR = lbPackageCodeR.Text?.Trim(); if(leftOrRight == "left" || leftOrRight == "all") { if (!string.IsNullOrEmpty(boxCodeL)) { DataTable dt = _injectionBoxBLL.SearchBox(boxCodeL); if (dt.Rows.Count > 0 && dt.Rows[0]["IsPrint"].ToString() == "0" && int.Parse(dt.Rows[0]["BoxCount"].ToString()) > 0) { if (needConfirm) { if (MessageBox.Show($"当前箱码[{boxCodeL}]未满器具,执行[{lable}]操作,该箱码会被设置为完成状态,是否继续?", "未满器具提醒", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return false; } } CompleteBoxAndPrint(dt.Rows[0], "0", lbPackageCodeL, lbCurrentlQtyL); lbPackageCodeL.Text = ""; comBoxSizeL.SelectedIndex = -1; lbNeedQtyL.Text = "0"; } } } if (leftOrRight == "right" || leftOrRight == "all") { if (!string.IsNullOrEmpty(boxCodeR)) { DataTable dt = _injectionBoxBLL.SearchBox(boxCodeR); if (dt.Rows.Count > 0 && dt.Rows[0]["IsPrint"].ToString() == "0" && int.Parse(dt.Rows[0]["BoxCount"].ToString()) > 0) { if (needConfirm) { if (MessageBox.Show($"当前箱码[{boxCodeR}]未满器具,执行[{lable}]操作,该箱码会被设置为完成状态,是否继续?", "未满器具提醒", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return false; } } CompleteBoxAndPrint(dt.Rows[0], "1", lbPackageCodeR, lbCurrentlQtyR); lbPackageCodeR.Text = ""; comBoxSizeR.SelectedIndex = -1; lbNeedQtyR.Text = "0"; } } } return true; } /// /// 完成箱单并打印箱单 /// bool CompleteBoxAndPrint( DataRow boxRow,string mould, Label lbPackageCode, Label lbCurrentlQty) { try { lbPackageCode.Text = ""; lbCurrentlQty.Text = "0"; string rst = _wmsBll.SaveInterface(boxRow["BoxNo"].ToString(), "", "", MESClassLibrary.Enum.WmsInterfaceEnum.塑件箱码报工, Program.station); if (string.IsNullOrEmpty(rst)) { PrintBoxCode(boxRow, int.Parse(boxRow["BoxCount"].ToString()), mould); } else { MessageBox.Show("CompleteBoxAndPrint" + rst); return false; } return true; } catch(Exception ex) { LogErrBLL.AddInfo(Program.station + "完成箱单并打印箱单发生错误," + ex.ToString(), MethodBase.GetCurrentMethod()); return false; } } private void btnChangeSizeL_Click(object sender, EventArgs e) { ChangeSize("0"); } private void btnChangeSizeR_Click(object sender, EventArgs e) { ChangeSize("1"); } void ChangeSize(string moudel) { if(moudel == "0") { string pcd = lbPackageCodeL.Text?.Trim(); if (!string.IsNullOrEmpty(pcd)) { MessageBox.Show($"请先完成左箱码[{pcd}]装箱后,再进行切换."); return; } } else { string pcd = lbPackageCodeR.Text?.Trim(); if (!string.IsNullOrEmpty(pcd)) { MessageBox.Show($"请先完成右箱码[{pcd}]装箱后,再进行切换."); return; } } string pass = _basicBLL1.GetInjectionChangedSizePass(); Form frm = new Form(); frm.Size = new Size(400, 300); frm.StartPosition = FormStartPosition.CenterParent; TextBox tb = new TextBox(); tb.Width = 300; tb.Location = new System.Drawing.Point(30, 30); tb.PasswordChar = '#'; Button bt = new Button(); bt.Width = 100; bt.Text = "确定"; bt.Margin = new Padding(40, 100, 0, 0); bt.Location = new System.Drawing.Point(100, 171); bt.Click += (arg1, arg2) => { frm.Close(); string s = tb.Text; if(s == pass) { if(moudel == "0") { comBoxSizeL.Enabled = true; } else { comBoxSizeR.Enabled = true; } } else { MessageBox.Show("密码错误"); } }; frm.Controls.Add(tb); frm.Controls.Add(bt); frm.ShowDialog(); } private void btnOnlyBarCode_Click(object sender, EventArgs e) { if (MessageBox.Show("确定切换为单条码模式?", "切换确认", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return; try { if (UnCompletePrintBox("切换单条码模式", "all") == false) return; if(Program.station == "IM18") { SaveLog3($"IM18切换从箱码模式切换单条码模式,箱码[{ lbPackageCodeL.Text?.Trim()}],左实际数量[{lbCurrentlQtyL.Text?.Trim()}],右实际数量[{lbCurrentlQtyR.Text?.Trim()}]"); } try { this.FormClosed += (arg1, arg2) => { opcGroup1.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange); opcServer.OPCGroups.RemoveAll(); opcServer.Disconnect(); serialPort1.Close(); FrmMain2411 frm = new FrmMain2411(); frm.Show(); }; this.Close(); } catch { } } catch(Exception ex) { } } private void comboBox2_SelectedValueChanged(object sender, EventArgs e) { if (cboxHandBox.Checked == false) return; if (label13.Text == "暂停打印") return; string s = comboBox2.SelectedValue?.ToString(); ProductBLL pbll = new ProductBLL(); DataTable pdt = pbll.SearchInfoByName(comboBox2.Text, "2000"); if (pdt != null && pdt.Rows.Count > 0) { string partNo = pdt.Rows[0]["PartNo"].ToString().Trim(); //stockNo = pdt.Rows[0]["StockNo"].ToString().Trim(); //ManufacturerName = pdt.Rows[0]["ManufacturerName"].ToString().Trim(); string currentSize = string.Empty; List list = GetProductBoxSize(partNo, ref currentSize); comBoxSizeL.DataSource = list; comBoxSizeL.SelectedItem = currentSize; _selectItemL = currentSize; int j = 0; int.TryParse(currentSize, out j); if (j > 0) { lbNeedQtyL.Text = j.ToString(); } } else { MessageBox.Show($"零件[{comboBox2.Text}]在系统中不存在!"); return; } } string PrintMoudleName(string isSupply = "0",string invokeInfo ="") { return BussinessHelper.PrintMoudleName(Program.station, isSupply); //if("IM05,IM08,IM10".Contains(Program.station)) //二维小条码 //{ // return "单个条码2.grf"; //} //else if ("IM06,IM07,IM09,IM11,IM12,".Contains(Program.station)) //一维条码 //{ // return "单个条码.grf"; //} //else if ("IM01,IM02,IM03,IM04,IM15,IM18,IM20".Contains(Program.station)) //小米大条码 //{ // return "Sill.grf"; //} //else if ("IM13,IM14".Contains(Program.station)) //直供条码 //{ // if(isSupply == "0") //13,14机台,直供件打二维码 非直供件打一维码 // { // return "单个条码.grf"; // } // else // { // return "单个条码2.grf"; // } //} //else //{ // return "单个条码2.grf"; //} } DataTable GetPrintLableModel() { DataTable headTable = new DataTable(); headTable.Columns.Add("PrintTime"); headTable.Columns.Add("PartNo"); headTable.Columns.Add("PartName"); headTable.Columns.Add("OneBarCode"); headTable.Columns.Add("BarCode"); headTable.Columns.Add("Station"); return headTable; } DataTable GetPrintHeadTable(string partNo,string partName,string oneBarCode,string barCode) { DataTable headTable = GetPrintLableModel(); DataRow row = headTable.NewRow(); row["PrintTime"] = GetDateTime().ToString("yyyy/MM/dd HH:mm:ss"); row["PartNo"] = partNo; row["PartName"] = partName; row["OneBarCode"] = oneBarCode; row["BarCode"] = barCode; row["Station"] = Program.station; headTable.Rows.Add(row); return headTable; } /// /// 补打左侧上一箱单 /// /// /// private void btn_lastBoxPrintL_Click(object sender, EventArgs e) { InjectionBoxBLL boxbll = new InjectionBoxBLL(); DataRow dr = boxbll.SearchNewPrintedBoxInfo(Program.station, "0"); if(dr == null) { MessageBox.Show("没找到上一个箱码"); return; } PrintBoxCode(dr, int.Parse(dr["BoxCount"].ToString()), "0"); } private void btn_lastBoxPrintR_Click(object sender, EventArgs e) { InjectionBoxBLL boxbll = new InjectionBoxBLL(); DataRow dr = boxbll.SearchNewPrintedBoxInfo(Program.station, "1"); if (dr == null) { MessageBox.Show("没找到上一个箱码"); return; } PrintBoxCode(dr, int.Parse(dr["StandardQty"].ToString()), "1"); } List GetProductBoxSize(string productCode,ref string currentSize) { try { ProductBLL productBll = new ProductBLL(); DataTable dt = productBll.SearchInfoByPartNo(productCode); if (dt.Rows.Count == 0) { currentSize = "30"; MessageBox.Show($"零件号{productCode}未设置标包,默认为30,请及时核对后进行配置."); return null; } currentSize = dt.Rows[0]["PackCount"].ToString(); string sizeStr = dt.Rows[0]["PackCountSize"].ToString(); List list = new List(); if (string.IsNullOrEmpty(sizeStr) || sizeStr =="0") { list.Add(currentSize); return list; } else { string[] array = sizeStr.Split(','); foreach (string item in array) { if (!list.Contains(item)) { list.Add(item); } } if (!list.Contains(currentSize)) { list.Add(currentSize); } } return list; } catch(Exception ex) { currentSize = "24"; List list = new List(); list.Add(currentSize); MessageBox.Show("零件号{productCode}未设置标包,默认为24,请及时核对后进行配置."); return list; } } private void label5_Click(object sender, EventArgs e) { } /// /// 设备状态 /// /// /// private void lbDevState_Click(object sender, EventArgs e) { if(lbDevState.Text == "设备已连接") { if (MessageBox.Show("确认断开设备连接?", "设备断开确认", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return; lbDevState.Text = "设备已断开"; lbDevState.BackColor = Color.Red; opcGroup1.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange); opcServer.OPCGroups.RemoveAll(); opcServer.Disconnect(); serialPort1.Close(); timer3.Enabled = false; } else { if (MessageBox.Show("确认连接到注塑设备?", "设备连接确认", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return; try { if (CreateServer()) { if (ConnectServer(strHostIP, "Kepware.KEPServerEX.V6")) { Connected = true; #region 创建组 opcGroups = opcServer.OPCGroups; opcGroup1 = opcGroups.Add("Mould"); SetGroupProperty(opcGroup1, _plcRate); #endregion #region 创建项 opcItems1 = opcGroup1.OPCItems; opcItems1.DefaultIsActive = true; //PLCMouldBLL PLCbll = new PLCMouldBLL(); //PLCBreakBLL bbll = new PLCBreakBLL(); DataTable PLCdt = _PLCbll.SearchMould(Program.station); if (PLCdt != null && PLCdt.Rows.Count > 0) { opcItemm1 = new OPCItem[PLCdt.Rows.Count]; for (int i = 0; i < PLCdt.Rows.Count; i++) { opcItemm1[i] = opcItems1.AddItem(PLCdt.Rows[i]["Address"].ToString(), i); } } Thread.Sleep(200); opcGroup1.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup1_DataChange); #endregion } else { MessageBox.Show("连接到OPC服务器失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("连接到OPC服务器失败!"); return; } lbDevState.Text = "设备已连接"; lbDevState.BackColor = Color.DeepSkyBlue; timer3.Enabled = true; } else { MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("创建OPC服务失败!"); return; } } catch (Exception ex) { MessageBox.Show("创建OPC服务失败!", "提示", MessageBoxButtons.OK); Connected = false; LogHelper.WriteLog("创建OPC服务失败!"); LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return; } } } void SaveLog(string txt) { //try //{ // LogSysBLL.AddInfo(txt, MethodBase.GetCurrentMethod()); //} //catch (Exception ex) //{ // LogHelper.WriteLog("SaveLog:" + ex.Message); //} } void SaveLog2(string txt) { try { LogSysBLL.AddInfo(txt, MethodBase.GetCurrentMethod()); } catch (Exception ex) { LogHelper.WriteLog("SaveLog:" + ex.Message); } } void SaveLog3(string txt) { try { LogSysBLL.AddInfo(txt, MethodBase.GetCurrentMethod()); } catch (Exception ex) { LogHelper.WriteLog("SaveLog:" + ex.Message); } } private BarCodeModel _lastFailedModelL = null; private BarCodeModel _lastFailedModelR = null; bool SaveInfo(BarCodeModel md, bool isAutoPrint, string mould, bool handPrint, ref string errMsg) { if (_lastFailedModelL != null && mould == "0") { SaveBarCode(_lastFailedModelL, Program.tableName, isAutoPrint, mould, ref errMsg, handPrint); _lastFailedModelL = null; } if (_lastFailedModelR != null && !string.IsNullOrEmpty(mould) && mould != "0") { SaveBarCode(_lastFailedModelR, Program.tableName, isAutoPrint, mould, ref errMsg, handPrint); _lastFailedModelR = null; } bool rst = SaveBarCode(md, Program.tableName, isAutoPrint, mould, ref errMsg, handPrint); //if (SaveBarCode(md, Program.tableName, isAutoPrint, mould, ref errMsg, handPrint) == false) //{ // int a = 0; // for (int l = 0; l < 3; l++) // { // // if (brbll.Add_Info_New(md, Program.tableName)) // if (SaveBarCode(md, Program.tableName, true, mould, ref errMsg, handPrint) == true) // { // break; // } // a += 1; // //Thread.Sleep(200); // Thread.Sleep(200); // } // if (a >= 2) // { // SaveLog3(Program.station + "保存3次失败,条码" + md.OneBarCode); // return false; // } //} return rst; } } }