using System; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.PublicMethod; using UAS_MES_NEW.Entity; using LabelManager2; using System.IO; using System.Threading; using UAS_MES_NEW.PublicForm; using Seagull.BarTender.Print; using DEV_HDL = System.UInt32; using LABEL_TEMP_HDL = System.UInt32; using System.Runtime.InteropServices; namespace UAS_MES_NEW.Make { public partial class Make_FuselageLabelPrintRFID : Form { [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_Lib_Init(string pSzInitInfo, Int32 nInitInfoLen, StringBuilder pSzResult, ref int pResultLen); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_Lib_Clear(); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_EnumDev(Int32 nEnumType, byte[] szEnumList, ref int pDevSize, ref int pDevNum); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_ConnEnumeratedDev(string szDevName, ref DEV_HDL pDevHdl); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_DisconnDev(DEV_HDL ullDevHdl); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_SetPrnEmulation(DEV_HDL ullDevHdl, Int32 nEmulation); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_SetImgDpi(DEV_HDL ullDevHdl, Int32 nDpi); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_LoadLabelTmpl(string szFileName, ref LABEL_TEMP_HDL pLTHdl); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_PrintTmpl(DEV_HDL ullDevHdl, LABEL_TEMP_HDL ullLTHdl, byte[] szOutFile, ref int pOutFileSize, byte[] szOutRFID, ref int pOutRFIDSize); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_DeleteTmpl(LABEL_TEMP_HDL ullLTHdl); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_SetTmplPrnMode(LABEL_TEMP_HDL ullLTHdl, Int32 nPrnMode); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_SetTmplPrnData(LABEL_TEMP_HDL ullLTHdl, string szElemID, string szActualData); [DllImport("lib/Win32/libDSThermal.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern UInt32 DSTP2x_SetTmplRFIDData(LABEL_TEMP_HDL ullLTHdl, string szElemID, string pActualData, Int32 nActualDataSize); DataHelper dh; DataTable dt; LogStringBuilder sql = new LogStringBuilder(); Document doc; AutoSizeFormClass asc = new AutoSizeFormClass(); //保存StepProduct查询出来的数据 // DataTable ListA = new DataTable(); //保存make left join makecraftdetail left join product的数据 // DataTable ListB; DataTable mapB; string ma_unlimitin = ""; ApplicationClass lbl; string oMakeCode = ""; string oMsId = ""; string oErrorMessage = ""; bool pr_change = false; ftpOperater ftp; DataTable Dbfind; public Make_FuselageLabelPrintRFID() { InitializeComponent(); } DEV_HDL uRet = 0; DEV_HDL dev_prt = 0; LABEL_TEMP_HDL tmp_prt = 0; byte[] pEnumList = new byte[1024]; int enumListLen = 1024; byte[] szOutFile = new byte[1024]; int pOutFileSize = 1024; byte[] szOutRFID = new byte[1024]; int pOutRFIDSize = 1024; int deviceNum = 0; string device = ""; StringBuilder pSzResult = new StringBuilder(256); int pResultLen = 256; private void Make_FuselageLabelPrint_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); sncode.Focus(); LockMakeCode.GetMakeCodeCtl(ma_code); ma_code.SetLockCheckBox(LockMakeCode); //工单号放大镜配置 ma_code.TableName = "make left join product on ma_prodcode=pr_code"; ma_code.SelectField = "ma_code # 工单号,ma_prodcode # 产品编号,pr_detail # 产品名称"; ma_code.FormName = Name; ma_code.SetValueField = new string[] { "ma_code", "ma_prodcode", "pr_detail" }; ma_code.DbChange += Ma_code_DbChange; ma_code.Condition = "(ma_statuscode='STARTED' or ma_statuscode='FINISH')"; dh = SystemInf.dh; StepCount.StepCode = User.CurrentStepCode; StepCount.Source = User.UserSourceCode; StepCount.LineCode = User.UserLineCode; StepCount.Dh = dh; StepCount.Start(); try { if (File.Exists("FugeLabel" + ".txt")) { File.Delete("FugeLabel" + ".txt"); } StreamWriter sw = File.AppendText("FugeLabel" + ".txt"); sw.WriteLine(sncode.Handle); sw.Close(); } catch (Exception) { } //1.Initialize the Library. } private void Ma_code_DbChange(object sender, EventArgs e) { Dbfind = ma_code.ReturnData; BaseUtil.SetFormValue(this.Controls, Dbfind); ////获取工单的其他信息 //sql.Clear(); //sql.Append("select ma_code,nvl(mcd_okqty,0) mcd_okqty,ma_prodcode as pr_code ,pr_detail,"); //sql.Append("pr_spec,ma_qty - nvl(mcd_inqty, 0) mcd_remainqty from make left join makecraftdetail on "); //sql.Append("mcd_maid=ma_id left join product on pr_code=ma_prodcode where ma_code='" + ma_code.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'"); //dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); //if (dt.Rows.Count > 0) //{ // BaseUtil.SetFormValue(this.Controls, dt); //} } private void sn_code_KeyDown(object sender, KeyEventArgs e) { //按下enter键 if (e.KeyCode == Keys.Enter) { //如果输入的值为空的话,提示不能为空 if (sncode.Text == "") { OperateResult.AppendText(">>序列号不能为空\n", Color.Red); return; } if (LogicHandler.CheckStepAttribute(Tag.ToString(), User.UserSourceCode, out oErrorMessage)) { //定义临时变量 dt = (DataTable)dh.ExecuteSql("select ms_sncode from makeserial where ms_code='" + sncode.Text + "' order by ms_id desc", "select"); if (dt.Rows.Count > 0) { sncode.Text = dt.Rows[0]["ms_sncode"].ToString(); } string oStatus = ""; //调用公共方法CheckStepSNAndMacode判断工序是否正确 string status = ""; LogicHandler.GetMakeInfo(sncode.Text, out oMakeCode, out status, out oErrorMessage); if (oMakeCode == "" || oMakeCode == null) oMakeCode = ma_code.Text; if (LogicHandler.CheckStepSNAndMacode(oMakeCode, User.UserSourceCode, sncode.Text, User.UserCode, out oMakeCode, out oMsId, out oErrorMessage)) { string nextstepcode = dh.getFieldDataByCondition("makeserial", "ms_nextstepcode", "ms_id='" + oMsId + "'").ToString(); if (nextstepcode != User.CurrentStepCode) { string stname = dh.getFieldDataByCondition("step", "st_name", "st_code='" + nextstepcode + "'").ToString(); OperateResult.AppendText("<<序列号:" + sncode.Text + "下一工序是" + stname + ",不是当前岗位的工序\n", Color.Red, sncode); return; } //IF (如果ma_code 为空)THEN if (ma_code.Text == "" || ma_code.Text != oMakeCode) { //获取工单的其他信息 sql.Clear(); sql.Append("select ma_code,nvl(mcd_okqty,0),ma_prodcode,pr_detail,nvl(ma_unlimitin,0)ma_unlimitin,"); sql.Append("pr_spec,ma_qty - nvl(mcd_inqty, 0) mcd_remainqty from make left join makecraftdetail on "); sql.Append("mcd_maid=ma_id left join product on pr_code=ma_prodcode where ma_code='" + oMakeCode + "' and mcd_stepcode='" + User.CurrentStepCode + "'"); mapB = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); //如果有数据的话 if (mapB.Rows.Count > 0) { ma_unlimitin = mapB.Rows[0]["ma_unlimitin"].ToString(); //将工单的其他信息赋值到对应的控件 BaseUtil.SetFormValue(this.Controls, mapB); //提示用户“<<工单号:取ma_makecode” OperateResult.AppendText("<<工单号:" + ma_code.Text + "\n", Color.Black); //提示用户“<< 序列号:XXXX” } //没有数据 else { OperateResult.AppendText(">>无序列号" + sncode.Text + "对应工单信息\n", Color.Red); return; } } //所选标签不为空 if (PrintLabel.SelectedValue != null) { //如果打印张数为空,返回 if (PrintNum.Text == "" || int.Parse(PrintNum.Text) == 0) { OperateResult.AppendText(">>打印张数不可空或者为0\n", Color.Red, sncode); //清空输入框的值,聚焦 sncode.Focus(); //提示用户“>>请输入SN” OperateResult.AppendText(">>请输入SN\n", Color.Black); return; } OperateResult.AppendText("<<序列号:" + sncode.Text + "\n", Color.Black); //按照打印张数打印 //doc = lbl.Documents.Open(PrintLabel.Text); string tmpPath = PrintLabel.Text; uRet = DSTP2x_Lib_Init("", 0, pSzResult, ref pResultLen); if (uRet != 0) { OperateResult.AppendText("DSTP2x_Lib_Init,error code:[" + uRet.ToString() + "]"); return; } uRet = DSTP2x_EnumDev(1, pEnumList, ref enumListLen, ref deviceNum); //USB connection if (uRet != 0) { OperateResult.AppendText("Enumerate device error,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } if (deviceNum > 1) { string str = Encoding.UTF8.GetString(pEnumList, 0, enumListLen); string[] enumList = str.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); device = enumList[0]; } else if (deviceNum == 1) device = Encoding.UTF8.GetString(pEnumList, 0, enumListLen); else { OperateResult.AppendText("No device"); goto SAMPLE_END; } //3.Connect the device. uRet = DSTP2x_ConnEnumeratedDev(device, ref dev_prt); if (uRet != 0) { OperateResult.AppendText("Failed to connect device,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //Non essential interface. 1-ZPL, 2-TSPL, 3-ESCPOS uRet = DSTP2x_SetPrnEmulation(dev_prt, 1); //ZPL if (uRet != 0) { OperateResult.AppendText("Failed to set up print simulation,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //4.Load the template. uRet = DSTP2x_LoadLabelTmpl(tmpPath, ref tmp_prt); if (uRet != 0) { OperateResult.AppendText("Failed to load label template,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //5.Set the print mode. 0-print, 1-generate the prn file, 2-generate the preview image. uRet = DSTP2x_SetTmplPrnMode(tmp_prt, 0); //set print mode if (uRet != 0) { OperateResult.AppendText("Setting whether to print failed,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //6.Set the print data. uRet = DSTP2x_SetTmplPrnData(tmp_prt, "Text-01", sncode.Text); uRet = DSTP2x_SetTmplPrnData(tmp_prt, "Text-02", sncode.Text); //The data must be utf-8 if (uRet != 0) { OperateResult.AppendText("Failed to set someone data in template,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //7.Set the RFID data. uRet = DSTP2x_SetTmplRFIDData(tmp_prt, "EPC-01", Hex.Checked ? AsciiToHex(sncode.Text) : sncode.Text, Hex.Checked ? AsciiToHex(sncode.Text).Length : sncode.Text.Length); if (uRet != 0) { OperateResult.AppendText("Failed to set EPC data in template,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //uRet = DSTP2x_SetTmplRFIDData(tmp_prt, "USER-01", "123ABC", "123ABC".Length); //if (uRet != 0) //{ // OperateResult.AppendText("Failed to set USER data in template,error code:[" + uRet.ToString() + "]"); // goto SAMPLE_END; //} //8.Print template and get the RFID data. uRet = DSTP2x_PrintTmpl(dev_prt, tmp_prt, szOutFile, ref pOutFileSize, szOutRFID, ref pOutRFIDSize); if (uRet != 0) { OperateResult.AppendText("Print template failed,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } OperateResult.AppendText("The RFID data is " + Encoding.UTF8.GetString(szOutRFID, 0, pOutRFIDSize)); //9.Delete the handle of template. uRet = DSTP2x_DeleteTmpl(tmp_prt); if (uRet != 0) { OperateResult.AppendText("Delete handle of template failed,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } //10.Disconnect the device. uRet = DSTP2x_DisconnDev(dev_prt); if (uRet != 0) { OperateResult.AppendText("Delete handle of device failed,error code:[" + uRet.ToString() + "]"); goto SAMPLE_END; } SAMPLE_END: { uRet = DSTP2x_Lib_Clear(); } //记录日志 LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, oMakeCode, User.UserLineCode, User.UserSourceCode, "RFID打印", "RFID打印成功", sncode.Text, ""); //更新打印的数据 if (LogicHandler.SetStepResult(ma_code.Text, User.UserSourceCode, sncode.Text, "RFID打印", "RFID打印成功", User.UserCode, out oErrorMessage)) { //提示正确返回时传递的信息 if (oErrorMessage.Contains("AFTERSUCCESS")) OperateResult.AppendText(">>" + oErrorMessage + "\n"); if (CollectRemark.Checked && Remark.Text != "") { LogicHandler.CollectRemarkInf(sncode.Text, "", "", oMakeCode, ma_prodcode.Text, Remark.Text); } //清空输入框的值,聚焦 sncode.Text = ""; sncode.Focus(); //刷新打印数量和剩余数量 dt = (DataTable)dh.ExecuteSql("select ma_qty - nvl(mcd_inqty, 0) mcd_remainqty,nvl(ma_unlimitin,0)ma_unlimitin from make left join makecraftdetail on mcd_macode=ma_code where ma_code='" + ma_code.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'", "select"); BaseUtil.SetFormValue(Controls, dt); mcd_okqty.Text = int.Parse(mcd_okqty.Text) + 1 + ""; //IF 剩余数=0,则清空form中的数据, 提示用户“工单:xx已经打印完成,>>请输入SN”, 清空mapB,listC 中的数据 if (int.Parse(mcd_remainqty.Text) == 0 && ma_unlimitin == "0") { OperateResult.AppendText(">>工单:" + ma_code.Text + "打印完成,>>请输入SN\n", Color.Green); } //剩余数量不为0 else { OperateResult.AppendText(">>请输入SN\n", Color.Black); } } else { OperateResult.AppendText(">>" + oErrorMessage + "\n", Color.Red, sncode); //清空输入框的值,聚焦 sncode.Text = ""; sncode.Focus(); } } //标签为空 else { OperateResult.AppendText(">>产品编号:" + ma_prodcode.Text + "未维护RFID签\n", Color.Red, sncode); } } else { OperateResult.AppendText(">>" + oErrorMessage + "\n", Color.Red, sncode); } } else { OperateResult.AppendText(">>" + oErrorMessage + "\n", Color.Red, sncode); } } } static string AsciiToHex(string asciiString) { byte[] bytes = Encoding.ASCII.GetBytes(asciiString); return BitConverter.ToString(bytes).Replace("-", "").ToLower(); } private void pr_code_TextChanged(object sender, EventArgs e) { DataTable dt = (DataTable)dh.ExecuteSql("select la_id,la_url,la_isdefault from label where la_prodcode='" + ma_prodcode.Text + "' and la_templatetype='RFID' and la_statuscode='AUDITED' order by la_isdefault", "select"); if (dt.Rows.Count == 0) { dt = (DataTable)dh.ExecuteSql("select la_id,la_url,la_isdefault from label where la_prodcode is null and la_templatetype='RFID' and la_statuscode='AUDITED' order by la_isdefault", "select"); } PrintLabel.DataSource = dt; PrintLabel.DisplayMember = "la_url"; PrintLabel.ValueMember = "la_id"; pr_change = true; } private void Make_FuselageLabelPrint_Activated(object sender, EventArgs e) { sncode.Focus(); } private void Make_FuselageLabelPrint_FormClosing(object sender, FormClosingEventArgs e) { BaseUtil.ClosePrint(lbl); } private void Make_FuselageLabelPrint_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void PrintLabel_SelectedValueChanged(object sender, EventArgs e) { if (PrintLabel.SelectedValue != null && PrintLabel.SelectedValue.ToString() != "System.Data.DataRowView") { string PrintNums = dh.getFieldDataByCondition("label", "la_printnos", "la_id='" + PrintLabel.SelectedValue.ToString() + "'").ToString(); PrintNum.Text = (PrintNums == "" ? "1" : PrintNums); } } private void StepCount_Load(object sender, EventArgs e) { } } }