using iWareCommon.Utils;
using iWareSql.MyDbContext;
using OfficeOpenXml;
using OfficeOpenXml.Drawing;
using System;
using System.IO;
using System.Threading;
using WindowsFormsApplication1.Common;
namespace autuPrint.printService
{
public class creatExcelPrint
{
///
/// //线程锁防止并发
///
private static Mutex single = new Mutex();
///
/// 生成打印数据源
///
/// 条形码
/// 标签参数
/// 成功返回true
public static bool creatEXcel(System.Drawing.Image img, ware_material_print_history label, ref string errMsg)
{
if (single.WaitOne())//增加线程锁防止双击并发
{
try
{
#region 验证模板文件是否存在
if (!File.Exists(SystemConst.TEMPLATE_FILEPATH))
{
Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 模板缺失", null);
errMsg = "类名: creatExcelPrint 方法名: creatEXcel 模板缺失";
return false;
}
//if (img == null)
//{
// logtxt.txtWrite("类名: creatExcelPrint 方法名: creatEXcel 标签条形码为空", 2);
// errMsg = "类名: creatExcelPrint 方法名: creatEXcel 标签条形码为空";
// return false;
//}
if (label == null)
{
Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 标签参数为空", null);
errMsg = "类名: creatExcelPrint 方法名: creatEXcel 标签参数为空";
return false;
}
#endregion
//获取模板文件
FileInfo copyFile = new FileInfo(SystemConst.TEMPLATE_FILEPATH);
copyFile.CopyTo(SystemConst.TEMPORARY_FILEPATH, true);
FileInfo existingFile = new FileInfo(SystemConst.TEMPORARY_FILEPATH);
using (ExcelPackage package = new ExcelPackage(existingFile))
{
//获取模板内容
ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
//行,列
//注意:行和列都是从1开始,而不是从0开始!!!
worksheet.Cells[1, 2].Value = label.Code;//物料单号
worksheet.Cells[2, 1].Value = "Descript:" + label.Name;//物料单号
worksheet.Cells[3, 1].Value = "Vendor:" + (label.SupplierNo ?? "") + " " + (label.SupplierName ?? "");//供应商
worksheet.Cells[4, 1].Value = "PO:" + label.PurchaseNo + "/" + label.PurchaseEbelp;
worksheet.Cells[5, 1].Value = "Qty:" + label.Quantity;
worksheet.Cells[6, 1].Value = "Batch:" + label.BatchNo;
worksheet.Cells[7, 1].Value = "Time:" + DateTime.Now.ToString("dd.MM.yyyy") + " " + DateTime.Now.ToString("HH:mm:ss");
if (img != null)
{
ExcelPicture pic = worksheet.Drawings.AddPicture("barCode", img);//插入图片
pic.SetSize(103, 78);//设置图片尺寸
pic.SetPosition(3, 3, 2, 3);//设置图片位置,以单元格为单位(参数1,3行和列,2,4是偏移量)
}
package.Save();//保存
}
}
catch (Exception ex)
{
Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 生成打印文件出错 \r\n " + ex.ToString(), ex);
//logtxt.txtWrite("类名: creatExcelPrint 方法名: creatEXcel 生成打印文件出错 \r\n " + ex.ToString(), 2);
errMsg = ex.Message;
return false;
}
finally { single.ReleaseMutex(); }//一轮结束
}
return true;
}
public static string PrintFor物料标签(MyDbContext mod, ware_material_print_history item)
{
#region 单个处理标签打印
Thread.Sleep(1000);
var errMsg = "";
//二维码格式
//PARTS NUMBER:L11B190,SAP: ,LOT NO: WH1683820800000,QUANTITY: 100
string barCode = $"PARTS NUMBER:{item.Code},SAP:{item.Sap_Location ?? ""} ,LOT NO: {item.BatchNo},QUANTITY: {item.Quantity}";//标签条码
//string barCode = $"21VS-ASTG-PSET=5";//标签条码
System.Drawing.Image img = QrCodeAndBarCode.printQr(barCode);
bool saveSucceed = creatExcelPrint.creatEXcel(img, item, ref errMsg);
if (saveSucceed)
{
if (File.Exists(SystemConst.TEMPORARY_FILEPATH))
{
bool printSucceed = true;
item.PrintSheetNum = item.PrintSheetNum ?? 1;//打印张数
for (int i = 0; i < item.PrintSheetNum; i++)
{
printSucceed = print.printExcel(SystemConst.TEMPORARY_FILEPATH, SystemConst.Default_LeftMargin, SystemConst.Default_TopMargin);
}
if (printSucceed)
{
//打印成功 删除临时文件,并改状态
FileInfo myfile = new FileInfo(SystemConst.TEMPORARY_FILEPATH);//PartStatus
myfile.Delete();
item.PrintStatu = 1;//打印状态(0:未打印 1:已打印)
item.PrintNum = (item.PrintNum ?? 0) + 1;
int isSave = mod.SaveChanges();
if (isSave < 1)
{
Log4NetHelper.WriteErrorLog(LogType.Print, "类名: Form1 方法名: do_autoPrint 修改库存自动打印状态失败 ", null);
}
}
//*/
}
}
else
{
//this.tb_Msg.Text = "失败,失败内容:" + errMsg;
}
return errMsg;
#endregion
}
}
}