/******************************************************************************* * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential * 类的信息: * 1.程序名称:BarcodePrintLogic.cs * 2.功能描述:条码打印服务端业务逻辑 * 编辑履历: * 作者 日期 版本 修改内容 * 陈晓野 2017/03/15 1.00 新建 *******************************************************************************/ using System; using System.Collections.Generic; using System.Data; using Curtain.DataAccess; using Curtain.Framework.Json; using Curtain.Log; using Dongke.IBOSS.PRD.Basics.BaseResources; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Service.DataModels; using Dongke.IBOSS.PRD.WCF.DataModels; using Dongke.WinForm.Controls.InvoiceLayout; using Oracle.ManagedDataAccess.Client; namespace Dongke.IBOSS.PRD.Service.BarcodePrintService { /// /// 条码打印服务端业务逻辑 /// public static class BarcodePrintLogic { // /// // /// 打印条码 // /// // /// 条码 // /// 打印份数 // /// 工序打印时:null;补打时:打印机ID // /// // /// // public static ServiceResultEntity PrintBarcode(string barcode, int copies, int? printerID, SUserInfo sUserInfo) // { // // TODO 异常分析 // int err_lable = 0; //#if DEBUG // Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, // "PrintBarcode", // "begin -- " + barcode, // DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffffff"), // Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath+@"printdebug\"); //#endif // IDBTransaction oracleTrConn = null; // string printerName = null; // LayoutBox layoutBox = null; // try // { // ServiceResultEntity sre = new ServiceResultEntity(); // oracleTrConn = ClsDbFactory.CreateDBTransaction(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); // oracleTrConn.Connect(); // // 补打 // int printWay = 2; // // 工序打印 // if (printerID == null) // { // // 打印 // printWay = 1; // string sqlPrinterName = // "SELECT p.printername\n" + // " FROM tp_mst_user u\n" + // " INNER JOIN tp_mst_barcodeprinter p\n" + // " ON p.printerid = u.barcodeprinterid\n" + // " WHERE u.userid = :userid\n" + // " AND p.valueflag = '1'"; // OracleParameter[] pps = new OracleParameter[]{ // new OracleParameter(":userid", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input), // }; // printerName = oracleTrConn.GetSqlResultToStr(sqlPrinterName, pps); // if (string.IsNullOrWhiteSpace(printerName)) // { // return sre; // } // } // System.Drawing.Printing.PrinterSettings.StringCollection installedPrinters = // System.Drawing.Printing.PrinterSettings.InstalledPrinters; // if (installedPrinters.Count < 1) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有安装打印驱动"; // return sre; // } // err_lable = 1; // //oracleTrConn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); // //oracleTrConn.Connect(); // List parameters = new List(); // // 补打时,获得打印机名 // if (printerID.HasValue) // { // string sqlPrinterName = // "SELECT p.printername\n" + // " FROM tp_mst_barcodeprinter p\n" + // " WHERE p.printerID = :printerID\n" + // " AND p.valueflag = '1'"; // parameters.Clear(); // parameters.Add(new OracleParameter(":printerID", OracleDbType.Int32, printerID.Value, ParameterDirection.Input)); // printerName = oracleTrConn.GetSqlResultToStr(sqlPrinterName, parameters.ToArray()); // } // err_lable = 2; // // 工序打印时,获取当前工号配置的打印机 // //if (string.IsNullOrWhiteSpace(printerName)) // //{ // // string sqlPrinterName = // // "SELECT p.printername\n" + // // " FROM tp_mst_user u\n" + // // " INNER JOIN tp_mst_barcodeprinter p\n" + // // " ON p.printerid = u.barcodeprinterid\n" + // // " WHERE u.userid = :userid\n" + // // " AND p.valueflag = '1'"; // // parameters.Clear(); // // parameters.Add(new OracleParameter(":userid", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); // // printerName = oracleTrConn.GetSqlResultToStr(sqlPrinterName, parameters.ToArray()); // //} // err_lable = 3; // if (string.IsNullOrWhiteSpace(printerName)) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "此用户没有设置打印机"; // return sre; // } // bool hasPrinter = false; // foreach (string item in installedPrinters) // { // if (item == printerName) // { // hasPrinter = true; // break; // } // } // if (!hasPrinter) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有连接相应打印机【" + printerName + "】"; // return sre; // } // err_lable = 4; // // 打印 // //LayoutBox layoutBox = new LayoutBox(); // layoutBox = new LayoutBox(); // err_lable = 5; // layoutBox.Name = "layoutBox"; // layoutBox.LayoutMode = LayoutMode.Preview; // // 设置打印机 // layoutBox.PrinterSettings.PrinterName = printerName; // layoutBox.NumberOfCopies = copies; // err_lable = 6; // string message = layoutBox.CheckPrintSettingIn(PrintType.Print); // if (!string.IsNullOrWhiteSpace(message)) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = message; // return sre; // } // //err_lable = 7; // if (printerID != null) // { // string sqlString = @"select FUN_CMN_GetBarCode(:barcode,null,:accountid) From DUAL"; // OracleParameter[] paras1 = new OracleParameter[]{ // new OracleParameter(":barcode",OracleDbType.Varchar2, barcode,ParameterDirection.Input), // new OracleParameter(":accountid",OracleDbType.Int32, sUserInfo.AccountID,ParameterDirection.Input), // }; // barcode = oracleTrConn.GetSqlResultToStr(sqlString, paras1); // } // err_lable = 8; // // 获取打印数据 // parameters.Clear(); // parameters.Add(new OracleParameter("in_Barcode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input)); // parameters.Add(new OracleParameter("in_AccountID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input)); // parameters.Add(new OracleParameter("in_UserID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); // parameters.Add(new OracleParameter("out_Status", OracleDbType.Int32, ParameterDirection.Output)); // parameters.Add(new OracleParameter("out_Message", OracleDbType.NVarchar2, 2000, null, ParameterDirection.Output)); // parameters.Add(new OracleParameter("out_LayoutData", OracleDbType.RefCursor, ParameterDirection.Output)); // parameters.Add(new OracleParameter("out_PrintData", OracleDbType.RefCursor, ParameterDirection.Output)); // DataSet data = oracleTrConn.ExecStoredProcedure("PRO_PM_GETBarCodePrintDATA", parameters.ToArray()); // err_lable = 9; // int status = Convert.ToInt32(parameters[3].Value.ToString()); // if (status < 0) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = parameters[4].Value.ToString(); // return sre; // } // if (data == null || data.Tables.Count != 2) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "没有打印数据"; // return sre; // } // DataTable layoutData = data.Tables[0]; // DataTable printData = data.Tables[1]; // if (printData.Rows.Count == 0) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "此条码不存在"; // return sre; // } // if (layoutData.Rows.Count == 0) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = string.Format("此产品类别【{0}】或商标【{1}】没有对应的打印模板", // printData.Rows[0]["goodstypename"], // printData.Rows[0]["logoname"] // ); // return sre; // } // if (printerID == null && printData.Rows.Count > 0) // { // int goodsCopies = Convert.ToInt32(printData.Rows[0]["printcopies"]); // if (goodsCopies > 0) // { // copies = goodsCopies; // layoutBox.NumberOfCopies = copies; // } // } // //err_lable = 10; // int layoutID = Convert.ToInt32(layoutData.Rows[0]["LayoutID"]); // byte[] bytes = layoutData.Rows[0]["LayoutData"] as byte[]; // if (bytes != null) // { // try // { // layoutBox.ReadLayout(bytes); // } // catch (Exception ex) // { // throw new Exception("ReadLayout", ex); // } // layoutBox.ReadLayout(bytes); // } // err_lable = 11; // bool isPrint = false; // //try // { // //layoutBox.DataSource = printData; // //layoutBox.Refresh(); // layoutBox.PrintDataSource = printData; // layoutBox.PrintAreaVisible = false; // layoutBox.PrintBackground = false; // isPrint = layoutBox.Print(false); // } // err_lable = 12; // //catch (Exception ex) // //{ // // throw new Exception("Print", ex); // //} // if (!isPrint) // { // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "打印失败"; // return sre; // } // sre.Result = printData; // /* // // 记录打印信息 // string sqlString = "INSERT INTO TP_MST_BarCodePrintLog\n" + // " (BARCODE, LAYOUTID, ACCOUNTID, CREATEUSERID)\n" + // "VALUES\n" + // " (:BARCODE, :LAYOUTID, :ACCOUNTID, :CREATEUSERID)"; // parameters.Clear(); // parameters.Add(new OracleParameter(":BARCODE", OracleDbType.NVarchar2, barcode, ParameterDirection.Input)); // parameters.Add(new OracleParameter(":LAYOUTID", OracleDbType.Int32, layoutData.Rows[0]["LayoutID"], ParameterDirection.Input)); // parameters.Add(new OracleParameter(":ACCOUNTID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input)); // parameters.Add(new OracleParameter(":CREATEUSERID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); // int result = oracleTrConn.ExecuteNonQuery(sqlString, parameters.ToArray()); // //if (result == 0) // //{ // // sre.Status = Constant.ServiceResultStatus.NoModifyData; // // return sre; // //} // */ // oracleTrConn.Commit(); // // 外箱码1 // SetPrintLog(layoutID, printData, sUserInfo, 1, printWay); // return sre; // } // catch (Exception ex) // { // if (oracleTrConn != null && // oracleTrConn.ConnState == ConnectionState.Open) // { // oracleTrConn.Rollback(); // } // // TODO 异常分析 // Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, // "PrintBarcode --- " + err_lable, // "barcode -- " + barcode + System.Environment.NewLine + // "copies -- " + copies + System.Environment.NewLine + // "printerID -- " + printerID + System.Environment.NewLine + // "printerName -- " + printerName + System.Environment.NewLine // , // DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffffff"), // Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); // throw ex; // } // finally // { // if (oracleTrConn != null && // oracleTrConn.ConnState == ConnectionState.Open) // { // oracleTrConn.Disconnect(); // } // //layoutBox?.Dispose(); // } // } /// /// 获取条码打印机 /// /// /// public static DataSet GetBarcodePrinter(SUserInfo sUserInfo, int printType=0) { IDBConnection oracleConn = ClsDbFactory.CreateDBConnection(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); try { //获取系统参数管理的数据 string sqlString = "SELECT bp.printerid, bp.printername, bp.PRINTTYPE\n" + " FROM tp_mst_barcodeprinter bp\n" + " LEFT JOIN tp_mst_user u\n" + " ON u.userid = :userid\n" + " AND u.barcodeprinterid = bp.printerid\n" + " WHERE bp.valueflag = '1'\n" + " AND bp.accountid = :accountid\n" + //" AND (:PRINTTYPE = 0 or bp.PRINTTYPE = :PRINTTYPE)\n" + " ORDER BY nvl2(u.userid, 0, 1), bp.displayno"; Oracle.ManagedDataAccess.Client.OracleParameter[] oracleParameter = new Oracle.ManagedDataAccess.Client.OracleParameter[] { new Oracle.ManagedDataAccess.Client.OracleParameter(":userid",sUserInfo.UserID), new Oracle.ManagedDataAccess.Client.OracleParameter(":accountid",sUserInfo.AccountID), //new Oracle.ManagedDataAccess.Client.OracleParameter(":PRINTTYPE",printType), }; oracleConn.Open(); DataSet result = oracleConn.GetSqlResultToDs(sqlString, oracleParameter); oracleConn.Close(); return result; } catch (Exception ex) { if (oracleConn.ConnState == ConnectionState.Open) { oracleConn.Close(); } throw ex; } finally { if (oracleConn != null && oracleConn.ConnState == ConnectionState.Open) { oracleConn.Close(); } } } /// /// 设置当期用户默认打印机配置 /// /// 打印机ID /// /// public static ServiceResultEntity SetCurrentUserPrinter(int printerID, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = null; ServiceResultEntity sre = new ServiceResultEntity(); try { System.Drawing.Printing.PrinterSettings.StringCollection installedPrinters = System.Drawing.Printing.PrinterSettings.InstalledPrinters; if (installedPrinters.Count < 1) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "服务器没有安装打印驱动"; return sre; } oracleTrConn = ClsDbFactory.CreateDBTransaction(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); oracleTrConn.Connect(); List parameters = new List(); string sqlPrinterName = "SELECT p.printername\n" + " FROM tp_mst_barcodeprinter p\n" + " WHERE p.printerID = :printerID\n" + " AND p.valueflag = '1'"; parameters.Add(new OracleParameter(":printerID", OracleDbType.Int32, printerID, ParameterDirection.Input)); DataTable printer = oracleTrConn.GetSqlResultToDt(sqlPrinterName, parameters.ToArray()); if (printer == null || printer.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "系统中不存在此打印机"; return sre; } string sqlString = "UPDATE tp_mst_user u\n" + " SET u.barcodeprinterid = :printerid\n" + " WHERE u.userid = :userid"; parameters.Add(new OracleParameter(":userid", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); sre.Result = oracleTrConn.ExecuteNonQuery(sqlString, parameters.ToArray()); oracleTrConn.Commit(); } catch (Exception ex) { if (oracleTrConn != null && oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Rollback(); } throw ex; } finally { if (oracleTrConn != null && oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Disconnect(); } } return sre; } public static void SetPrintLog(int layoutID, DataTable printData, SUserInfo sUserInfo, int PrintTypeID, int PrintWay, string printerName) { IDataAccess dataAccess = null; try { string pdata = JsonHelper.FromObject(printData); if (pdata.Length > 2000) { pdata = pdata.Substring(0, 2000); } DataRow dataRow = printData.Rows[0]; CDASqlStrParameter[] ps = new CDASqlStrParameter[] { new CDASqlStrParameter("LogID", "SEQ_MST_BarCodePrintLog.nextval"), new CDASqlStrParameter("GroutingDailyDetailID", "@GroutingDailyDetailID@", dataRow["GroutingDailyDetailID"]), new CDASqlStrParameter("BarCode", "@BarCode@", dataRow["BarCode"]), new CDASqlStrParameter("Outlabelcode", "@Outlabelcode@", dataRow["OutOnlyCode"]), new CDASqlStrParameter("PrintTypeID", "@PrintTypeID@", PrintTypeID), new CDASqlStrParameter("PrintWay", "@PrintWay@", PrintWay), new CDASqlStrParameter("PrintData", "@PrintData@", pdata), new CDASqlStrParameter("LayoutID", "@LayoutID@", layoutID), new CDASqlStrParameter("AccountID", "@AccountID@", sUserInfo.AccountID), new CDASqlStrParameter("CreateUserID", "@CreateUserID@", sUserInfo.UserID), new CDASqlStrParameter("printername", "@printername@", printerName), }; dataAccess = DataAccess.Create(Curtain.DataAccess.DataBaseType.Oracle, DataManager.ConnectionString); dataAccess.Insert("TP_MST_BarCodePrintLog", ps); } catch (Exception ex) { Logger.Error(ex); } finally { dataAccess?.Dispose(); } } /// /// 打印条码 1、2 车间 /// 0:工序打印(根据工号绑定打印机的打印类型选择打印模版,要求onlycode已存在), /// 1:直接打印(根据工号绑定打印机的打印类型选择打印模版,重新分配onlycode), /// 2:补打(根据选择打印机的打印类型选择打印模版,要求onlycode已存在) /// 3:直接打印(指定打印机ID,重新分配onlycode) /// /// 条码 /// 打印份数 /// 工序打印时:null;补打时:打印机ID /// /// public static ServiceResultEntity PrintBarcode_3C(string barcode, int copies, int? printerID, SUserInfo sUserInfo, int printWay) { IDBTransaction oracleTrConn = null; string printerName = null; int printtype = 0; //LayoutBox layoutBox = null; try { ServiceResultEntity sre = new ServiceResultEntity(); //System.Drawing.Printing.PrinterSettings.StringCollection installedPrinters = // System.Drawing.Printing.PrinterSettings.InstalledPrinters; //if (installedPrinters.Count < 1) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有安装打印驱动"; // return sre; //} oracleTrConn = ClsDbFactory.CreateDBTransaction(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); oracleTrConn.Connect(); List parameters = new List(); if (printerID == null) { // 打印 //printWay = 1; string sqlPrinterName = "SELECT p.printername, p.printtype\n" + " FROM tp_mst_user u\n" + " INNER JOIN tp_mst_barcodeprinter p\n" + " ON p.printerid = u.barcodeprinterid\n" + " WHERE u.userid = :userid\n" + " AND p.valueflag = '1'"; OracleParameter[] pps = new OracleParameter[]{ new OracleParameter(":userid", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input), }; //printerName = oracleTrConn.GetSqlResultToStr(sqlPrinterName, pps); DataTable dataTable = oracleTrConn.GetSqlResultToDt(sqlPrinterName, pps); if (dataTable == null || dataTable.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此工号没有关联打印机"; return sre; } printerName = dataTable.Rows[0]["printername"] + ""; if (string.IsNullOrWhiteSpace(printerName) || !int.TryParse(dataTable.Rows[0]["printtype"] + "", out printtype)) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此工号没有关联打印机类型"; return sre; } } // 补打时,获得打印机名 if (printerID.HasValue) { string sqlPrinterName = "SELECT p.printername, p.printtype\n" + " FROM tp_mst_barcodeprinter p\n" + " WHERE p.printerID = :printerID\n" + " AND p.valueflag = '1'"; parameters.Clear(); parameters.Add(new OracleParameter(":printerID", OracleDbType.Int32, printerID.Value, ParameterDirection.Input)); //printerName = oracleTrConn.GetSqlResultToStr(sqlPrinterName, parameters.ToArray()); DataTable dataTable = oracleTrConn.GetSqlResultToDt(sqlPrinterName, parameters.ToArray()); if (dataTable == null || dataTable.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "选择的打印机不存在"; return sre; } printerName = dataTable.Rows[0]["printername"] + ""; if (string.IsNullOrWhiteSpace(printerName) || !int.TryParse(dataTable.Rows[0]["printtype"] + "", out printtype)) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此打印机没有关联类型"; return sre; } } //if (string.IsNullOrWhiteSpace(printerName)) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "此用户没有设置打印机"; // return sre; //} //bool hasPrinter = false; //foreach (string item in installedPrinters) //{ // if (item == printerName) // { // hasPrinter = true; // break; // } //} //if (!hasPrinter) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有连接相应打印机【" + printerName + "】"; // return sre; //} // 打印 ////LayoutBox layoutBox = new LayoutBox(); //layoutBox = new LayoutBox(); //layoutBox.Name = "layoutBox"; //layoutBox.LayoutMode = LayoutMode.Preview; //// 设置打印机 //layoutBox.PrinterSettings.PrinterName = printerName; //layoutBox.NumberOfCopies = copies; //string message = layoutBox.CheckPrintSettingIn(PrintType.Print); //if (!string.IsNullOrWhiteSpace(message)) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = message; // return sre; //} if (printerID != null) { string sqlString = @"select FUN_CMN_GetBarCode(:barcode,null,:accountid) From DUAL"; OracleParameter[] paras1 = new OracleParameter[]{ new OracleParameter(":barcode",OracleDbType.Varchar2, barcode,ParameterDirection.Input), new OracleParameter(":accountid",OracleDbType.Int32, sUserInfo.AccountID,ParameterDirection.Input), }; barcode = oracleTrConn.GetSqlResultToStr(sqlString, paras1); } // 获取打印数据 parameters.Clear(); parameters.Add(new OracleParameter("in_Barcode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_AccountID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_UserID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_PrintTypeID", OracleDbType.Int32, printtype, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_PrintWay", OracleDbType.Int32, printWay, ParameterDirection.Input)); parameters.Add(new OracleParameter("out_Status", OracleDbType.Int32, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_Message", OracleDbType.NVarchar2, 2000, null, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_LayoutData", OracleDbType.RefCursor, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_PrintData", OracleDbType.RefCursor, ParameterDirection.Output)); DataSet data = oracleTrConn.ExecStoredProcedure("PRO_PM_GETBarCodePrintDATA_3C", parameters.ToArray()); int status = Convert.ToInt32(parameters[5].Value.ToString()); if (status < 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = parameters[6].Value.ToString(); return sre; } if (data == null || data.Tables.Count != 2) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "没有打印数据"; return sre; } DataTable layoutData = data.Tables[0]; DataTable printData = data.Tables[1]; if (printData.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此条码不存在"; return sre; } if (layoutData.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = string.Format("此产品类别【{0}】或商标【{1}】没有对应的打印模板", printData.Rows[0]["goodstypename"], printData.Rows[0]["logoname"] ); return sre; } // string ZZXBZ = string.Empty; // string ZZXBZ2 = string.Empty; // string gb = "GB"; // int index = printData.Rows[0]["ZZXBZ"].ToString().IndexOf(gb, 2); // if (index != -1) //{ // int iee = index; // ZZXBZ = printData.Rows[0]["ZZXBZ"].ToString().Substring(index); // index = ZZXBZ.IndexOf(gb, 2); // if (index != -1) // { // } // ZZXBZ = printData.Rows[0]["ZZXBZ"].ToString().Substring(0, index + iee - 1); // } // string gb2 = "GB"; // int index2 = printData.Rows[0]["ZZXBZ"].ToString().IndexOf(gb2, 3); //if (index2 != -1) //{ // ZZXBZ2 = printData.Rows[0]["ZZXBZ"].ToString().Substring(index2); // index2 = ZZXBZ2.IndexOf(gb2, 2); // ZZXBZ2 = ZZXBZ2.Substring(index2); // } // if (printData.Rows[0]["ZZXBZ"].ToString() != "") //{ // printData.Rows[0]["ZZXBZ"] = ZZXBZ + "\r\n" + ZZXBZ2; //} //if (printerID == null && printData.Rows.Count > 0) //{ // int goodsCopies = Convert.ToInt32(printData.Rows[0]["printcopies"]); // if (goodsCopies > 0) // { // copies = goodsCopies; // layoutBox.NumberOfCopies = copies; // } //} int layoutID = Convert.ToInt32(layoutData.Rows[0]["LayoutID"]); byte[] bytes = layoutData.Rows[0]["LayoutData"] as byte[]; // string itemstyle = string.Empty; // if (layoutID > 0) // { // string sqlString = @"SELECT // B.ITEMSTYLE // FROM // TP_MST_BARCODEPRINTLAYOUT P // LEFT JOIN TP_MST_BARCODEPRINTITEM T ON P.LAYOUTID = T.LAYOUTID // INNER JOIN TP_SYS_BARCODEPRINTITEM B ON T.ITEMCODE = B.ITEMCODE // AND B.ITEMCODE = 'OUTONLYCODE2' // WHERE // P.LAYOUTID = :LAYOUTID"; // OracleParameter[] paras1 = new OracleParameter[]{ // new OracleParameter(":LAYOUTID",OracleDbType.Int16, layoutID,ParameterDirection.Input) // }; // itemstyle = oracleTrConn.GetSqlResultToStr(sqlString, paras1); // } //if (itemstyle == "6") // { // printData.Rows[0]["OUTONLYCODE2"] = "https://hap.hegii.com/jump?state=productInfo-" + printData.Rows[0]["OUTONLYCODE2"].ToString(); // } //if (bytes != null) //{ // //try // //{ // // layoutBox.ReadLayout(bytes); // //} // //catch (Exception ex) // //{ // // throw new Exception("ReadLayout", ex); // //} // layoutBox.ReadLayout(bytes); //} //bool isPrint = false; //layoutBox.PrintDataSource = printData; //layoutBox.PrintAreaVisible = false; //layoutBox.PrintBackground = false; //isPrint = layoutBox.Print(false); oracleTrConn.Commit(); //生成电子票据 //List images = InvoiceLayoutPrinter.Print(layoutBytes, printData.Tables[0].Rows[0], printData.Tables[1]); if (!string.IsNullOrWhiteSpace(printData.Rows[0]["ZZXBZ"].ToString())) { printData.Rows[0]["ZZXBZ"] = printData.Rows[0]["ZZXBZ"].ToString().Replace("##", "\r\n"); } InvoiceLayoutPrinter.Print(printerName, Convert.ToInt16(copies), bytes, printData.Rows[0], printData); //if (!isPrint) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "打印失败"; // return sre; //} sre.Result = printData; // 打印记录 SetPrintLog(layoutID, printData, sUserInfo, printtype, printWay, printerName); return sre; } catch (Exception ex) { //if (oracleTrConn != null && // oracleTrConn.ConnState == ConnectionState.Open) //{ // oracleTrConn.Rollback(); //} // TODO 异常分析 Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, "PrintBarcode_3C", "barcode -- " + barcode + System.Environment.NewLine + "copies -- " + copies + System.Environment.NewLine + "printerID -- " + printerID + System.Environment.NewLine + "printerName -- " + printerName + System.Environment.NewLine + "printType -- " + printtype + System.Environment.NewLine + "printWay -- " + printWay, ex.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); throw ex; } finally { if (oracleTrConn != null && oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Disconnect(); } //layoutBox?.Dispose(); } } /// /// 打印条码 3车间 /// 1:直接打印(根据工号绑定打印机的打印类型选择打印模版,重新分配onlycode) /// /// 条码 /// 工位ID /// /// public static ServiceResultEntity PrintBarcode_3BL(string barcode, int ws_id, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = null; //string printerName = null; //LayoutBox layoutBox = null; int in_PrintWay = 1; try { ServiceResultEntity sre = new ServiceResultEntity(); //System.Drawing.Printing.PrinterSettings.StringCollection installedPrinters = // System.Drawing.Printing.PrinterSettings.InstalledPrinters; //if (installedPrinters.Count < 1) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有安装打印驱动"; // return sre; //} oracleTrConn = ClsDbFactory.CreateDBTransaction(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); oracleTrConn.Connect(); List parameters = new List(); //bool hasPrinter = false; //foreach (string item in installedPrinters) //{ // if (item == printerName) // { // hasPrinter = true; // break; // } //} //if (!hasPrinter) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有连接相应打印机【" + printerName + "】"; // return sre; //} // 获取打印数据 parameters.Clear(); parameters.Add(new OracleParameter("in_Barcode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_AccountID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_UserID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); //parameters.Add(new OracleParameter("in_PrintTypeID", OracleDbType.Int32, printtype, ParameterDirection.Input)); // 直接打印 1 parameters.Add(new OracleParameter("in_PrintWay", OracleDbType.Int32, in_PrintWay, ParameterDirection.Input)); parameters.Add(new OracleParameter("out_Status", OracleDbType.Int32, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_Message", OracleDbType.NVarchar2, 2000, null, ParameterDirection.Output)); //parameters.Add(new OracleParameter("out_LayoutData", OracleDbType.RefCursor, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_PrintData", OracleDbType.RefCursor, ParameterDirection.Output)); DataSet data = oracleTrConn.ExecStoredProcedure("PRO_PM_GETBarCodePrintDATA_3BL", parameters.ToArray()); int status = Convert.ToInt32(parameters[4].Value.ToString()); if (status < 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = parameters[5].Value.ToString(); return sre; } if (data == null || data.Tables.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = $"没有打印数据[{barcode}]"; return sre; } DataTable printData = data.Tables[0]; if (printData.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = $"此条码不存在[{barcode}]"; return sre; } // 打印机ID 类型 TODO // string sql ="SELECT bp.printerid\n" + //" ,bp.printtype\n" + //" ,bp.printername\n" + //" FROM tp_mst_barcodeprinter bp\n" + //" WHERE EXISTS (SELECT 1\n" + //" FROM tp_mst_workstationprinter wsp\n" + //" WHERE wsp.printerid = bp.printerid\n" + //" AND wsp.valueflag = '1'\n" + // " AND wsp.workstationid = :ws_id)"; string sql = "SELECT bp.printerid\n" + " ,bp.printtype\n" + " ,bp.printername\n" + " FROM tp_mst_barcodeprinter bp\n" + " inner join tp_mst_workstationprinter wsp\n" + " on wsp.printerid = bp.printerid\n" + " where wsp.valueflag = '1'\n" + " AND wsp.workstationid = :ws_id order by wsp.printerstation, bp.displayno"; parameters.Clear(); parameters.Add(new OracleParameter(":ws_id", ws_id)); DataTable dataPrinter = oracleTrConn.GetSqlResultToDt(sql, parameters.ToArray()); if (dataPrinter == null || dataPrinter.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = $"此工位没有配置打印机[{ws_id}]"; return sre; } string goodstypecode = printData.Rows[0]["goodstypecode"] + ""; sql = @" select * from (select t.layoutid, t.layoutname, t.layoutdata from tp_mst_barcodeprintlayout t where t.accountid = :in_AccountID and t.valueflag = '1' and t.PrintType = :in_PrintTypeID and :v_goodstypecode like t.GoodsTypeCode || '%' --and (t.logoid is null or t.logoid = v_logoid) order by t.GoodsTypeCode desc, t.logoid, t.layoutid) where rownum = 1"; // 外箱码 OracleParameter[] ps2 = new OracleParameter[] { new OracleParameter(":in_AccountID",sUserInfo.AccountID), new OracleParameter(":v_goodstypecode",goodstypecode), new OracleParameter(":in_PrintTypeID",2), }; DataTable layoutData2 = oracleTrConn.GetSqlResultToDt(sql, ps2); // 服务码 OracleParameter[] ps3 = new OracleParameter[] { new OracleParameter(":in_AccountID",sUserInfo.AccountID), new OracleParameter(":v_goodstypecode",goodstypecode), new OracleParameter(":in_PrintTypeID",3), }; DataTable layoutData3 = oracleTrConn.GetSqlResultToDt(sql, ps3); //if (layoutData2.Rows.Count == 0 || layoutData3.Rows.Count == 0) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = string.Format("此产品类别【{0}】或商标【{1}】没有对应的打印模板", // printData.Rows[0]["goodstypename"], // printData.Rows[0]["logoname"] // ); // return sre; //} oracleTrConn.Commit(); foreach (DataRow item in dataPrinter.Rows) { int printerType = Convert.ToInt32(item["printtype"]); string printerName = item["printerName"] + ""; // 外箱码 if (printerType == 2) { int layoutID = Convert.ToInt32(layoutData2.Rows[0]["LayoutID"]); byte[] bytes = layoutData2.Rows[0]["LayoutData"] as byte[]; //string itemstyle = string.Empty; //if (layoutID > 0) //{ // string sqlString = @"SELECT // B.ITEMSTYLE // FROM // TP_MST_BARCODEPRINTLAYOUT P // LEFT JOIN TP_MST_BARCODEPRINTITEM T ON P.LAYOUTID = T.LAYOUTID // INNER JOIN TP_SYS_BARCODEPRINTITEM B ON T.ITEMCODE = B.ITEMCODE // AND B.ITEMCODE = 'OUTONLYCODE2' // WHERE // P.LAYOUTID = :LAYOUTID"; // OracleParameter[] paras1 = new OracleParameter[]{ // new OracleParameter(":LAYOUTID",OracleDbType.Int16, layoutID,ParameterDirection.Input) // }; // itemstyle = oracleTrConn.GetSqlResultToStr(sqlString, paras1); //} //if (itemstyle == "6") //{ // printData.Rows[0]["OUTONLYCODE2"] = "https://hap.hegii.com/jump?state=productInfo-" + printData.Rows[0]["OUTONLYCODE2"].ToString(); //} try { //Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, // "PrintBarcode_3BL", // "barcode -- " + barcode + System.Environment.NewLine + // "ws_id -- " + ws_id + System.Environment.NewLine + // "printerType -- " + printerType + System.Environment.NewLine + // "printerName -- " + printerName + System.Environment.NewLine + // "layoutID -- " + layoutID + System.Environment.NewLine, // bytes[0].ToString(), // Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); //生成电子票据; InvoiceLayoutPrinter.Print(printerName, 1, bytes, printData.Rows[0], printData, 1); //Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, // "PrintBarcode_3BL", // "barcode -- " + barcode + System.Environment.NewLine + // "ws_id -- " + ws_id + System.Environment.NewLine + // "printerType -- " + printerType + System.Environment.NewLine + // "printerName -- " + printerName + System.Environment.NewLine + // "layoutID -- " + layoutID + System.Environment.NewLine, // "END", // Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); // 打印记录 SetPrintLog(layoutID, printData, sUserInfo, 2, in_PrintWay, printerName); } catch (Exception ex1) { Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Error, "PrintBarcode_3BL", "barcode -- " + barcode + System.Environment.NewLine + "ws_id -- " + ws_id + System.Environment.NewLine + "printerType -- " + printerType + System.Environment.NewLine + "printerName -- " + printerName + System.Environment.NewLine + "layoutID -- " + layoutID + System.Environment.NewLine, ex1.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); } } // 服务码 if (printerType == 3) { int layoutID = Convert.ToInt32(layoutData3.Rows[0]["LayoutID"]); byte[] bytes = layoutData3.Rows[0]["LayoutData"] as byte[]; //string itemstyle = string.Empty; //if (layoutID > 0) //{ // string sqlString = @"SELECT // B.ITEMSTYLE // FROM // TP_MST_BARCODEPRINTLAYOUT P // LEFT JOIN TP_MST_BARCODEPRINTITEM T ON P.LAYOUTID = T.LAYOUTID // INNER JOIN TP_SYS_BARCODEPRINTITEM B ON T.ITEMCODE = B.ITEMCODE // AND B.ITEMCODE = 'OUTONLYCODE2' // WHERE // P.LAYOUTID = :LAYOUTID"; // OracleParameter[] paras1 = new OracleParameter[]{ // new OracleParameter(":LAYOUTID",OracleDbType.Int16, layoutID,ParameterDirection.Input) // }; // itemstyle = oracleTrConn.GetSqlResultToStr(sqlString, paras1); //} //if (itemstyle == "6") //{ // printData.Rows[0]["OUTONLYCODE2"] = "https://hap.hegii.com/jump?state=productInfo-" + printData.Rows[0]["OUTONLYCODE2"].ToString(); //} try { //Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, // "PrintBarcode_3BL", // "barcode -- " + barcode + System.Environment.NewLine + // "ws_id -- " + ws_id + System.Environment.NewLine + // "printerType -- " + printerType + System.Environment.NewLine + // "printerName -- " + printerName + System.Environment.NewLine + // "layoutID -- " + layoutID + System.Environment.NewLine, // bytes[0].ToString(), // Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); //生成电子票据; InvoiceLayoutPrinter.Print(printerName, 1, bytes, printData.Rows[0], printData); //Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, // "PrintBarcode_3BL", // "barcode -- " + barcode + System.Environment.NewLine + // "ws_id -- " + ws_id + System.Environment.NewLine + // "printerType -- " + printerType + System.Environment.NewLine + // "printerName -- " + printerName + System.Environment.NewLine + // "layoutID -- " + layoutID + System.Environment.NewLine, // "END", // Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); // 打印记录 SetPrintLog(layoutID, printData, sUserInfo, 3, in_PrintWay, printerName); } catch (Exception ex1) { Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Error, "PrintBarcode_3BL", "barcode -- " + barcode + System.Environment.NewLine + "ws_id -- " + ws_id + System.Environment.NewLine + "printerType -- " + printerType + System.Environment.NewLine + "printerName -- " + printerName + System.Environment.NewLine + "layoutID -- " + layoutID + System.Environment.NewLine, ex1.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); } } } //int layoutID = Convert.ToInt32(layoutData.Rows[0]["LayoutID"]); //byte[] bytes = layoutData.Rows[0]["LayoutData"] as byte[]; ////生成电子票据 ////List images = InvoiceLayoutPrinter.Print(layoutBytes, printData.Tables[0].Rows[0], printData.Tables[1]); //InvoiceLayoutPrinter.Print(printerName, 1, bytes, printData.Rows[0], printData); sre.Result = printData; return sre; } catch (Exception ex) { //if (oracleTrConn != null && // oracleTrConn.ConnState == ConnectionState.Open) //{ // oracleTrConn.Rollback(); //} // TODO 异常分析 Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Error, "PrintBarcode_3BL", "barcode -- " + barcode + System.Environment.NewLine + "ws_id -- " + ws_id + System.Environment.NewLine, ex.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); throw ex; } finally { if (oracleTrConn != null && oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Disconnect(); } //layoutBox?.Dispose(); } } /// /// 打印条码 3车间 /// 2:补打(根据选择打印机的打印类型选择打印模版,要求onlycode已存在) /// /// 条码 /// 打印机ID /// /// public static ServiceResultEntity PrintBarcode_3BL_B(string barcode, int[] printer_ids, SUserInfo sUserInfo) { IDBTransaction oracleTrConn = null; //string printerName = null; //LayoutBox layoutBox = null; int in_PrintWay = 2; try { ServiceResultEntity sre = new ServiceResultEntity(); //System.Drawing.Printing.PrinterSettings.StringCollection installedPrinters = // System.Drawing.Printing.PrinterSettings.InstalledPrinters; //if (installedPrinters.Count < 1) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有安装打印驱动"; // return sre; //} oracleTrConn = ClsDbFactory.CreateDBTransaction(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); oracleTrConn.Connect(); List parameters = new List(); //bool hasPrinter = false; //foreach (string item in installedPrinters) //{ // if (item == printerName) // { // hasPrinter = true; // break; // } //} //if (!hasPrinter) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有连接相应打印机【" + printerName + "】"; // return sre; //} // 获取打印数据 parameters.Clear(); parameters.Add(new OracleParameter("in_Barcode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_AccountID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_UserID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); //parameters.Add(new OracleParameter("in_PrintTypeID", OracleDbType.Int32, printtype, ParameterDirection.Input)); // 补打 2 parameters.Add(new OracleParameter("in_PrintWay", OracleDbType.Int32, in_PrintWay, ParameterDirection.Input)); parameters.Add(new OracleParameter("out_Status", OracleDbType.Int32, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_Message", OracleDbType.NVarchar2, 2000, null, ParameterDirection.Output)); //parameters.Add(new OracleParameter("out_LayoutData", OracleDbType.RefCursor, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_PrintData", OracleDbType.RefCursor, ParameterDirection.Output)); DataSet data = oracleTrConn.ExecStoredProcedure("PRO_PM_GETBarCodePrintDATA_3BL", parameters.ToArray()); int status = Convert.ToInt32(parameters[4].Value.ToString()); if (status < 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = parameters[5].Value.ToString(); return sre; } if (data == null || data.Tables.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "没有打印数据"; return sre; } DataTable printData = data.Tables[0]; if (printData.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此条码不存在"; return sre; } // 打印机ID 类型 string sql = $"select bp.printername, bp.printtype from tp_mst_barcodeprinter bp where bp.valueflag='1' and bp.printerid in ({string.Join(",", printer_ids)}) "; DataTable dataPrinter = oracleTrConn.GetSqlResultToDt(sql); if (dataPrinter == null || dataPrinter.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "指定打印机不存在"; return sre; } string goodstypecode = printData.Rows[0]["goodstypecode"] + ""; sql = @" select * from (select t.layoutid, t.layoutname, t.layoutdata from tp_mst_barcodeprintlayout t where t.accountid = :in_AccountID and t.valueflag = '1' and t.PrintType = :in_PrintTypeID and :v_goodstypecode like t.GoodsTypeCode || '%' --and (t.logoid is null or t.logoid = v_logoid) order by t.GoodsTypeCode desc, t.logoid, t.layoutid) where rownum = 1"; // 外箱码 OracleParameter[] ps2 = new OracleParameter[] { new OracleParameter(":in_AccountID",sUserInfo.AccountID), new OracleParameter(":v_goodstypecode",goodstypecode), new OracleParameter(":in_PrintTypeID",2), }; DataTable layoutData2 = oracleTrConn.GetSqlResultToDt(sql, ps2); // 服务码 OracleParameter[] ps3 = new OracleParameter[] { new OracleParameter(":in_AccountID",sUserInfo.AccountID), new OracleParameter(":v_goodstypecode",goodstypecode), new OracleParameter(":in_PrintTypeID",3), }; DataTable layoutData3 = oracleTrConn.GetSqlResultToDt(sql, ps3); //if (layoutData2.Rows.Count == 0 || layoutData3.Rows.Count == 0) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = string.Format("此产品类别【{0}】或商标【{1}】没有对应的打印模板", // printData.Rows[0]["goodstypename"], // printData.Rows[0]["logoname"] // ); // return sre; //} oracleTrConn.Commit(); foreach (DataRow item in dataPrinter.Rows) { int printerType = Convert.ToInt32(item["printtype"]); string printerName = item["printerName"] + ""; // 外箱码 try { if (printerType == 2) { int layoutID = Convert.ToInt32(layoutData2.Rows[0]["LayoutID"]); byte[] bytes = layoutData2.Rows[0]["LayoutData"] as byte[]; //string itemstyle = string.Empty; //if (layoutID > 0) //{ // string sqlString = @"SELECT // B.ITEMSTYLE // FROM // TP_MST_BARCODEPRINTLAYOUT P // LEFT JOIN TP_MST_BARCODEPRINTITEM T ON P.LAYOUTID = T.LAYOUTID // INNER JOIN TP_SYS_BARCODEPRINTITEM B ON T.ITEMCODE = B.ITEMCODE // AND B.ITEMCODE = 'OUTONLYCODE2' // WHERE // P.LAYOUTID = :LAYOUTID"; // OracleParameter[] paras1 = new OracleParameter[]{ // new OracleParameter(":LAYOUTID",OracleDbType.Int16, layoutID,ParameterDirection.Input) // }; // itemstyle = oracleTrConn.GetSqlResultToStr(sqlString, paras1); //} //if (itemstyle == "6") //{ // printData.Rows[0]["OUTONLYCODE2"] = "https://hap.hegii.com/jump?state=productInfo-" + printData.Rows[0]["OUTONLYCODE2"].ToString(); //} //生成电子票据; InvoiceLayoutPrinter.Print(printerName, 1, bytes, printData.Rows[0], printData, 1); // 打印记录 SetPrintLog(layoutID, printData, sUserInfo, 2, in_PrintWay, printerName); } // 服务码 if (printerType == 3) { int layoutID = Convert.ToInt32(layoutData3.Rows[0]["LayoutID"]); byte[] bytes = layoutData3.Rows[0]["LayoutData"] as byte[]; //string itemstyle = string.Empty; //if (layoutID > 0) //{ // string sqlString = @"SELECT // B.ITEMSTYLE // FROM // TP_MST_BARCODEPRINTLAYOUT P // LEFT JOIN TP_MST_BARCODEPRINTITEM T ON P.LAYOUTID = T.LAYOUTID // INNER JOIN TP_SYS_BARCODEPRINTITEM B ON T.ITEMCODE = B.ITEMCODE // AND B.ITEMCODE = 'OUTONLYCODE2' // WHERE // P.LAYOUTID = :LAYOUTID"; // OracleParameter[] paras1 = new OracleParameter[]{ // new OracleParameter(":LAYOUTID",OracleDbType.Int16, layoutID,ParameterDirection.Input) // }; // itemstyle = oracleTrConn.GetSqlResultToStr(sqlString, paras1); //} //if (itemstyle == "6") //{ // printData.Rows[0]["OUTONLYCODE2"] = "https://hap.hegii.com/jump?state=productInfo-" + printData.Rows[0]["OUTONLYCODE2"].ToString(); //} //生成电子票据; InvoiceLayoutPrinter.Print(printerName, 1, bytes, printData.Rows[0], printData); // 打印记录 SetPrintLog(layoutID, printData, sUserInfo, 3, in_PrintWay, printerName); } } catch (Exception ex1) { Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Error, "PrintBarcode_3BL_B", "barcode -- " + barcode + System.Environment.NewLine + //"ws_id -- " + ws_id + System.Environment.NewLine + "printerType -- " + printerType + System.Environment.NewLine + "printerName -- " + printerName + System.Environment.NewLine, //"layoutID -- " + layoutID + System.Environment.NewLine, ex1.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); } } //int layoutID = Convert.ToInt32(layoutData.Rows[0]["LayoutID"]); //byte[] bytes = layoutData.Rows[0]["LayoutData"] as byte[]; ////生成电子票据 ////List images = InvoiceLayoutPrinter.Print(layoutBytes, printData.Tables[0].Rows[0], printData.Tables[1]); //InvoiceLayoutPrinter.Print(printerName, 1, bytes, printData.Rows[0], printData); sre.Result = printData; return sre; } catch (Exception ex) { //if (oracleTrConn != null && // oracleTrConn.ConnState == ConnectionState.Open) //{ // oracleTrConn.Rollback(); //} // TODO 异常分析 Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, "PrintBarcode_3BL_B", "barcode -- " + barcode + System.Environment.NewLine + "printer_ids -- " + string.Join(",", printer_ids) + System.Environment.NewLine, ex.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); throw ex; } finally { if (oracleTrConn != null && oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Disconnect(); } //layoutBox?.Dispose(); } } /// /// 打印条码 1、2 车间 /// 0:工序打印(根据工号绑定打印机的打印类型选择打印模版,要求onlycode已存在), /// 1:直接打印(根据工号绑定打印机的打印类型选择打印模版,重新分配onlycode), /// 2:补打(根据选择打印机的打印类型选择打印模版,要求onlycode已存在) /// 3:直接打印(指定打印机ID,重新分配onlycode) /// /// 条码 /// 打印份数 /// 工序打印时:null;补打时:打印机ID /// /// public static ServiceResultEntity LCPrintBarcode_3C(DataTable table,int count, string barcode, int copies, int? printerID, SUserInfo sUserInfo, int printWay) { IDBTransaction oracleTrConn = null; string printerName = null; int printtype = 0; try { ServiceResultEntity sre = new ServiceResultEntity(); //System.Drawing.Printing.PrinterSettings.StringCollection installedPrinters = // System.Drawing.Printing.PrinterSettings.InstalledPrinters; //if (installedPrinters.Count < 1) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有安装打印驱动"; // return sre; //} oracleTrConn = ClsDbFactory.CreateDBTransaction(IBOSS.PRD.Basics.DataAccess.DataBaseType.ORACLE, DataManager.ConnectionString); oracleTrConn.Connect(); List parameters = new List(); if (printerID == null) { // 打印 //printWay = 1; string sqlPrinterName = "SELECT p.printername, p.printtype\n" + " FROM tp_mst_user u\n" + " INNER JOIN tp_mst_barcodeprinter p\n" + " ON p.printerid = u.barcodeprinterid\n" + " WHERE u.userid = :userid\n" + " AND p.valueflag = '1'"; OracleParameter[] pps = new OracleParameter[]{ new OracleParameter(":userid", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input), }; DataTable dataTable = oracleTrConn.GetSqlResultToDt(sqlPrinterName, pps); if (dataTable == null || dataTable.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此工号没有关联打印机"; return sre; } printerName = dataTable.Rows[0]["printername"] + ""; if (string.IsNullOrWhiteSpace(printerName) || !int.TryParse(dataTable.Rows[0]["printtype"] + "", out printtype)) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此工号没有关联打印机类型"; return sre; } } // 补打时,获得打印机名 if (printerID.HasValue) { string sqlPrinterName = "SELECT p.printername, p.printtype\n" + " FROM tp_mst_barcodeprinter p\n" + " WHERE p.printerID = :printerID\n" + " AND p.valueflag = '1'"; parameters.Clear(); parameters.Add(new OracleParameter(":printerID", OracleDbType.Int32, printerID.Value, ParameterDirection.Input)); DataTable dataTable = oracleTrConn.GetSqlResultToDt(sqlPrinterName, parameters.ToArray()); if (dataTable == null || dataTable.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "选择的打印机不存在"; return sre; } printerName = dataTable.Rows[0]["printername"] + ""; if (string.IsNullOrWhiteSpace(printerName) || !int.TryParse(dataTable.Rows[0]["printtype"] + "", out printtype)) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此打印机没有关联类型"; return sre; } } //bool hasPrinter = false; //foreach (string item in installedPrinters) //{ // if (item == printerName) // { // hasPrinter = true; // break; // } //} //if (!hasPrinter) //{ // sre.Status = Constant.ServiceResultStatus.Other; // sre.Message = "服务器没有连接相应打印机【" + printerName + "】"; // return sre; //} // 打印 if (printerID != null) { string sqlString = @"select FUN_CMN_GetBarCode(:barcode,null,:accountid) From DUAL"; OracleParameter[] paras1 = new OracleParameter[]{ new OracleParameter(":barcode",OracleDbType.Varchar2, barcode,ParameterDirection.Input), new OracleParameter(":accountid",OracleDbType.Int32, sUserInfo.AccountID,ParameterDirection.Input), }; barcode = oracleTrConn.GetSqlResultToStr(sqlString, paras1); } // 获取打印数据 parameters.Clear(); parameters.Add(new OracleParameter("in_Barcode", OracleDbType.NVarchar2, barcode, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_AccountID", OracleDbType.Int32, sUserInfo.AccountID, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_UserID", OracleDbType.Int32, sUserInfo.UserID, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_PrintTypeID", OracleDbType.Int32, printtype, ParameterDirection.Input)); parameters.Add(new OracleParameter("in_PrintWay", OracleDbType.Int32, printWay, ParameterDirection.Input)); parameters.Add(new OracleParameter("out_Status", OracleDbType.Int32, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_Message", OracleDbType.NVarchar2, 2000, null, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_LayoutData", OracleDbType.RefCursor, ParameterDirection.Output)); parameters.Add(new OracleParameter("out_PrintData", OracleDbType.RefCursor, ParameterDirection.Output)); DataSet data = oracleTrConn.ExecStoredProcedure("PRO_PM_GETBarCodePrintDATA_3c_lc", parameters.ToArray()); int status = Convert.ToInt32(parameters[5].Value.ToString()); if (status < 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = parameters[6].Value.ToString(); return sre; } if (data == null || data.Tables.Count != 2) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "没有打印数据"; return sre; } DataTable layoutData = data.Tables[0]; DataTable printData = data.Tables[1]; if (printData.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = "此条码不存在"; return sre; } else { printData.Rows[0]["ZEWSL"] = count; } if (layoutData.Rows.Count == 0) { sre.Status = Constant.ServiceResultStatus.Other; sre.Message = string.Format("此产品类别【{0}】或商标【{1}】没有对应的打印模板", printData.Rows[0]["goodstypename"], printData.Rows[0]["logoname"] ); return sre; } int layoutID = Convert.ToInt32(layoutData.Rows[0]["LayoutID"]); byte[] bytes = layoutData.Rows[0]["LayoutData"] as byte[]; oracleTrConn.Commit(); //生成电子票据 InvoiceLayoutPrinter.Print(printerName, Convert.ToInt16(copies), bytes, printData.Rows[0], printData); sre.Result = printData; for (int i = 0; i < table.Rows.Count; i++) { string sqlString = @"select GroutingDailyDetailID,BarCode,nvl(outlabelcode, barcode) OutOnlyCode From tp_pm_groutingdailydetail where barcode = '" + table.Rows[i]["BarCode"].ToString() + "'"; DataTable dt = oracleTrConn.GetSqlResultToDt(sqlString, null); // 打印记录 SetLCPrintLog(layoutID, dt.Rows[0], sUserInfo, printtype, printWay, printerName); } return sre; } catch (Exception ex) { // TODO 异常分析 Dongke.IBOSS.PRD.Basics.Library.OutputLog.TraceLog(Dongke.IBOSS.PRD.Basics.Library.LogPriority.Debug, "PrintBarcode_3C", "barcode -- " + barcode + System.Environment.NewLine + "copies -- " + copies + System.Environment.NewLine + "printerID -- " + printerID + System.Environment.NewLine + "printerName -- " + printerName + System.Environment.NewLine + "printType -- " + printtype + System.Environment.NewLine + "printWay -- " + printWay, ex.ToString(), Dongke.IBOSS.PRD.Basics.Library.LocalPath.LogExePath + @"printdebug\"); throw ex; } finally { if (oracleTrConn != null && oracleTrConn.ConnState == ConnectionState.Open) { oracleTrConn.Disconnect(); } //layoutBox?.Dispose(); } } public static void SetLCPrintLog(int layoutID, DataRow dataRow, SUserInfo sUserInfo, int PrintTypeID, int PrintWay, string printerName) { IDataAccess dataAccess = null; try { string pdata = JsonHelper.FromObject(dataRow); if (pdata.Length > 2000) { pdata = pdata.Substring(0, 2000); } CDASqlStrParameter[] ps = new CDASqlStrParameter[] { new CDASqlStrParameter("LogID", "SEQ_MST_BarCodePrintLog.nextval"), new CDASqlStrParameter("GroutingDailyDetailID", "@GroutingDailyDetailID@", dataRow["GroutingDailyDetailID"]), new CDASqlStrParameter("BarCode", "@BarCode@", dataRow["BarCode"]), new CDASqlStrParameter("Outlabelcode", "@Outlabelcode@", dataRow["OutOnlyCode"]), new CDASqlStrParameter("PrintTypeID", "@PrintTypeID@", PrintTypeID), new CDASqlStrParameter("PrintWay", "@PrintWay@", PrintWay), new CDASqlStrParameter("PrintData", "@PrintData@", pdata), new CDASqlStrParameter("LayoutID", "@LayoutID@", layoutID), new CDASqlStrParameter("AccountID", "@AccountID@", sUserInfo.AccountID), new CDASqlStrParameter("CreateUserID", "@CreateUserID@", sUserInfo.UserID), new CDASqlStrParameter("printername", "@printername@", printerName), }; dataAccess = DataAccess.Create(Curtain.DataAccess.DataBaseType.Oracle, DataManager.ConnectionString); dataAccess.Insert("TP_MST_BarCodePrintLog", ps); } catch (Exception ex) { Logger.Error(ex); } finally { dataAccess?.Dispose(); } } } }