/*******************************************************************************
* 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)
{
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),
};
dataAccess = DataAccess.Create(Curtain.DataAccess.DataBaseType.Oracle, DataManager.ConnectionString);
dataAccess.Insert("TP_MST_BarCodePrintLog", ps);
}
catch (Exception ex)
{
Logger.Error(ex);
}
finally
{
dataAccess?.Dispose();
}
}
///
/// 打印条码 3车间
/// 0:工序打印(根据工号绑定打印机的打印类型选择打印模版,要求onlycode已存在),
/// 1:直接打印(根据工号绑定打印机的打印类型选择打印模版,重新分配onlycode),
/// 2:补打(根据选择打印机的打印类型选择打印模版,要求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;
}
//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[];
//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]);
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);
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();
}
}
}
}