using UAS_MES_NEW.DataOperate; using LabelManager2; using System.Data; using System.Text; using System.IO; using UAS_MES_NEW.Entity; using System.Text.RegularExpressions; using System.Windows.Forms; using Seagull.BarTender.Print; using System.Net; using System; using System.Linq; namespace UAS_MES_NEW.PublicMethod { class Print { static DataHelper dh = SystemInf.dh; //CodeSoft打印的驱动和文件 static Document doc; ////CodeSoft的打印机 //string CodeSpft_Printer; static LabelFormatDocument format; public Print() { } public static bool CodeSoft(string iCaller, Document doc, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage) { ErrorMessage = ""; DataTable dt = new DataTable(); if (IfRePrint != "-1") { if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "栈板标") { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select"); } else { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select"); } ////如果已经打印过了,则不允许再打印 if (dt.Rows.Count > 0) { ErrorMessage = SnCode + LabelType + "已打印"; return false; } } //打开模板路径 //查询模板对应的取值SQL和参数名称 dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select"); StringBuilder sb = new StringBuilder(); if (doc == null) { MessageBox.Show("打印文件不存在"); return false; } //执行全部的SQL for (int i = 0; i < dt.Rows.Count; i++) { string sql = dt.Rows[i]["lp_sql"].ToString(); try { Regex ConnoteA = new Regex("{\\w+}"); foreach (Match mch in ConnoteA.Matches(sql)) { string x = mch.Value.Trim(); sql = sql.Replace(x, "'" + SnCode + "'"); } DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); if (Param.Rows.Count == 0) continue; //查询的结果的参数个数大于1需要给标签的多个参数赋值 if (Param.Rows.Count > 0) { int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count; for (int j = 0; j < LoopTime; j++) { for (int k = 0; k < doc.Variables.FormVariables.Count; k++) { if (j == 0 & doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper()) { doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[0][0].ToString(); } //使用SN开头的参数赋值SN1,SN2,SN3等参数 if (doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)) { doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[j][0].ToString(); } } } } } catch (System.Exception) { MessageBox.Show("SQL维护不正确"); } } LogManager.DoLog(sb.ToString()); //保存本次赋值进行打印 doc.Printer.SwitchTo(PrinterName); doc.PrintDocument(PrintNum); LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, ""); for (int k = 0; k < doc.Variables.FormVariables.Count; k++) { doc.Variables.FormVariables.Item(k + 1).Value = null; } LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode); return true; } public static bool CodeSoft(string iCaller, ref ApplicationClass lbl, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage) { ErrorMessage = ""; DataTable dt = new DataTable(); if (IfRePrint != "-1") { if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "栈板标") { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + LabelName + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select"); } else { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + LabelName + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select"); } ////如果已经打印过了,则不允许再打印 if (dt.Rows.Count > 0) { ErrorMessage = SnCode + LabelType + "已打印"; return false; } } string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString(); FileInfo PrintFile = new FileInfo(LabelName); //打开模板路径 //查询模板对应的取值SQL和参数名称 dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "' order by to_number(lp_detno)", "select"); StringBuilder sb = new StringBuilder(); if (!PrintFile.Exists) { MessageBox.Show("打印文件不存在"); return false; } string filechangetime = PrintFile.LastWriteTime.ToString(); if (filechangetime != filelastwritetime) { lbl.Quit(); lbl = new ApplicationClass(); BaseUtil.WriteLbl(); filechangetime = PrintFile.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"); string update = "la_lastwritetime = to_date((regexp_substr('" + filechangetime + "','\\d+.+\\d+')),'yyyy-mm-dd hh24:mi:ss')"; dh.UpdateByCondition("label", update, "la_id = '" + LaID + "'"); } doc = lbl.Documents.Open(LabelName, true); if (doc == null) { MessageBox.Show("标签文件打开失败"); return false; } //执行全部的SQL for (int i = 0; i < dt.Rows.Count; i++) { string sql = dt.Rows[i]["lp_sql"].ToString(); try { Regex ConnoteA = new Regex("{\\w+}"); foreach (Match mch in ConnoteA.Matches(sql)) { string x = mch.Value.Trim(); sql = sql.Replace(x, "'" + SnCode + "'"); } DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); if (Param.Rows.Count == 0) continue; //查询的结果的参数个数大于1需要给标签的多个参数赋值 if (Param.Rows.Count > 0) { int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count; for (int j = 0; j < LoopTime; j++) { for (int k = 0; k < doc.Variables.FormVariables.Count; k++) { if (j == 0 & doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper()) { doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[0][0].ToString(); } //使用SN开头的参数赋值SN1,SN2,SN3等参数 if (doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)) { doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[j][0].ToString(); } } } } } catch (System.Exception) { MessageBox.Show("SQL维护不正确"); } } LogManager.DoLog(sb.ToString()); //保存本次赋值进行打印 doc.Printer.SwitchTo(PrinterName); doc.PrintDocument(PrintNum); LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, ""); for (int k = 0; k < doc.Variables.FormVariables.Count; k++) { doc.Variables.FormVariables.Item(k + 1).Value = null; } LogicHandler.doLabelPrintLog(SnCode, LabelType + LabelName, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode); return true; } public static bool BarTender(string iCaller, ref Engine lbl, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage) { ErrorMessage = ""; DataTable dt = new DataTable(); if (PrintNum == 0) { PrintNum = 1; } if (IfRePrint == "-1") { string printNumber = dh.getFieldDataByCondition("CONFIGS", "DATA", "code='printNumber' and caller='MESSetting'").ToString(); if (dh.getRowCount("labelprintlog", "lpl_type='" + LabelType + "' and lpl_value='" + SnCode + "'") > int.Parse(printNumber)) { ErrorMessage = "标签补打超出允许打印次数【" + printNumber + "】"; return false; } } if (IfRePrint != "-1" && LabelType != "机身标") { bool allowPallte = true; if ((SystemInf.dh.getFieldDataByCondition("master", "MA_FUNCTION", "ma_user='" + SystemInf.CurrentDB + "'").ToString() == "万年MES系统(正式)")) { allowPallte = false; } if (LabelType == "卡通箱标" || LabelType == "大箱标" || (LabelType == "栈板标" && allowPallte) || LabelType == "彩盒标") { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "' and lpl_file='" + LabelName + "'", "select"); } else { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select"); } ////如果已经打印过了,则不允许再打印 if (dt.Rows.Count > 0) { ErrorMessage = SnCode + LabelType + "已打印"; return false; } } else { if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "彩盒标") { dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "'", "select"); if (dt.Rows.Count == 0) { ErrorMessage = SnCode + LabelType + "未打印,不允许补打"; return false; } } } string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString(); string LA_SOFTTYPE = dh.getFieldDataByCondition("label", "LA_SOFTTYPE", "la_id = '" + LaID + "'").ToString(); //如果有附件上传的话 string fp_name = ""; //下载附件 FileInfo PrintFile = new FileInfo(@"C:\打印标签\" + LabelName); if (!PrintFile.Exists) { if (LA_SOFTTYPE != "") { string[] fpid = LA_SOFTTYPE.Split(';'); for (int i = 0; i < fpid.Length; i++) { if (fpid[i] != "") { DataTable label = (DataTable)dh.ExecuteSql("select FP_PATH, FP_DATE, FP_NAME from FILEPATH where fp_id='" + fpid[i] + "'", "select"); if (label.Rows.Count > 0) { string fp_path = label.Rows[0]["FP_PATH"].ToString().Replace("/app/uas/webapps/", ""); fp_name = label.Rows[0]["fp_name"].ToString(); WebClient wc = new WebClient(); wc.DownloadFile("http://10.11.28.21:8099/" + fp_path, @"C:\打印标签\" + fp_name); } } } lbl.Stop(); lbl = new Engine(true); BaseUtil.WriteLbl(); } } else { string filechangetime = PrintFile.LastWriteTime.ToString(); System.DateTime dateTime1 = System.DateTime.Parse(filechangetime); System.DateTime dateTime2 = System.DateTime.Parse(filelastwritetime); if (dateTime1 < dateTime2) { if (LA_SOFTTYPE != "") { string[] fpid = LA_SOFTTYPE.Split(';'); for (int i = 0; i < fpid.Length; i++) { if (fpid[i] != "") { DataTable label = (DataTable)dh.ExecuteSql("select FP_PATH, FP_DATE, FP_NAME from FILEPATH where fp_id='" + fpid[i] + "'", "select"); if (label.Rows.Count > 0) { string fp_path = label.Rows[0]["FP_PATH"].ToString().Replace("/app/uas/webapps/", ""); fp_name = label.Rows[0]["fp_name"].ToString(); WebClient wc = new WebClient(); wc.DownloadFile("http://10.11.28.21:8099/" + fp_path, @"C:\打印标签\" + fp_name); FileInfo file = new FileInfo(@"C:\打印标签\" + fp_name); file.CreationTime = Convert.ToDateTime(filelastwritetime); } } } } lbl.Stop(); lbl = new Engine(true); BaseUtil.WriteLbl(); } } PrintFile = new FileInfo(@"C:\打印标签\" + LabelName); if (!PrintFile.Exists) { MessageBox.Show("打印文件不存在"); return false; } //查询模板对应的取值SQL和参数名称 dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select"); StringBuilder sb = new StringBuilder(); if (!PrintFile.Exists) { MessageBox.Show("打印文件不存在"); return false; } format = lbl.Documents.Open(@"C:\打印标签\" + LabelName); if (format == null) { MessageBox.Show("标签文件打开失败"); return false; } string ParamValue = format.SubStrings.GetAll("#", "$"); string[] paramname = ParamValue.Split('$'); for (int i = 0; i < paramname.Length; i++) { paramname[i] = paramname[i].Split('#')[0]; } //执行全部的SQL for (int i = 0; i < dt.Rows.Count; i++) { string sql = dt.Rows[i]["lp_sql"].ToString(); try { Regex ConnoteA = new Regex("{\\w+}"); foreach (Match mch in ConnoteA.Matches(sql)) { string x = mch.Value.Trim(); sql = sql.Replace(x, "'" + SnCode + "'"); } DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); if (Param.Rows.Count == 0) continue; //查询的结果的参数个数大于1需要给标签的多个参数赋值 if (Param.Rows.Count > 0) { int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count; for (int j = 0; j < LoopTime; j++) { //if (paramname.Contains(dt.Rows[i]["lp_name"].ToString().ToUpper())) //{ // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()] != null) // { // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()].Value = Param.Rows[0][0].ToString(); // } //} //if (paramname.Contains(dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))) //{ // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)] != null) // { // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)].Value = Param.Rows[j][0].ToString(); ; // } //} //try //{ // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()] != null) // { // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper()].Value = Param.Rows[0][0].ToString(); // } // if (format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)] != null) // { // format.SubStrings[dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)].Value = Param.Rows[j][0].ToString(); ; // } //} //catch (Exception e) //{ // Console.WriteLine( e.Message); //} for (int k = 0; k < format.SubStrings.Count; k++) { if (j == 0 & format.SubStrings[k].Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper()) { Console.WriteLine(format.SubStrings[k].Name.ToUpper()); format.SubStrings[k].Value = Param.Rows[0][0].ToString(); break; } //使用SN开头的参数赋值SN1,SN2,SN3等参数 if (format.SubStrings[k].Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1)) { Console.WriteLine(format.SubStrings[k].Name.ToUpper()); format.SubStrings[k].Value = Param.Rows[j][0].ToString(); break; } } } } } catch (System.Exception) { MessageBox.Show("SQL维护不正确"); } } LogManager.DoLog(sb.ToString()); //保存本次赋值进行打印a format.PrintSetup.PrinterName = PrinterName; format.PrintSetup.IdenticalCopiesOfLabel = PrintNum; format.Print(); LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, ""); try { for (int k = 0; k < format.SubStrings.Count; k++) { format.SubStrings[k].Value = null; } } catch (Exception ex) { LogManager.DoLog(ex.Message + ex.StackTrace); } LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode, PrintFile.Name); return true; } } }