/*******************************************************************************
* 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();
}
}
}
}